From 5752b1519ebd41edee52d72737a9e78cd05a4c2c Mon Sep 17 00:00:00 2001 From: Ryota Watanabe <43837308+wattanx@users.noreply.github.com> Date: Sun, 9 Feb 2025 15:48:37 +0900 Subject: [PATCH 01/18] feat(nuxt): allow disabling auto-imported polyfills (#30332) --- packages/nuxt/src/imports/module.ts | 7 ++++++- packages/nuxt/src/imports/presets.ts | 19 ++++++++++-------- packages/schema/src/types/imports.ts | 6 ++++++ test/nuxt/polyfills.test.ts | 29 ++++++++++++++++++++++++++++ vitest.nuxt.config.ts | 3 +++ 5 files changed, 55 insertions(+), 9 deletions(-) create mode 100644 test/nuxt/polyfills.test.ts diff --git a/packages/nuxt/src/imports/module.ts b/packages/nuxt/src/imports/module.ts index 1d669b2eaa..5ba65ab75b 100644 --- a/packages/nuxt/src/imports/module.ts +++ b/packages/nuxt/src/imports/module.ts @@ -9,7 +9,7 @@ import escapeRE from 'escape-string-regexp' import { lookupNodeModuleSubpath, parseNodeModulePath } from 'mlly' import { isDirectory, logger } from '../utils' import { TransformPlugin } from './transform' -import { defaultPresets } from './presets' +import { appCompatPresets, defaultPresets } from './presets' export default defineNuxtModule>({ meta: { @@ -30,11 +30,16 @@ export default defineNuxtModule>({ exclude: undefined, }, virtualImports: ['#imports'], + polyfills: true, }), async setup (options, nuxt) { // TODO: fix sharing of defaults between invocations of modules const presets = JSON.parse(JSON.stringify(options.presets)) as ImportPresetWithDeprecation[] + if (nuxt.options.imports.polyfills) { + presets.push(...appCompatPresets) + } + // Allow modules extending sources await nuxt.callHook('imports:sources', presets) diff --git a/packages/nuxt/src/imports/presets.ts b/packages/nuxt/src/imports/presets.ts index cdc55c529e..a48ca2f426 100644 --- a/packages/nuxt/src/imports/presets.ts +++ b/packages/nuxt/src/imports/presets.ts @@ -21,14 +21,6 @@ const granularAppPresets: InlinePreset[] = [ imports: ['useNuxtApp', 'tryUseNuxtApp', 'defineNuxtPlugin', 'definePayloadPlugin', 'useRuntimeConfig', 'defineAppConfig'], from: '#app/nuxt', }, - { - imports: ['requestIdleCallback', 'cancelIdleCallback'], - from: '#app/compat/idle-callback', - }, - { - imports: ['setInterval'], - from: '#app/compat/interval', - }, { imports: ['useAppConfig', 'updateAppConfig'], from: '#app/config', @@ -258,6 +250,17 @@ const vueTypesPreset = defineUnimportPreset({ ], }) +export const appCompatPresets: InlinePreset[] = [ + { + imports: ['requestIdleCallback', 'cancelIdleCallback'], + from: '#app/compat/idle-callback', + }, + { + imports: ['setInterval'], + from: '#app/compat/interval', + }, +] + export const defaultPresets: InlinePreset[] = [ ...commonPresets, ...granularAppPresets, diff --git a/packages/schema/src/types/imports.ts b/packages/schema/src/types/imports.ts index 96171ecf87..5dc26e22c4 100644 --- a/packages/schema/src/types/imports.ts +++ b/packages/schema/src/types/imports.ts @@ -32,4 +32,10 @@ export interface ImportsOptions extends UnimportOptions { exclude?: RegExp[] include?: RegExp[] } + + /** + * Add polyfills for setInterval, requestIdleCallback, and others + * @default true + */ + polyfills?: boolean } diff --git a/test/nuxt/polyfills.test.ts b/test/nuxt/polyfills.test.ts new file mode 100644 index 0000000000..6fb4b3ec75 --- /dev/null +++ b/test/nuxt/polyfills.test.ts @@ -0,0 +1,29 @@ +import { mount } from '@vue/test-utils' +import { describe, expect, it, vi } from 'vitest' +import { defineComponent, h } from 'vue' + +describe('app/compat', () => { + const Component = defineComponent({ + setup () { + const visible = ref(false) + setInterval(() => { + visible.value = true + }, 1000) + + return () => h('div', {}, visible.value ? h('span', { id: 'child' }) : {}) + }, + }) + it('setInterval is not auto-imported', async () => { + vi.useFakeTimers() + + const wrapper = mount(Component) + + vi.advanceTimersByTime(1000) + + await wrapper.vm.$nextTick() + + expect(wrapper.find('#child').exists()).toBe(true) + + vi.useRealTimers() + }) +}) diff --git a/vitest.nuxt.config.ts b/vitest.nuxt.config.ts index 31f2c9e6a2..2aeda8d9eb 100644 --- a/vitest.nuxt.config.ts +++ b/vitest.nuxt.config.ts @@ -22,6 +22,9 @@ export default defineVitestConfig({ experimental: { appManifest: process.env.TEST_MANIFEST !== 'manifest-off', }, + imports: { + polyfills: false, + }, }, }, }, From c7212f761722ff3b41b5426ac5eb8a3f5ef95ebf Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Mon, 10 Feb 2025 10:14:07 +0000 Subject: [PATCH 02/18] test: prepare environment to ensure more reproducible dev tests --- package.json | 2 +- packages/kit/src/resolve.test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index a4eb151195..479008aead 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "build": "pnpm --filter './packages/**' prepack", "build:stub": "pnpm dev:prepare", "dev": "pnpm play", - "dev:prepare": "pnpm --filter './packages/**' prepack --stub && pnpm --filter './packages/ui-templates' build", + "dev:prepare": "pnpm --filter './packages/**' prepack --stub && pnpm --filter './packages/ui-templates' build && nuxi prepare", "debug:prepare": "TIMINGS_DEBUG=true pnpm dev:prepare", "debug:build": "TIMINGS_DEBUG=true pnpm build", "debug:dev": "rm -rf **/node_modules/.cache/jiti && pnpm nuxi dev", diff --git a/packages/kit/src/resolve.test.ts b/packages/kit/src/resolve.test.ts index bcdb95486e..adf744e0e7 100644 --- a/packages/kit/src/resolve.test.ts +++ b/packages/kit/src/resolve.test.ts @@ -20,7 +20,7 @@ const nuxt = await loadNuxt({ describe('resolvePath', () => { it('should resolve paths correctly', async () => { - expect(await resolvePath('.nuxt/app.config')).toBe(resolve(nuxt.options.buildDir, 'app.config')) + expect(await resolvePath('.nuxt/app.config')).toBe(resolve(nuxt.options.buildDir, 'app.config.mjs')) }) }) From c952e109d02576e2e07bd81ffebe81daf564cf6e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 10 Feb 2025 10:15:37 +0000 Subject: [PATCH 03/18] chore(deps): update devdependency prettier to v3.5.0 (main) (#30927) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Daniel Roe --- packages/ui-templates/package.json | 2 +- .../test/__snapshots__/templates.spec.ts.snap | 4 ++-- pnpm-lock.yaml | 20 +++++++++---------- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/ui-templates/package.json b/packages/ui-templates/package.json index eeeaeceb48..78dd6d5389 100644 --- a/packages/ui-templates/package.json +++ b/packages/ui-templates/package.json @@ -24,7 +24,7 @@ "jiti": "2.4.2", "knitwork": "1.2.0", "pathe": "2.0.2", - "prettier": "3.4.2", + "prettier": "3.5.0", "scule": "1.3.0", "svgo": "3.3.2", "tinyexec": "0.3.2", diff --git a/packages/ui-templates/test/__snapshots__/templates.spec.ts.snap b/packages/ui-templates/test/__snapshots__/templates.spec.ts.snap index 7b591de4c2..e9e3966086 100644 --- a/packages/ui-templates/test/__snapshots__/templates.spec.ts.snap +++ b/packages/ui-templates/test/__snapshots__/templates.spec.ts.snap @@ -1243,8 +1243,8 @@ exports[`template > produces correct output for welcome template 1`] = ` --un-ring-shadow: var(--un-ring-inset) 0 0 0 calc(var(--un-ring-width) + var(--un-ring-offset-width)) var(--un-ring-color); - box-shadow: var(--un-ring-offset-shadow), var(--un-ring-shadow), - var(--un-shadow); + box-shadow: + var(--un-ring-offset-shadow), var(--un-ring-shadow), var(--un-shadow); } .transition-all { transition-duration: 0.15s; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 25a01b3bdb..124cf6657c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -820,8 +820,8 @@ importers: specifier: 2.0.2 version: 2.0.2 prettier: - specifier: 3.4.2 - version: 3.4.2 + specifier: 3.5.0 + version: 3.5.0 scule: specifier: 1.3.0 version: 1.3.0 @@ -6530,8 +6530,8 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier@3.4.2: - resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} + prettier@3.5.0: + resolution: {integrity: sha512-quyMrVt6svPS7CjQ9gKb3GLEX/rl3BCL2oa/QkNcXv4YNVBC9olt3s+H7ukto06q7B1Qz46PbrKLO34PR6vXcA==} engines: {node: '>=14'} hasBin: true @@ -10787,7 +10787,7 @@ snapshots: babel-walk@3.0.0-canary-5: dependencies: - '@babel/types': 7.26.7 + '@babel/types': 7.26.8 bail@2.0.2: {} @@ -11110,8 +11110,8 @@ snapshots: constantinople@4.0.1: dependencies: - '@babel/parser': 7.26.7 - '@babel/types': 7.26.7 + '@babel/parser': 7.26.8 + '@babel/types': 7.26.8 convert-gitmoji@0.1.5: {} @@ -14212,7 +14212,7 @@ snapshots: prelude-ls@1.2.1: {} - prettier@3.4.2: {} + prettier@3.5.0: {} pretty-bytes@6.1.1: {} @@ -15926,8 +15926,8 @@ snapshots: with@7.0.2: dependencies: - '@babel/parser': 7.26.7 - '@babel/types': 7.26.7 + '@babel/parser': 7.26.8 + '@babel/types': 7.26.8 assert-never: 1.3.0 babel-walk: 3.0.0-canary-5 From fdd22127e570e33cf154ec8eec5c5888b0965025 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Mon, 10 Feb 2025 13:29:48 +0000 Subject: [PATCH 04/18] test: update unit test --- packages/kit/src/resolve.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kit/src/resolve.test.ts b/packages/kit/src/resolve.test.ts index adf744e0e7..940c93f00c 100644 --- a/packages/kit/src/resolve.test.ts +++ b/packages/kit/src/resolve.test.ts @@ -20,7 +20,7 @@ const nuxt = await loadNuxt({ describe('resolvePath', () => { it('should resolve paths correctly', async () => { - expect(await resolvePath('.nuxt/app.config')).toBe(resolve(nuxt.options.buildDir, 'app.config.mjs')) + expect(await resolvePath('.nuxt/app.config')).toBe(resolve('.nuxt/app.config.mjs')) }) }) From 1cf9bd36d24f4822022c83fbcfa8fb80c3d710ca Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Mon, 10 Feb 2025 16:28:05 +0000 Subject: [PATCH 05/18] feat(schema): add runtime + internal type validation (#30844) --- packages/nuxt/src/core/templates.ts | 19 +- packages/schema/package.json | 6 + packages/schema/src/config/adhoc.ts | 13 +- packages/schema/src/config/app.ts | 126 ++++++++++---- packages/schema/src/config/build.ts | 67 ++++--- packages/schema/src/config/common.ts | 192 +++++++++++++-------- packages/schema/src/config/dev.ts | 11 +- packages/schema/src/config/experimental.ts | 78 ++++++--- packages/schema/src/config/generate.ts | 4 +- packages/schema/src/config/index.ts | 4 +- packages/schema/src/config/internal.ts | 6 +- packages/schema/src/config/nitro.ts | 19 +- packages/schema/src/config/postcss.ts | 14 +- packages/schema/src/config/router.ts | 4 +- packages/schema/src/config/typescript.ts | 16 +- packages/schema/src/config/vite.ts | 60 ++++--- packages/schema/src/config/webpack.ts | 65 ++++--- packages/schema/src/types/module.ts | 6 + packages/schema/src/utils/definition.ts | 56 ++++++ pnpm-lock.yaml | 25 +++ 20 files changed, 549 insertions(+), 242 deletions(-) create mode 100644 packages/schema/src/utils/definition.ts diff --git a/packages/nuxt/src/core/templates.ts b/packages/nuxt/src/core/templates.ts index 7a6890bf93..d051115569 100644 --- a/packages/nuxt/src/core/templates.ts +++ b/packages/nuxt/src/core/templates.ts @@ -7,7 +7,7 @@ import escapeRE from 'escape-string-regexp' import { hash } from 'ohash' import { camelCase } from 'scule' import { filename } from 'pathe/utils' -import type { NuxtTemplate } from 'nuxt/schema' +import type { NuxtOptions, NuxtTemplate } from 'nuxt/schema' import type { Nitro } from 'nitro/types' import { annotatePlugins, checkForCircularDependencies } from './app' @@ -185,9 +185,18 @@ export const schemaTemplate: NuxtTemplate = { const relativeRoot = relative(resolve(nuxt.options.buildDir, 'types'), nuxt.options.rootDir) const getImportName = (name: string) => (name[0] === '.' ? './' + join(relativeRoot, name) : name).replace(IMPORT_NAME_RE, '') - const modules = nuxt.options._installedModules - .filter(m => m.meta && m.meta.configKey && m.meta.name && !m.meta.name.startsWith('nuxt:') && m.meta.name !== 'nuxt-config-schema') - .map(m => [genString(m.meta.configKey), getImportName(m.entryPath || m.meta.name), m] as const) + const modules: [string, string, NuxtOptions['_installedModules'][number]][] = [] + for (const m of nuxt.options._installedModules) { + // modules without sufficient metadata + if (!m.meta || !m.meta.configKey || !m.meta.name) { + continue + } + // core nuxt modules + if (m.meta.name.startsWith('nuxt:') || m.meta.name === 'nuxt-config-schema') { + continue + } + modules.push([genString(m.meta.configKey), getImportName(m.entryPath || m.meta.name), m]) + } const privateRuntimeConfig = Object.create(null) for (const key in nuxt.options.runtimeConfig) { @@ -210,7 +219,7 @@ export const schemaTemplate: NuxtTemplate = { } else if (mod.meta?.repository) { if (typeof mod.meta.repository === 'string') { link = mod.meta.repository - } else if (typeof mod.meta.repository.url === 'string') { + } else if (typeof mod.meta.repository === 'object' && 'url' in mod.meta.repository && typeof mod.meta.repository.url === 'string') { link = mod.meta.repository.url } if (link) { diff --git a/packages/schema/package.json b/packages/schema/package.json index 77ee46e670..c18d637926 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -37,6 +37,9 @@ }, "devDependencies": { "@types/pug": "2.0.10", + "@types/rollup-plugin-visualizer": "4.2.4", + "@types/webpack-bundle-analyzer": "4.7.0", + "@types/webpack-hot-middleware": "2.25.9", "@unhead/schema": "1.11.18", "@vitejs/plugin-vue": "5.2.1", "@vitejs/plugin-vue-jsx": "4.1.1", @@ -46,14 +49,17 @@ "c12": "2.0.1", "chokidar": "4.0.3", "compatx": "0.1.8", + "css-minimizer-webpack-plugin": "7.0.0", "esbuild-loader": "4.2.2", "file-loader": "6.2.0", "h3": "npm:h3-nightly@1.14.0-20250122-114730-3f9e703", "hookable": "5.5.3", "ignore": "7.0.3", + "mini-css-extract-plugin": "2.9.2", "nitro": "npm:nitro-nightly@3.0.0-beta-28969273.f7aa9de6", "ofetch": "1.4.1", "pkg-types": "1.3.1", + "postcss": "8.5.1", "sass-loader": "16.0.4", "scule": "1.3.0", "unbuild": "3.3.1", diff --git a/packages/schema/src/config/adhoc.ts b/packages/schema/src/config/adhoc.ts index 1d9f6a9d40..26942cc85d 100644 --- a/packages/schema/src/config/adhoc.ts +++ b/packages/schema/src/config/adhoc.ts @@ -1,6 +1,6 @@ -import { defineUntypedSchema } from 'untyped' +import { defineResolvers } from '../utils/definition' -export default defineUntypedSchema({ +export default defineResolvers({ /** * Configure Nuxt component auto-registration. * @@ -14,10 +14,13 @@ export default defineUntypedSchema({ if (Array.isArray(val)) { return { dirs: val } } - if (val === undefined || val === true) { - return { dirs: [{ path: '~/components/global', global: true }, '~/components'] } + if (val === false) { + return { dirs: [] } + } + return { + dirs: [{ path: '~/components/global', global: true }, '~/components'], + ...typeof val === 'object' ? val : {}, } - return val }, }, diff --git a/packages/schema/src/config/app.ts b/packages/schema/src/config/app.ts index b759a2809d..4bfc22184f 100644 --- a/packages/schema/src/config/app.ts +++ b/packages/schema/src/config/app.ts @@ -1,9 +1,10 @@ -import { defineUntypedSchema } from 'untyped' import { defu } from 'defu' import { resolve } from 'pathe' +import { defineResolvers } from '../utils/definition' import type { AppHeadMetaObject } from '../types/head' +import type { NuxtAppConfig } from '../types/config' -export default defineUntypedSchema({ +export default defineResolvers({ /** * Vue.js config */ @@ -27,7 +28,18 @@ export default defineUntypedSchema({ * Include Vue compiler in runtime bundle. */ runtimeCompiler: { - $resolve: async (val, get) => val ?? await get('experimental.runtimeVueCompiler') ?? false, + $resolve: async (val, get) => { + if (typeof val === 'boolean') { + return val + } + // @ts-expect-error TODO: formally deprecate in v4 + const legacyProperty = await get('experimental.runtimeVueCompiler') as unknown + if (typeof legacyProperty === 'boolean') { + return legacyProperty + } + + return false + }, }, /** @@ -41,7 +53,7 @@ export default defineUntypedSchema({ * may be set in your `nuxt.config`. All other options should be set at runtime in a Nuxt plugin.. * @see [Vue app config documentation](https://vuejs.org/api/application.html#app-config) */ - config: undefined, + config: {}, }, /** @@ -68,12 +80,22 @@ export default defineUntypedSchema({ * ``` */ baseURL: { - $resolve: val => val || process.env.NUXT_APP_BASE_URL || '/', + $resolve: (val) => { + if (typeof val === 'string') { + return val + } + return process.env.NUXT_APP_BASE_URL || '/' + }, }, /** The folder name for the built site assets, relative to `baseURL` (or `cdnURL` if set). This is set at build time and should not be customized at runtime. */ buildAssetsDir: { - $resolve: val => val || process.env.NUXT_APP_BUILD_ASSETS_DIR || '/_nuxt/', + $resolve: (val) => { + if (typeof val === 'string') { + return val + } + return process.env.NUXT_APP_BUILD_ASSETS_DIR || '/_nuxt/' + }, }, /** @@ -96,7 +118,12 @@ export default defineUntypedSchema({ * ``` */ cdnURL: { - $resolve: async (val, get) => (await get('dev')) ? '' : (process.env.NUXT_APP_CDN_URL ?? val) || '', + $resolve: async (val, get) => { + if (await get('dev')) { + return '' + } + return process.env.NUXT_APP_CDN_URL || (typeof val === 'string' ? val : '') + }, }, /** @@ -132,14 +159,20 @@ export default defineUntypedSchema({ * @type {typeof import('../src/types/config').NuxtAppConfig['head']} */ head: { - $resolve: async (val: Partial | undefined, get) => { - const resolved = defu(val, await get('meta') as Partial, { + $resolve: async (_val, get) => { + // @ts-expect-error TODO: remove in Nuxt v4 + const legacyMetaValues = await get('meta') as Record + const val: Partial = _val && typeof _val === 'object' ? _val : {} + + type NormalizedMetaObject = Required> + + const resolved: NuxtAppConfig['head'] & NormalizedMetaObject = defu(val, legacyMetaValues, { meta: [], link: [], style: [], script: [], noscript: [], - } as Required>) + } satisfies NormalizedMetaObject) // provides default charset and viewport if not set if (!resolved.meta.find(m => m.charset)?.charset) { @@ -190,9 +223,13 @@ export default defineUntypedSchema({ * @type {typeof import('../src/types/config').NuxtAppConfig['viewTransition']} */ viewTransition: { - $resolve: async (val, get) => val ?? await (get('experimental') as Promise>).then( - e => e?.viewTransition, - ) ?? false, + $resolve: async (val, get) => { + if (val === 'always' || typeof val === 'boolean') { + return val + } + + return await get('experimental').then(e => e.viewTransition) ?? false + }, }, /** @@ -211,14 +248,14 @@ export default defineUntypedSchema({ * @deprecated Prefer `rootAttrs.id` instead */ rootId: { - $resolve: val => val === false ? false : (val || '__nuxt'), + $resolve: val => val === false ? false : (val && typeof val === 'string' ? val : '__nuxt'), }, /** * Customize Nuxt root element tag. */ rootTag: { - $resolve: val => val || 'div', + $resolve: val => val && typeof val === 'string' ? val : 'div', }, /** @@ -226,11 +263,12 @@ export default defineUntypedSchema({ * @type {typeof import('@unhead/schema').HtmlAttributes} */ rootAttrs: { - $resolve: async (val: undefined | null | Record, get) => { + $resolve: async (val, get) => { const rootId = await get('app.rootId') - return defu(val, { + return { id: rootId === false ? undefined : (rootId || '__nuxt'), - }) + ...typeof val === 'object' ? val : {}, + } }, }, @@ -238,7 +276,7 @@ export default defineUntypedSchema({ * Customize Nuxt Teleport element tag. */ teleportTag: { - $resolve: val => val || 'div', + $resolve: val => val && typeof val === 'string' ? val : 'div', }, /** @@ -247,7 +285,7 @@ export default defineUntypedSchema({ * @deprecated Prefer `teleportAttrs.id` instead */ teleportId: { - $resolve: val => val === false ? false : (val || 'teleports'), + $resolve: val => val === false ? false : (val && typeof val === 'string' ? val : 'teleports'), }, /** @@ -255,11 +293,12 @@ export default defineUntypedSchema({ * @type {typeof import('@unhead/schema').HtmlAttributes} */ teleportAttrs: { - $resolve: async (val: undefined | null | Record, get) => { + $resolve: async (val, get) => { const teleportId = await get('app.teleportId') - return defu(val, { + return { id: teleportId === false ? undefined : (teleportId || 'teleports'), - }) + ...typeof val === 'object' ? val : {}, + } }, }, @@ -267,12 +306,12 @@ export default defineUntypedSchema({ * Customize Nuxt SpaLoader element tag. */ spaLoaderTag: { - $resolve: val => val || 'div', + $resolve: val => val && typeof val === 'string' ? val : 'div', }, /** * Customize Nuxt Nuxt SpaLoader element attributes. - * @type {typeof import('@unhead/schema').HtmlAttributes} + * @type {Partial} */ spaLoaderAttrs: { id: '__nuxt-loader', @@ -332,10 +371,18 @@ export default defineUntypedSchema({ * } * * ``` - * @type {string | boolean} + * @type {string | boolean | undefined} */ spaLoadingTemplate: { - $resolve: async (val: string | boolean | undefined, get) => typeof val === 'string' ? resolve(await get('srcDir') as string, val) : val ?? null, + $resolve: async (val, get) => { + if (typeof val === 'string') { + return resolve(await get('srcDir'), val) + } + if (typeof val === 'boolean') { + return val + } + return undefined + }, }, /** @@ -386,7 +433,21 @@ export default defineUntypedSchema({ * @type {string[]} */ css: { - $resolve: (val: string[] | undefined) => (val ?? []).map((c: any) => c.src || c), + $resolve: (val) => { + if (!Array.isArray(val)) { + return [] + } + const css: string[] = [] + for (const item of val) { + if (typeof item === 'string') { + css.push(item) + } else if (item && 'src' in item) { + // TODO: remove in Nuxt v4 + css.push(item.src) + } + } + return css + }, }, /** @@ -410,12 +471,13 @@ export default defineUntypedSchema({ * @type {typeof import('@unhead/schema').RenderSSRHeadOptions} */ renderSSRHeadOptions: { - $resolve: async (val: Record | undefined, get) => { - const isV4 = ((await get('future') as Record).compatibilityVersion === 4) + $resolve: async (val, get) => { + const isV4 = (await get('future')).compatibilityVersion === 4 - return defu(val, { + return { + ...typeof val === 'object' ? val : {}, omitLineBreaks: isV4, - }) + } }, }, }, diff --git a/packages/schema/src/config/build.ts b/packages/schema/src/config/build.ts index d5e43804c9..af7a1e1911 100644 --- a/packages/schema/src/config/build.ts +++ b/packages/schema/src/config/build.ts @@ -1,25 +1,35 @@ -import { defineUntypedSchema } from 'untyped' import { defu } from 'defu' import { join } from 'pathe' import { isTest } from 'std-env' import { consola } from 'consola' +import type { Nuxt } from 'nuxt/schema' +import { defineResolvers } from '../utils/definition' -export default defineUntypedSchema({ +export default defineResolvers({ /** * The builder to use for bundling the Vue part of your application. * @type {'vite' | 'webpack' | 'rspack' | { bundle: (nuxt: typeof import('../src/types/nuxt').Nuxt) => Promise }} */ builder: { - $resolve: async (val: 'vite' | 'webpack' | 'rspack' | { bundle: (nuxt: unknown) => Promise } | undefined = 'vite', get) => { - if (typeof val === 'object') { - return val + $resolve: async (val, get) => { + if (val && typeof val === 'object' && 'bundle' in val) { + return val as { bundle: (nuxt: Nuxt) => Promise } } - const map: Record = { + const map = { rspack: '@nuxt/rspack-builder', vite: '@nuxt/vite-builder', webpack: '@nuxt/webpack-builder', } - return map[val] || val || (await get('vite') === false ? map.webpack : map.vite) + type Builder = 'vite' | 'webpack' | 'rspack' + if (typeof val === 'string' && val in map) { + // TODO: improve normalisation inference + return map[val as keyof typeof map] as Builder + } + // @ts-expect-error TODO: remove old, unsupported config in v4 + if (await get('vite') === false) { + return map.webpack as Builder + } + return map.vite as Builder }, }, @@ -37,14 +47,15 @@ export default defineUntypedSchema({ * @type {boolean | { server?: boolean | 'hidden', client?: boolean | 'hidden' }} */ sourcemap: { - $resolve: async (val: boolean | { server?: boolean | 'hidden', client?: boolean | 'hidden' } | undefined, get) => { + $resolve: async (val, get) => { if (typeof val === 'boolean') { return { server: val, client: val } } - return defu(val, { + return { server: true, client: await get('dev'), - }) + ...typeof val === 'object' ? val : {}, + } }, }, @@ -56,11 +67,11 @@ export default defineUntypedSchema({ * @type {'silent' | 'info' | 'verbose'} */ logLevel: { - $resolve: (val: string | undefined) => { - if (val && !['silent', 'info', 'verbose'].includes(val)) { + $resolve: (val) => { + if (val && typeof val === 'string' && !['silent', 'info', 'verbose'].includes(val)) { consola.warn(`Invalid \`logLevel\` option: \`${val}\`. Must be one of: \`silent\`, \`info\`, \`verbose\`.`) } - return val ?? (isTest ? 'silent' : 'info') + return val && typeof val === 'string' ? val as 'silent' | 'info' | 'verbose' : (isTest ? 'silent' : 'info') }, }, @@ -81,7 +92,20 @@ export default defineUntypedSchema({ * @type {Array string | RegExp | false)>} */ transpile: { - $resolve: (val: Array string | RegExp | false)> | undefined) => (val || []).filter(Boolean), + $resolve: (val) => { + const transpile: Array string | RegExp | false)> = [] + if (Array.isArray(val)) { + for (const pattern of val) { + if (!pattern) { + continue + } + if (typeof pattern === 'string' || typeof pattern === 'function' || pattern instanceof RegExp) { + transpile.push(pattern) + } + } + } + return transpile + }, }, /** @@ -110,16 +134,17 @@ export default defineUntypedSchema({ * analyzerMode: 'static' * } * ``` - * @type {boolean | { enabled?: boolean } & ((0 extends 1 & typeof import('webpack-bundle-analyzer').BundleAnalyzerPlugin.Options ? {} : typeof import('webpack-bundle-analyzer').BundleAnalyzerPlugin.Options) | typeof import('rollup-plugin-visualizer').PluginVisualizerOptions)} + * @type {boolean | { enabled?: boolean } & ((0 extends 1 & typeof import('webpack-bundle-analyzer').BundleAnalyzerPlugin.Options ? Record : typeof import('webpack-bundle-analyzer').BundleAnalyzerPlugin.Options) | typeof import('rollup-plugin-visualizer').PluginVisualizerOptions)} */ analyze: { - $resolve: async (val: boolean | { enabled?: boolean } | Record, get) => { - const [rootDir, analyzeDir] = await Promise.all([get('rootDir'), get('analyzeDir')]) as [string, string] - return defu(typeof val === 'boolean' ? { enabled: val } : val, { + $resolve: async (val, get) => { + const [rootDir, analyzeDir] = await Promise.all([get('rootDir'), get('analyzeDir')]) + return { template: 'treemap', projectRoot: rootDir, filename: join(analyzeDir, '{name}.html'), - }) + ...typeof val === 'boolean' ? { enabled: val } : typeof val === 'object' ? val : {}, + } }, }, }, @@ -139,7 +164,7 @@ export default defineUntypedSchema({ * @type {Array<{ name: string, source?: string | RegExp, argumentLength: number }>} */ keyedComposables: { - $resolve: (val: Array<{ name: string, argumentLength: string }> | undefined) => [ + $resolve: val => [ { name: 'callOnce', argumentLength: 3 }, { name: 'defineNuxtComponent', argumentLength: 2 }, { name: 'useState', argumentLength: 2 }, @@ -147,7 +172,7 @@ export default defineUntypedSchema({ { name: 'useAsyncData', argumentLength: 3 }, { name: 'useLazyAsyncData', argumentLength: 3 }, { name: 'useLazyFetch', argumentLength: 3 }, - ...val || [], + ...Array.isArray(val) ? val : [], ].filter(Boolean), }, diff --git a/packages/schema/src/config/common.ts b/packages/schema/src/config/common.ts index 5ffcf0eb60..c53a1ef0fc 100644 --- a/packages/schema/src/config/common.ts +++ b/packages/schema/src/config/common.ts @@ -1,16 +1,16 @@ import { existsSync } from 'node:fs' import { readdir } from 'node:fs/promises' import { randomUUID } from 'node:crypto' -import { defineUntypedSchema } from 'untyped' import { basename, join, relative, resolve } from 'pathe' import { isDebug, isDevelopment, isTest } from 'std-env' import { defu } from 'defu' import { findWorkspaceDir } from 'pkg-types' -import type { RuntimeConfig } from '../types/config' import type { NuxtDebugOptions } from '../types/debug' +import type { NuxtModule } from '../types/module' +import { defineResolvers } from '../utils/definition' -export default defineUntypedSchema({ +export default defineResolvers({ /** * Extend project from multiple local or remote sources. * @@ -21,7 +21,7 @@ export default defineUntypedSchema({ * @see [`giget` documentation](https://github.com/unjs/giget) * @type {string | [string, typeof import('c12').SourceOptions?] | (string | [string, typeof import('c12').SourceOptions?])[]} */ - extends: null, + extends: undefined, /** * Specify a compatibility date for your app. @@ -43,7 +43,7 @@ export default defineUntypedSchema({ * You can use `github:`, `gitlab:`, `bitbucket:` or `https://` to extend from a remote git repository. * @type {string} */ - theme: null, + theme: undefined, /** * Define the root directory of your application. @@ -67,9 +67,9 @@ export default defineUntypedSchema({ * It is normally not needed to configure this option. */ workspaceDir: { - $resolve: async (val: string | undefined, get): Promise => { - const rootDir = await get('rootDir') as string - return val ? resolve(rootDir, val) : await findWorkspaceDir(rootDir).catch(() => rootDir) + $resolve: async (val, get) => { + const rootDir = await get('rootDir') + return val && typeof val === 'string' ? resolve(rootDir, val) : await findWorkspaceDir(rootDir).catch(() => rootDir) }, }, @@ -105,14 +105,14 @@ export default defineUntypedSchema({ * ``` */ srcDir: { - $resolve: async (val: string | undefined, get): Promise => { - if (val) { - return resolve(await get('rootDir') as string, val) + $resolve: async (val, get) => { + if (val && typeof val === 'string') { + return resolve(await get('rootDir'), val) } const [rootDir, isV4] = await Promise.all([ - get('rootDir') as Promise, - (get('future') as Promise>).then(r => r.compatibilityVersion === 4), + get('rootDir'), + get('future').then(r => r.compatibilityVersion === 4), ]) if (!isV4) { @@ -138,7 +138,7 @@ export default defineUntypedSchema({ } } const keys = ['assets', 'layouts', 'middleware', 'pages', 'plugins'] as const - const dirs = await Promise.all(keys.map(key => get(`dir.${key}`) as Promise)) + const dirs = await Promise.all(keys.map(key => get(`dir.${key}`))) for (const dir of dirs) { if (existsSync(resolve(rootDir, dir))) { return rootDir @@ -157,13 +157,13 @@ export default defineUntypedSchema({ * */ serverDir: { - $resolve: async (val: string | undefined, get): Promise => { - if (val) { - const rootDir = await get('rootDir') as string + $resolve: async (val, get) => { + if (val && typeof val === 'string') { + const rootDir = await get('rootDir') return resolve(rootDir, val) } - const isV4 = (await get('future') as Record).compatibilityVersion === 4 - return join(isV4 ? await get('rootDir') as string : await get('srcDir') as string, 'server') + const isV4 = (await get('future')).compatibilityVersion === 4 + return join(isV4 ? await get('rootDir') : await get('srcDir'), 'server') }, }, @@ -180,9 +180,9 @@ export default defineUntypedSchema({ * ``` */ buildDir: { - $resolve: async (val: string | undefined, get) => { - const rootDir = await get('rootDir') as string - return resolve(rootDir, val ?? '.nuxt') + $resolve: async (val, get) => { + const rootDir = await get('rootDir') + return resolve(rootDir, val && typeof val === 'string' ? val : '.nuxt') }, }, @@ -192,14 +192,14 @@ export default defineUntypedSchema({ * Defaults to `nuxt-app`. */ appId: { - $resolve: (val: string) => val ?? 'nuxt-app', + $resolve: val => val && typeof val === 'string' ? val : 'nuxt-app', }, /** * A unique identifier matching the build. This may contain the hash of the current state of the project. */ buildId: { - $resolve: async (val: string | undefined, get): Promise => { + $resolve: async (val, get): Promise => { if (typeof val === 'string') { return val } const [isDev, isTest] = await Promise.all([get('dev') as Promise, get('test') as Promise]) @@ -223,12 +223,17 @@ export default defineUntypedSchema({ */ modulesDir: { $default: ['node_modules'], - $resolve: async (val: string[] | undefined, get): Promise => { - const rootDir = await get('rootDir') as string - return [...new Set([ - ...(val || []).map((dir: string) => resolve(rootDir, dir)), - resolve(rootDir, 'node_modules'), - ])] + $resolve: async (val, get) => { + const rootDir = await get('rootDir') + const modulesDir = new Set([resolve(rootDir, 'node_modules')]) + if (Array.isArray(val)) { + for (const dir of val) { + if (dir && typeof dir === 'string') { + modulesDir.add(resolve(rootDir, dir)) + } + } + } + return [...modulesDir] }, }, @@ -238,9 +243,9 @@ export default defineUntypedSchema({ * If a relative path is specified, it will be relative to your `rootDir`. */ analyzeDir: { - $resolve: async (val: string | undefined, get): Promise => val - ? resolve(await get('rootDir') as string, val) - : resolve(await get('buildDir') as string, 'analyze'), + $resolve: async (val, get) => val && typeof val === 'string' + ? resolve(await get('rootDir'), val) + : resolve(await get('buildDir'), 'analyze'), }, /** @@ -249,14 +254,14 @@ export default defineUntypedSchema({ * Normally, you should not need to set this. */ dev: { - $resolve: val => val ?? Boolean(isDevelopment), + $resolve: val => typeof val === 'boolean' ? val : Boolean(isDevelopment), }, /** * Whether your app is being unit tested. */ test: { - $resolve: val => val ?? Boolean(isTest), + $resolve: val => typeof val === 'boolean' ? val : Boolean(isTest), }, /** @@ -270,11 +275,8 @@ export default defineUntypedSchema({ * @type {boolean | (typeof import('../src/types/debug').NuxtDebugOptions) | undefined} */ debug: { - $resolve: (val: boolean | NuxtDebugOptions | undefined) => { + $resolve: (val) => { val ??= isDebug - if (val === false) { - return val - } if (val === true) { return { templates: true, @@ -289,7 +291,10 @@ export default defineUntypedSchema({ hydration: true, } satisfies Required } - return val + if (val && typeof val === 'object') { + return val + } + return false }, }, @@ -298,7 +303,7 @@ export default defineUntypedSchema({ * If set to `false` generated pages will have no content. */ ssr: { - $resolve: val => val ?? true, + $resolve: val => typeof val === 'boolean' ? val : true, }, /** @@ -327,7 +332,20 @@ export default defineUntypedSchema({ * @type {(typeof import('../src/types/module').NuxtModule | string | [typeof import('../src/types/module').NuxtModule | string, Record] | undefined | null | false)[]} */ modules: { - $resolve: (val: string[] | undefined): string[] => (val || []).filter(Boolean), + $resolve: (val) => { + const modules: Array]> = [] + if (Array.isArray(val)) { + for (const mod of val) { + if (!mod) { + continue + } + if (typeof mod === 'string' || typeof mod === 'function' || (Array.isArray(mod) && mod[0])) { + modules.push(mod) + } + } + } + return modules + }, }, /** @@ -337,13 +355,13 @@ export default defineUntypedSchema({ */ dir: { app: { - $resolve: async (val: string | undefined, get) => { - const isV4 = (await get('future') as Record).compatibilityVersion === 4 + $resolve: async (val, get) => { + const isV4 = (await get('future')).compatibilityVersion === 4 if (isV4) { - const [srcDir, rootDir] = await Promise.all([get('srcDir') as Promise, get('rootDir') as Promise]) - return resolve(await get('srcDir') as string, val || (srcDir === rootDir ? 'app' : '.')) + const [srcDir, rootDir] = await Promise.all([get('srcDir'), get('rootDir')]) + return resolve(await get('srcDir'), val && typeof val === 'string' ? val : (srcDir === rootDir ? 'app' : '.')) } - return val || 'app' + return val && typeof val === 'string' ? val : 'app' }, }, /** @@ -365,12 +383,12 @@ export default defineUntypedSchema({ * The modules directory, each file in which will be auto-registered as a Nuxt module. */ modules: { - $resolve: async (val: string | undefined, get) => { - const isV4 = (await get('future') as Record).compatibilityVersion === 4 + $resolve: async (val, get) => { + const isV4 = (await get('future')).compatibilityVersion === 4 if (isV4) { - return resolve(await get('rootDir') as string, val || 'modules') + return resolve(await get('rootDir'), val && typeof val === 'string' ? val : 'modules') } - return val || 'modules' + return val && typeof val === 'string' ? val : 'modules' }, }, @@ -394,18 +412,25 @@ export default defineUntypedSchema({ * and copied across into your `dist` folder when your app is generated. */ public: { - $resolve: async (val: string | undefined, get) => { - const isV4 = (await get('future') as Record).compatibilityVersion === 4 + $resolve: async (val, get) => { + const isV4 = (await get('future')).compatibilityVersion === 4 if (isV4) { - return resolve(await get('rootDir') as string, val || await get('dir.static') as string || 'public') + return resolve(await get('rootDir'), val && typeof val === 'string' ? val : (await get('dir.static') || 'public')) } - return val || await get('dir.static') as string || 'public' + return val && typeof val === 'string' ? val : (await get('dir.static') || 'public') }, }, + // TODO: remove in v4 static: { + // @ts-expect-error schema has invalid types $schema: { deprecated: 'use `dir.public` option instead' }, - $resolve: async (val, get) => val || await get('dir.public') || 'public', + $resolve: async (val, get) => { + if (val && typeof val === 'string') { + return val + } + return await get('dir.public') || 'public' + }, }, }, @@ -413,7 +438,17 @@ export default defineUntypedSchema({ * The extensions that should be resolved by the Nuxt resolver. */ extensions: { - $resolve: (val: string[] | undefined): string[] => ['.js', '.jsx', '.mjs', '.ts', '.tsx', '.vue', ...val || []].filter(Boolean), + $resolve: (val): string[] => { + const extensions = ['.js', '.jsx', '.mjs', '.ts', '.tsx', '.vue'] + if (Array.isArray(val)) { + for (const item of val) { + if (item && typeof item === 'string') { + extensions.push(item) + } + } + } + return extensions + }, }, /** @@ -457,8 +492,8 @@ export default defineUntypedSchema({ * @type {Record} */ alias: { - $resolve: async (val: Record, get): Promise> => { - const [srcDir, rootDir, assetsDir, publicDir, buildDir, sharedDir] = await Promise.all([get('srcDir'), get('rootDir'), get('dir.assets'), get('dir.public'), get('buildDir'), get('dir.shared')]) as [string, string, string, string, string, string] + $resolve: async (val, get) => { + const [srcDir, rootDir, assetsDir, publicDir, buildDir, sharedDir] = await Promise.all([get('srcDir'), get('rootDir'), get('dir.assets'), get('dir.public'), get('buildDir'), get('dir.shared')]) return { '~': srcDir, '@': srcDir, @@ -469,7 +504,7 @@ export default defineUntypedSchema({ [basename(publicDir)]: resolve(srcDir, publicDir), '#build': buildDir, '#internal/nuxt/paths': resolve(buildDir, 'paths.mjs'), - ...val, + ...typeof val === 'object' ? val : {}, } }, }, @@ -494,7 +529,7 @@ export default defineUntypedSchema({ * By default, the `ignorePrefix` is set to '-', ignoring any files starting with '-'. */ ignorePrefix: { - $resolve: val => val ?? '-', + $resolve: val => val && typeof val === 'string' ? val : '-', }, /** @@ -502,18 +537,27 @@ export default defineUntypedSchema({ * inside the `ignore` array will be ignored in building. */ ignore: { - $resolve: async (val: string[] | undefined, get): Promise => { - const [rootDir, ignorePrefix, analyzeDir, buildDir] = await Promise.all([get('rootDir'), get('ignorePrefix'), get('analyzeDir'), get('buildDir')]) as [string, string, string, string] - return [ + $resolve: async (val, get): Promise => { + const [rootDir, ignorePrefix, analyzeDir, buildDir] = await Promise.all([get('rootDir'), get('ignorePrefix'), get('analyzeDir'), get('buildDir')]) + const ignore = new Set([ '**/*.stories.{js,cts,mts,ts,jsx,tsx}', // ignore storybook files '**/*.{spec,test}.{js,cts,mts,ts,jsx,tsx}', // ignore tests '**/*.d.{cts,mts,ts}', // ignore type declarations '**/.{pnpm-store,vercel,netlify,output,git,cache,data}', relative(rootDir, analyzeDir), relative(rootDir, buildDir), - ignorePrefix && `**/${ignorePrefix}*.*`, - ...val || [], - ].filter(Boolean) + ]) + if (ignorePrefix) { + ignore.add(`**/${ignorePrefix}*.*`) + } + if (Array.isArray(val)) { + for (const pattern in val) { + if (pattern) { + ignore.add(pattern) + } + } + } + return [...ignore] }, }, @@ -526,8 +570,11 @@ export default defineUntypedSchema({ * @type {Array} */ watch: { - $resolve: (val: Array | undefined) => { - return (val || []).filter((b: unknown) => typeof b === 'string' || b instanceof RegExp) + $resolve: (val) => { + if (Array.isArray(val)) { + return val.filter((b: unknown) => typeof b === 'string' || b instanceof RegExp) + } + return [] }, }, @@ -583,7 +630,7 @@ export default defineUntypedSchema({ * ``` * @type {typeof import('../src/types/hooks').NuxtHooks} */ - hooks: null, + hooks: undefined, /** * Runtime config allows passing dynamic config and environment variables to the Nuxt app context. @@ -611,8 +658,9 @@ export default defineUntypedSchema({ * @type {typeof import('../src/types/config').RuntimeConfig} */ runtimeConfig: { - $resolve: async (val: RuntimeConfig, get): Promise> => { - const [app, buildId] = await Promise.all([get('app') as Promise>, get('buildId') as Promise]) + $resolve: async (_val, get) => { + const val = _val && typeof _val === 'object' ? _val : {} + const [app, buildId] = await Promise.all([get('app'), get('buildId')]) provideFallbackValues(val) return defu(val, { public: {}, diff --git a/packages/schema/src/config/dev.ts b/packages/schema/src/config/dev.ts index 9c7ebd0ab0..292c2b00fd 100644 --- a/packages/schema/src/config/dev.ts +++ b/packages/schema/src/config/dev.ts @@ -1,7 +1,7 @@ -import { defineUntypedSchema } from 'untyped' +import { defineResolvers } from '../utils/definition' import { template as loadingTemplate } from '../../../ui-templates/dist/templates/loading' -export default defineUntypedSchema({ +export default defineResolvers({ devServer: { /** * Whether to enable HTTPS. @@ -21,9 +21,12 @@ export default defineUntypedSchema({ https: false, /** Dev server listening port */ - port: process.env.NUXT_PORT || process.env.NITRO_PORT || process.env.PORT || 3000, + port: Number(process.env.NUXT_PORT || process.env.NITRO_PORT || process.env.PORT || 3000), - /** Dev server listening host */ + /** + * Dev server listening host + * @type {string | undefined} + */ host: process.env.NUXT_HOST || process.env.NITRO_HOST || process.env.HOST || undefined, /** diff --git a/packages/schema/src/config/experimental.ts b/packages/schema/src/config/experimental.ts index bd627972a0..9e35960269 100644 --- a/packages/schema/src/config/experimental.ts +++ b/packages/schema/src/config/experimental.ts @@ -1,6 +1,6 @@ -import { defineUntypedSchema } from 'untyped' +import { defineResolvers } from '../utils/definition' -export default defineUntypedSchema({ +export default defineResolvers({ /** * `future` is for early opting-in to new features that will become default in a future * (possibly major) version of the framework. @@ -30,10 +30,10 @@ export default defineUntypedSchema({ */ typescriptBundlerResolution: { async $resolve (val, get) { - // TODO: remove in v3.10 - val = val ?? await (get('experimental') as Promise>).then(e => e?.typescriptBundlerResolution) + // @ts-expect-error TODO: remove in v3.10 + val = typeof val === 'boolean' ? val : await (get('experimental')).then(e => e?.typescriptBundlerResolution as string | undefined) if (typeof val === 'boolean') { return val } - const setting = await get('typescript.tsConfig.compilerOptions.moduleResolution') as string | undefined + const setting = await get('typescript.tsConfig').then(r => r?.compilerOptions?.moduleResolution) if (setting) { return setting.toLowerCase() === 'bundler' } @@ -53,14 +53,22 @@ export default defineUntypedSchema({ * @type {boolean | ((id?: string) => boolean)} */ inlineStyles: { - async $resolve (val, get) { - // TODO: remove in v3.10 - val = val ?? await (get('experimental') as Promise>).then((e: Record) => e?.inlineSSRStyles) - if (val === false || (await get('dev')) || (await get('ssr')) === false || (await get('builder')) === '@nuxt/webpack-builder') { + async $resolve (_val, get) { + const val = typeof _val === 'boolean' || typeof _val === 'function' + ? _val + // @ts-expect-error TODO: legacy property - remove in v3.10 + : await (get('experimental')).then(e => e?.inlineSSRStyles) as undefined | boolean + if ( + val === false || + (await get('dev')) || + (await get('ssr')) === false || + // @ts-expect-error TODO: handled normalised types + (await get('builder')) === '@nuxt/webpack-builder' + ) { return false } // Enabled by default for vite prod with ssr (for vue components) - return val ?? ((await get('future') as Record).compatibilityVersion === 4 ? (id: string) => id && id.includes('.vue') : true) + return val ?? ((await get('future')).compatibilityVersion === 4 ? (id?: string) => !!id && id.includes('.vue') : true) }, }, @@ -73,7 +81,9 @@ export default defineUntypedSchema({ */ devLogs: { async $resolve (val, get) { - if (val !== undefined) { return val } + if (typeof val === 'boolean' || val === 'silent') { + return val + } const [isDev, isTest] = await Promise.all([get('dev'), get('test')]) return isDev && !isTest }, @@ -85,8 +95,10 @@ export default defineUntypedSchema({ */ noScripts: { async $resolve (val, get) { - // TODO: remove in v3.10 - return val ?? await (get('experimental') as Promise>).then((e: Record) => e?.noScripts) ?? false + return typeof val === 'boolean' + ? val + // @ts-expect-error TODO: legacy property - remove in v3.10 + : (await (get('experimental')).then(e => e?.noScripts as boolean | undefined) ?? false) }, }, }, @@ -95,7 +107,7 @@ export default defineUntypedSchema({ * Set to true to generate an async entry point for the Vue bundle (for module federation support). */ asyncEntry: { - $resolve: val => val ?? false, + $resolve: val => typeof val === 'boolean' ? val : false, }, // TODO: Remove when nitro has support for mocking traced dependencies @@ -135,7 +147,17 @@ export default defineUntypedSchema({ if (val === 'reload') { return 'automatic' } - return val ?? 'automatic' + if (val === false) { + return false + } + + const validOptions = ['manual', 'automatic', 'automatic-immediate'] as const + type EmitRouteChunkError = typeof validOptions[number] + if (typeof val === 'string' && validOptions.includes(val as EmitRouteChunkError)) { + return val as EmitRouteChunkError + } + + return 'automatic' }, }, @@ -255,14 +277,16 @@ export default defineUntypedSchema({ */ watcher: { $resolve: async (val, get) => { - if (val) { - return val + const validOptions = ['chokidar', 'parcel', 'chokidar-granular'] as const + type WatcherOption = typeof validOptions[number] + if (typeof val === 'string' && validOptions.includes(val as WatcherOption)) { + return val as WatcherOption } - const [srcDir, rootDir] = await Promise.all([get('srcDir'), get('rootDir')]) as [string, string] + const [srcDir, rootDir] = await Promise.all([get('srcDir'), get('rootDir')]) if (srcDir === rootDir) { - return 'chokidar-granular' + return 'chokidar-granular' as const } - return 'chokidar' + return 'chokidar' as const }, }, @@ -304,7 +328,7 @@ export default defineUntypedSchema({ */ scanPageMeta: { async $resolve (val, get) { - return val ?? ((await get('future') as Record).compatibilityVersion === 4 ? 'after-resolve' : true) + return typeof val === 'boolean' || val === 'after-resolve' ? val : ((await get('future')).compatibilityVersion === 4 ? 'after-resolve' : true) }, }, @@ -343,7 +367,7 @@ export default defineUntypedSchema({ */ sharedPrerenderData: { async $resolve (val, get) { - return val ?? ((await get('future') as Record).compatibilityVersion === 4) + return typeof val === 'boolean' ? val : ((await get('future')).compatibilityVersion === 4) }, }, @@ -414,7 +438,7 @@ export default defineUntypedSchema({ */ normalizeComponentNames: { $resolve: async (val, get) => { - return val ?? ((await get('future') as Record).compatibilityVersion === 4) + return typeof val === 'boolean' ? val : ((await get('future')).compatibilityVersion === 4) }, }, @@ -425,7 +449,9 @@ export default defineUntypedSchema({ */ spaLoadingTemplateLocation: { $resolve: async (val, get) => { - return val ?? (((await get('future') as Record).compatibilityVersion === 4) ? 'body' : 'within') + const validOptions = ['body', 'within'] as const + type SpaLoadingTemplateLocation = typeof validOptions[number] + return typeof val === 'string' && validOptions.includes(val as SpaLoadingTemplateLocation) ? val as SpaLoadingTemplateLocation : (((await get('future')).compatibilityVersion === 4) ? 'body' : 'within') }, }, @@ -435,7 +461,7 @@ export default defineUntypedSchema({ * @see [the Chrome DevTools extensibility API](https://developer.chrome.com/docs/devtools/performance/extension#tracks) */ browserDevtoolsTiming: { - $resolve: async (val, get) => val ?? await get('dev'), + $resolve: async (val, get) => typeof val === 'boolean' ? val : await get('dev'), }, /** @@ -443,7 +469,7 @@ export default defineUntypedSchema({ */ debugModuleMutation: { $resolve: async (val, get) => { - return val ?? Boolean(await get('debug')) + return typeof val === 'boolean' ? val : Boolean(await get('debug')) }, }, }, diff --git a/packages/schema/src/config/generate.ts b/packages/schema/src/config/generate.ts index eb0e334393..5acab1e98d 100644 --- a/packages/schema/src/config/generate.ts +++ b/packages/schema/src/config/generate.ts @@ -1,6 +1,6 @@ -import { defineUntypedSchema } from 'untyped' +import { defineResolvers } from '../utils/definition' -export default defineUntypedSchema({ +export default defineResolvers({ generate: { /** * The routes to generate. diff --git a/packages/schema/src/config/index.ts b/packages/schema/src/config/index.ts index 42666bc8c3..c35253fe7c 100644 --- a/packages/schema/src/config/index.ts +++ b/packages/schema/src/config/index.ts @@ -1,3 +1,5 @@ +import type { ResolvableConfigSchema } from '../utils/definition' + import adhoc from './adhoc' import app from './app' import build from './build' @@ -28,4 +30,4 @@ export default { ...typescript, ...vite, ...webpack, -} +} satisfies ResolvableConfigSchema diff --git a/packages/schema/src/config/internal.ts b/packages/schema/src/config/internal.ts index 0207964f64..f1a3a4694e 100644 --- a/packages/schema/src/config/internal.ts +++ b/packages/schema/src/config/internal.ts @@ -1,6 +1,6 @@ -import { defineUntypedSchema } from 'untyped' +import { defineResolvers } from '../utils/definition' -export default defineUntypedSchema({ +export default defineResolvers({ /** @private */ _majorVersion: 4, /** @private */ @@ -25,7 +25,7 @@ export default defineUntypedSchema({ appDir: '', /** * @private - * @type {Array<{ meta: ModuleMeta; module: NuxtModule, timings?: Record; entryPath?: string }>} + * @type {Array<{ meta: typeof import('../src/types/module').ModuleMeta; module: typeof import('../src/types/module').NuxtModule, timings?: Record; entryPath?: string }>} */ _installedModules: [], /** @private */ diff --git a/packages/schema/src/config/nitro.ts b/packages/schema/src/config/nitro.ts index 9f886dc077..3d3b565e1e 100644 --- a/packages/schema/src/config/nitro.ts +++ b/packages/schema/src/config/nitro.ts @@ -1,7 +1,6 @@ -import { defineUntypedSchema } from 'untyped' -import type { RuntimeConfig } from '../types/config' +import { defineResolvers } from '../utils/definition' -export default defineUntypedSchema({ +export default defineResolvers({ /** * Configuration for Nitro. * @see [Nitro configuration docs](https://nitro.unjs.io/config/) @@ -9,8 +8,8 @@ export default defineUntypedSchema({ */ nitro: { runtimeConfig: { - $resolve: async (val: Record | undefined, get) => { - const runtimeConfig = await get('runtimeConfig') as RuntimeConfig + $resolve: async (val, get) => { + const runtimeConfig = await get('runtimeConfig') return { ...runtimeConfig, app: { @@ -27,10 +26,12 @@ export default defineUntypedSchema({ }, }, routeRules: { - $resolve: async (val: Record | undefined, get) => ({ - ...await get('routeRules') as Record, - ...val, - }), + $resolve: async (val, get) => { + return { + ...await get('routeRules'), + ...(val && typeof val === 'object' ? val : {}), + } + }, }, }, diff --git a/packages/schema/src/config/postcss.ts b/packages/schema/src/config/postcss.ts index 573fcefb73..afd794dafd 100644 --- a/packages/schema/src/config/postcss.ts +++ b/packages/schema/src/config/postcss.ts @@ -1,4 +1,4 @@ -import { defineUntypedSchema } from 'untyped' +import { defineResolvers } from '../utils/definition' const ensureItemIsLast = (item: string) => (arr: string[]) => { const index = arr.indexOf(item) @@ -17,7 +17,7 @@ const orderPresets = { }, } -export default defineUntypedSchema({ +export default defineResolvers({ postcss: { /** * A strategy for ordering PostCSS plugins. @@ -25,14 +25,20 @@ export default defineUntypedSchema({ * @type {'cssnanoLast' | 'autoprefixerLast' | 'autoprefixerAndCssnanoLast' | string[] | ((names: string[]) => string[])} */ order: { - $resolve: (val: string | string[] | ((plugins: string[]) => string[])): string[] | ((plugins: string[]) => string[]) => { + $resolve: (val) => { if (typeof val === 'string') { if (!(val in orderPresets)) { throw new Error(`[nuxt] Unknown PostCSS order preset: ${val}`) } return orderPresets[val as keyof typeof orderPresets] } - return val ?? orderPresets.autoprefixerAndCssnanoLast + if (typeof val === 'function') { + return val as (names: string[]) => string[] + } + if (Array.isArray(val)) { + return val + } + return orderPresets.autoprefixerAndCssnanoLast }, }, /** diff --git a/packages/schema/src/config/router.ts b/packages/schema/src/config/router.ts index 5365829177..b9b8b574e7 100644 --- a/packages/schema/src/config/router.ts +++ b/packages/schema/src/config/router.ts @@ -1,6 +1,6 @@ -import { defineUntypedSchema } from 'untyped' +import { defineResolvers } from '../utils/definition' -export default defineUntypedSchema({ +export default defineResolvers({ router: { /** * Additional router options passed to `vue-router`. On top of the options for `vue-router`, diff --git a/packages/schema/src/config/typescript.ts b/packages/schema/src/config/typescript.ts index 9c334040bd..be6ccf3d42 100644 --- a/packages/schema/src/config/typescript.ts +++ b/packages/schema/src/config/typescript.ts @@ -1,6 +1,6 @@ -import { defineUntypedSchema } from 'untyped' +import { defineResolvers } from '../utils/definition' -export default defineUntypedSchema({ +export default defineResolvers({ /** * Configuration for Nuxt's TypeScript integration. * @@ -23,7 +23,17 @@ export default defineUntypedSchema({ * @type {'vite' | 'webpack' | 'rspack' | 'shared' | false | undefined} */ builder: { - $resolve: val => val ?? null, + $resolve: (val) => { + const validBuilderTypes = ['vite', 'webpack', 'rspack', 'shared'] as const + type ValidBuilderType = typeof validBuilderTypes[number] + if (typeof val === 'string' && validBuilderTypes.includes(val as ValidBuilderType)) { + return val as ValidBuilderType + } + if (val === false) { + return false + } + return undefined + }, }, /** diff --git a/packages/schema/src/config/vite.ts b/packages/schema/src/config/vite.ts index 9d49537a12..0f3d04dbba 100644 --- a/packages/schema/src/config/vite.ts +++ b/packages/schema/src/config/vite.ts @@ -1,10 +1,9 @@ import { consola } from 'consola' import { resolve } from 'pathe' import { isTest } from 'std-env' -import { defineUntypedSchema } from 'untyped' -import type { NuxtDebugOptions } from '../types/debug' +import { defineResolvers } from '../utils/definition' -export default defineUntypedSchema({ +export default defineResolvers({ /** * Configuration that will be passed directly to Vite. * @@ -14,22 +13,21 @@ export default defineUntypedSchema({ */ vite: { root: { - $resolve: async (val, get) => val ?? (await get('srcDir')), + $resolve: async (val, get) => typeof val === 'string' ? val : (await get('srcDir')), }, mode: { - $resolve: async (val, get) => val ?? (await get('dev') ? 'development' : 'production'), + $resolve: async (val, get) => typeof val === 'string' ? val : (await get('dev') ? 'development' : 'production'), }, define: { - $resolve: async (val: Record | undefined, get) => { - const [isDev, debug] = await Promise.all([get('dev'), get('debug')]) as [boolean, boolean | NuxtDebugOptions] - + $resolve: async (_val, get) => { + const [isDev, isDebug] = await Promise.all([get('dev'), get('debug')]) return { - '__VUE_PROD_HYDRATION_MISMATCH_DETAILS__': Boolean(debug && (debug === true || debug.hydration)), + '__VUE_PROD_HYDRATION_MISMATCH_DETAILS__': Boolean(isDebug && (isDebug === true || isDebug.hydration)), 'process.dev': isDev, 'import.meta.dev': isDev, 'process.test': isTest, 'import.meta.test': isTest, - ...val, + ..._val && typeof _val === 'object' ? _val : {}, } }, }, @@ -37,6 +35,7 @@ export default defineUntypedSchema({ extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'], }, publicDir: { + // @ts-expect-error this is missing from our `vite` types deliberately, so users do not configure it $resolve: (val) => { 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/nuxt-config#public`.') @@ -46,46 +45,51 @@ export default defineUntypedSchema({ }, vue: { isProduction: { - $resolve: async (val, get) => val ?? !(await get('dev')), + $resolve: async (val, get) => typeof val === 'boolean' ? val : !(await get('dev')), }, template: { compilerOptions: { - $resolve: async (val, get) => val ?? (await get('vue') as Record).compilerOptions, + $resolve: async (val, get) => val ?? (await get('vue')).compilerOptions, }, transformAssetUrls: { - $resolve: async (val, get) => val ?? (await get('vue') as Record).transformAssetUrls, + $resolve: async (val, get) => val ?? (await get('vue')).transformAssetUrls, }, }, script: { hoistStatic: { - $resolve: async (val, get) => val ?? (await get('vue') as Record).compilerOptions?.hoistStatic, + $resolve: async (val, get) => typeof val === 'boolean' ? val : (await get('vue')).compilerOptions?.hoistStatic, }, }, features: { propsDestructure: { $resolve: async (val, get) => { - if (val !== undefined && val !== null) { + if (typeof val === 'boolean') { return val } - const vueOptions = await get('vue') as Record || {} - return Boolean(vueOptions.script?.propsDestructure ?? vueOptions.propsDestructure) + const vueOptions = await get('vue') || {} + return Boolean( + // @ts-expect-error TODO: remove in future: supporting a legacy schema + vueOptions.script?.propsDestructure + ?? vueOptions.propsDestructure, + ) }, }, }, }, vueJsx: { - $resolve: async (val: Record, get) => { + $resolve: async (val, get) => { return { - isCustomElement: (await get('vue') as Record).compilerOptions?.isCustomElement, - ...val, + // TODO: investigate type divergence between types for @vue/compiler-core and @vue/babel-plugin-jsx + isCustomElement: (await get('vue')).compilerOptions?.isCustomElement as undefined | ((tag: string) => boolean), + ...typeof val === 'object' ? val : {}, } }, }, optimizeDeps: { exclude: { - $resolve: async (val: string[] | undefined, get) => [ - ...val || [], - ...(await get('build.transpile') as Array string | RegExp | false)>).filter(i => typeof i === 'string'), + $resolve: async (val, get) => [ + ...Array.isArray(val) ? val : [], + ...(await get('build.transpile')).filter(i => typeof i === 'string'), 'vue-demi', ], }, @@ -98,29 +102,29 @@ export default defineUntypedSchema({ clearScreen: true, build: { assetsDir: { - $resolve: async (val, get) => val ?? (await get('app') as Record).buildAssetsDir?.replace(/^\/+/, ''), + $resolve: async (val, get) => typeof val === 'string' ? val : (await get('app')).buildAssetsDir?.replace(/^\/+/, ''), }, emptyOutDir: false, }, server: { fs: { allow: { - $resolve: async (val: string[] | undefined, get) => { - const [buildDir, srcDir, rootDir, workspaceDir, modulesDir] = await Promise.all([get('buildDir'), get('srcDir'), get('rootDir'), get('workspaceDir'), get('modulesDir')]) as [string, string, string, string, string] + $resolve: async (val, get) => { + const [buildDir, srcDir, rootDir, workspaceDir, modulesDir] = await Promise.all([get('buildDir'), get('srcDir'), get('rootDir'), get('workspaceDir'), get('modulesDir')]) return [...new Set([ buildDir, srcDir, rootDir, workspaceDir, ...(modulesDir), - ...val ?? [], + ...Array.isArray(val) ? val : [], ])] }, }, }, }, cacheDir: { - $resolve: async (val, get) => val ?? resolve(await get('rootDir') as string, 'node_modules/.cache/vite'), + $resolve: async (val, get) => typeof val === 'string' ? val : resolve(await get('rootDir'), 'node_modules/.cache/vite'), }, }, }) diff --git a/packages/schema/src/config/webpack.ts b/packages/schema/src/config/webpack.ts index ee4d94843d..86f78af662 100644 --- a/packages/schema/src/config/webpack.ts +++ b/packages/schema/src/config/webpack.ts @@ -1,8 +1,7 @@ import { defu } from 'defu' -import { defineUntypedSchema } from 'untyped' -import type { VueLoaderOptions } from 'vue-loader' +import { defineResolvers } from '../utils/definition' -export default defineUntypedSchema({ +export default defineResolvers({ webpack: { /** * Nuxt uses `webpack-bundle-analyzer` to visualize your bundles and how to optimize them. @@ -17,8 +16,8 @@ export default defineUntypedSchema({ * @type {boolean | { enabled?: boolean } & typeof import('webpack-bundle-analyzer').BundleAnalyzerPlugin.Options} */ analyze: { - $resolve: async (val: boolean | { enabled?: boolean } | Record, get) => { - const value = typeof val === 'boolean' ? { enabled: val } : val + $resolve: async (val, get) => { + const value = typeof val === 'boolean' ? { enabled: val } : (val && typeof val === 'object' ? val : {}) return defu(value, await get('build.analyze') as { enabled?: boolean } | Record) }, }, @@ -83,7 +82,7 @@ export default defineUntypedSchema({ * Enables CSS source map support (defaults to `true` in development). */ cssSourceMap: { - $resolve: async (val, get) => val ?? await get('dev'), + $resolve: async (val, get) => typeof val === 'boolean' ? val : await get('dev'), }, /** @@ -147,7 +146,10 @@ export default defineUntypedSchema({ for (const name of styleLoaders) { const loader = loaders[name] if (loader && loader.sourceMap === undefined) { - loader.sourceMap = Boolean(await get('build.cssSourceMap')) + loader.sourceMap = Boolean( + // @ts-expect-error TODO: remove legacay configuration + await get('build.cssSourceMap'), + ) } } return loaders @@ -165,30 +167,27 @@ export default defineUntypedSchema({ /** * @see [`file-loader` Options](https://github.com/webpack-contrib/file-loader#options) - * @type {Omit} * @default * ```ts * { esModule: false } * ``` */ - file: { esModule: false }, + file: { esModule: false, limit: 1000 }, /** * @see [`file-loader` Options](https://github.com/webpack-contrib/file-loader#options) - * @type {Omit} * @default * ```ts - * { esModule: false, limit: 1000 } + * { esModule: false } * ``` */ fontUrl: { esModule: false, limit: 1000 }, /** * @see [`file-loader` Options](https://github.com/webpack-contrib/file-loader#options) - * @type {Omit} * @default * ```ts - * { esModule: false, limit: 1000 } + * { esModule: false } * ``` */ imgUrl: { esModule: false, limit: 1000 }, @@ -205,26 +204,38 @@ export default defineUntypedSchema({ */ vue: { transformAssetUrls: { - $resolve: async (val, get) => (val ?? (await get('vue.transformAssetUrls'))) as VueLoaderOptions['transformAssetUrls'], + $resolve: async (val, get) => (val ?? (await get('vue.transformAssetUrls'))), }, compilerOptions: { - $resolve: async (val, get) => (val ?? (await get('vue.compilerOptions'))) as VueLoaderOptions['compilerOptions'], + $resolve: async (val, get) => (val ?? (await get('vue.compilerOptions'))), }, propsDestructure: { $resolve: async (val, get) => Boolean(val ?? await get('vue.propsDestructure')), }, - } satisfies { [K in keyof VueLoaderOptions]: { $resolve: (val: unknown, get: (id: string) => Promise) => Promise } }, + }, + /** + * See [css-loader](https://github.com/webpack-contrib/css-loader) for available options. + */ css: { importLoaders: 0, + /** + * @type {boolean | { filter: (url: string, resourcePath: string) => boolean }} + */ url: { filter: (url: string, _resourcePath: string) => url[0] !== '/', }, esModule: false, }, + /** + * See [css-loader](https://github.com/webpack-contrib/css-loader) for available options. + */ cssModules: { importLoaders: 0, + /** + * @type {boolean | { filter: (url: string, resourcePath: string) => boolean }} + */ url: { filter: (url: string, _resourcePath: string) => url[0] !== '/', }, @@ -241,7 +252,6 @@ export default defineUntypedSchema({ /** * @see [`sass-loader` Options](https://github.com/webpack-contrib/sass-loader#options) - * @type {typeof import('sass-loader')['Options']} * @default * ```ts * { @@ -259,7 +269,6 @@ export default defineUntypedSchema({ /** * @see [`sass-loader` Options](https://github.com/webpack-contrib/sass-loader#options) - * @type {typeof import('sass-loader')['Options']} */ scss: {}, @@ -300,7 +309,14 @@ export default defineUntypedSchema({ * @type {false | typeof import('css-minimizer-webpack-plugin').BasePluginOptions & typeof import('css-minimizer-webpack-plugin').DefinedDefaultMinimizerAndOptions} */ optimizeCSS: { - $resolve: async (val, get) => val ?? (await get('build.extractCSS') ? {} : false), + $resolve: async (val, get) => { + if (val === false || (val && typeof val === 'object')) { + return val + } + // @ts-expect-error TODO: remove legacy configuration + const extractCSS = await get('build.extractCSS') + return extractCSS ? {} : false + }, }, /** @@ -310,7 +326,9 @@ export default defineUntypedSchema({ optimization: { runtimeChunk: 'single', /** Set minimize to `false` to disable all minimizers. (It is disabled in development by default). */ - minimize: { $resolve: async (val, get) => val ?? !(await get('dev')) }, + minimize: { + $resolve: async (val, get) => typeof val === 'boolean' ? val : !(await get('dev')), + }, /** You can set minimizer to a customized array of plugins. */ minimizer: undefined, splitChunks: { @@ -323,15 +341,12 @@ export default defineUntypedSchema({ /** * Customize PostCSS Loader. * same options as [`postcss-loader` options](https://github.com/webpack-contrib/postcss-loader#options) - * @type {{ execute?: boolean, postcssOptions: typeof import('postcss').ProcessOptions, sourceMap?: boolean, implementation?: any }} + * @type {{ execute?: boolean, postcssOptions: typeof import('postcss').ProcessOptions & { plugins: Record & { autoprefixer?: typeof import('autoprefixer').Options; cssnano?: typeof import('cssnano').Options } }, sourceMap?: boolean, implementation?: any }} */ postcss: { postcssOptions: { - config: { - $resolve: async (val, get) => val ?? (await get('postcss.config')), - }, plugins: { - $resolve: async (val, get) => val ?? (await get('postcss.plugins')), + $resolve: async (val, get) => val && typeof val === 'object' ? val : (await get('postcss.plugins')), }, }, }, diff --git a/packages/schema/src/types/module.ts b/packages/schema/src/types/module.ts index 532308f5a3..1a621e12f2 100644 --- a/packages/schema/src/types/module.ts +++ b/packages/schema/src/types/module.ts @@ -21,6 +21,12 @@ export interface ModuleMeta { */ compatibility?: NuxtCompatibility + /** + * Fully resolved path used internally by Nuxt. Do not depend on this value. + * @internal + */ + rawPath?: string + [key: string]: unknown } diff --git a/packages/schema/src/utils/definition.ts b/packages/schema/src/utils/definition.ts new file mode 100644 index 0000000000..cf316f240d --- /dev/null +++ b/packages/schema/src/utils/definition.ts @@ -0,0 +1,56 @@ +import type { InputObject } from 'untyped' + +import { defineUntypedSchema } from 'untyped' + +import type { ConfigSchema } from '../../schema/config' + +type KeysOf = keyof T extends string + ? + { + [K in keyof T]: K extends string + ? string extends K + ? never // exclude generic 'string' type + : unknown extends Prefix + ? `${K | KeysOf}` + : Prefix extends string + ? `${Prefix}.${K | KeysOf}` + : never + : never + }[keyof T] + : never + +type ReturnFromKey = keyof T extends string + ? K extends keyof T + ? T[K] + : K extends `${keyof T}.${string}` + ? K extends `${infer Prefix}.${string}` + ? Prefix extends keyof T + ? K extends `${Prefix}.${infer Suffix}` + ? ReturnFromKey + : never + : never + : never + : never + : never + +type Awaitable = T | Promise + +interface Resolvers { + $resolve: (val: unknown, get: >(key: K) => Promise>) => Awaitable + $schema?: InputObject['$schema'] + $default?: ReturnValue +} + +type Resolvable = keyof Exclude, boolean | string | (() => any)> extends string + ? { + [K in keyof Namespace]: Partial> | Resolvers + } | Namespace + : Namespace | Resolvers + +export function defineResolvers>> (config: C) { + return defineUntypedSchema(config) /* as C */ +} + +export type ResolvableConfigSchema = Partial> + +export { defineUntypedSchema } from 'untyped' diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 124cf6657c..5a4d9da1cd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -705,6 +705,15 @@ importers: '@types/pug': specifier: 2.0.10 version: 2.0.10 + '@types/rollup-plugin-visualizer': + specifier: 4.2.4 + version: 4.2.4 + '@types/webpack-bundle-analyzer': + specifier: 4.7.0 + version: 4.7.0 + '@types/webpack-hot-middleware': + specifier: 2.25.9 + version: 2.25.9 '@unhead/schema': specifier: 1.11.18 version: 1.11.18 @@ -732,6 +741,9 @@ importers: compatx: specifier: 0.1.8 version: 0.1.8 + css-minimizer-webpack-plugin: + specifier: 7.0.0 + version: 7.0.0(webpack@5.97.1) esbuild-loader: specifier: 4.2.2 version: 4.2.2(webpack@5.97.1) @@ -747,6 +759,9 @@ importers: ignore: specifier: 7.0.3 version: 7.0.3 + mini-css-extract-plugin: + specifier: 2.9.2 + version: 2.9.2(webpack@5.97.1) nitro: specifier: npm:nitro-nightly@3.0.0-beta-28969273.f7aa9de6 version: nitro-nightly@3.0.0-beta-28969273.f7aa9de6(typescript@5.7.3) @@ -756,6 +771,9 @@ importers: pkg-types: specifier: 1.3.1 version: 1.3.1 + postcss: + specifier: 8.5.1 + version: 8.5.1 sass-loader: specifier: 16.0.4 version: 16.0.4(@rspack/core@1.2.2)(webpack@5.97.1) @@ -2974,6 +2992,9 @@ packages: '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + '@types/rollup-plugin-visualizer@4.2.4': + resolution: {integrity: sha512-BW4Q6D1Qy5gno5qHWrnMDC2dOe/TAKXvqCpckOggCCu+XpS+ZZJJ1lq1+K3bvYccoO3Y7f5kglbFAgYGqCgULg==} + '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} @@ -9909,6 +9930,10 @@ snapshots: '@types/resolve@1.20.2': {} + '@types/rollup-plugin-visualizer@4.2.4': + dependencies: + rollup: 4.34.6 + '@types/semver@7.5.8': {} '@types/unist@2.0.11': {} From 72d524b25e6f0e806d41198855e0d1286f53dd2e Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Mon, 10 Feb 2025 16:40:15 +0000 Subject: [PATCH 06/18] fix(vite): use `resolveId` from `vite-node` to resolve deps (#30922) --- packages/vite/package.json | 1 - packages/vite/src/runtime/vite-node.mjs | 3 + packages/vite/src/utils/external.ts | 36 ---------- packages/vite/src/vite-node.ts | 89 ++++++++++++------------- pnpm-lock.yaml | 13 ---- 5 files changed, 45 insertions(+), 97 deletions(-) delete mode 100644 packages/vite/src/utils/external.ts diff --git a/packages/vite/package.json b/packages/vite/package.json index c8683d5821..68a333de5e 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -41,7 +41,6 @@ "defu": "^6.1.4", "esbuild": "^0.25.0", "escape-string-regexp": "^5.0.0", - "externality": "^1.0.2", "get-port-please": "^3.1.2", "h3": "npm:h3-nightly@1.14.0-20250122-114730-3f9e703", "jiti": "^2.4.2", diff --git a/packages/vite/src/runtime/vite-node.mjs b/packages/vite/src/runtime/vite-node.mjs index bc2da0c41d..59a54ab182 100644 --- a/packages/vite/src/runtime/vite-node.mjs +++ b/packages/vite/src/runtime/vite-node.mjs @@ -39,6 +39,9 @@ function createRunner () { return new ViteNodeRunner({ root: viteNodeOptions.root, // Equals to Nuxt `srcDir` base: viteNodeOptions.base, + async resolveId (id, importer) { + return await viteNodeFetch('/resolve/' + encodeURIComponent(id) + (importer ? '?importer=' + encodeURIComponent(importer) : '')) ?? undefined + }, async fetchModule (id) { id = id.replace(/\/\//g, '/') // TODO: fix in vite-node return await viteNodeFetch('/module/' + encodeURI(id)).catch((err) => { diff --git a/packages/vite/src/utils/external.ts b/packages/vite/src/utils/external.ts deleted file mode 100644 index c6889cb3a1..0000000000 --- a/packages/vite/src/utils/external.ts +++ /dev/null @@ -1,36 +0,0 @@ -import type { ExternalsOptions } from 'externality' -import { ExternalsDefaults, isExternal } from 'externality' -import type { ViteDevServer } from 'vite' -import escapeStringRegexp from 'escape-string-regexp' -import { withTrailingSlash } from 'ufo' -import type { Nuxt } from 'nuxt/schema' -import { resolve } from 'pathe' -import { toArray } from '.' - -export function createIsExternal (viteServer: ViteDevServer, nuxt: Nuxt) { - const externalOpts: ExternalsOptions = { - inline: [ - /virtual:/, - /\.ts$/, - ...ExternalsDefaults.inline || [], - ...( - viteServer.config.ssr.noExternal && viteServer.config.ssr.noExternal !== true - ? toArray(viteServer.config.ssr.noExternal) - : [] - ), - ], - external: [ - '#shared', - new RegExp('^' + escapeStringRegexp(withTrailingSlash(resolve(nuxt.options.rootDir, nuxt.options.dir.shared)))), - ...(viteServer.config.ssr.external as string[]) || [], - /node_modules/, - ], - resolve: { - modules: nuxt.options.modulesDir, - type: 'module', - extensions: ['.ts', '.js', '.json', '.vue', '.mjs', '.jsx', '.tsx', '.wasm'], - }, - } - - return (id: string) => isExternal(id, nuxt.options.rootDir, externalOpts) -} diff --git a/packages/vite/src/vite-node.ts b/packages/vite/src/vite-node.ts index 9d0892f139..1f18dd3672 100644 --- a/packages/vite/src/vite-node.ts +++ b/packages/vite/src/vite-node.ts @@ -1,18 +1,16 @@ import { mkdir, writeFile } from 'node:fs/promises' import { pathToFileURL } from 'node:url' -import { createApp, createError, defineEventHandler, defineLazyEventHandler, eventHandler, toNodeListener } from 'h3' +import { createApp, createError, defineEventHandler, toNodeListener } from 'h3' import { ViteNodeServer } from 'vite-node/server' import { isAbsolute, join, normalize, resolve } from 'pathe' // import { addDevServerHandler } from '@nuxt/kit' import { isFileServingAllowed } from 'vite' -import type { ModuleNode, Plugin as VitePlugin } from 'vite' +import type { ModuleNode, ViteDevServer, Plugin as VitePlugin } from 'vite' import { getQuery } from 'ufo' import { normalizeViteManifest } from 'vue-bundle-renderer' -import { resolve as resolveModule } from 'mlly' import { distDir } from './dirs' import type { ViteBuildContext } from './vite' import { isCSS } from './utils' -import { createIsExternal } from './utils/external' // TODO: Remove this in favor of registerViteNodeMiddleware // after Nitropack or h3 allows adding middleware after setup @@ -101,6 +99,19 @@ function getManifest (ctx: ViteBuildContext) { function createViteNodeApp (ctx: ViteBuildContext, invalidates: Set = new Set()) { const app = createApp() + let _node: ViteNodeServer | undefined + function getNode (server: ViteDevServer) { + return _node ||= new ViteNodeServer(server, { + deps: { + inline: [/^#/, /\?/], + }, + transformMode: { + ssr: [/.*/], + web: [], + }, + }) + } + app.use('/manifest', defineEventHandler(() => { const manifest = getManifest(ctx) return manifest @@ -112,54 +123,38 @@ function createViteNodeApp (ctx: ViteBuildContext, invalidates: Set = ne return ids })) - app.use('/module', defineLazyEventHandler(() => { - const viteServer = ctx.ssrServer! - const node = new ViteNodeServer(viteServer, { - deps: { - inline: [ - // Common - /^#/, - /\?/, - ], - }, - transformMode: { - ssr: [/.*/], - web: [], - }, - }) - - const isExternal = createIsExternal(viteServer, ctx.nuxt) - node.shouldExternalize = async (id: string) => { - const result = await isExternal(id) - if (result?.external) { - return resolveModule(result.id, { url: ctx.nuxt.options.modulesDir }).catch(() => false) - } - return false + const RESOLVE_RE = /^\/(?[^?]+)(?:\?importer=(?.*))?$/ + app.use('/resolve', defineEventHandler(async (event) => { + const { id, importer } = event.path.match(RESOLVE_RE)?.groups || {} + if (!id || !ctx.ssrServer) { + throw createError({ statusCode: 400 }) } + return await getNode(ctx.ssrServer).resolveId(decodeURIComponent(id), importer ? decodeURIComponent(importer) : undefined).catch(() => null) + })) - return eventHandler(async (event) => { - const moduleId = decodeURI(event.path).substring(1) - if (moduleId === '/') { - throw createError({ statusCode: 400 }) + app.use('/module', defineEventHandler(async (event) => { + const moduleId = decodeURI(event.path).substring(1) + if (moduleId === '/' || !ctx.ssrServer) { + throw createError({ statusCode: 400 }) + } + if (isAbsolute(moduleId) && !isFileServingAllowed(ctx.ssrServer.config, moduleId)) { + throw createError({ statusCode: 403 /* Restricted */ }) + } + const node = getNode(ctx.ssrServer) + const module = await node.fetchModule(moduleId).catch(async (err) => { + const errorData = { + code: 'VITE_ERROR', + id: moduleId, + stack: '', + ...err, } - if (isAbsolute(moduleId) && !isFileServingAllowed(moduleId, viteServer)) { - throw createError({ statusCode: 403 /* Restricted */ }) - } - const module = await node.fetchModule(moduleId).catch(async (err) => { - const errorData = { - code: 'VITE_ERROR', - id: moduleId, - stack: '', - ...err, - } - if (!errorData.frame && errorData.code === 'PARSE_ERROR') { - errorData.frame = await node.transformModule(moduleId, 'web').then(({ code }) => `${err.message || ''}\n${code}`).catch(() => undefined) - } - throw createError({ data: errorData }) - }) - return module + if (!errorData.frame && errorData.code === 'PARSE_ERROR') { + errorData.frame = await node.transformModule(moduleId, 'web').then(({ code }) => `${err.message || ''}\n${code}`).catch(() => undefined) + } + throw createError({ data: errorData }) }) + return module })) return app diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5a4d9da1cd..4d7038e633 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -891,9 +891,6 @@ importers: escape-string-regexp: specifier: ^5.0.0 version: 5.0.0 - externality: - specifier: ^1.0.2 - version: 1.0.2 get-port-please: specifier: ^3.1.2 version: 3.1.2 @@ -4580,9 +4577,6 @@ packages: extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - externality@1.0.2: - resolution: {integrity: sha512-LyExtJWKxtgVzmgtEHyQtLFpw1KFhQphF9nTG8TpAIVkiI/xQ3FJh75tRFLYl4hkn7BNIIdLJInuDAavX35pMw==} - fake-indexeddb@6.0.0: resolution: {integrity: sha512-YEboHE5VfopUclOck7LncgIqskAqnv4q0EWbYCaxKKjAvO93c+TJIaBuGy8CBFdbg9nKdpN3AuPRwVBJ4k7NrQ==} engines: {node: '>=18'} @@ -11933,13 +11927,6 @@ snapshots: extend@3.0.2: {} - externality@1.0.2: - dependencies: - enhanced-resolve: 5.18.0 - mlly: 1.7.4 - pathe: 1.1.2 - ufo: 1.5.4 - fake-indexeddb@6.0.0: {} fast-deep-equal@3.1.3: {} From 763450c93d5ff3f526b9353d344b1b515f08332c Mon Sep 17 00:00:00 2001 From: David Marr <44376+marr@users.noreply.github.com> Date: Mon, 10 Feb 2025 11:50:24 -0500 Subject: [PATCH 07/18] docs: fix typo and improve data fetching examples (#30935) --- docs/1.getting-started/6.data-fetching.md | 25 +++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/docs/1.getting-started/6.data-fetching.md b/docs/1.getting-started/6.data-fetching.md index c82f5ca2f8..36fc5102ac 100644 --- a/docs/1.getting-started/6.data-fetching.md +++ b/docs/1.getting-started/6.data-fetching.md @@ -90,22 +90,35 @@ Read more about `$fetch`. ### Pass Client Headers to the API -During server-side-rendering, since the `$fetch` request takes place 'internally' within the server, it won't include the user's browser cookies. +When calling `useFetch` on the server, Nuxt will use [`useRequestFetch`](/docs/api/composables/use-request-fetch) to proxy client headers and cookies (with the exception of headers not meant to be forwarded, like `host`). -We can use [`useRequestHeaders`](/docs/api/composables/use-request-headers) to access and proxy cookies to the API from server-side. +```vue + +``` -The example below adds the request headers to an isomorphic `$fetch` call to ensure that the API endpoint has access to the same `cookie` header originally sent by the user. +```ts +// /api/echo.ts +export default defineEventHandler(event => parseCookies(event)) +``` + +Alternatively, the example below shows how to use [`useRequestHeaders`](/docs/api/composables/use-request-headers) to access and send cookies to the API from a server-side request (originating on the client). Using an isomorphic `$fetch` call, we ensure that the API endpoint has access to the same `cookie` header originally sent by the user's browser. This is only necessary if you aren't using `useFetch`. ```vue ``` +::tip +You can also use [`useRequestFetch`](/docs/api/composables/use-request-fetch) to proxy headers to the call automatically. +:: + ::caution Be very careful before proxying headers to an external API and just include headers that you need. Not all headers are safe to be bypassed and might introduce unwanted behavior. Here is a list of common headers that are NOT to be proxied: @@ -115,10 +128,6 @@ Be very careful before proxying headers to an external API and just include head - `cf-connecting-ip`, `cf-ray` :: -::tip -You can also use [`useRequestFetch`](/docs/api/composables/use-request-fetch) to proxy headers to the call automatically. -:: - ## `useFetch` The [`useFetch`](/docs/api/composables/use-fetch) composable uses `$fetch` under-the-hood to make SSR-safe network calls in the setup function. From fc52ff8c08f891238009027a8a567eac02fb458b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damian=20G=C5=82owala?= Date: Mon, 10 Feb 2025 18:10:10 +0100 Subject: [PATCH 08/18] fix(nuxt): delete existing properties in app config HMR (#30918) --- packages/nuxt/src/app/config.ts | 7 +++++++ packages/nuxt/src/core/templates.ts | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/nuxt/src/app/config.ts b/packages/nuxt/src/app/config.ts index 476f828abf..4a677359cd 100644 --- a/packages/nuxt/src/app/config.ts +++ b/packages/nuxt/src/app/config.ts @@ -54,6 +54,13 @@ export function useAppConfig (): AppConfig { return nuxtApp._appConfig } +export function _replaceAppConfig (newConfig: AppConfig) { + const appConfig = useAppConfig() + + deepAssign(appConfig, newConfig) + deepDelete(appConfig, newConfig) +} + /** * Deep assign the current appConfig with the new one. * diff --git a/packages/nuxt/src/core/templates.ts b/packages/nuxt/src/core/templates.ts index d051115569..e6a10a2bbf 100644 --- a/packages/nuxt/src/core/templates.ts +++ b/packages/nuxt/src/core/templates.ts @@ -437,12 +437,12 @@ import { defuFn } from 'defu' const inlineConfig = ${JSON.stringify(nuxt.options.appConfig, null, 2)} /** client **/ -import { updateAppConfig } from '#app/config' +import { _replaceAppConfig } from '#app/config' // Vite - webpack is handled directly in #app/config if (import.meta.dev && !import.meta.nitro && import.meta.hot) { import.meta.hot.accept((newModule) => { - updateAppConfig(newModule.default) + _replaceAppConfig(newModule.default) }) } /** client-end **/ From 433a7e44955d27502b4a8759d2930a2debe29f62 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Mon, 10 Feb 2025 19:16:36 +0000 Subject: [PATCH 09/18] feat(kit,nuxt,schema): support experimental decorators syntax (#27672) --- .../1.experimental-features.md | 38 +++++ packages/kit/src/template.ts | 10 ++ .../nuxt/src/core/plugins/plugin-metadata.ts | 3 +- packages/nuxt/src/core/plugins/prehydrate.ts | 3 +- packages/nuxt/src/core/utils/parse.ts | 19 +-- packages/nuxt/src/pages/route-rules.ts | 3 +- packages/nuxt/src/pages/utils.ts | 3 +- packages/schema/build.config.ts | 1 + packages/schema/package.json | 1 + packages/schema/src/config/esbuild.ts | 32 ++++ packages/schema/src/config/experimental.ts | 6 + packages/schema/src/config/index.ts | 2 + packages/schema/src/config/vite.ts | 10 +- packages/schema/src/config/webpack.ts | 6 +- pnpm-lock.yaml | 143 ++++++++++++++++-- test/basic.test.ts | 10 +- test/fixtures/basic/nuxt.config.ts | 1 + .../basic/pages/experimental/decorators.vue | 26 ++++ .../server/api/experimental/decorators.ts | 14 ++ 19 files changed, 291 insertions(+), 40 deletions(-) create mode 100644 packages/schema/src/config/esbuild.ts create mode 100644 test/fixtures/basic/pages/experimental/decorators.vue create mode 100644 test/fixtures/basic/server/api/experimental/decorators.ts 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 9a4b729e9f..1e67ba29b1 100644 --- a/docs/2.guide/3.going-further/1.experimental-features.md +++ b/docs/2.guide/3.going-further/1.experimental-features.md @@ -472,3 +472,41 @@ Alternatively, you can render the template alongside the Nuxt app root by settin ``` This avoids a white flash when hydrating a client-only page. + +## decorators + +This option enables enabling decorator syntax across your entire Nuxt/Nitro app, powered by [esbuild](https://github.com/evanw/esbuild/releases/tag/v0.21.3). + +For a long time, TypeScript has had support for decorators via `compilerOptions.experimentalDecorators`. This implementation predated the TC39 standardization process. Now, decorators are a [Stage 3 Proposal](https://github.com/tc39/proposal-decorators), and supported without special configuration in TS 5.0+ (see https://github.com/microsoft/TypeScript/pull/52582 and https://devblogs.microsoft.com/typescript/announcing-typescript-5-0-beta/#decorators). + +Enabling `experimental.decorators` enables support for the TC39 proposal, **NOT** for TypeScript's previous `compilerOptions.experimentalDecorators` implementation. + +::warning +Note that there may be changes before this finally lands in the JS standard. +:: + +### Usage + +```ts twoslash [nuxt.config.ts] +export default defineNuxtConfig({ + experimental: { + decorators: true, + }, +}) +``` + +```ts [app.vue] +function something (_method: () => unknown) { + return () => 'decorated' +} + +class SomeClass { + @something + public someMethod () { + return 'initial' + } +} + +const value = new SomeClass().someMethod() +// this will return 'decorated' +``` diff --git a/packages/kit/src/template.ts b/packages/kit/src/template.ts index 9bb78f0f28..fe9fcec825 100644 --- a/packages/kit/src/template.ts +++ b/packages/kit/src/template.ts @@ -180,6 +180,8 @@ export async function _generateTypes (nuxt: Nuxt) { .then(r => r?.version && gte(r.version, '5.4.0')) .catch(() => isV4) + const useDecorators = Boolean(nuxt.options.experimental?.decorators) + // https://www.totaltypescript.com/tsconfig-cheat-sheet const tsConfig: TSConfig = defu(nuxt.options.typescript?.tsConfig, { compilerOptions: { @@ -197,12 +199,20 @@ export async function _generateTypes (nuxt: Nuxt) { noUncheckedIndexedAccess: isV4, forceConsistentCasingInFileNames: true, noImplicitOverride: true, + /* Decorator support */ + ...useDecorators + ? { + useDefineForClassFields: false, + experimentalDecorators: false, + } + : {}, /* If NOT transpiling with TypeScript: */ module: hasTypescriptVersionWithModulePreserve ? 'preserve' : 'ESNext', noEmit: true, /* If your code runs in the DOM: */ lib: [ 'ESNext', + ...useDecorators ? ['esnext.decorators'] : [], 'dom', 'dom.iterable', 'webworker', diff --git a/packages/nuxt/src/core/plugins/plugin-metadata.ts b/packages/nuxt/src/core/plugins/plugin-metadata.ts index 69ea8069fc..7ba5cbfb1c 100644 --- a/packages/nuxt/src/core/plugins/plugin-metadata.ts +++ b/packages/nuxt/src/core/plugins/plugin-metadata.ts @@ -1,5 +1,4 @@ import type { Literal, Property, SpreadElement } from 'estree' -import { transform } from 'esbuild' import { defu } from 'defu' import { findExports } from 'mlly' import type { Nuxt } from '@nuxt/schema' @@ -8,7 +7,7 @@ import MagicString from 'magic-string' import { normalize } from 'pathe' import type { ObjectPlugin, PluginMeta } from 'nuxt/app' -import { parseAndWalk, withLocations } from '../../core/utils/parse' +import { parseAndWalk, transform, withLocations } from '../../core/utils/parse' import { logger } from '../../utils' const internalOrderMap = { diff --git a/packages/nuxt/src/core/plugins/prehydrate.ts b/packages/nuxt/src/core/plugins/prehydrate.ts index ce3a8a6e2a..24bc2e2407 100644 --- a/packages/nuxt/src/core/plugins/prehydrate.ts +++ b/packages/nuxt/src/core/plugins/prehydrate.ts @@ -1,9 +1,8 @@ -import { transform } from 'esbuild' import { createUnplugin } from 'unplugin' import MagicString from 'magic-string' import { hash } from 'ohash' -import { parseAndWalk, withLocations } from '../../core/utils/parse' +import { parseAndWalk, transform, withLocations } from '../../core/utils/parse' import { isJS, isVue } from '../utils' export function PrehydrateTransformPlugin (options: { sourcemap?: boolean } = {}) { diff --git a/packages/nuxt/src/core/utils/parse.ts b/packages/nuxt/src/core/utils/parse.ts index fb8f82e14a..95910140e8 100644 --- a/packages/nuxt/src/core/utils/parse.ts +++ b/packages/nuxt/src/core/utils/parse.ts @@ -1,22 +1,17 @@ import { walk as _walk } from 'estree-walker' import type { Node, SyncHandler } from 'estree-walker' -import type { - ArrowFunctionExpression, - CatchClause, - Program as ESTreeProgram, - FunctionDeclaration, - FunctionExpression, - Identifier, - ImportDefaultSpecifier, - ImportNamespaceSpecifier, - ImportSpecifier, - VariableDeclaration, -} from 'estree' +import type { ArrowFunctionExpression, CatchClause, Program as ESTreeProgram, FunctionDeclaration, FunctionExpression, Identifier, ImportDefaultSpecifier, ImportNamespaceSpecifier, ImportSpecifier, VariableDeclaration } from 'estree' import { parse } from 'acorn' import type { Program } from 'acorn' +import { type SameShape, type TransformOptions, type TransformResult, transform as esbuildTransform } from 'esbuild' +import { tryUseNuxt } from '@nuxt/kit' export type { Node } +export async function transform (input: string | Uint8Array, options?: SameShape): Promise> { + return await esbuildTransform(input, { ...tryUseNuxt()?.options.esbuild.options, ...options }) +} + type WithLocations = T & { start: number, end: number } type WalkerCallback = (this: ThisParameterType, node: WithLocations, parent: WithLocations | null, ctx: { key: string | number | symbol | null | undefined, index: number | null | undefined, ast: Program | Node }) => void diff --git a/packages/nuxt/src/pages/route-rules.ts b/packages/nuxt/src/pages/route-rules.ts index c9317176b2..8deb66dcdd 100644 --- a/packages/nuxt/src/pages/route-rules.ts +++ b/packages/nuxt/src/pages/route-rules.ts @@ -1,11 +1,10 @@ import { runInNewContext } from 'node:vm' -import { transform } from 'esbuild' import type { NuxtPage } from '@nuxt/schema' import type { NitroRouteConfig } from 'nitro/types' import { normalize } from 'pathe' import { getLoader } from '../core/utils' -import { parseAndWalk } from '../core/utils/parse' +import { parseAndWalk, transform } from '../core/utils/parse' import { extractScriptContent, pathToNitroGlob } from './utils' const ROUTE_RULE_RE = /\bdefineRouteRules\(/ diff --git a/packages/nuxt/src/pages/utils.ts b/packages/nuxt/src/pages/utils.ts index 4baea41fac..e131d24c3c 100644 --- a/packages/nuxt/src/pages/utils.ts +++ b/packages/nuxt/src/pages/utils.ts @@ -7,12 +7,11 @@ import { genArrayFromRaw, genDynamicImport, genImport, genSafeVariableName } fro import escapeRE from 'escape-string-regexp' import { filename } from 'pathe/utils' import { hash } from 'ohash' -import { transform } from 'esbuild' import type { Property } from 'estree' import type { NuxtPage } from 'nuxt/schema' import { klona } from 'klona' -import { parseAndWalk, withLocations } from '../core/utils/parse' +import { parseAndWalk, transform, withLocations } from '../core/utils/parse' import { getLoader, uniqueBy } from '../core/utils' import { logger, toArray } from '../utils' diff --git a/packages/schema/build.config.ts b/packages/schema/build.config.ts index c78328916c..7e920ba419 100644 --- a/packages/schema/build.config.ts +++ b/packages/schema/build.config.ts @@ -39,6 +39,7 @@ export default defineBuildConfig({ 'consola', 'css-minimizer-webpack-plugin', 'cssnano', + 'esbuild', 'esbuild-loader', 'file-loader', 'h3', diff --git a/packages/schema/package.json b/packages/schema/package.json index c18d637926..7713ed1771 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -50,6 +50,7 @@ "chokidar": "4.0.3", "compatx": "0.1.8", "css-minimizer-webpack-plugin": "7.0.0", + "esbuild": "0.25.0", "esbuild-loader": "4.2.2", "file-loader": "6.2.0", "h3": "npm:h3-nightly@1.14.0-20250122-114730-3f9e703", diff --git a/packages/schema/src/config/esbuild.ts b/packages/schema/src/config/esbuild.ts new file mode 100644 index 0000000000..e675dc74ba --- /dev/null +++ b/packages/schema/src/config/esbuild.ts @@ -0,0 +1,32 @@ +import { defu } from 'defu' +import type { TransformOptions } from 'esbuild' +import { defineResolvers } from '../utils/definition' + +export default defineResolvers({ + esbuild: { + /** + * Configure shared esbuild options used within Nuxt and passed to other builders, such as Vite or Webpack. + * @type {import('esbuild').TransformOptions} + */ + options: { + jsxFactory: 'h', + jsxFragment: 'Fragment', + tsconfigRaw: { + $resolve: async (_val, get) => { + const val: NonNullable> = typeof _val === 'string' ? JSON.parse(_val) : (_val && typeof _val === 'object' ? _val : {}) + + const useDecorators = await get('experimental').then(r => r?.decorators === true) + if (!useDecorators) { + return val + } + return defu(val, { + compilerOptions: { + useDefineForClassFields: false, + experimentalDecorators: false, + }, + } satisfies TransformOptions['tsconfigRaw']) + }, + }, + }, + }, +}) diff --git a/packages/schema/src/config/experimental.ts b/packages/schema/src/config/experimental.ts index 9e35960269..d7fa131968 100644 --- a/packages/schema/src/config/experimental.ts +++ b/packages/schema/src/config/experimental.ts @@ -103,6 +103,12 @@ export default defineResolvers({ }, }, experimental: { + /** + * Enable to use experimental decorators in Nuxt and Nitro. + * + * @see https://github.com/tc39/proposal-decorators + */ + decorators: false, /** * Set to true to generate an async entry point for the Vue bundle (for module federation support). */ diff --git a/packages/schema/src/config/index.ts b/packages/schema/src/config/index.ts index c35253fe7c..225f0bcf97 100644 --- a/packages/schema/src/config/index.ts +++ b/packages/schema/src/config/index.ts @@ -5,6 +5,7 @@ import app from './app' import build from './build' import common from './common' import dev from './dev' +import esbuild from './esbuild' import experimental from './experimental' import generate from './generate' import internal from './internal' @@ -28,6 +29,7 @@ export default { ...postcss, ...router, ...typescript, + ...esbuild, ...vite, ...webpack, } satisfies ResolvableConfigSchema diff --git a/packages/schema/src/config/vite.ts b/packages/schema/src/config/vite.ts index 0f3d04dbba..0a19108fde 100644 --- a/packages/schema/src/config/vite.ts +++ b/packages/schema/src/config/vite.ts @@ -1,4 +1,5 @@ import { consola } from 'consola' +import defu from 'defu' import { resolve } from 'pathe' import { isTest } from 'std-env' import { defineResolvers } from '../utils/definition' @@ -86,6 +87,9 @@ export default defineResolvers({ }, }, optimizeDeps: { + esbuildOptions: { + $resolve: async (val, get) => defu(val && typeof val === 'object' ? val : {}, await get('esbuild.options')), + }, exclude: { $resolve: async (val, get) => [ ...Array.isArray(val) ? val : [], @@ -95,9 +99,9 @@ export default defineResolvers({ }, }, esbuild: { - jsxFactory: 'h', - jsxFragment: 'Fragment', - tsconfigRaw: '{}', + $resolve: async (val, get) => { + return defu(val && typeof val === 'object' ? val : {}, await get('esbuild.options')) + }, }, clearScreen: true, build: { diff --git a/packages/schema/src/config/webpack.ts b/packages/schema/src/config/webpack.ts index 86f78af662..810c0c1cae 100644 --- a/packages/schema/src/config/webpack.ts +++ b/packages/schema/src/config/webpack.ts @@ -160,9 +160,9 @@ export default defineResolvers({ * @type {Omit} */ esbuild: { - jsxFactory: 'h', - jsxFragment: 'Fragment', - tsconfigRaw: '{}', + $resolve: async (val, get) => { + return defu(val && typeof val === 'object' ? val : {}, await get('esbuild.options')) + }, }, /** diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4d7038e633..b6d1a950d8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -710,10 +710,10 @@ importers: version: 4.2.4 '@types/webpack-bundle-analyzer': specifier: 4.7.0 - version: 4.7.0 + version: 4.7.0(esbuild@0.25.0) '@types/webpack-hot-middleware': specifier: 2.25.9 - version: 2.25.9 + version: 2.25.9(esbuild@0.25.0) '@unhead/schema': specifier: 1.11.18 version: 1.11.18 @@ -743,13 +743,16 @@ importers: version: 0.1.8 css-minimizer-webpack-plugin: specifier: 7.0.0 - version: 7.0.0(webpack@5.97.1) + version: 7.0.0(esbuild@0.25.0)(webpack@5.97.1(esbuild@0.25.0)) + esbuild: + specifier: 0.25.0 + version: 0.25.0 esbuild-loader: specifier: 4.2.2 - version: 4.2.2(webpack@5.97.1) + version: 4.2.2(webpack@5.97.1(esbuild@0.25.0)) file-loader: specifier: 6.2.0 - version: 6.2.0(webpack@5.97.1) + version: 6.2.0(webpack@5.97.1(esbuild@0.25.0)) h3: specifier: npm:h3-nightly@1.14.0-20250122-114730-3f9e703 version: h3-nightly@1.14.0-20250122-114730-3f9e703 @@ -761,7 +764,7 @@ importers: version: 7.0.3 mini-css-extract-plugin: specifier: 2.9.2 - version: 2.9.2(webpack@5.97.1) + version: 2.9.2(webpack@5.97.1(esbuild@0.25.0)) nitro: specifier: npm:nitro-nightly@3.0.0-beta-28969273.f7aa9de6 version: nitro-nightly@3.0.0-beta-28969273.f7aa9de6(typescript@5.7.3) @@ -776,7 +779,7 @@ importers: version: 8.5.1 sass-loader: specifier: 16.0.4 - version: 16.0.4(@rspack/core@1.2.2)(webpack@5.97.1) + version: 16.0.4(@rspack/core@1.2.2)(webpack@5.97.1(esbuild@0.25.0)) scule: specifier: 1.3.0 version: 1.3.0 @@ -803,16 +806,16 @@ importers: version: 2.1.1 vue-loader: specifier: 17.4.2 - version: 17.4.2(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3))(webpack@5.97.1) + version: 17.4.2(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3))(webpack@5.97.1(esbuild@0.25.0)) vue-router: specifier: 4.5.0 version: 4.5.0(vue@3.5.13(typescript@5.7.3)) webpack: specifier: 5.97.1 - version: 5.97.1 + version: 5.97.1(esbuild@0.25.0) webpack-dev-middleware: specifier: 7.4.2 - version: 7.4.2(webpack@5.97.1) + version: 7.4.2(webpack@5.97.1(esbuild@0.25.0)) packages/ui-templates: devDependencies: @@ -9950,6 +9953,17 @@ snapshots: - uglify-js - webpack-cli + '@types/webpack-bundle-analyzer@4.7.0(esbuild@0.25.0)': + dependencies: + '@types/node': 22.13.1 + tapable: 2.2.1 + webpack: 5.97.1(esbuild@0.25.0) + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + - webpack-cli + '@types/webpack-hot-middleware@2.25.9': dependencies: '@types/connect': 3.4.38 @@ -9961,6 +9975,17 @@ snapshots: - uglify-js - webpack-cli + '@types/webpack-hot-middleware@2.25.9(esbuild@0.25.0)': + dependencies: + '@types/connect': 3.4.38 + tapable: 2.2.1 + webpack: 5.97.1(esbuild@0.25.0) + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + - webpack-cli + '@types/yargs-parser@21.0.3': {} '@types/yargs@17.0.33': @@ -11205,6 +11230,18 @@ snapshots: '@rspack/core': 1.2.2 webpack: 5.97.1 + css-minimizer-webpack-plugin@7.0.0(esbuild@0.25.0)(webpack@5.97.1(esbuild@0.25.0)): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + cssnano: 7.0.6(postcss@8.5.1) + jest-worker: 29.7.0 + postcss: 8.5.1 + schema-utils: 4.2.0 + serialize-javascript: 6.0.2 + webpack: 5.97.1(esbuild@0.25.0) + optionalDependencies: + esbuild: 0.25.0 + css-minimizer-webpack-plugin@7.0.0(webpack@5.97.1): dependencies: '@jridgewell/trace-mapping': 0.3.25 @@ -11545,6 +11582,14 @@ snapshots: es-module-lexer@1.6.0: {} + esbuild-loader@4.2.2(webpack@5.97.1(esbuild@0.25.0)): + dependencies: + esbuild: 0.21.5 + get-tsconfig: 4.8.0 + loader-utils: 2.0.4 + webpack: 5.97.1(esbuild@0.25.0) + webpack-sources: 1.4.3 + esbuild-loader@4.2.2(webpack@5.97.1): dependencies: esbuild: 0.21.5 @@ -11967,6 +12012,12 @@ snapshots: dependencies: flat-cache: 4.0.1 + file-loader@6.2.0(webpack@5.97.1(esbuild@0.25.0)): + dependencies: + loader-utils: 2.0.4 + schema-utils: 3.3.0 + webpack: 5.97.1(esbuild@0.25.0) + file-loader@6.2.0(webpack@5.97.1): dependencies: loader-utils: 2.0.4 @@ -13408,6 +13459,12 @@ snapshots: min-indent@1.0.1: {} + mini-css-extract-plugin@2.9.2(webpack@5.97.1(esbuild@0.25.0)): + dependencies: + schema-utils: 4.2.0 + tapable: 2.2.1 + webpack: 5.97.1(esbuild@0.25.0) + mini-css-extract-plugin@2.9.2(webpack@5.97.1): dependencies: schema-utils: 4.2.0 @@ -14685,12 +14742,12 @@ snapshots: safe-buffer@5.2.1: {} - sass-loader@16.0.4(@rspack/core@1.2.2)(webpack@5.97.1): + sass-loader@16.0.4(@rspack/core@1.2.2)(webpack@5.97.1(esbuild@0.25.0)): dependencies: neo-async: 2.6.2 optionalDependencies: '@rspack/core': 1.2.2 - webpack: 5.97.1 + webpack: 5.97.1(esbuild@0.25.0) sass@1.78.0: dependencies: @@ -15068,6 +15125,17 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 + terser-webpack-plugin@5.3.10(esbuild@0.25.0)(webpack@5.97.1(esbuild@0.25.0)): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.2 + terser: 5.32.0 + webpack: 5.97.1(esbuild@0.25.0) + optionalDependencies: + esbuild: 0.25.0 + terser-webpack-plugin@5.3.10(webpack@5.97.1): dependencies: '@jridgewell/trace-mapping': 0.3.25 @@ -15746,6 +15814,16 @@ snapshots: dependencies: vue: 3.5.13(typescript@5.7.3) + vue-loader@17.4.2(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3))(webpack@5.97.1(esbuild@0.25.0)): + dependencies: + chalk: 4.1.2 + hash-sum: 2.0.0 + watchpack: 2.4.2 + webpack: 5.97.1(esbuild@0.25.0) + optionalDependencies: + '@vue/compiler-sfc': 3.5.13 + vue: 3.5.13(typescript@5.7.3) + vue-loader@17.4.2(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3))(webpack@5.97.1): dependencies: chalk: 4.1.2 @@ -15823,6 +15901,17 @@ snapshots: - bufferutil - utf-8-validate + webpack-dev-middleware@7.4.2(webpack@5.97.1(esbuild@0.25.0)): + dependencies: + colorette: 2.0.20 + memfs: 4.17.0 + mime-types: 2.1.35 + on-finished: 2.4.1 + range-parser: 1.2.1 + schema-utils: 4.2.0 + optionalDependencies: + webpack: 5.97.1(esbuild@0.25.0) + webpack-dev-middleware@7.4.2(webpack@5.97.1): dependencies: colorette: 2.0.20 @@ -15879,6 +15968,36 @@ snapshots: - esbuild - uglify-js + webpack@5.97.1(esbuild@0.25.0): + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.6 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.14.0 + browserslist: 4.24.0 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.18.0 + es-module-lexer: 1.6.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.10(esbuild@0.25.0)(webpack@5.97.1(esbuild@0.25.0)) + watchpack: 2.4.2 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + webpackbar@7.0.0(@rspack/core@1.2.2)(webpack@5.97.1): dependencies: ansis: 3.3.2 diff --git a/test/basic.test.ts b/test/basic.test.ts index 312bc915c4..1b5ae9ca64 100644 --- a/test/basic.test.ts +++ b/test/basic.test.ts @@ -2781,8 +2781,14 @@ describe('teleports', () => { }) }) -describe('Node.js compatibility for client-side', () => { - it('should work', async () => { +describe('experimental', () => { + it('decorators support works', async () => { + const html = await $fetch('/experimental/decorators') + expect(html).toContain('decorated-decorated') + expectNoClientErrors('/experimental/decorators') + }) + + it('Node.js compatibility for client-side', async () => { const { page } = await renderPage('/experimental/node-compat') await page.locator('body').getByText('Nuxt is Awesome!').waitFor() expect(await page.innerHTML('body')).toContain('CWD: [available]') diff --git a/test/fixtures/basic/nuxt.config.ts b/test/fixtures/basic/nuxt.config.ts index e4cf482bf0..cb11c79be9 100644 --- a/test/fixtures/basic/nuxt.config.ts +++ b/test/fixtures/basic/nuxt.config.ts @@ -159,6 +159,7 @@ export default defineNuxtConfig({ inlineStyles: id => !!id && !id.includes('assets.vue'), }, experimental: { + decorators: true, serverAppConfig: true, typedPages: true, clientFallback: true, diff --git a/test/fixtures/basic/pages/experimental/decorators.vue b/test/fixtures/basic/pages/experimental/decorators.vue new file mode 100644 index 0000000000..dfe7a49fb7 --- /dev/null +++ b/test/fixtures/basic/pages/experimental/decorators.vue @@ -0,0 +1,26 @@ + + + + + diff --git a/test/fixtures/basic/server/api/experimental/decorators.ts b/test/fixtures/basic/server/api/experimental/decorators.ts new file mode 100644 index 0000000000..94de19fce7 --- /dev/null +++ b/test/fixtures/basic/server/api/experimental/decorators.ts @@ -0,0 +1,14 @@ +export default eventHandler((_event) => { + function something (_method: () => unknown) { + return () => 'decorated' + } + + class SomeClass { + @something + public someMethod () { + return 'initial' + } + } + + return new SomeClass().someMethod() +}) From 316281980ecfa7864d5b62d8d9036214691e4485 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 10 Feb 2025 19:17:10 +0000 Subject: [PATCH 10/18] chore(deps): update devdependency happy-dom to v17.0.3 (main) (#30936) --- package.json | 2 +- pnpm-lock.yaml | 56 +++++++++++++++++++++++++------------------------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/package.json b/package.json index 479008aead..c3781150a0 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,7 @@ "eslint-typegen": "1.0.0", "estree-walker": "3.0.3", "h3": "npm:h3-nightly@1.14.0-20250122-114730-3f9e703", - "happy-dom": "17.0.2", + "happy-dom": "17.0.3", "installed-check": "9.3.0", "jiti": "2.4.2", "knip": "5.43.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b6d1a950d8..398ca6b9e8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -55,7 +55,7 @@ importers: version: 7.26.5 '@codspeed/vitest-plugin': specifier: 4.0.0 - version: 4.0.0(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0)) + version: 4.0.0(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0)) '@nuxt/cli': specifier: 3.21.1 version: 3.21.1(magicast@0.3.5) @@ -70,7 +70,7 @@ importers: version: link:packages/rspack '@nuxt/test-utils': specifier: 3.15.4 - version: 3.15.4(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3)))(@types/node@22.13.1)(@vue/test-utils@2.4.6)(happy-dom@17.0.2)(jiti@2.4.2)(magicast@0.3.5)(playwright-core@1.50.1)(terser@5.32.0)(tsx@4.19.2)(typescript@5.7.3)(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0) + version: 3.15.4(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3)))(@types/node@22.13.1)(@vue/test-utils@2.4.6)(happy-dom@17.0.3)(jiti@2.4.2)(magicast@0.3.5)(playwright-core@1.50.1)(terser@5.32.0)(tsx@4.19.2)(typescript@5.7.3)(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0) '@nuxt/webpack-builder': specifier: workspace:* version: link:packages/webpack @@ -97,7 +97,7 @@ importers: version: 1.11.18(vue@3.5.13(typescript@5.7.3)) '@vitest/coverage-v8': specifier: 3.0.5 - version: 3.0.5(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0)) + version: 3.0.5(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0)) '@vue/test-utils': specifier: 2.4.6 version: 2.4.6 @@ -144,8 +144,8 @@ importers: specifier: npm:h3-nightly@1.14.0-20250122-114730-3f9e703 version: h3-nightly@1.14.0-20250122-114730-3f9e703 happy-dom: - specifier: 17.0.2 - version: 17.0.2 + specifier: 17.0.3 + version: 17.0.3 installed-check: specifier: 9.3.0 version: 9.3.0 @@ -217,10 +217,10 @@ importers: version: 3.3.1(typescript@5.7.3)(vue-tsc@2.2.0(typescript@5.7.3))(vue@3.5.13(typescript@5.7.3)) vitest: specifier: 3.0.5 - version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.2)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) vitest-environment-nuxt: specifier: 1.0.1 - version: 1.0.1(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3)))(@types/node@22.13.1)(@vue/test-utils@2.4.6)(happy-dom@17.0.2)(jiti@2.4.2)(magicast@0.3.5)(playwright-core@1.50.1)(terser@5.32.0)(tsx@4.19.2)(typescript@5.7.3)(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0) + version: 1.0.1(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3)))(@types/node@22.13.1)(@vue/test-utils@2.4.6)(happy-dom@17.0.3)(jiti@2.4.2)(magicast@0.3.5)(playwright-core@1.50.1)(terser@5.32.0)(tsx@4.19.2)(typescript@5.7.3)(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0) vue: specifier: 3.5.13 version: 3.5.13(typescript@5.7.3) @@ -314,7 +314,7 @@ importers: version: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) vitest: specifier: 3.0.5 - version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.2)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) webpack: specifier: 5.97.1 version: 5.97.1 @@ -543,7 +543,7 @@ importers: version: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) vitest: specifier: 3.0.5 - version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.2)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) packages/rspack: dependencies: @@ -827,7 +827,7 @@ importers: version: 0.2.0 html-validate: specifier: 9.2.1 - version: 9.2.1(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.2)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0)) + version: 9.2.1(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0)) htmlnano: specifier: 2.1.1 version: 2.1.1(cssnano@7.0.6(postcss@8.5.1))(postcss@8.5.1)(relateurl@0.2.7)(svgo@3.3.2)(terser@5.32.0)(typescript@5.7.3) @@ -1158,7 +1158,7 @@ importers: version: 0.11.2(rollup@4.34.6)(vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3)) vitest: specifier: latest - version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.2)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) vue: specifier: 3.5.13 version: 3.5.13(typescript@5.7.3) @@ -4856,8 +4856,8 @@ packages: h3-nightly@1.14.0-20250122-114730-3f9e703: resolution: {integrity: sha512-mAl1YHJq2fwAIVXBaDCQD9uIiAFs+Jl3uNg6vGFfHG8VPHzcEqFbImUE83wCLHYCxC68qSjEnkaDCRzO8SNQAA==} - happy-dom@17.0.2: - resolution: {integrity: sha512-PWXllOadphR7angD3ndG5/Ax3yg1PFRvnN8Zu+xVtRsZjJE4RtJF1RBeWN9JFvF5EJmHOCiekdYVTxJr2NBibA==} + happy-dom@17.0.3: + resolution: {integrity: sha512-1vWCwpeguN02wQF8kGeaj69FDX19bXKQXmyUKcE+O0WLY0uhS0RPTLCJR8Omy8hrjMHwV3dUJ24JUrK07aOA9Q==} engines: {node: '>=18.0.0'} has-bigints@1.0.2: @@ -8434,11 +8434,11 @@ snapshots: transitivePeerDependencies: - debug - '@codspeed/vitest-plugin@4.0.0(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))': + '@codspeed/vitest-plugin@4.0.0(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))': dependencies: '@codspeed/core': 4.0.0 vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) - vitest: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.2)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) + vitest: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) transitivePeerDependencies: - debug @@ -9194,7 +9194,7 @@ snapshots: rc9: 2.1.2 std-env: 3.8.0 - '@nuxt/test-utils@3.15.4(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3)))(@types/node@22.13.1)(@vue/test-utils@2.4.6)(happy-dom@17.0.2)(jiti@2.4.2)(magicast@0.3.5)(playwright-core@1.50.1)(terser@5.32.0)(tsx@4.19.2)(typescript@5.7.3)(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0)': + '@nuxt/test-utils@3.15.4(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3)))(@types/node@22.13.1)(@vue/test-utils@2.4.6)(happy-dom@17.0.3)(jiti@2.4.2)(magicast@0.3.5)(playwright-core@1.50.1)(terser@5.32.0)(tsx@4.19.2)(typescript@5.7.3)(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0)': dependencies: '@nuxt/kit': link:packages/kit '@nuxt/schema': link:packages/schema @@ -9220,14 +9220,14 @@ snapshots: unenv: 1.10.0 unplugin: 2.1.2 vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) - vitest-environment-nuxt: 1.0.1(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3)))(@types/node@22.13.1)(@vue/test-utils@2.4.6)(happy-dom@17.0.2)(jiti@2.4.2)(magicast@0.3.5)(playwright-core@1.50.1)(terser@5.32.0)(tsx@4.19.2)(typescript@5.7.3)(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0) + vitest-environment-nuxt: 1.0.1(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3)))(@types/node@22.13.1)(@vue/test-utils@2.4.6)(happy-dom@17.0.3)(jiti@2.4.2)(magicast@0.3.5)(playwright-core@1.50.1)(terser@5.32.0)(tsx@4.19.2)(typescript@5.7.3)(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0) vue: 3.5.13(typescript@5.7.3) optionalDependencies: '@testing-library/vue': 8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3)) '@vue/test-utils': 2.4.6 - happy-dom: 17.0.2 + happy-dom: 17.0.3 playwright-core: 1.50.1 - vitest: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.2)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) + vitest: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -10294,7 +10294,7 @@ snapshots: vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) vue: 3.5.13(typescript@5.7.3) - '@vitest/coverage-v8@3.0.5(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))': + '@vitest/coverage-v8@3.0.5(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -10308,7 +10308,7 @@ snapshots: std-env: 3.8.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.2)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) + vitest: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) transitivePeerDependencies: - supports-color @@ -12272,7 +12272,7 @@ snapshots: uncrypto: 0.1.3 unenv: 1.10.0 - happy-dom@17.0.2: + happy-dom@17.0.3: dependencies: webidl-conversions: 7.0.0 whatwg-mimetype: 3.0.0 @@ -12400,7 +12400,7 @@ snapshots: html-tags@3.3.1: {} - html-validate@9.2.1(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.2)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0)): + html-validate@9.2.1(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0)): dependencies: '@html-validate/stylish': 4.2.0 '@sidvind/better-ajv-errors': 3.0.1(ajv@8.17.1) @@ -12411,7 +12411,7 @@ snapshots: prompts: 2.4.2 semver: 7.7.1 optionalDependencies: - vitest: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.2)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) + vitest: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) html-void-elements@3.0.0: {} @@ -15696,9 +15696,9 @@ snapshots: tsx: 4.19.2 yaml: 2.7.0 - vitest-environment-nuxt@1.0.1(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3)))(@types/node@22.13.1)(@vue/test-utils@2.4.6)(happy-dom@17.0.2)(jiti@2.4.2)(magicast@0.3.5)(playwright-core@1.50.1)(terser@5.32.0)(tsx@4.19.2)(typescript@5.7.3)(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0): + vitest-environment-nuxt@1.0.1(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3)))(@types/node@22.13.1)(@vue/test-utils@2.4.6)(happy-dom@17.0.3)(jiti@2.4.2)(magicast@0.3.5)(playwright-core@1.50.1)(terser@5.32.0)(tsx@4.19.2)(typescript@5.7.3)(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0): dependencies: - '@nuxt/test-utils': 3.15.4(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3)))(@types/node@22.13.1)(@vue/test-utils@2.4.6)(happy-dom@17.0.2)(jiti@2.4.2)(magicast@0.3.5)(playwright-core@1.50.1)(terser@5.32.0)(tsx@4.19.2)(typescript@5.7.3)(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0) + '@nuxt/test-utils': 3.15.4(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3)))(@types/node@22.13.1)(@vue/test-utils@2.4.6)(happy-dom@17.0.3)(jiti@2.4.2)(magicast@0.3.5)(playwright-core@1.50.1)(terser@5.32.0)(tsx@4.19.2)(typescript@5.7.3)(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0) transitivePeerDependencies: - '@cucumber/cucumber' - '@jest/globals' @@ -15724,7 +15724,7 @@ snapshots: - vitest - yaml - vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.2)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0): + vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0): dependencies: '@vitest/expect': 3.0.5 '@vitest/mocker': 3.0.5(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0)) @@ -15749,7 +15749,7 @@ snapshots: optionalDependencies: '@types/debug': 4.1.12 '@types/node': 22.13.1 - happy-dom: 17.0.2 + happy-dom: 17.0.3 transitivePeerDependencies: - jiti - less From 3a9e0b71444d75a4e06391a8ae1997c926b0b20e Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Mon, 10 Feb 2025 21:36:43 +0000 Subject: [PATCH 11/18] docs: clarify that local layers are scanned from `rootDir` resolves https://github.com/nuxt/nuxt/issues/30925 --- docs/1.getting-started/9.layers.md | 2 +- packages/nuxt/src/core/nuxt.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/1.getting-started/9.layers.md b/docs/1.getting-started/9.layers.md index 4fade99fe4..e1fec4fd91 100644 --- a/docs/1.getting-started/9.layers.md +++ b/docs/1.getting-started/9.layers.md @@ -18,7 +18,7 @@ One of the core features of Nuxt is the layers and extending support. You can ex ## Usage -By default, any layers within your project in the `~/layers` directory will be automatically registered as layers in your project +By default, any layers within your project in the `~~/layers` directory will be automatically registered as layers in your project ::note Layer auto-registration was introduced in Nuxt v3.12.0 diff --git a/packages/nuxt/src/core/nuxt.ts b/packages/nuxt/src/core/nuxt.ts index 7014ba7d61..6175391357 100644 --- a/packages/nuxt/src/core/nuxt.ts +++ b/packages/nuxt/src/core/nuxt.ts @@ -454,7 +454,7 @@ async function initNuxt (nuxt: Nuxt) { ...nuxt.options._layers.filter(i => i.cwd.includes('node_modules')).map(i => i.cwd as string), ) - // Ensure we can resolve dependencies within layers - filtering out local `~/layers` directories + // Ensure we can resolve dependencies within layers - filtering out local `~~/layers` directories const locallyScannedLayersDirs = nuxt.options._layers.map(l => resolve(l.cwd, 'layers').replace(/\/?$/, '/')) nuxt.options.modulesDir.push(...nuxt.options._layers .filter(l => l.cwd !== nuxt.options.rootDir && locallyScannedLayersDirs.every(dir => !l.cwd.startsWith(dir))) From fd22cfd651550120c8a7bb549ba87594b765c98c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 11 Feb 2025 09:24:34 +0000 Subject: [PATCH 12/18] chore(deps): update all non-major dependencies (main) (#30942) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 4 +- packages/rspack/package.json | 2 +- packages/schema/package.json | 2 +- packages/vite/package.json | 2 +- packages/webpack/package.json | 2 +- pnpm-lock.yaml | 442 +++++++++++++++++----------------- 6 files changed, 227 insertions(+), 227 deletions(-) diff --git a/package.json b/package.json index c3781150a0..3d935f22e7 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "nitro": "npm:nitro-nightly@3.0.0-beta-28969273.f7aa9de6", "nuxt": "workspace:*", "ohash": "1.1.4", - "postcss": "8.5.1", + "postcss": "8.5.2", "rollup": "4.34.6", "send": ">=1.1.0", "typescript": "5.7.3", @@ -136,6 +136,6 @@ "vue-tsc": "2.2.0", "webpack": "5.97.1" }, - "packageManager": "pnpm@10.2.1", + "packageManager": "pnpm@10.3.0", "version": "" } diff --git a/packages/rspack/package.json b/packages/rspack/package.json index e10e0f6e2c..ae37465963 100644 --- a/packages/rspack/package.json +++ b/packages/rspack/package.json @@ -51,7 +51,7 @@ "ohash": "^1.1.4", "pathe": "^2.0.2", "pify": "^6.1.0", - "postcss": "^8.5.1", + "postcss": "^8.5.2", "postcss-import": "^16.1.0", "postcss-import-resolver": "^2.0.0", "postcss-loader": "^8.1.1", diff --git a/packages/schema/package.json b/packages/schema/package.json index 7713ed1771..a66b5dbbd8 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -60,7 +60,7 @@ "nitro": "npm:nitro-nightly@3.0.0-beta-28969273.f7aa9de6", "ofetch": "1.4.1", "pkg-types": "1.3.1", - "postcss": "8.5.1", + "postcss": "8.5.2", "sass-loader": "16.0.4", "scule": "1.3.0", "unbuild": "3.3.1", diff --git a/packages/vite/package.json b/packages/vite/package.json index 68a333de5e..191fbc6e7c 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -49,7 +49,7 @@ "mlly": "^1.7.4", "pathe": "^2.0.2", "pkg-types": "^1.3.1", - "postcss": "^8.5.1", + "postcss": "^8.5.2", "rollup-plugin-visualizer": "^5.14.0", "std-env": "^3.8.0", "ufo": "^1.5.4", diff --git a/packages/webpack/package.json b/packages/webpack/package.json index 15bb840f41..ebc05e9402 100644 --- a/packages/webpack/package.json +++ b/packages/webpack/package.json @@ -51,7 +51,7 @@ "ohash": "^1.1.4", "pathe": "^2.0.2", "pify": "^6.1.0", - "postcss": "^8.5.1", + "postcss": "^8.5.2", "postcss-import": "^16.1.0", "postcss-import-resolver": "^2.0.0", "postcss-loader": "^8.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 398ca6b9e8..56a8996767 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,7 +29,7 @@ overrides: nitro: npm:nitro-nightly@3.0.0-beta-28969273.f7aa9de6 nuxt: workspace:* ohash: 1.1.4 - postcss: 8.5.1 + postcss: 8.5.2 rollup: 4.34.6 send: '>=1.1.0' typescript: 5.7.3 @@ -106,7 +106,7 @@ importers: version: 8.14.0 autoprefixer: specifier: 10.4.20 - version: 10.4.20(postcss@8.5.1) + version: 10.4.20(postcss@8.5.2) case-police: specifier: 0.7.2 version: 0.7.2 @@ -118,7 +118,7 @@ importers: version: 3.4.0 cssnano: specifier: 7.0.6 - version: 7.0.6(postcss@8.5.1) + version: 7.0.6(postcss@8.5.2) destr: specifier: 2.0.3 version: 2.0.3 @@ -558,7 +558,7 @@ importers: version: 1.2.2 autoprefixer: specifier: ^10.4.20 - version: 10.4.20(postcss@8.5.1) + version: 10.4.20(postcss@8.5.2) css-loader: specifier: ^7.1.2 version: 7.1.2(@rspack/core@1.2.2)(webpack@5.97.1) @@ -567,7 +567,7 @@ importers: version: 7.0.0(webpack@5.97.1) cssnano: specifier: ^7.0.6 - version: 7.0.6(postcss@8.5.1) + version: 7.0.6(postcss@8.5.2) defu: specifier: ^6.1.4 version: 6.1.4 @@ -611,20 +611,20 @@ importers: specifier: ^6.1.0 version: 6.1.0 postcss: - specifier: 8.5.1 - version: 8.5.1 + specifier: 8.5.2 + version: 8.5.2 postcss-import: specifier: ^16.1.0 - version: 16.1.0(postcss@8.5.1) + version: 16.1.0(postcss@8.5.2) postcss-import-resolver: specifier: ^2.0.0 version: 2.0.0 postcss-loader: specifier: ^8.1.1 - version: 8.1.1(@rspack/core@1.2.2)(postcss@8.5.1)(typescript@5.7.3)(webpack@5.97.1) + version: 8.1.1(@rspack/core@1.2.2)(postcss@8.5.2)(typescript@5.7.3)(webpack@5.97.1) postcss-url: specifier: ^10.1.3 - version: 10.1.3(postcss@8.5.1) + version: 10.1.3(postcss@8.5.2) pug-plain-loader: specifier: ^1.1.0 version: 1.1.0(pug@3.0.3) @@ -775,8 +775,8 @@ importers: specifier: 1.3.1 version: 1.3.1 postcss: - specifier: 8.5.1 - version: 8.5.1 + specifier: 8.5.2 + version: 8.5.2 sass-loader: specifier: 16.0.4 version: 16.0.4(@rspack/core@1.2.2)(webpack@5.97.1(esbuild@0.25.0)) @@ -830,7 +830,7 @@ importers: version: 9.2.1(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0)) htmlnano: specifier: 2.1.1 - version: 2.1.1(cssnano@7.0.6(postcss@8.5.1))(postcss@8.5.1)(relateurl@0.2.7)(svgo@3.3.2)(terser@5.32.0)(typescript@5.7.3) + version: 2.1.1(cssnano@7.0.6(postcss@8.5.2))(postcss@8.5.2)(relateurl@0.2.7)(svgo@3.3.2)(terser@5.32.0)(typescript@5.7.3) jiti: specifier: 2.4.2 version: 2.4.2 @@ -857,7 +857,7 @@ importers: version: 0.2.10 unocss: specifier: 65.4.3 - version: 65.4.3(postcss@8.5.1)(rollup@4.34.6)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3)) + version: 65.4.3(postcss@8.5.2)(rollup@4.34.6)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3)) vite: specifier: 6.1.0 version: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) @@ -878,13 +878,13 @@ importers: version: 4.1.1(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3)) autoprefixer: specifier: ^10.4.20 - version: 10.4.20(postcss@8.5.1) + version: 10.4.20(postcss@8.5.2) consola: specifier: ^3.4.0 version: 3.4.0 cssnano: specifier: ^7.0.6 - version: 7.0.6(postcss@8.5.1) + version: 7.0.6(postcss@8.5.2) defu: specifier: ^6.1.4 version: 6.1.4 @@ -919,8 +919,8 @@ importers: specifier: ^1.3.1 version: 1.3.1 postcss: - specifier: 8.5.1 - version: 8.5.1 + specifier: 8.5.2 + version: 8.5.2 rollup-plugin-visualizer: specifier: ^5.14.0 version: 5.14.0(rollup@4.34.6) @@ -972,7 +972,7 @@ importers: version: link:../kit autoprefixer: specifier: ^10.4.20 - version: 10.4.20(postcss@8.5.1) + version: 10.4.20(postcss@8.5.2) css-loader: specifier: ^7.1.2 version: 7.1.2(@rspack/core@1.2.2)(webpack@5.97.1) @@ -981,7 +981,7 @@ importers: version: 7.0.0(webpack@5.97.1) cssnano: specifier: ^7.0.6 - version: 7.0.6(postcss@8.5.1) + version: 7.0.6(postcss@8.5.2) defu: specifier: ^6.1.4 version: 6.1.4 @@ -1028,20 +1028,20 @@ importers: specifier: ^6.1.0 version: 6.1.0 postcss: - specifier: 8.5.1 - version: 8.5.1 + specifier: 8.5.2 + version: 8.5.2 postcss-import: specifier: ^16.1.0 - version: 16.1.0(postcss@8.5.1) + version: 16.1.0(postcss@8.5.2) postcss-import-resolver: specifier: ^2.0.0 version: 2.0.0 postcss-loader: specifier: ^8.1.1 - version: 8.1.1(@rspack/core@1.2.2)(postcss@8.5.1)(typescript@5.7.3)(webpack@5.97.1) + version: 8.1.1(@rspack/core@1.2.2)(postcss@8.5.2)(typescript@5.7.3)(webpack@5.97.1) postcss-url: specifier: ^10.1.3 - version: 10.1.3(postcss@8.5.1) + version: 10.1.3(postcss@8.5.2) pug-plain-loader: specifier: ^1.1.0 version: 1.1.0(pug@3.0.3) @@ -3127,7 +3127,7 @@ packages: resolution: {integrity: sha512-ZHlWfArfhhWBVhUeAETrtnD7nhqpfXv5muGrJCSDHmjgFJX8jtDa6rf52ICCFWEOe8p2dku7o27o26pGXYTYJg==} engines: {node: '>=14'} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 '@unocss/preset-attributify@65.4.3': resolution: {integrity: sha512-kN8levkt+BwzzWKA6glthasuFt/Cplc70oxzAYd/gZcosxwDK5+MmxjGDG5aLLu2PA58tPHUZ+ltW/QG5BM+Xw==} @@ -3599,7 +3599,7 @@ packages: engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} @@ -4002,7 +4002,7 @@ packages: resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==} engines: {node: ^14 || ^16 || >=18} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 css-loader@7.1.2: resolution: {integrity: sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==} @@ -4069,19 +4069,19 @@ packages: resolution: {integrity: sha512-ZzrgYupYxEvdGGuqL+JKOY70s7+saoNlHSCK/OGn1vB2pQK8KSET8jvenzItcY+kA7NoWvfbb/YhlzuzNKjOhQ==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 cssnano-utils@5.0.0: resolution: {integrity: sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 cssnano@7.0.6: resolution: {integrity: sha512-54woqx8SCbp8HwvNZYn68ZFAepuouZW4lTwiMVnBErM3VkO7/Sd4oTOt3Zz3bPx3kxQ36aISppyXj2Md4lg8bw==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 csso@5.0.5: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} @@ -4979,7 +4979,7 @@ packages: resolution: {integrity: sha512-kAERyg/LuNZYmdqgCdYvugyLWNFAm8MWXpQMz1pLpetmCbFwoMxvkSoaAMlFrOC4OKTWI4KlZGT/RsNxg4ghOw==} peerDependencies: cssnano: ^7.0.0 - postcss: 8.5.1 + postcss: 8.5.2 purgecss: ^6.0.0 relateurl: ^0.2.7 srcset: 5.0.1 @@ -5045,7 +5045,7 @@ packages: resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -6298,43 +6298,43 @@ packages: resolution: {integrity: sha512-DT/Wwm6fCKgpYVI7ZEWuPJ4az8hiEHtCUeYjZXqU7Ou4QqYh1Df2yCQ7Ca6N7xqKPFkxN3fhf+u9KSoOCJNAjg==} engines: {node: ^18.12 || ^20.9 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-colormin@7.0.2: resolution: {integrity: sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-convert-values@7.0.4: resolution: {integrity: sha512-e2LSXPqEHVW6aoGbjV9RsSSNDO3A0rZLCBxN24zvxF25WknMPpX8Dm9UxxThyEbaytzggRuZxaGXqaOhxQ514Q==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-discard-comments@7.0.3: resolution: {integrity: sha512-q6fjd4WU4afNhWOA2WltHgCbkRhZPgQe7cXF74fuVB/ge4QbM9HEaOIzGSiMvM+g/cOsNAUGdf2JDzqA2F8iLA==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-discard-duplicates@7.0.1: resolution: {integrity: sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-discard-empty@7.0.0: resolution: {integrity: sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-discard-overridden@7.0.0: resolution: {integrity: sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-import-resolver@2.0.0: resolution: {integrity: sha512-y001XYgGvVwgxyxw9J1a5kqM/vtmIQGzx34g0A0Oy44MFcy/ZboZw1hu/iN3VYFjSTRzbvd7zZJJz0Kh0AGkTw==} @@ -6343,14 +6343,14 @@ packages: resolution: {integrity: sha512-7hsAZ4xGXl4MW+OKEWCnF6T5jqBw80/EE9aXg1r2yyn1RsVEU8EtKXbijEODa+rg7iih4bKf7vlvTGYR4CnPNg==} engines: {node: '>=18.0.0'} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-loader@8.1.1: resolution: {integrity: sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==} engines: {node: '>= 18.12.0'} peerDependencies: '@rspack/core': 0.x || 1.x - postcss: 8.5.1 + postcss: 8.5.2 webpack: ^5.0.0 peerDependenciesMeta: '@rspack/core': @@ -6365,139 +6365,139 @@ packages: resolution: {integrity: sha512-zer1KoZA54Q8RVHKOY5vMke0cCdNxMP3KBfDerjH/BYHh4nCIh+1Yy0t1pAEQF18ac/4z3OFclO+ZVH8azjR4A==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-merge-rules@7.0.4: resolution: {integrity: sha512-ZsaamiMVu7uBYsIdGtKJ64PkcQt6Pcpep/uO90EpLS3dxJi6OXamIobTYcImyXGoW0Wpugh7DSD3XzxZS9JCPg==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-minify-font-values@7.0.0: resolution: {integrity: sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-minify-gradients@7.0.0: resolution: {integrity: sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-minify-params@7.0.2: resolution: {integrity: sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-minify-selectors@7.0.4: resolution: {integrity: sha512-JG55VADcNb4xFCf75hXkzc1rNeURhlo7ugf6JjiiKRfMsKlDzN9CXHZDyiG6x/zGchpjQS+UAgb1d4nqXqOpmA==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-modules-extract-imports@3.1.0: resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-modules-local-by-default@4.0.5: resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-modules-scope@3.2.0: resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-modules-values@4.0.0: resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-nested@7.0.2: resolution: {integrity: sha512-5osppouFc0VR9/VYzYxO03VaDa3e8F23Kfd6/9qcZTUI8P58GIYlArOET2Wq0ywSl2o2PjELhYOFI4W7l5QHKw==} engines: {node: '>=18.0'} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-normalize-charset@7.0.0: resolution: {integrity: sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-normalize-display-values@7.0.0: resolution: {integrity: sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-normalize-positions@7.0.0: resolution: {integrity: sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-normalize-repeat-style@7.0.0: resolution: {integrity: sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-normalize-string@7.0.0: resolution: {integrity: sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-normalize-timing-functions@7.0.0: resolution: {integrity: sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-normalize-unicode@7.0.2: resolution: {integrity: sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-normalize-url@7.0.0: resolution: {integrity: sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-normalize-whitespace@7.0.0: resolution: {integrity: sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-ordered-values@7.0.1: resolution: {integrity: sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-reduce-initial@7.0.2: resolution: {integrity: sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-reduce-transforms@7.0.0: resolution: {integrity: sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-selector-parser@6.1.2: resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} @@ -6511,25 +6511,25 @@ packages: resolution: {integrity: sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA==} engines: {node: ^18.12.0 || ^20.9.0 || >= 18} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-unique-selectors@7.0.3: resolution: {integrity: sha512-J+58u5Ic5T1QjP/LDV9g3Cx4CNOgB5vz+kM6+OxHHhFACdcDeKhBXjQmB7fnIZM12YSTvsL0Opwco83DmacW2g==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-url@10.1.3: resolution: {integrity: sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==} engines: {node: '>=10'} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.5.1: - resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} + postcss@8.5.2: + resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} engines: {node: ^10 || ^12 || >=14} posthtml-parser@0.11.0: @@ -7206,7 +7206,7 @@ packages: resolution: {integrity: sha512-i4zfNrGMt9SB4xRK9L83rlsFCgdGANfeDAYacO1pkqcE7cRHPdWHwnKZVz7WY17Veq/FvyYsRAU++Ga+qDFIww==} engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} peerDependencies: - postcss: 8.5.1 + postcss: 8.5.2 summary@2.1.0: resolution: {integrity: sha512-nMIjMrd5Z2nuB2RZCKJfFMjgS3fygbeyGk9PxPPaJR1RIcyN9yn4A63Isovzm3ZtQuEkLBVgMdPup8UeLH7aQw==} @@ -10164,13 +10164,13 @@ snapshots: transitivePeerDependencies: - vue - '@unocss/postcss@65.4.3(postcss@8.5.1)': + '@unocss/postcss@65.4.3(postcss@8.5.2)': dependencies: '@unocss/config': 65.4.3 '@unocss/core': 65.4.3 '@unocss/rule-utils': 65.4.3 css-tree: 3.1.0 - postcss: 8.5.1 + postcss: 8.5.2 tinyglobby: 0.2.10 transitivePeerDependencies: - supports-color @@ -10437,7 +10437,7 @@ snapshots: '@vue/shared': 3.5.13 estree-walker: 2.0.2 magic-string: 0.30.17 - postcss: 8.5.1 + postcss: 8.5.2 source-map-js: 1.2.1 '@vue/compiler-ssr@3.5.13': @@ -10805,14 +10805,14 @@ snapshots: asynckit@0.4.0: {} - autoprefixer@10.4.20(postcss@8.5.1): + autoprefixer@10.4.20(postcss@8.5.2): dependencies: browserslist: 4.24.0 caniuse-lite: 1.0.30001667 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -10850,7 +10850,7 @@ snapshots: domhandler: 5.0.3 htmlparser2: 9.1.0 picocolors: 1.1.1 - postcss: 8.5.1 + postcss: 8.5.2 postcss-media-query-parser: 0.2.3 before-after-hook@2.2.3: {} @@ -11212,18 +11212,18 @@ snapshots: dependencies: uncrypto: 0.1.3 - css-declaration-sorter@7.2.0(postcss@8.5.1): + css-declaration-sorter@7.2.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 css-loader@7.1.2(@rspack/core@1.2.2)(webpack@5.97.1): dependencies: - icss-utils: 5.1.0(postcss@8.5.1) - postcss: 8.5.1 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.1) - postcss-modules-local-by-default: 4.0.5(postcss@8.5.1) - postcss-modules-scope: 3.2.0(postcss@8.5.1) - postcss-modules-values: 4.0.0(postcss@8.5.1) + icss-utils: 5.1.0(postcss@8.5.2) + postcss: 8.5.2 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.2) + postcss-modules-local-by-default: 4.0.5(postcss@8.5.2) + postcss-modules-scope: 3.2.0(postcss@8.5.2) + postcss-modules-values: 4.0.0(postcss@8.5.2) postcss-value-parser: 4.2.0 semver: 7.7.1 optionalDependencies: @@ -11233,9 +11233,9 @@ snapshots: css-minimizer-webpack-plugin@7.0.0(esbuild@0.25.0)(webpack@5.97.1(esbuild@0.25.0)): dependencies: '@jridgewell/trace-mapping': 0.3.25 - cssnano: 7.0.6(postcss@8.5.1) + cssnano: 7.0.6(postcss@8.5.2) jest-worker: 29.7.0 - postcss: 8.5.1 + postcss: 8.5.2 schema-utils: 4.2.0 serialize-javascript: 6.0.2 webpack: 5.97.1(esbuild@0.25.0) @@ -11245,9 +11245,9 @@ snapshots: css-minimizer-webpack-plugin@7.0.0(webpack@5.97.1): dependencies: '@jridgewell/trace-mapping': 0.3.25 - cssnano: 7.0.6(postcss@8.5.1) + cssnano: 7.0.6(postcss@8.5.2) jest-worker: 29.7.0 - postcss: 8.5.1 + postcss: 8.5.2 schema-utils: 4.2.0 serialize-javascript: 6.0.2 webpack: 5.97.1 @@ -11279,49 +11279,49 @@ snapshots: cssesc@3.0.0: {} - cssnano-preset-default@7.0.6(postcss@8.5.1): + cssnano-preset-default@7.0.6(postcss@8.5.2): dependencies: browserslist: 4.24.0 - css-declaration-sorter: 7.2.0(postcss@8.5.1) - cssnano-utils: 5.0.0(postcss@8.5.1) - postcss: 8.5.1 - postcss-calc: 10.0.2(postcss@8.5.1) - postcss-colormin: 7.0.2(postcss@8.5.1) - postcss-convert-values: 7.0.4(postcss@8.5.1) - postcss-discard-comments: 7.0.3(postcss@8.5.1) - postcss-discard-duplicates: 7.0.1(postcss@8.5.1) - postcss-discard-empty: 7.0.0(postcss@8.5.1) - postcss-discard-overridden: 7.0.0(postcss@8.5.1) - postcss-merge-longhand: 7.0.4(postcss@8.5.1) - postcss-merge-rules: 7.0.4(postcss@8.5.1) - postcss-minify-font-values: 7.0.0(postcss@8.5.1) - postcss-minify-gradients: 7.0.0(postcss@8.5.1) - postcss-minify-params: 7.0.2(postcss@8.5.1) - postcss-minify-selectors: 7.0.4(postcss@8.5.1) - postcss-normalize-charset: 7.0.0(postcss@8.5.1) - postcss-normalize-display-values: 7.0.0(postcss@8.5.1) - postcss-normalize-positions: 7.0.0(postcss@8.5.1) - postcss-normalize-repeat-style: 7.0.0(postcss@8.5.1) - postcss-normalize-string: 7.0.0(postcss@8.5.1) - postcss-normalize-timing-functions: 7.0.0(postcss@8.5.1) - postcss-normalize-unicode: 7.0.2(postcss@8.5.1) - postcss-normalize-url: 7.0.0(postcss@8.5.1) - postcss-normalize-whitespace: 7.0.0(postcss@8.5.1) - postcss-ordered-values: 7.0.1(postcss@8.5.1) - postcss-reduce-initial: 7.0.2(postcss@8.5.1) - postcss-reduce-transforms: 7.0.0(postcss@8.5.1) - postcss-svgo: 7.0.1(postcss@8.5.1) - postcss-unique-selectors: 7.0.3(postcss@8.5.1) + css-declaration-sorter: 7.2.0(postcss@8.5.2) + cssnano-utils: 5.0.0(postcss@8.5.2) + postcss: 8.5.2 + postcss-calc: 10.0.2(postcss@8.5.2) + postcss-colormin: 7.0.2(postcss@8.5.2) + postcss-convert-values: 7.0.4(postcss@8.5.2) + postcss-discard-comments: 7.0.3(postcss@8.5.2) + postcss-discard-duplicates: 7.0.1(postcss@8.5.2) + postcss-discard-empty: 7.0.0(postcss@8.5.2) + postcss-discard-overridden: 7.0.0(postcss@8.5.2) + postcss-merge-longhand: 7.0.4(postcss@8.5.2) + postcss-merge-rules: 7.0.4(postcss@8.5.2) + postcss-minify-font-values: 7.0.0(postcss@8.5.2) + postcss-minify-gradients: 7.0.0(postcss@8.5.2) + postcss-minify-params: 7.0.2(postcss@8.5.2) + postcss-minify-selectors: 7.0.4(postcss@8.5.2) + postcss-normalize-charset: 7.0.0(postcss@8.5.2) + postcss-normalize-display-values: 7.0.0(postcss@8.5.2) + postcss-normalize-positions: 7.0.0(postcss@8.5.2) + postcss-normalize-repeat-style: 7.0.0(postcss@8.5.2) + postcss-normalize-string: 7.0.0(postcss@8.5.2) + postcss-normalize-timing-functions: 7.0.0(postcss@8.5.2) + postcss-normalize-unicode: 7.0.2(postcss@8.5.2) + postcss-normalize-url: 7.0.0(postcss@8.5.2) + postcss-normalize-whitespace: 7.0.0(postcss@8.5.2) + postcss-ordered-values: 7.0.1(postcss@8.5.2) + postcss-reduce-initial: 7.0.2(postcss@8.5.2) + postcss-reduce-transforms: 7.0.0(postcss@8.5.2) + postcss-svgo: 7.0.1(postcss@8.5.2) + postcss-unique-selectors: 7.0.3(postcss@8.5.2) - cssnano-utils@5.0.0(postcss@8.5.1): + cssnano-utils@5.0.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 - cssnano@7.0.6(postcss@8.5.1): + cssnano@7.0.6(postcss@8.5.2): dependencies: - cssnano-preset-default: 7.0.6(postcss@8.5.1) + cssnano-preset-default: 7.0.6(postcss@8.5.2) lilconfig: 3.1.2 - postcss: 8.5.1 + postcss: 8.5.2 csso@5.0.5: dependencies: @@ -12415,14 +12415,14 @@ snapshots: html-void-elements@3.0.0: {} - htmlnano@2.1.1(cssnano@7.0.6(postcss@8.5.1))(postcss@8.5.1)(relateurl@0.2.7)(svgo@3.3.2)(terser@5.32.0)(typescript@5.7.3): + htmlnano@2.1.1(cssnano@7.0.6(postcss@8.5.2))(postcss@8.5.2)(relateurl@0.2.7)(svgo@3.3.2)(terser@5.32.0)(typescript@5.7.3): dependencies: cosmiconfig: 9.0.0(typescript@5.7.3) posthtml: 0.16.6 timsort: 0.3.0 optionalDependencies: - cssnano: 7.0.6(postcss@8.5.1) - postcss: 8.5.1 + cssnano: 7.0.6(postcss@8.5.2) + postcss: 8.5.2 relateurl: 0.2.7 svgo: 3.3.2 terser: 5.32.0 @@ -12475,9 +12475,9 @@ snapshots: hyperdyperid@1.2.0: {} - icss-utils@5.1.0(postcss@8.5.1): + icss-utils@5.1.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 ieee754@1.2.1: {} @@ -13512,17 +13512,17 @@ snapshots: mkdist@2.2.0(typescript@5.7.3)(vue-tsc@2.1.10(typescript@5.7.3))(vue@3.5.13(typescript@5.7.3)): dependencies: - autoprefixer: 10.4.20(postcss@8.5.1) + autoprefixer: 10.4.20(postcss@8.5.2) citty: 0.1.6 - cssnano: 7.0.6(postcss@8.5.1) + cssnano: 7.0.6(postcss@8.5.2) defu: 6.1.4 esbuild: 0.24.2 jiti: 2.4.2 mlly: 1.7.4 pathe: 1.1.2 pkg-types: 1.3.1 - postcss: 8.5.1 - postcss-nested: 7.0.2(postcss@8.5.1) + postcss: 8.5.2 + postcss-nested: 7.0.2(postcss@8.5.2) semver: 7.7.1 tinyglobby: 0.2.10 optionalDependencies: @@ -13532,17 +13532,17 @@ snapshots: mkdist@2.2.0(typescript@5.7.3)(vue-tsc@2.2.0(typescript@5.7.3))(vue@3.5.13(typescript@5.7.3)): dependencies: - autoprefixer: 10.4.20(postcss@8.5.1) + autoprefixer: 10.4.20(postcss@8.5.2) citty: 0.1.6 - cssnano: 7.0.6(postcss@8.5.1) + cssnano: 7.0.6(postcss@8.5.2) defu: 6.1.4 esbuild: 0.24.2 jiti: 2.4.2 mlly: 1.7.4 pathe: 1.1.2 pkg-types: 1.3.1 - postcss: 8.5.1 - postcss-nested: 7.0.2(postcss@8.5.1) + postcss: 8.5.2 + postcss-nested: 7.0.2(postcss@8.5.2) semver: 7.7.1 tinyglobby: 0.2.10 optionalDependencies: @@ -14040,59 +14040,59 @@ snapshots: possible-typed-array-names@1.0.0: {} - postcss-calc@10.0.2(postcss@8.5.1): + postcss-calc@10.0.2(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 - postcss-colormin@7.0.2(postcss@8.5.1): + postcss-colormin@7.0.2(postcss@8.5.2): dependencies: browserslist: 4.24.0 caniuse-api: 3.0.0 colord: 2.9.3 - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-convert-values@7.0.4(postcss@8.5.1): + postcss-convert-values@7.0.4(postcss@8.5.2): dependencies: browserslist: 4.24.0 - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-discard-comments@7.0.3(postcss@8.5.1): + postcss-discard-comments@7.0.3(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-selector-parser: 6.1.2 - postcss-discard-duplicates@7.0.1(postcss@8.5.1): + postcss-discard-duplicates@7.0.1(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 - postcss-discard-empty@7.0.0(postcss@8.5.1): + postcss-discard-empty@7.0.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 - postcss-discard-overridden@7.0.0(postcss@8.5.1): + postcss-discard-overridden@7.0.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-import-resolver@2.0.0: dependencies: enhanced-resolve: 4.5.0 - postcss-import@16.1.0(postcss@8.5.1): + postcss-import@16.1.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-loader@8.1.1(@rspack/core@1.2.2)(postcss@8.5.1)(typescript@5.7.3)(webpack@5.97.1): + postcss-loader@8.1.1(@rspack/core@1.2.2)(postcss@8.5.2)(typescript@5.7.3)(webpack@5.97.1): dependencies: cosmiconfig: 9.0.0(typescript@5.7.3) jiti: 2.4.2 - postcss: 8.5.1 + postcss: 8.5.2 semver: 7.7.1 optionalDependencies: '@rspack/core': 1.2.2 @@ -14102,131 +14102,131 @@ snapshots: postcss-media-query-parser@0.2.3: {} - postcss-merge-longhand@7.0.4(postcss@8.5.1): + postcss-merge-longhand@7.0.4(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - stylehacks: 7.0.4(postcss@8.5.1) + stylehacks: 7.0.4(postcss@8.5.2) - postcss-merge-rules@7.0.4(postcss@8.5.1): + postcss-merge-rules@7.0.4(postcss@8.5.2): dependencies: browserslist: 4.24.0 caniuse-api: 3.0.0 - cssnano-utils: 5.0.0(postcss@8.5.1) - postcss: 8.5.1 + cssnano-utils: 5.0.0(postcss@8.5.2) + postcss: 8.5.2 postcss-selector-parser: 6.1.2 - postcss-minify-font-values@7.0.0(postcss@8.5.1): + postcss-minify-font-values@7.0.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-minify-gradients@7.0.0(postcss@8.5.1): + postcss-minify-gradients@7.0.0(postcss@8.5.2): dependencies: colord: 2.9.3 - cssnano-utils: 5.0.0(postcss@8.5.1) - postcss: 8.5.1 + cssnano-utils: 5.0.0(postcss@8.5.2) + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-minify-params@7.0.2(postcss@8.5.1): + postcss-minify-params@7.0.2(postcss@8.5.2): dependencies: browserslist: 4.24.0 - cssnano-utils: 5.0.0(postcss@8.5.1) - postcss: 8.5.1 + cssnano-utils: 5.0.0(postcss@8.5.2) + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-minify-selectors@7.0.4(postcss@8.5.1): + postcss-minify-selectors@7.0.4(postcss@8.5.2): dependencies: cssesc: 3.0.0 - postcss: 8.5.1 + postcss: 8.5.2 postcss-selector-parser: 6.1.2 - postcss-modules-extract-imports@3.1.0(postcss@8.5.1): + postcss-modules-extract-imports@3.1.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 - postcss-modules-local-by-default@4.0.5(postcss@8.5.1): + postcss-modules-local-by-default@4.0.5(postcss@8.5.2): dependencies: - icss-utils: 5.1.0(postcss@8.5.1) - postcss: 8.5.1 + icss-utils: 5.1.0(postcss@8.5.2) + postcss: 8.5.2 postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.2.0(postcss@8.5.1): + postcss-modules-scope@3.2.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-selector-parser: 6.1.2 - postcss-modules-values@4.0.0(postcss@8.5.1): + postcss-modules-values@4.0.0(postcss@8.5.2): dependencies: - icss-utils: 5.1.0(postcss@8.5.1) - postcss: 8.5.1 + icss-utils: 5.1.0(postcss@8.5.2) + postcss: 8.5.2 - postcss-nested@7.0.2(postcss@8.5.1): + postcss-nested@7.0.2(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-selector-parser: 7.0.0 - postcss-normalize-charset@7.0.0(postcss@8.5.1): + postcss-normalize-charset@7.0.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 - postcss-normalize-display-values@7.0.0(postcss@8.5.1): + postcss-normalize-display-values@7.0.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-normalize-positions@7.0.0(postcss@8.5.1): + postcss-normalize-positions@7.0.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-normalize-repeat-style@7.0.0(postcss@8.5.1): + postcss-normalize-repeat-style@7.0.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-normalize-string@7.0.0(postcss@8.5.1): + postcss-normalize-string@7.0.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-normalize-timing-functions@7.0.0(postcss@8.5.1): + postcss-normalize-timing-functions@7.0.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-normalize-unicode@7.0.2(postcss@8.5.1): + postcss-normalize-unicode@7.0.2(postcss@8.5.2): dependencies: browserslist: 4.24.0 - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-normalize-url@7.0.0(postcss@8.5.1): + postcss-normalize-url@7.0.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-normalize-whitespace@7.0.0(postcss@8.5.1): + postcss-normalize-whitespace@7.0.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-ordered-values@7.0.1(postcss@8.5.1): + postcss-ordered-values@7.0.1(postcss@8.5.2): dependencies: - cssnano-utils: 5.0.0(postcss@8.5.1) - postcss: 8.5.1 + cssnano-utils: 5.0.0(postcss@8.5.2) + postcss: 8.5.2 postcss-value-parser: 4.2.0 - postcss-reduce-initial@7.0.2(postcss@8.5.1): + postcss-reduce-initial@7.0.2(postcss@8.5.2): dependencies: browserslist: 4.24.0 caniuse-api: 3.0.0 - postcss: 8.5.1 + postcss: 8.5.2 - postcss-reduce-transforms@7.0.0(postcss@8.5.1): + postcss-reduce-transforms@7.0.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 postcss-selector-parser@6.1.2: @@ -14239,28 +14239,28 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-svgo@7.0.1(postcss@8.5.1): + postcss-svgo@7.0.1(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 svgo: 3.3.2 - postcss-unique-selectors@7.0.3(postcss@8.5.1): + postcss-unique-selectors@7.0.3(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-selector-parser: 6.1.2 - postcss-url@10.1.3(postcss@8.5.1): + postcss-url@10.1.3(postcss@8.5.2): dependencies: make-dir: 3.1.0 mime: 2.5.2 minimatch: 3.0.8 - postcss: 8.5.1 + postcss: 8.5.2 xxhashjs: 0.2.2 postcss-value-parser@4.2.0: {} - postcss@8.5.1: + postcss@8.5.2: dependencies: nanoid: 3.3.8 picocolors: 1.1.1 @@ -15054,10 +15054,10 @@ snapshots: structured-clone-es@1.0.0: {} - stylehacks@7.0.4(postcss@8.5.1): + stylehacks@7.0.4(postcss@8.5.2): dependencies: browserslist: 4.24.0 - postcss: 8.5.1 + postcss: 8.5.2 postcss-selector-parser: 6.1.2 summary@2.1.0: {} @@ -15443,12 +15443,12 @@ snapshots: universalify@2.0.1: {} - unocss@65.4.3(postcss@8.5.1)(rollup@4.34.6)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3)): + unocss@65.4.3(postcss@8.5.2)(rollup@4.34.6)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3)): dependencies: '@unocss/astro': 65.4.3(rollup@4.34.6)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3)) '@unocss/cli': 65.4.3(rollup@4.34.6) '@unocss/core': 65.4.3 - '@unocss/postcss': 65.4.3(postcss@8.5.1) + '@unocss/postcss': 65.4.3(postcss@8.5.2) '@unocss/preset-attributify': 65.4.3 '@unocss/preset-icons': 65.4.3 '@unocss/preset-mini': 65.4.3 @@ -15685,7 +15685,7 @@ snapshots: vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0): dependencies: esbuild: 0.24.2 - postcss: 8.5.1 + postcss: 8.5.2 rollup: 4.34.6 optionalDependencies: '@types/node': 22.13.1 From 4992de433e6188a0aab1f04415db294ffd1a8e5d Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Tue, 11 Feb 2025 09:37:20 +0000 Subject: [PATCH 13/18] fix(schema): return `null` from resolve functions --- packages/schema/src/config/app.ts | 4 ++-- packages/schema/src/config/typescript.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/schema/src/config/app.ts b/packages/schema/src/config/app.ts index 4bfc22184f..15d6897813 100644 --- a/packages/schema/src/config/app.ts +++ b/packages/schema/src/config/app.ts @@ -371,7 +371,7 @@ export default defineResolvers({ * } * * ``` - * @type {string | boolean | undefined} + * @type {string | boolean | undefined | null} */ spaLoadingTemplate: { $resolve: async (val, get) => { @@ -381,7 +381,7 @@ export default defineResolvers({ if (typeof val === 'boolean') { return val } - return undefined + return null }, }, diff --git a/packages/schema/src/config/typescript.ts b/packages/schema/src/config/typescript.ts index be6ccf3d42..3c98111e3d 100644 --- a/packages/schema/src/config/typescript.ts +++ b/packages/schema/src/config/typescript.ts @@ -20,7 +20,7 @@ export default defineResolvers({ * builder environment types (with `false`) to handle this fully yourself, or opt for a 'shared' option. * * The 'shared' option is advised for module authors, who will want to support multiple possible builders. - * @type {'vite' | 'webpack' | 'rspack' | 'shared' | false | undefined} + * @type {'vite' | 'webpack' | 'rspack' | 'shared' | false | undefined | null} */ builder: { $resolve: (val) => { @@ -32,7 +32,7 @@ export default defineResolvers({ if (val === false) { return false } - return undefined + return null }, }, From 8aa861389ce856e1acd6400c1eeaf5d5d6f5ce55 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 11 Feb 2025 15:02:39 +0000 Subject: [PATCH 14/18] chore(deps): update all non-major dependencies (main) (#30946) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Daniel Roe --- package.json | 6 +- packages/kit/package.json | 8 +- packages/nuxt/package.json | 10 +- packages/rspack/package.json | 6 +- packages/schema/package.json | 4 +- packages/vite/package.json | 4 +- packages/webpack/package.json | 6 +- playground/package.json | 2 +- pnpm-lock.yaml | 444 +++++++++----------- test/fixtures/basic-types/package.json | 2 +- test/fixtures/basic/package.json | 2 +- test/fixtures/hmr/package.json | 2 +- test/fixtures/minimal-pages/package.json | 2 +- test/fixtures/minimal-types/package.json | 2 +- test/fixtures/minimal/package.json | 2 +- test/fixtures/runtime-compiler/package.json | 2 +- test/fixtures/spa-loader/package.json | 2 +- test/fixtures/suspense/package.json | 2 +- 18 files changed, 224 insertions(+), 284 deletions(-) diff --git a/package.json b/package.json index 3d935f22e7..87f38fab35 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "@vue/compiler-core": "3.5.13", "@vue/compiler-dom": "3.5.13", "@vue/shared": "3.5.13", - "c12": "2.0.1", + "c12": "2.0.2", "h3": "npm:h3-nightly@1.14.0-20250122-114730-3f9e703", "jiti": "2.4.2", "magic-string": "^0.30.17", @@ -68,7 +68,7 @@ "ufo": "1.5.4", "unbuild": "3.3.1", "unhead": "1.11.18", - "unimport": "4.1.0", + "unimport": "4.1.1", "vite": "6.1.0", "vue": "3.5.13" }, @@ -109,7 +109,7 @@ "happy-dom": "17.0.3", "installed-check": "9.3.0", "jiti": "2.4.2", - "knip": "5.43.6", + "knip": "5.44.0", "magic-string": "0.30.17", "markdownlint-cli": "0.44.0", "memfs": "4.17.0", diff --git a/packages/kit/package.json b/packages/kit/package.json index 79b886e4db..36cbcb2058 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -27,7 +27,7 @@ "test:attw": "attw --pack" }, "dependencies": { - "c12": "^2.0.1", + "c12": "^2.0.2", "consola": "^3.4.0", "defu": "^6.1.4", "destr": "^2.0.3", @@ -45,12 +45,12 @@ "std-env": "^3.8.0", "ufo": "^1.5.4", "unctx": "^2.4.1", - "unimport": "^4.1.0", + "unimport": "^4.1.1", "untyped": "^1.5.2" }, "devDependencies": { "@nuxt/schema": "workspace:*", - "@rspack/core": "1.2.2", + "@rspack/core": "1.2.3", "@types/semver": "7.5.8", "nitro": "npm:nitro-nightly@3.0.0-beta-28969273.f7aa9de6", "unbuild": "3.3.1", @@ -59,6 +59,6 @@ "webpack": "5.97.1" }, "engines": { - "node": ">=18.20.6" + "node": ">=18.12.0" } } diff --git a/packages/nuxt/package.json b/packages/nuxt/package.json index edebda5bb6..59b7f41f21 100644 --- a/packages/nuxt/package.json +++ b/packages/nuxt/package.json @@ -69,7 +69,7 @@ "@nuxt/devtools": "^2.0.0", "@nuxt/kit": "workspace:*", "@nuxt/schema": "workspace:*", - "@nuxt/telemetry": "^2.6.4", + "@nuxt/telemetry": "^2.6.5", "@nuxt/vite-builder": "workspace:*", "@unhead/dom": "^1.11.18", "@unhead/shared": "^1.11.18", @@ -77,7 +77,7 @@ "@unhead/vue": "^1.11.18", "@vue/shared": "^3.5.13", "acorn": "8.14.0", - "c12": "^2.0.1", + "c12": "^2.0.2", "chokidar": "^4.0.3", "compatx": "^0.1.8", "consola": "^3.4.0", @@ -120,8 +120,8 @@ "unctx": "^2.4.1", "unenv": "^1.10.0", "unhead": "^1.11.18", - "unimport": "^4.1.0", - "unplugin": "^2.1.2", + "unimport": "^4.1.1", + "unplugin": "^2.2.0", "unplugin-vue-router": "^0.11.2", "unstorage": "^1.14.4", "untyped": "^1.5.2", @@ -153,6 +153,6 @@ } }, "engines": { - "node": "^18.20.6 || ^20.9.0 || >=22.0.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0.0" } } diff --git a/packages/rspack/package.json b/packages/rspack/package.json index ae37465963..50feb33e40 100644 --- a/packages/rspack/package.json +++ b/packages/rspack/package.json @@ -32,7 +32,7 @@ "dependencies": { "@nuxt/friendly-errors-webpack-plugin": "^2.6.0", "@nuxt/kit": "workspace:*", - "@rspack/core": "^1.2.2", + "@rspack/core": "^1.2.3", "autoprefixer": "^10.4.20", "css-loader": "^7.1.2", "css-minimizer-webpack-plugin": "^7.0.0", @@ -61,7 +61,7 @@ "time-fix-plugin": "^2.0.7", "ufo": "^1.5.4", "unenv": "^1.10.0", - "unplugin": "^2.1.2", + "unplugin": "^2.2.0", "url-loader": "^4.1.1", "vue-bundle-renderer": "^2.1.1", "vue-loader": "^17.4.2", @@ -83,6 +83,6 @@ "vue": "^3.3.4" }, "engines": { - "node": "^18.20.6 || ^20.9.0 || >=22.0.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0.0" } } diff --git a/packages/schema/package.json b/packages/schema/package.json index a66b5dbbd8..4c09d5c9c1 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -46,7 +46,7 @@ "@vue/compiler-core": "3.5.13", "@vue/compiler-sfc": "3.5.13", "@vue/language-core": "2.2.0", - "c12": "2.0.1", + "c12": "2.0.2", "chokidar": "4.0.3", "compatx": "0.1.8", "css-minimizer-webpack-plugin": "7.0.0", @@ -65,7 +65,7 @@ "scule": "1.3.0", "unbuild": "3.3.1", "unctx": "2.4.1", - "unimport": "4.1.0", + "unimport": "4.1.1", "untyped": "1.5.2", "vite": "6.1.0", "vue": "3.5.13", diff --git a/packages/vite/package.json b/packages/vite/package.json index 191fbc6e7c..a3063bf132 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -54,7 +54,7 @@ "std-env": "^3.8.0", "ufo": "^1.5.4", "unenv": "^1.10.0", - "unplugin": "^2.1.2", + "unplugin": "^2.2.0", "vite": "^6.1.0", "vite-node": "^3.0.5", "vite-plugin-checker": "^0.8.0", @@ -64,6 +64,6 @@ "vue": "^3.3.4" }, "engines": { - "node": "^18.20.6 || ^20.9.0 || >=22.0.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0.0" } } diff --git a/packages/webpack/package.json b/packages/webpack/package.json index ebc05e9402..2b8a35ef80 100644 --- a/packages/webpack/package.json +++ b/packages/webpack/package.json @@ -61,7 +61,7 @@ "time-fix-plugin": "^2.0.7", "ufo": "^1.5.4", "unenv": "^1.10.0", - "unplugin": "^2.1.2", + "unplugin": "^2.2.0", "url-loader": "^4.1.1", "vue-bundle-renderer": "^2.1.1", "vue-loader": "^17.4.2", @@ -73,7 +73,7 @@ }, "devDependencies": { "@nuxt/schema": "workspace:*", - "@rspack/core": "1.2.2", + "@rspack/core": "1.2.3", "@types/pify": "5.0.4", "@types/webpack-bundle-analyzer": "4.7.0", "@types/webpack-hot-middleware": "2.25.9", @@ -85,6 +85,6 @@ "vue": "^3.3.4" }, "engines": { - "node": "^18.20.6 || ^20.9.0 || >=22.0.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0.0" } } diff --git a/playground/package.json b/playground/package.json index 1524934496..0f5e407014 100644 --- a/playground/package.json +++ b/playground/package.json @@ -10,6 +10,6 @@ "nuxt": "workspace:*" }, "engines": { - "node": "^18.20.6 || ^20.9.0 || >=22.0.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 56a8996767..c643737a1c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -22,7 +22,7 @@ overrides: '@vue/compiler-core': 3.5.13 '@vue/compiler-dom': 3.5.13 '@vue/shared': 3.5.13 - c12: 2.0.1 + c12: 2.0.2 h3: npm:h3-nightly@1.14.0-20250122-114730-3f9e703 jiti: 2.4.2 magic-string: ^0.30.17 @@ -36,7 +36,7 @@ overrides: ufo: 1.5.4 unbuild: 3.3.1 unhead: 1.11.18 - unimport: 4.1.0 + unimport: 4.1.1 vite: 6.1.0 vue: 3.5.13 @@ -153,8 +153,8 @@ importers: specifier: 2.4.2 version: 2.4.2 knip: - specifier: 5.43.6 - version: 5.43.6(@types/node@22.13.1)(typescript@5.7.3) + specifier: 5.44.0 + version: 5.44.0(@types/node@22.13.1)(typescript@5.7.3) magic-string: specifier: ^0.30.17 version: 0.30.17 @@ -234,8 +234,8 @@ importers: packages/kit: dependencies: c12: - specifier: 2.0.1 - version: 2.0.1(magicast@0.3.5) + specifier: 2.0.2 + version: 2.0.2(magicast@0.3.5) consola: specifier: ^3.4.0 version: 3.4.0 @@ -288,8 +288,8 @@ importers: specifier: ^2.4.1 version: 2.4.1 unimport: - specifier: 4.1.0 - version: 4.1.0 + specifier: 4.1.1 + version: 4.1.1 untyped: specifier: ^1.5.2 version: 1.5.2 @@ -298,8 +298,8 @@ importers: specifier: workspace:* version: link:../schema '@rspack/core': - specifier: 1.2.2 - version: 1.2.2 + specifier: 1.2.3 + version: 1.2.3 '@types/semver': specifier: 7.5.8 version: 7.5.8 @@ -337,8 +337,8 @@ importers: specifier: workspace:* version: link:../schema '@nuxt/telemetry': - specifier: ^2.6.4 - version: 2.6.4 + specifier: ^2.6.5 + version: 2.6.5 '@nuxt/vite-builder': specifier: workspace:* version: link:../vite @@ -364,8 +364,8 @@ importers: specifier: 8.14.0 version: 8.14.0 c12: - specifier: 2.0.1 - version: 2.0.1(magicast@0.3.5) + specifier: 2.0.2 + version: 2.0.2(magicast@0.3.5) chokidar: specifier: ^4.0.3 version: 4.0.3 @@ -493,11 +493,11 @@ importers: specifier: 1.11.18 version: 1.11.18 unimport: - specifier: 4.1.0 - version: 4.1.0 + specifier: 4.1.1 + version: 4.1.1 unplugin: - specifier: ^2.1.2 - version: 2.1.2 + specifier: ^2.2.0 + version: 2.2.0 unplugin-vue-router: specifier: ^0.11.2 version: 0.11.2(rollup@4.34.6)(vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3)) @@ -554,14 +554,14 @@ importers: specifier: workspace:* version: link:../kit '@rspack/core': - specifier: ^1.2.2 - version: 1.2.2 + specifier: ^1.2.3 + version: 1.2.3 autoprefixer: specifier: ^10.4.20 version: 10.4.20(postcss@8.5.2) css-loader: specifier: ^7.1.2 - version: 7.1.2(@rspack/core@1.2.2)(webpack@5.97.1) + version: 7.1.2(@rspack/core@1.2.3)(webpack@5.97.1) css-minimizer-webpack-plugin: specifier: ^7.0.0 version: 7.0.0(webpack@5.97.1) @@ -621,7 +621,7 @@ importers: version: 2.0.0 postcss-loader: specifier: ^8.1.1 - version: 8.1.1(@rspack/core@1.2.2)(postcss@8.5.2)(typescript@5.7.3)(webpack@5.97.1) + version: 8.1.1(@rspack/core@1.2.3)(postcss@8.5.2)(typescript@5.7.3)(webpack@5.97.1) postcss-url: specifier: ^10.1.3 version: 10.1.3(postcss@8.5.2) @@ -641,8 +641,8 @@ importers: specifier: ^1.10.0 version: 1.10.0 unplugin: - specifier: ^2.1.2 - version: 2.1.2 + specifier: ^2.2.0 + version: 2.2.0 url-loader: specifier: ^4.1.1 version: 4.1.1(file-loader@6.2.0(webpack@5.97.1))(webpack@5.97.1) @@ -663,7 +663,7 @@ importers: version: 2.26.1 webpackbar: specifier: ^7.0.0 - version: 7.0.0(@rspack/core@1.2.2)(webpack@5.97.1) + version: 7.0.0(@rspack/core@1.2.3)(webpack@5.97.1) devDependencies: '@nuxt/schema': specifier: workspace:* @@ -733,8 +733,8 @@ importers: specifier: 2.2.0 version: 2.2.0(typescript@5.7.3) c12: - specifier: 2.0.1 - version: 2.0.1(magicast@0.3.5) + specifier: 2.0.2 + version: 2.0.2(magicast@0.3.5) chokidar: specifier: 4.0.3 version: 4.0.3 @@ -779,7 +779,7 @@ importers: version: 8.5.2 sass-loader: specifier: 16.0.4 - version: 16.0.4(@rspack/core@1.2.2)(webpack@5.97.1(esbuild@0.25.0)) + version: 16.0.4(@rspack/core@1.2.3)(webpack@5.97.1(esbuild@0.25.0)) scule: specifier: 1.3.0 version: 1.3.0 @@ -790,8 +790,8 @@ importers: specifier: 2.4.1 version: 2.4.1 unimport: - specifier: 4.1.0 - version: 4.1.0 + specifier: 4.1.1 + version: 4.1.1 untyped: specifier: 1.5.2 version: 1.5.2 @@ -934,8 +934,8 @@ importers: specifier: ^1.10.0 version: 1.10.0 unplugin: - specifier: ^2.1.2 - version: 2.1.2 + specifier: ^2.2.0 + version: 2.2.0 vite: specifier: 6.1.0 version: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) @@ -975,7 +975,7 @@ importers: version: 10.4.20(postcss@8.5.2) css-loader: specifier: ^7.1.2 - version: 7.1.2(@rspack/core@1.2.2)(webpack@5.97.1) + version: 7.1.2(@rspack/core@1.2.3)(webpack@5.97.1) css-minimizer-webpack-plugin: specifier: ^7.0.0 version: 7.0.0(webpack@5.97.1) @@ -1038,7 +1038,7 @@ importers: version: 2.0.0 postcss-loader: specifier: ^8.1.1 - version: 8.1.1(@rspack/core@1.2.2)(postcss@8.5.2)(typescript@5.7.3)(webpack@5.97.1) + version: 8.1.1(@rspack/core@1.2.3)(postcss@8.5.2)(typescript@5.7.3)(webpack@5.97.1) postcss-url: specifier: ^10.1.3 version: 10.1.3(postcss@8.5.2) @@ -1058,8 +1058,8 @@ importers: specifier: ^1.10.0 version: 1.10.0 unplugin: - specifier: ^2.1.2 - version: 2.1.2 + specifier: ^2.2.0 + version: 2.2.0 url-loader: specifier: ^4.1.1 version: 4.1.1(file-loader@6.2.0(webpack@5.97.1))(webpack@5.97.1) @@ -1083,14 +1083,14 @@ importers: version: 2.26.1 webpackbar: specifier: ^7.0.0 - version: 7.0.0(@rspack/core@1.2.2)(webpack@5.97.1) + version: 7.0.0(@rspack/core@1.2.3)(webpack@5.97.1) devDependencies: '@nuxt/schema': specifier: workspace:* version: link:../schema '@rspack/core': - specifier: 1.2.2 - version: 1.2.2 + specifier: 1.2.3 + version: 1.2.3 '@types/pify': specifier: 5.0.4 version: 5.0.4 @@ -1139,7 +1139,7 @@ importers: version: 1.5.4 unplugin: specifier: latest - version: 2.1.2 + version: 2.2.0 vue: specifier: 3.5.13 version: 3.5.13(typescript@5.7.3) @@ -1260,10 +1260,6 @@ packages: resolution: {integrity: sha512-l+lkXCHS6tQEc5oUpK28xBOZ6+HwaH7YwoYQbLFiYb4nS2/l1tKnZEtEWkD0GuiYdvArf9qBS0XlQGXzPMsNqQ==} engines: {node: '>=6.9.0'} - '@babel/generator@7.26.5': - resolution: {integrity: sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==} - engines: {node: '>=6.9.0'} - '@babel/generator@7.26.8': resolution: {integrity: sha512-ef383X5++iZHWAXX0SXQR6ZyQhw/0KtTkrTz61WXRhFM6dhpHulO/RJz79L8S6ugZHJkOOkUrUdxgdF2YiPFnA==} engines: {node: '>=6.9.0'} @@ -1330,11 +1326,6 @@ packages: resolution: {integrity: sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==} engines: {node: '>=6.9.0'} - '@babel/parser@7.26.7': - resolution: {integrity: sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.26.8': resolution: {integrity: sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw==} engines: {node: '>=6.0.0'} @@ -1389,26 +1380,14 @@ packages: resolution: {integrity: sha512-SF+g7S2mhTT1b7CHyfNjDkPU1corxg4LPYsyP0x5KuCl+EbtBQHRLqr9N3q7e7+x7NQ5LYxQf8mJ2PmzebLr0A==} engines: {node: '>=6.9.0'} - '@babel/template@7.25.9': - resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} - engines: {node: '>=6.9.0'} - '@babel/template@7.26.8': resolution: {integrity: sha512-iNKaX3ZebKIsCvJ+0jd6embf+Aulaa3vNBqZ41kM7iTWjx5qzWKXGHiJUW3+nTpQ18SG11hdF8OAzKrpXkb96Q==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.26.7': - resolution: {integrity: sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==} - engines: {node: '>=6.9.0'} - '@babel/traverse@7.26.8': resolution: {integrity: sha512-nic9tRkjYH0oB2dzr/JoGIm+4Q6SuYeLEiIiZDwBscRMYFJ+tMAz98fuel9ZnbXViA2I0HVSSRRK8DW5fjXStA==} engines: {node: '>=6.9.0'} - '@babel/types@7.26.7': - resolution: {integrity: sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==} - engines: {node: '>=6.9.0'} - '@babel/types@7.26.8': resolution: {integrity: sha512-eUuWapzEGWFEpHFxgEaBG8e3n6S8L3MSu0oda755rOfabWPnh0Our1AozNFVUxGFIhbKgd1ksprsoDGMinTOTA==} engines: {node: '>=6.9.0'} @@ -2065,10 +2044,6 @@ packages: resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.19.0': - resolution: {integrity: sha512-rbq9/g38qjfqFLOVPvwjIvFFdNziEC5S65jmjPw5r6A//QH+W91akh9irMwjDN8zKUTak6W9EsAv4m/7Wnw0UQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.20.0': resolution: {integrity: sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2315,9 +2290,9 @@ packages: '@types/youtube': optional: true - '@nuxt/telemetry@2.6.4': - resolution: {integrity: sha512-2Lgdn07Suraly5dSfVQ4ttBQBMtmjvCTGKGUHpc1UyH87HT9xCm3KLFO0UcVQ8+LNYCgoOaK7lq9qDJOfBfZ5A==} - engines: {node: '>=18.20.5'} + '@nuxt/telemetry@2.6.5': + resolution: {integrity: sha512-lwMp9OHML/m0mjh7P5iz9PxINnk5smGkGebh88Wh8PjvnRooY1TBsbyq7mlSrNibpwD1BkwqhV5IAZOXWHLxMQ==} + engines: {node: '>=18.12.0'} hasBin: true '@nuxt/test-utils@3.15.4': @@ -2737,56 +2712,56 @@ packages: cpu: [x64] os: [win32] - '@rspack/binding-darwin-arm64@1.2.2': - resolution: {integrity: sha512-h23F8zEkXWhwMeScm0ZnN78Zh7hCDalxIWsm7bBS0eKadnlegUDwwCF8WE+8NjWr7bRzv0p3QBWlS5ufkcL4eA==} + '@rspack/binding-darwin-arm64@1.2.3': + resolution: {integrity: sha512-xuwYzhPgNCr4BtKXCU3xe4249TFsXAZglIlbxv8Qs3PeIarrZMRddcqH2zUXi+nJavNw3yN12sCYEzk1f+O4FQ==} cpu: [arm64] os: [darwin] - '@rspack/binding-darwin-x64@1.2.2': - resolution: {integrity: sha512-vG5s7FkEvwrGLfksyDRHwKAHUkhZt1zHZZXJQn4gZKjTBonje8ezdc7IFlDiWpC4S+oBYp73nDWkUzkGRbSdcQ==} + '@rspack/binding-darwin-x64@1.2.3': + resolution: {integrity: sha512-afiIN8elcrO2EtO27UN0qyZqu5FXGUdclud56DrhvEfnWS3GGxJEdjA8XUYVXkfCYakdXHucIJKlkkgaAjEvHg==} cpu: [x64] os: [darwin] - '@rspack/binding-linux-arm64-gnu@1.2.2': - resolution: {integrity: sha512-VykY/kiYOzO8E1nYzfJ9+gQEHxb5B6lt5wa8M6xFi5B6jEGU+OsaGskmAZB9/GFImeFDHxDPvhUalI4R9p8O2Q==} + '@rspack/binding-linux-arm64-gnu@1.2.3': + resolution: {integrity: sha512-K2u/fPUmKujlKSWL3q2zaUu8/6ZK/bOGKcqJSib8jdanQQ/GFKwKtPAFOOa/vvqbzhDocqKOobFR10FhgJqCHg==} cpu: [arm64] os: [linux] - '@rspack/binding-linux-arm64-musl@1.2.2': - resolution: {integrity: sha512-Z5vAC4wGfXi8XXZ6hs8Q06TYjr3zHf819HB4DI5i4C1eQTeKdZSyoFD0NHFG23bP4NWJffp8KhmoObcy9jBT5Q==} + '@rspack/binding-linux-arm64-musl@1.2.3': + resolution: {integrity: sha512-mgovdzGb6cH9hQsjTyzDbfZWCPhTcoHcLro1P7UbiqcLPMDJp/k3Io9xV2/EJhaDA1aynIdq7XfY0fuk4+6Irw==} cpu: [arm64] os: [linux] - '@rspack/binding-linux-x64-gnu@1.2.2': - resolution: {integrity: sha512-o3pDaL+cH5EeRbDE9gZcdZpBgp5iXvYZBBhe8vZQllYgI4zN5MJEuleV7WplG3UwTXlgZg3Kht4RORSOPn96vg==} + '@rspack/binding-linux-x64-gnu@1.2.3': + resolution: {integrity: sha512-542lwJzB1RMGuVdBdA3cOWTlmL9okpOppHUBWcNCjmJM+9zTI+0jwjVe8HaqOqtuR8XzNsoCwT9QonU/GLcuhg==} cpu: [x64] os: [linux] - '@rspack/binding-linux-x64-musl@1.2.2': - resolution: {integrity: sha512-RE3e0xe4DdchHssttKzryDwjLkbrNk/4H59TkkWeGYJcLw41tmcOZVFQUOwKLUvXWVyif/vjvV/w1SMlqB4wQg==} + '@rspack/binding-linux-x64-musl@1.2.3': + resolution: {integrity: sha512-dJromiREDcTWqzfCOI5y1IVoYmUnCv7vCp63AEq0+13fJJdk7+pcNN3VV2jOKpk9VECSvjg1c01wl+UzXAXFMw==} cpu: [x64] os: [linux] - '@rspack/binding-win32-arm64-msvc@1.2.2': - resolution: {integrity: sha512-R+PKBYn6uzTaDdVqTHvjqiJPBr5ZHg1wg5UmFDLNH9OklzVFyQh1JInSdJRb7lzfzTRz6bEkkwUFBPQK/CGScw==} + '@rspack/binding-win32-arm64-msvc@1.2.3': + resolution: {integrity: sha512-S8ZKddMMQDGy8jx/R0i2m1XrmfY2CpI+t6lIEpsuZuKUR4MbOGKN2DuL4MDnT3m8JaYvC8ihsvQjBXQCy3SNxQ==} cpu: [arm64] os: [win32] - '@rspack/binding-win32-ia32-msvc@1.2.2': - resolution: {integrity: sha512-dBqz3sRAGZ2f31FgzKLDvIRfq2haRP3X3XVCT0PsiMcvt7QJng+26aYYMy2THatd/nM8IwExYeitHWeiMBoruw==} + '@rspack/binding-win32-ia32-msvc@1.2.3': + resolution: {integrity: sha512-74lqSMKQJcJcgfFaxm+G9YVJSl2KK9/v4fRoMsWApztNy2qNgee+UguNBCOU6JLa3rVSj8Z5OVVDtJkGFrSvVg==} cpu: [ia32] os: [win32] - '@rspack/binding-win32-x64-msvc@1.2.2': - resolution: {integrity: sha512-eeAvaN831KG553cMSHkVldyk6YQn4ujgRHov6r1wtREq7CD3/ka9LMkJUepCN85K7XtwYT0N4KpFIQyf5GTGoA==} + '@rspack/binding-win32-x64-msvc@1.2.3': + resolution: {integrity: sha512-fcU532PgFdd5Bil8jwQW0Dcb/80oM6V0qSstGIxZ4M77t4t8e/PcukXfORTL71FfNQ64Rd4Dp6XRl1NHNJVxeg==} cpu: [x64] os: [win32] - '@rspack/binding@1.2.2': - resolution: {integrity: sha512-GCZwpGFYlLTdJ2soPLwjw9z4LSZ+GdpbHNfBt3Cm/f/bAF8n6mZc7dHUqN893RFh7MPU17HNEL3fMw7XR+6pHg==} + '@rspack/binding@1.2.3': + resolution: {integrity: sha512-enpOXZPQOJO800wdWcR7H5Dx5UZfwkaT0D0xsHD53WbpI09Z2KJbLX7I/i1FLLy3K1KQTB+2FIHLVdRikasXZA==} - '@rspack/core@1.2.2': - resolution: {integrity: sha512-EeHAmY65Uj62hSbUKesbrcWGE7jfUI887RD03G++Gj8jS4WPHEu1TFODXNOXg6pa7zyIvs2BK0Bm16Kwz8AEaQ==} + '@rspack/core@1.2.3': + resolution: {integrity: sha512-BFgdUYf05/hjjY9Nlwq8DpWaRJN5w2kTl8ZJi20SRL60oAx+ZD2ABT+fsPhBiFSmfTZDdvGGIq5e3vfRzoIuqg==} engines: {node: '>=16.0.0'} peerDependencies: '@rspack/tracing': ^1.x @@ -2810,8 +2785,8 @@ packages: '@shikijs/core@1.23.1': resolution: {integrity: sha512-NuOVgwcHgVC6jBVH5V7iblziw6iQbWWHrj5IlZI3Fqu2yx9awH7OIQkXIcsHsUmY19ckwSgUMgrqExEyP5A0TA==} - '@shikijs/core@2.3.2': - resolution: {integrity: sha512-s7vyL3LzUKm3Qwf36zRWlavX9BQMZTIq9B1almM63M5xBuSldnsTHCmsXzoF/Kyw4k7Xgas7yAyJz9VR/vcP1A==} + '@shikijs/core@2.1.0': + resolution: {integrity: sha512-v795KDmvs+4oV0XD05YLzfDMe9ISBgNjtFxP4PAEv5DqyeghO1/TwDqs9ca5/E6fuO95IcAcWqR6cCX9TnqLZA==} '@shikijs/engine-javascript@1.22.2': resolution: {integrity: sha512-iOvql09ql6m+3d1vtvP8fLCVCK7BQD1pJFmHIECsujB0V32BJ0Ab6hxk1ewVSMFA58FI0pR2Had9BKZdyQrxTw==} @@ -2819,8 +2794,8 @@ packages: '@shikijs/engine-javascript@1.23.1': resolution: {integrity: sha512-i/LdEwT5k3FVu07SiApRFwRcSJs5QM9+tod5vYCPig1Ywi8GR30zcujbxGQFJHwYD7A5BUqagi8o5KS+LEVgBg==} - '@shikijs/engine-javascript@2.3.2': - resolution: {integrity: sha512-w3IEMu5HfL/OaJTsMbIfZ1HRPnWVYRANeDtmsdIIEgUOcLjzFJFQwlnkckGjKHekEzNqlMLbgB/twnfZ/EEAGg==} + '@shikijs/engine-javascript@2.1.0': + resolution: {integrity: sha512-cgIUdAliOsoaa0rJz/z+jvhrpRd+fVAoixVFEVxUq5FA+tHgBZAIfVJSgJNVRj2hs/wZ1+4hMe82eKAThVh0nQ==} '@shikijs/engine-oniguruma@1.22.2': resolution: {integrity: sha512-GIZPAGzQOy56mGvWMoZRPggn0dTlBf1gutV5TdceLCZlFNqWmuc7u+CzD0Gd9vQUTgLbrt0KLzz6FNprqYAxlA==} @@ -2828,14 +2803,14 @@ packages: '@shikijs/engine-oniguruma@1.23.1': resolution: {integrity: sha512-KQ+lgeJJ5m2ISbUZudLR1qHeH3MnSs2mjFg7bnencgs5jDVPeJ2NVDJ3N5ZHbcTsOIh0qIueyAJnwg7lg7kwXQ==} - '@shikijs/engine-oniguruma@2.3.2': - resolution: {integrity: sha512-vikMY1TroyZXUHIXbMnvY/mjtOxMn+tavcfAeQPgWS9FHcgFSUoEtywF5B5sOLb9NXb8P2vb7odkh3nj15/00A==} + '@shikijs/engine-oniguruma@2.1.0': + resolution: {integrity: sha512-Ujik33wEDqgqY2WpjRDUBECGcKPv3eGGkoXPujIXvokLaRmGky8NisSk8lHUGeSFxo/Cz5sgFej9sJmA9yeepg==} '@shikijs/transformers@1.22.2': resolution: {integrity: sha512-8f78OiBa6pZDoZ53lYTmuvpFPlWtevn23bzG+azpPVvZg7ITax57o/K3TC91eYL3OMJOO0onPbgnQyZjRos8XQ==} - '@shikijs/twoslash@2.3.2': - resolution: {integrity: sha512-eYLSPNKH7qWpoStesZlDix+Mdppb/VUBc7LFZyOwTvTzZ6H+DS3OMUDH0wndc6ZWYUR27cyDMtFZoBjyzxRL0A==} + '@shikijs/twoslash@2.1.0': + resolution: {integrity: sha512-tgZEk78/g1ceC/mS3xA50aIc2rArl+oiphZEdAXaoioLVNebDChhV93NzcXu4NAq4pCogfBbD5HV8qO38+fQyQ==} '@shikijs/types@1.22.2': resolution: {integrity: sha512-NCWDa6LGZqTuzjsGfXOBWfjS/fDIbDdmVDug+7ykVe1IKT4c1gakrvlfFYp5NhAXH/lyqLM8wsAPo5wNy73Feg==} @@ -2843,8 +2818,8 @@ packages: '@shikijs/types@1.23.1': resolution: {integrity: sha512-98A5hGyEhzzAgQh2dAeHKrWW4HfCMeoFER2z16p5eJ+vmPeF6lZ/elEne6/UCU551F/WqkopqRsr1l2Yu6+A0g==} - '@shikijs/types@2.3.2': - resolution: {integrity: sha512-CBaMY+a3pepyC4SETi7+bSzO0f6hxEQJUUuS4uD7zppzjmrN4ZRtBqxaT+wOan26CR9eeJ5iBhc4qvWEwn7Eeg==} + '@shikijs/types@2.1.0': + resolution: {integrity: sha512-OFOdHA6VEVbiQvepJ8yqicC6VmBrKxFFhM2EsHHrZESqLVAXOSeRDiuSYV185lIgp15TVic5vYBYNhTsk1xHLg==} '@shikijs/vitepress-twoslash@1.23.1': resolution: {integrity: sha512-L67HkzDkbECjYdWxQA9BuKAIB0c7eaa+7sD6dZUQ6/cdJGiWvaPLYMRwMWZQ4ToRsz1X6MQmOKQp6Xb6FEc3Bg==} @@ -3696,8 +3671,8 @@ packages: peerDependencies: esbuild: '>=0.18' - c12@2.0.1: - resolution: {integrity: sha512-Z4JgsKXHG37C6PYUtIxCfLJZvo6FyhHJoClwwb9ftUkLpPSkuYqn6Tr+vnaN8hymm0kIbcg6Ey3kv/Q71k5w/A==} + c12@2.0.2: + resolution: {integrity: sha512-NkvlL5CHZt9kPswJYDCUYtTaMt7JOfcpsnNncfj7sWsc13x6Wz+GiTpBtqZOojFlzyTHui8+OAfR6praV6PYaQ==} peerDependencies: magicast: ^0.3.5 peerDependenciesMeta: @@ -5465,8 +5440,8 @@ packages: resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} engines: {node: '>= 8'} - knip@5.43.6: - resolution: {integrity: sha512-bUCFlg44imdV5vayYxu0pIAB373S8Ufjda0qaI9oRZDH6ltJFwUoAO2j7nafxDmo5G0ZeP4IiLAHqlc3wYIONQ==} + knip@5.44.0: + resolution: {integrity: sha512-j39v3LYCmU6P6HN/TG14bc0Dlthl12g6NogdEZHQdhlVS6BqfnGGS3ospYYwLill6Sdc68eptwGtThunqq7lxA==} engines: {node: '>=18.18.0'} hasBin: true peerDependencies: @@ -5552,7 +5527,6 @@ packages: lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} - deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} @@ -6081,8 +6055,8 @@ packages: oniguruma-to-es@0.4.1: resolution: {integrity: sha512-rNcEohFz095QKGRovP/yqPIKc+nP+Sjs4YTHMv33nMePGKrq/r2eu9Yh4646M5XluGJsUnmwoXuiXE69KDs+fQ==} - oniguruma-to-es@3.1.0: - resolution: {integrity: sha512-BJ3Jy22YlgejHSO7Fvmz1kKazlaPmRSUH+4adTDUS/dKQ4wLxI+gALZ8updbaux7/m7fIlpgOZ5fp/Inq5jUAw==} + oniguruma-to-es@2.3.0: + resolution: {integrity: sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g==} oniguruma-to-js@0.4.3: resolution: {integrity: sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ==} @@ -6144,8 +6118,8 @@ packages: package-json-from-dist@1.0.0: resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} - package-manager-detector@0.2.8: - resolution: {integrity: sha512-ts9KSdroZisdvKMWVAVCXiKqnqNfXz4+IbrBG8/BWx/TR5le+jfenvoBuIZ6UWM9nz47W7AbD9qYfAwfWMIwzA==} + package-manager-detector@0.2.9: + resolution: {integrity: sha512-+vYvA/Y31l8Zk8dwxHhL3JfTuHPm6tlxM2A3GeQyl7ovYnSp1+mzAxClxaOr0qO1TtPxbQxetI7v5XqKLJZk7Q==} packrup@0.1.2: resolution: {integrity: sha512-ZcKU7zrr5GlonoS9cxxrb5HVswGnyj6jQvwFBa6p5VFw7G71VAHcUKL5wyZSU/ECtPM/9gacWxy2KFQKt1gMNA==} @@ -6748,8 +6722,8 @@ packages: regex-recursion@4.3.0: resolution: {integrity: sha512-5LcLnizwjcQ2ALfOj95MjcatxyqF5RPySx9yT+PaXu3Gox2vyAtLDjHB8NTJLtMGkvyau6nI3CfpwFCjPUIs/A==} - regex-recursion@6.0.2: - resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + regex-recursion@5.1.1: + resolution: {integrity: sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==} regex-utilities@2.3.0: resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} @@ -6760,9 +6734,6 @@ packages: regex@5.1.1: resolution: {integrity: sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==} - regex@6.0.1: - resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} - regexp-ast-analysis@0.7.1: resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -7493,9 +7464,9 @@ packages: unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} - unimport@4.1.0: - resolution: {integrity: sha512-y5ZYDG+j7IB45+Y6CIkWIKou4E1JFigCUw6vI+h15HdYAKmT0oQWcawnxXuwJG8srJyXhIZuWz5uXB1MQ/ARZw==} - engines: {node: '>=18.20.6'} + unimport@4.1.1: + resolution: {integrity: sha512-j9+fijH6aDd05yv1fXlyt7HSxtOWtGtrZeYTVBsSUg57Iuf+Ps2itIZjeyu7bEQ4k0WOgYhHrdW8m/pJgOpl5g==} + engines: {node: '>=18.12.0'} unist-builder@4.0.0: resolution: {integrity: sha512-wmRFnH+BLpZnTKpc5L7O67Kac89s9HMrtELpnNaE6TAobq5DTZZs5YaTQfAZBA9bFPECx2uVAPO31c+GVug8mg==} @@ -7554,6 +7525,10 @@ packages: resolution: {integrity: sha512-Q3LU0e4zxKfRko1wMV2HmP8lB9KWislY7hxXpxd+lGx0PRInE4vhMBVEZwpdVYHvtqzhSrzuIfErsob6bQfCzw==} engines: {node: '>=18.12.0'} + unplugin@2.2.0: + resolution: {integrity: sha512-m1ekpSwuOT5hxkJeZGRxO7gXbXT3gF26NjQ7GdVHoLoF8/nopLcd/QfPigpCy7i51oFHiRJg/CyHhj4vs2+KGw==} + engines: {node: '>=18.12.0'} + unstorage@1.14.4: resolution: {integrity: sha512-1SYeamwuYeQJtJ/USE1x4l17LkmQBzg7deBJ+U9qOBoHo15d1cDxG4jM31zKRgF7pG0kirZy4wVMX6WL6Zoscg==} peerDependencies: @@ -8139,12 +8114,12 @@ snapshots: '@antfu/install-pkg@0.4.1': dependencies: - package-manager-detector: 0.2.8 + package-manager-detector: 0.2.9 tinyexec: 0.3.2 '@antfu/install-pkg@1.0.0': dependencies: - package-manager-detector: 0.2.8 + package-manager-detector: 0.2.9 tinyexec: 0.3.2 '@antfu/utils@0.7.10': {} @@ -8206,14 +8181,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.26.5': - dependencies: - '@babel/parser': 7.26.7 - '@babel/types': 7.26.7 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.0.2 - '@babel/generator@7.26.8': dependencies: '@babel/parser': 7.26.8 @@ -8224,7 +8191,7 @@ snapshots: '@babel/helper-annotate-as-pure@7.25.9': dependencies: - '@babel/types': 7.26.7 + '@babel/types': 7.26.8 '@babel/helper-compilation-targets@7.26.5': dependencies: @@ -8242,22 +8209,22 @@ snapshots: '@babel/helper-optimise-call-expression': 7.25.9 '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.8) '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.26.7 + '@babel/traverse': 7.26.8 semver: 6.3.1 transitivePeerDependencies: - supports-color '@babel/helper-member-expression-to-functions@7.25.9': dependencies: - '@babel/traverse': 7.26.7 - '@babel/types': 7.26.7 + '@babel/traverse': 7.26.8 + '@babel/types': 7.26.8 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.25.9': dependencies: - '@babel/traverse': 7.26.7 - '@babel/types': 7.26.7 + '@babel/traverse': 7.26.8 + '@babel/types': 7.26.8 transitivePeerDependencies: - supports-color @@ -8272,7 +8239,7 @@ snapshots: '@babel/helper-optimise-call-expression@7.25.9': dependencies: - '@babel/types': 7.26.7 + '@babel/types': 7.26.8 '@babel/helper-plugin-utils@7.26.5': {} @@ -8281,14 +8248,14 @@ snapshots: '@babel/core': 7.26.8 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.26.7 + '@babel/traverse': 7.26.8 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.25.9': dependencies: - '@babel/traverse': 7.26.7 - '@babel/types': 7.26.7 + '@babel/traverse': 7.26.8 + '@babel/types': 7.26.8 transitivePeerDependencies: - supports-color @@ -8303,10 +8270,6 @@ snapshots: '@babel/template': 7.26.8 '@babel/types': 7.26.8 - '@babel/parser@7.26.7': - dependencies: - '@babel/types': 7.26.7 - '@babel/parser@7.26.8': dependencies: '@babel/types': 7.26.8 @@ -8362,30 +8325,12 @@ snapshots: '@babel/standalone@7.26.4': {} - '@babel/template@7.25.9': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.7 - '@babel/types': 7.26.7 - '@babel/template@7.26.8': dependencies: '@babel/code-frame': 7.26.2 '@babel/parser': 7.26.8 '@babel/types': 7.26.8 - '@babel/traverse@7.26.7': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.5 - '@babel/parser': 7.26.7 - '@babel/template': 7.25.9 - '@babel/types': 7.26.7 - debug: 4.4.0(supports-color@9.4.0) - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - '@babel/traverse@7.26.8': dependencies: '@babel/code-frame': 7.26.2 @@ -8398,11 +8343,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/types@7.26.7': - dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/types@7.26.8': dependencies: '@babel/helper-string-parser': 7.25.9 @@ -8785,8 +8725,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.19.0': {} - '@eslint/js@9.20.0': {} '@eslint/object-schema@2.1.4': {} @@ -9001,7 +8939,7 @@ snapshots: '@nuxt/cli@3.21.1(magicast@0.3.5)': dependencies: - c12: 2.0.1(magicast@0.3.5) + c12: 2.0.2(magicast@0.3.5) chokidar: 4.0.3 citty: 0.1.6 clipboardy: 4.0.0 @@ -9092,7 +9030,7 @@ snapshots: dependencies: '@antfu/install-pkg': 1.0.0 '@clack/prompts': 0.9.1 - '@eslint/js': 9.19.0 + '@eslint/js': 9.20.0 '@nuxt/eslint-plugin': 1.0.1(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) '@stylistic/eslint-plugin': 3.0.1(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/eslint-plugin': 8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) @@ -9150,7 +9088,7 @@ snapshots: sirv: 3.0.0 std-env: 3.8.0 ufo: 1.5.4 - unplugin: 2.1.2 + unplugin: 2.2.0 unstorage: 1.14.4(db0@0.1.4)(ioredis@5.4.1) valibot: 1.0.0-beta.15(typescript@5.7.3) optionalDependencies: @@ -9178,7 +9116,7 @@ snapshots: - typescript - uploadthing - '@nuxt/telemetry@2.6.4': + '@nuxt/telemetry@2.6.5': dependencies: '@nuxt/kit': link:packages/kit citty: 0.1.6 @@ -9188,7 +9126,7 @@ snapshots: git-url-parse: 16.0.0 is-docker: 3.0.0 ofetch: 1.4.1 - package-manager-detector: 0.2.8 + package-manager-detector: 0.2.9 parse-git-config: 3.0.0 pathe: 2.0.2 rc9: 2.1.2 @@ -9198,7 +9136,7 @@ snapshots: dependencies: '@nuxt/kit': link:packages/kit '@nuxt/schema': link:packages/schema - c12: 2.0.1(magicast@0.3.5) + c12: 2.0.2(magicast@0.3.5) consola: 3.4.0 defu: 6.1.4 destr: 2.0.3 @@ -9218,7 +9156,7 @@ snapshots: tinyexec: 0.3.2 ufo: 1.5.4 unenv: 1.10.0 - unplugin: 2.1.2 + unplugin: 2.2.0 vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) vitest-environment-nuxt: 1.0.1(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3)))(@types/node@22.13.1)(@vue/test-utils@2.4.6)(happy-dom@17.0.3)(jiti@2.4.2)(magicast@0.3.5)(playwright-core@1.50.1)(terser@5.32.0)(tsx@4.19.2)(typescript@5.7.3)(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0) vue: 3.5.13(typescript@5.7.3) @@ -9620,49 +9558,49 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.34.6': optional: true - '@rspack/binding-darwin-arm64@1.2.2': + '@rspack/binding-darwin-arm64@1.2.3': optional: true - '@rspack/binding-darwin-x64@1.2.2': + '@rspack/binding-darwin-x64@1.2.3': optional: true - '@rspack/binding-linux-arm64-gnu@1.2.2': + '@rspack/binding-linux-arm64-gnu@1.2.3': optional: true - '@rspack/binding-linux-arm64-musl@1.2.2': + '@rspack/binding-linux-arm64-musl@1.2.3': optional: true - '@rspack/binding-linux-x64-gnu@1.2.2': + '@rspack/binding-linux-x64-gnu@1.2.3': optional: true - '@rspack/binding-linux-x64-musl@1.2.2': + '@rspack/binding-linux-x64-musl@1.2.3': optional: true - '@rspack/binding-win32-arm64-msvc@1.2.2': + '@rspack/binding-win32-arm64-msvc@1.2.3': optional: true - '@rspack/binding-win32-ia32-msvc@1.2.2': + '@rspack/binding-win32-ia32-msvc@1.2.3': optional: true - '@rspack/binding-win32-x64-msvc@1.2.2': + '@rspack/binding-win32-x64-msvc@1.2.3': optional: true - '@rspack/binding@1.2.2': + '@rspack/binding@1.2.3': optionalDependencies: - '@rspack/binding-darwin-arm64': 1.2.2 - '@rspack/binding-darwin-x64': 1.2.2 - '@rspack/binding-linux-arm64-gnu': 1.2.2 - '@rspack/binding-linux-arm64-musl': 1.2.2 - '@rspack/binding-linux-x64-gnu': 1.2.2 - '@rspack/binding-linux-x64-musl': 1.2.2 - '@rspack/binding-win32-arm64-msvc': 1.2.2 - '@rspack/binding-win32-ia32-msvc': 1.2.2 - '@rspack/binding-win32-x64-msvc': 1.2.2 + '@rspack/binding-darwin-arm64': 1.2.3 + '@rspack/binding-darwin-x64': 1.2.3 + '@rspack/binding-linux-arm64-gnu': 1.2.3 + '@rspack/binding-linux-arm64-musl': 1.2.3 + '@rspack/binding-linux-x64-gnu': 1.2.3 + '@rspack/binding-linux-x64-musl': 1.2.3 + '@rspack/binding-win32-arm64-msvc': 1.2.3 + '@rspack/binding-win32-ia32-msvc': 1.2.3 + '@rspack/binding-win32-x64-msvc': 1.2.3 - '@rspack/core@1.2.2': + '@rspack/core@1.2.3': dependencies: '@module-federation/runtime-tools': 0.8.4 - '@rspack/binding': 1.2.2 + '@rspack/binding': 1.2.3 '@rspack/lite-tapable': 1.0.1 caniuse-lite: 1.0.30001667 @@ -9688,11 +9626,11 @@ snapshots: '@types/hast': 3.0.4 hast-util-to-html: 9.0.4 - '@shikijs/core@2.3.2': + '@shikijs/core@2.1.0': dependencies: - '@shikijs/engine-javascript': 2.3.2 - '@shikijs/engine-oniguruma': 2.3.2 - '@shikijs/types': 2.3.2 + '@shikijs/engine-javascript': 2.1.0 + '@shikijs/engine-oniguruma': 2.1.0 + '@shikijs/types': 2.1.0 '@shikijs/vscode-textmate': 10.0.1 '@types/hast': 3.0.4 hast-util-to-html: 9.0.4 @@ -9709,11 +9647,11 @@ snapshots: '@shikijs/vscode-textmate': 9.3.1 oniguruma-to-es: 0.4.1 - '@shikijs/engine-javascript@2.3.2': + '@shikijs/engine-javascript@2.1.0': dependencies: - '@shikijs/types': 2.3.2 + '@shikijs/types': 2.1.0 '@shikijs/vscode-textmate': 10.0.1 - oniguruma-to-es: 3.1.0 + oniguruma-to-es: 2.3.0 '@shikijs/engine-oniguruma@1.22.2': dependencies: @@ -9725,19 +9663,19 @@ snapshots: '@shikijs/types': 1.23.1 '@shikijs/vscode-textmate': 9.3.1 - '@shikijs/engine-oniguruma@2.3.2': + '@shikijs/engine-oniguruma@2.1.0': dependencies: - '@shikijs/types': 2.3.2 + '@shikijs/types': 2.1.0 '@shikijs/vscode-textmate': 10.0.1 '@shikijs/transformers@1.22.2': dependencies: shiki: 1.22.2 - '@shikijs/twoslash@2.3.2(typescript@5.7.3)': + '@shikijs/twoslash@2.1.0(typescript@5.7.3)': dependencies: - '@shikijs/core': 2.3.2 - '@shikijs/types': 2.3.2 + '@shikijs/core': 2.1.0 + '@shikijs/types': 2.1.0 twoslash: 0.2.12(typescript@5.7.3) transitivePeerDependencies: - supports-color @@ -9753,14 +9691,14 @@ snapshots: '@shikijs/vscode-textmate': 9.3.1 '@types/hast': 3.0.4 - '@shikijs/types@2.3.2': + '@shikijs/types@2.1.0': dependencies: '@shikijs/vscode-textmate': 10.0.1 '@types/hast': 3.0.4 '@shikijs/vitepress-twoslash@1.23.1(@nuxt/kit@packages+kit)(typescript@5.7.3)': dependencies: - '@shikijs/twoslash': 2.3.2(typescript@5.7.3) + '@shikijs/twoslash': 2.1.0(typescript@5.7.3) floating-vue: 5.2.2(@nuxt/kit@packages+kit)(vue@3.5.13(typescript@5.7.3)) mdast-util-from-markdown: 2.0.2 mdast-util-gfm: 3.0.0 @@ -9835,15 +9773,15 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.26.7 - '@babel/types': 7.26.7 + '@babel/parser': 7.26.8 + '@babel/types': 7.26.8 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.26.7 + '@babel/types': 7.26.8 '@types/babel__helper-plugin-utils@7.10.3': dependencies: @@ -9851,12 +9789,12 @@ snapshots: '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.26.7 - '@babel/types': 7.26.7 + '@babel/parser': 7.26.8 + '@babel/types': 7.26.8 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.26.7 + '@babel/types': 7.26.8 '@types/connect@3.4.38': dependencies: @@ -10392,9 +10330,9 @@ snapshots: '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.26.8) - '@babel/template': 7.25.9 - '@babel/traverse': 7.26.7 - '@babel/types': 7.26.7 + '@babel/template': 7.26.8 + '@babel/traverse': 7.26.8 + '@babel/types': 7.26.8 '@vue/babel-helper-vue-transform-on': 1.2.5 '@vue/babel-plugin-resolve-type': 1.2.5(@babel/core@7.26.8) html-tags: 3.3.1 @@ -10410,14 +10348,14 @@ snapshots: '@babel/core': 7.26.8 '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.26.5 - '@babel/parser': 7.26.7 + '@babel/parser': 7.26.8 '@vue/compiler-sfc': 3.5.13 transitivePeerDependencies: - supports-color '@vue/compiler-core@3.5.13': dependencies: - '@babel/parser': 7.26.7 + '@babel/parser': 7.26.8 '@vue/shared': 3.5.13 entities: 4.5.0 estree-walker: 2.0.2 @@ -10430,7 +10368,7 @@ snapshots: '@vue/compiler-sfc@3.5.13': dependencies: - '@babel/parser': 7.26.7 + '@babel/parser': 7.26.8 '@vue/compiler-core': 3.5.13 '@vue/compiler-dom': 3.5.13 '@vue/compiler-ssr': 3.5.13 @@ -10791,12 +10729,12 @@ snapshots: ast-kit@1.4.0: dependencies: - '@babel/parser': 7.26.7 + '@babel/parser': 7.26.8 pathe: 2.0.2 ast-walker-scope@0.6.2: dependencies: - '@babel/parser': 7.26.7 + '@babel/parser': 7.26.8 ast-kit: 1.4.0 async-sema@3.1.1: {} @@ -10911,7 +10849,7 @@ snapshots: esbuild: 0.24.2 load-tsconfig: 0.2.5 - c12@2.0.1(magicast@0.3.5): + c12@2.0.2(magicast@0.3.5): dependencies: chokidar: 4.0.3 confbox: 0.1.8 @@ -10921,7 +10859,7 @@ snapshots: jiti: 2.4.2 mlly: 1.7.4 ohash: 1.1.4 - pathe: 1.1.2 + pathe: 2.0.2 perfect-debounce: 1.0.0 pkg-types: 1.3.1 rc9: 2.1.2 @@ -10980,7 +10918,7 @@ snapshots: changelogen@0.5.7(magicast@0.3.5): dependencies: - c12: 2.0.1(magicast@0.3.5) + c12: 2.0.2(magicast@0.3.5) colorette: 2.0.20 consola: 3.4.0 convert-gitmoji: 0.1.5 @@ -11216,7 +11154,7 @@ snapshots: dependencies: postcss: 8.5.2 - css-loader@7.1.2(@rspack/core@1.2.2)(webpack@5.97.1): + css-loader@7.1.2(@rspack/core@1.2.3)(webpack@5.97.1): dependencies: icss-utils: 5.1.0(postcss@8.5.2) postcss: 8.5.2 @@ -11227,7 +11165,7 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.7.1 optionalDependencies: - '@rspack/core': 1.2.2 + '@rspack/core': 1.2.3 webpack: 5.97.1 css-minimizer-webpack-plugin@7.0.0(esbuild@0.25.0)(webpack@5.97.1(esbuild@0.25.0)): @@ -12869,7 +12807,7 @@ snapshots: klona@2.0.6: {} - knip@5.43.6(@types/node@22.13.1)(typescript@5.7.3): + knip@5.44.0(@types/node@22.13.1)(typescript@5.7.3): dependencies: '@nodelib/fs.walk': 3.0.1 '@snyk/github-codeowners': 1.1.0 @@ -13018,8 +12956,8 @@ snapshots: magicast@0.3.5: dependencies: - '@babel/parser': 7.26.7 - '@babel/types': 7.26.7 + '@babel/parser': 7.26.8 + '@babel/types': 7.26.8 source-map-js: 1.2.1 make-dir@3.1.0: @@ -13598,7 +13536,7 @@ snapshots: '@types/http-proxy': 1.17.15 '@vercel/nft': 0.27.4 archiver: 7.0.1 - c12: 2.0.1(magicast@0.3.5) + c12: 2.0.2(magicast@0.3.5) chalk: 5.3.0 chokidar: 3.6.0 citty: 0.1.6 @@ -13651,7 +13589,7 @@ snapshots: uncrypto: 0.1.3 unctx: 2.4.1 unenv: 1.10.0 - unimport: 4.1.0 + unimport: 4.1.1 unstorage: 1.14.4(db0@0.1.4)(ioredis@5.4.1) untyped: 1.5.2 unwasm: 0.3.9 @@ -13830,11 +13768,11 @@ snapshots: regex: 5.1.1 regex-recursion: 4.3.0 - oniguruma-to-es@3.1.0: + oniguruma-to-es@2.3.0: dependencies: emoji-regex-xs: 1.0.0 - regex: 6.0.1 - regex-recursion: 6.0.2 + regex: 5.1.1 + regex-recursion: 5.1.1 oniguruma-to-js@0.4.3: dependencies: @@ -13908,7 +13846,7 @@ snapshots: package-json-from-dist@1.0.0: {} - package-manager-detector@0.2.8: {} + package-manager-detector@0.2.9: {} packrup@0.1.2: {} @@ -14088,14 +14026,14 @@ snapshots: read-cache: 1.0.0 resolve: 1.22.8 - postcss-loader@8.1.1(@rspack/core@1.2.2)(postcss@8.5.2)(typescript@5.7.3)(webpack@5.97.1): + postcss-loader@8.1.1(@rspack/core@1.2.3)(postcss@8.5.2)(typescript@5.7.3)(webpack@5.97.1): dependencies: cosmiconfig: 9.0.0(typescript@5.7.3) jiti: 2.4.2 postcss: 8.5.2 semver: 7.7.1 optionalDependencies: - '@rspack/core': 1.2.2 + '@rspack/core': 1.2.3 webpack: 5.97.1 transitivePeerDependencies: - typescript @@ -14523,8 +14461,9 @@ snapshots: dependencies: regex-utilities: 2.3.0 - regex-recursion@6.0.2: + regex-recursion@5.1.1: dependencies: + regex: 5.1.1 regex-utilities: 2.3.0 regex-utilities@2.3.0: {} @@ -14535,10 +14474,6 @@ snapshots: dependencies: regex-utilities: 2.3.0 - regex@6.0.1: - dependencies: - regex-utilities: 2.3.0 - regexp-ast-analysis@0.7.1: dependencies: '@eslint-community/regexpp': 4.12.1 @@ -14742,11 +14677,11 @@ snapshots: safe-buffer@5.2.1: {} - sass-loader@16.0.4(@rspack/core@1.2.2)(webpack@5.97.1(esbuild@0.25.0)): + sass-loader@16.0.4(@rspack/core@1.2.3)(webpack@5.97.1(esbuild@0.25.0)): dependencies: neo-async: 2.6.2 optionalDependencies: - '@rspack/core': 1.2.2 + '@rspack/core': 1.2.3 webpack: 5.97.1(esbuild@0.25.0) sass@1.78.0: @@ -15358,7 +15293,7 @@ snapshots: acorn: 8.14.0 estree-walker: 3.0.3 magic-string: 0.30.17 - unplugin: 2.1.2 + unplugin: 2.2.0 undici-types@6.20.0: {} @@ -15395,7 +15330,7 @@ snapshots: trough: 2.2.0 vfile: 6.0.3 - unimport@4.1.0: + unimport@4.1.1: dependencies: acorn: 8.14.0 escape-string-regexp: 5.0.0 @@ -15409,7 +15344,7 @@ snapshots: pkg-types: 1.3.1 scule: 1.3.0 strip-literal: 3.0.0 - unplugin: 2.1.2 + unplugin: 2.2.0 unplugin-utils: 0.2.3 unist-builder@4.0.0: @@ -15477,7 +15412,7 @@ snapshots: unplugin-vue-router@0.11.2(rollup@4.34.6)(vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3)): dependencies: - '@babel/types': 7.26.7 + '@babel/types': 7.26.8 '@rollup/pluginutils': 5.1.4(rollup@4.34.6) '@vue-macros/common': 1.16.1(vue@3.5.13(typescript@5.7.3)) ast-walker-scope: 0.6.2 @@ -15507,6 +15442,11 @@ snapshots: acorn: 8.14.0 webpack-virtual-modules: 0.6.2 + unplugin@2.2.0: + dependencies: + acorn: 8.14.0 + webpack-virtual-modules: 0.6.2 + unstorage@1.14.4(db0@0.1.4)(ioredis@5.4.1): dependencies: anymatch: 3.1.3 @@ -15531,7 +15471,7 @@ snapshots: dependencies: '@babel/core': 7.26.8 '@babel/standalone': 7.26.4 - '@babel/types': 7.26.7 + '@babel/types': 7.26.8 citty: 0.1.6 defu: 6.1.4 jiti: 2.4.2 @@ -15998,14 +15938,14 @@ snapshots: - esbuild - uglify-js - webpackbar@7.0.0(@rspack/core@1.2.2)(webpack@5.97.1): + webpackbar@7.0.0(@rspack/core@1.2.3)(webpack@5.97.1): dependencies: ansis: 3.3.2 consola: 3.4.0 pretty-time: 1.1.0 std-env: 3.8.0 optionalDependencies: - '@rspack/core': 1.2.2 + '@rspack/core': 1.2.3 webpack: 5.97.1 whatwg-mimetype@3.0.0: {} diff --git a/test/fixtures/basic-types/package.json b/test/fixtures/basic-types/package.json index ff98a42d5b..15ae190447 100644 --- a/test/fixtures/basic-types/package.json +++ b/test/fixtures/basic-types/package.json @@ -16,6 +16,6 @@ "vue-router": "latest" }, "engines": { - "node": "^18.20.6 || ^20.9.0 || >=22.0.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0.0" } } diff --git a/test/fixtures/basic/package.json b/test/fixtures/basic/package.json index 673f4ede02..b38be7c666 100644 --- a/test/fixtures/basic/package.json +++ b/test/fixtures/basic/package.json @@ -17,6 +17,6 @@ "vue": "latest" }, "engines": { - "node": "^18.20.6 || ^20.9.0 || >=22.0.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0.0" } } diff --git a/test/fixtures/hmr/package.json b/test/fixtures/hmr/package.json index 9901ba8b0c..b74ef3c44d 100644 --- a/test/fixtures/hmr/package.json +++ b/test/fixtures/hmr/package.json @@ -8,6 +8,6 @@ "nuxt": "workspace:*" }, "engines": { - "node": "^18.20.6 || ^20.9.0 || >=22.0.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0.0" } } diff --git a/test/fixtures/minimal-pages/package.json b/test/fixtures/minimal-pages/package.json index b7e823a0fa..96d26034e2 100644 --- a/test/fixtures/minimal-pages/package.json +++ b/test/fixtures/minimal-pages/package.json @@ -8,6 +8,6 @@ "nuxt": "workspace:*" }, "engines": { - "node": "^18.20.6 || ^20.9.0 || >=22.0.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0.0" } } diff --git a/test/fixtures/minimal-types/package.json b/test/fixtures/minimal-types/package.json index f2738601a0..01260993dd 100644 --- a/test/fixtures/minimal-types/package.json +++ b/test/fixtures/minimal-types/package.json @@ -9,6 +9,6 @@ "nuxt": "workspace:*" }, "engines": { - "node": "^18.20.6 || ^20.9.0 || >=22.0.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0.0" } } diff --git a/test/fixtures/minimal/package.json b/test/fixtures/minimal/package.json index 676b1aade7..ec8752d986 100644 --- a/test/fixtures/minimal/package.json +++ b/test/fixtures/minimal/package.json @@ -8,6 +8,6 @@ "nuxt": "workspace:*" }, "engines": { - "node": "^18.20.6 || ^20.9.0 || >=22.0.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0.0" } } diff --git a/test/fixtures/runtime-compiler/package.json b/test/fixtures/runtime-compiler/package.json index 49e9889c85..4c45c2f351 100644 --- a/test/fixtures/runtime-compiler/package.json +++ b/test/fixtures/runtime-compiler/package.json @@ -8,6 +8,6 @@ "nuxt": "workspace:*" }, "engines": { - "node": "^18.20.6 || ^20.9.0 || >=22.0.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0.0" } } diff --git a/test/fixtures/spa-loader/package.json b/test/fixtures/spa-loader/package.json index 2988c53a6b..c6ded69cca 100644 --- a/test/fixtures/spa-loader/package.json +++ b/test/fixtures/spa-loader/package.json @@ -10,6 +10,6 @@ "nuxt": "workspace:*" }, "engines": { - "node": "^18.20.6 || ^20.9.0 || >=22.0.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0.0" } } diff --git a/test/fixtures/suspense/package.json b/test/fixtures/suspense/package.json index fb3c5bbf74..ab5e89d39a 100644 --- a/test/fixtures/suspense/package.json +++ b/test/fixtures/suspense/package.json @@ -11,6 +11,6 @@ "typescript": "latest" }, "engines": { - "node": "^18.20.6 || ^20.9.0 || >=22.0.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0.0" } } From 29bea9899f557e0859c493b56708a63a2073b7f8 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Tue, 11 Feb 2025 15:27:45 +0000 Subject: [PATCH 15/18] chore: add basic copilot instructions --- .github/copilot-instructions.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .github/copilot-instructions.md diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 0000000000..81e31ded12 --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,14 @@ +# Core Requirements + +- The end goal is stability, speed and great user experience. + +## Code Quality Requirements + +- Follow standard TypeScript conventions and best practices +- Use the Composition API when creating Vue components +- Use clear, descriptive variable and function names +- Add comments to explain complex logic or non-obvious implementations +- Write unit tests for core functionality using `vitest` +- Write end-to-end tests using Playwright and `@nuxt/test-utils` +- Keep functions focused and manageable (generally under 50 lines) +- Use error handling patterns consistently From d526fb183925a458bdf3f57041f33c3cb2c31c81 Mon Sep 17 00:00:00 2001 From: Julien Huang Date: Tue, 11 Feb 2025 16:38:55 +0100 Subject: [PATCH 16/18] feat(kit,nuxt): allow multiple nuxts to run in one process (#30510) --- packages/kit/src/context.ts | 25 +++++++++-- packages/kit/src/index.ts | 2 +- packages/kit/src/loader/nuxt.ts | 3 +- packages/nuxt/src/core/nuxt.ts | 65 +++++++++++++++++----------- packages/nuxt/test/load-nuxt.test.ts | 44 ++++++++++++++++++- packages/schema/src/types/nuxt.ts | 2 + 6 files changed, 108 insertions(+), 33 deletions(-) diff --git a/packages/kit/src/context.ts b/packages/kit/src/context.ts index d132b81c6c..6293bfe9fc 100644 --- a/packages/kit/src/context.ts +++ b/packages/kit/src/context.ts @@ -1,9 +1,22 @@ -import { getContext } from 'unctx' +import { AsyncLocalStorage } from 'node:async_hooks' +import { createContext, getContext } from 'unctx' import type { Nuxt } from '@nuxt/schema' -/** Direct access to the Nuxt context - see https://github.com/unjs/unctx. */ +/** + * Direct access to the Nuxt global context - see https://github.com/unjs/unctx. + * @deprecated Use `getNuxtCtx` instead + */ export const nuxtCtx = getContext('nuxt') +/** async local storage for the name of the current nuxt instance */ +const asyncNuxtStorage = createContext({ + asyncContext: true, + AsyncLocalStorage, +}) + +/** Direct access to the Nuxt context with asyncLocalStorage - see https://github.com/unjs/unctx. */ +export const getNuxtCtx = () => asyncNuxtStorage.tryUse() + // TODO: Use use/tryUse from unctx. https://github.com/unjs/unctx/issues/6 /** @@ -16,7 +29,7 @@ export const nuxtCtx = getContext('nuxt') * ``` */ export function useNuxt (): Nuxt { - const instance = nuxtCtx.tryUse() + const instance = asyncNuxtStorage.tryUse() || nuxtCtx.tryUse() if (!instance) { throw new Error('Nuxt instance is unavailable!') } @@ -36,5 +49,9 @@ export function useNuxt (): Nuxt { * ``` */ export function tryUseNuxt (): Nuxt | null { - return nuxtCtx.tryUse() + return asyncNuxtStorage.tryUse() || nuxtCtx.tryUse() +} + +export function runWithNuxtContext any> (nuxt: Nuxt, fn: T) { + return asyncNuxtStorage.call(nuxt, fn) as ReturnType } diff --git a/packages/kit/src/index.ts b/packages/kit/src/index.ts index f14fd8c81d..8855c4fd96 100644 --- a/packages/kit/src/index.ts +++ b/packages/kit/src/index.ts @@ -18,7 +18,7 @@ export type { ExtendConfigOptions, ExtendViteConfigOptions, ExtendWebpackConfigO export { assertNuxtCompatibility, checkNuxtCompatibility, getNuxtVersion, hasNuxtCompatibility, isNuxtMajorVersion, normalizeSemanticVersion, isNuxt2, isNuxt3 } from './compatibility' export { addComponent, addComponentsDir } from './components' export type { AddComponentOptions } from './components' -export { nuxtCtx, tryUseNuxt, useNuxt } from './context' +export { getNuxtCtx, runWithNuxtContext, tryUseNuxt, useNuxt, nuxtCtx } from './context' export { createIsIgnored, isIgnored, resolveIgnorePatterns } from './ignore' export { addLayout } from './layout' export { addRouteMiddleware, extendPages, extendRouteRules } from './pages' diff --git a/packages/kit/src/loader/nuxt.ts b/packages/kit/src/loader/nuxt.ts index 71e60a908e..605a6cd5bb 100644 --- a/packages/kit/src/loader/nuxt.ts +++ b/packages/kit/src/loader/nuxt.ts @@ -3,6 +3,7 @@ import { readPackageJSON, resolvePackageJSON } from 'pkg-types' import type { Nuxt, NuxtConfig } from '@nuxt/schema' import { resolve } from 'pathe' import { importModule, tryImportModule } from '../internal/esm' +import { runWithNuxtContext } from '../context' import type { LoadNuxtConfigOptions } from './config' export interface LoadNuxtOptions extends LoadNuxtConfigOptions { @@ -40,5 +41,5 @@ export async function buildNuxt (nuxt: Nuxt): Promise { const rootDir = pathToFileURL(nuxt.options.rootDir).href const { build } = await tryImportModule('nuxt-nightly', { paths: rootDir }) || await importModule('nuxt', { paths: rootDir }) - return build(nuxt) + return runWithNuxtContext(nuxt, () => build(nuxt)) } diff --git a/packages/nuxt/src/core/nuxt.ts b/packages/nuxt/src/core/nuxt.ts index 6175391357..5a41dd3720 100644 --- a/packages/nuxt/src/core/nuxt.ts +++ b/packages/nuxt/src/core/nuxt.ts @@ -1,11 +1,12 @@ import { existsSync } from 'node:fs' import { rm } from 'node:fs/promises' +import { randomUUID } from 'node:crypto' import { AsyncLocalStorage } from 'node:async_hooks' import { join, normalize, relative, resolve } from 'pathe' import { createDebugger, createHooks } from 'hookable' import ignore from 'ignore' import type { LoadNuxtOptions } from '@nuxt/kit' -import { addBuildPlugin, addComponent, addPlugin, addPluginTemplate, addRouteMiddleware, addServerPlugin, addTypeTemplate, addVitePlugin, addWebpackPlugin, installModule, loadNuxtConfig, nuxtCtx, resolveAlias, resolveFiles, resolveIgnorePatterns, resolvePath, tryResolveModule, useNitro } from '@nuxt/kit' +import { addBuildPlugin, addComponent, addPlugin, addPluginTemplate, addRouteMiddleware, addServerPlugin, addTypeTemplate, addVitePlugin, addWebpackPlugin, installModule, loadNuxtConfig, nuxtCtx, resolveAlias, resolveFiles, resolveIgnorePatterns, resolvePath, runWithNuxtContext, tryResolveModule, useNitro } from '@nuxt/kit' import type { Nuxt, NuxtHooks, NuxtModule, NuxtOptions } from 'nuxt/schema' import type { PackageJson } from 'pkg-types' import { readPackageJSON } from 'pkg-types' @@ -53,17 +54,24 @@ import { VirtualFSPlugin } from './plugins/virtual' export function createNuxt (options: NuxtOptions): Nuxt { const hooks = createHooks() + const { callHook, callHookParallel, callHookWith } = hooks + hooks.callHook = (...args) => runWithNuxtContext(nuxt, () => callHook(...args)) + hooks.callHookParallel = (...args) => runWithNuxtContext(nuxt, () => callHookParallel(...args)) + hooks.callHookWith = (...args) => runWithNuxtContext(nuxt, () => callHookWith(...args)) + const nuxt: Nuxt = { + __name: randomUUID(), _version: version, _asyncLocalStorageModule: options.experimental.debugModuleMutation ? new AsyncLocalStorage() : undefined, hooks, callHook: hooks.callHook, addHooks: hooks.addHooks, hook: hooks.hook, - ready: () => initNuxt(nuxt), + ready: () => runWithNuxtContext(nuxt, () => initNuxt(nuxt)), close: () => hooks.callHook('close', nuxt), vfs: {}, apps: {}, + runWithContext: fn => runWithNuxtContext(nuxt, fn), options, } @@ -115,6 +123,14 @@ export function createNuxt (options: NuxtOptions): Nuxt { }) } + if (!nuxtCtx.tryUse()) { + // backward compatibility with 3.x + nuxtCtx.set(nuxt) + nuxt.hook('close', () => { + nuxtCtx.unset() + }) + } + hooks.hookOnce('close', () => { hooks.removeAllHooks() }) return nuxt @@ -223,11 +239,6 @@ async function initNuxt (nuxt: Nuxt) { } } }) - - // Set nuxt instance for useNuxt - nuxtCtx.set(nuxt) - nuxt.hook('close', () => nuxtCtx.unset()) - const coreTypePackages = nuxt.options.typescript.hoist || [] // Disable environment types entirely if `typescript.builder` is false @@ -861,27 +872,29 @@ export async function loadNuxt (opts: LoadNuxtOptions): Promise { const nuxt = createNuxt(options) - if (nuxt.options.dev && !nuxt.options.test) { - nuxt.hooks.hookOnce('build:done', () => { - for (const dep of keyDependencies) { - checkDependencyVersion(dep, nuxt._version) - .catch(e => logger.warn(`Problem checking \`${dep}\` version.`, e)) - } - }) - } + nuxt.runWithContext(() => { + if (nuxt.options.dev && !nuxt.options.test) { + nuxt.hooks.hookOnce('build:done', () => { + for (const dep of keyDependencies) { + checkDependencyVersion(dep, nuxt._version) + .catch(e => logger.warn(`Problem checking \`${dep}\` version.`, e)) + } + }) + } - // We register hooks layer-by-layer so any overrides need to be registered separately - if (opts.overrides?.hooks) { - nuxt.hooks.addHooks(opts.overrides.hooks) - } + // We register hooks layer-by-layer so any overrides need to be registered separately + if (opts.overrides?.hooks) { + nuxt.hooks.addHooks(opts.overrides.hooks) + } - if ( - nuxt.options.debug - && nuxt.options.debug.hooks - && (nuxt.options.debug.hooks === true || nuxt.options.debug.hooks.server) - ) { - createDebugger(nuxt.hooks, { tag: 'nuxt' }) - } + if ( + nuxt.options.debug + && nuxt.options.debug.hooks + && (nuxt.options.debug.hooks === true || nuxt.options.debug.hooks.server) + ) { + createDebugger(nuxt.hooks, { tag: 'nuxt' }) + } + }) if (opts.ready !== false) { await nuxt.ready() diff --git a/packages/nuxt/test/load-nuxt.test.ts b/packages/nuxt/test/load-nuxt.test.ts index 96fd8723cf..e17065c035 100644 --- a/packages/nuxt/test/load-nuxt.test.ts +++ b/packages/nuxt/test/load-nuxt.test.ts @@ -1,7 +1,8 @@ import { fileURLToPath } from 'node:url' -import { afterEach, describe, expect, it, vi } from 'vitest' +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { normalize } from 'pathe' import { withoutTrailingSlash } from 'ufo' +import { logger, tryUseNuxt, useNuxt } from '@nuxt/kit' import { loadNuxt } from '../src' const repoRoot = withoutTrailingSlash(normalize(fileURLToPath(new URL('../../../', import.meta.url)))) @@ -12,6 +13,7 @@ vi.stubGlobal('console', { warn: vi.fn(console.warn), }) +const loggerWarn = vi.spyOn(logger, 'warn') vi.mock('pkg-types', async (og) => { const originalPkgTypes = (await og()) return { @@ -20,6 +22,9 @@ vi.mock('pkg-types', async (og) => { } }) +beforeEach(() => { + loggerWarn.mockClear() +}) afterEach(() => { vi.clearAllMocks() }) @@ -41,4 +46,41 @@ describe('loadNuxt', () => { await nuxt.close() expect(hookRan).toBe(true) }) + it('load multiple nuxt', async () => { + await Promise.all([ + loadNuxt({ + cwd: repoRoot, + }), + loadNuxt({ + cwd: repoRoot, + }), + ]) + expect(loggerWarn).not.toHaveBeenCalled() + }) + + it('expect hooks to get the correct context outside of initNuxt', async () => { + const nuxt = await loadNuxt({ + cwd: repoRoot, + }) + + // @ts-expect-error - random hook + nuxt.hook('test', () => { + expect(useNuxt().__name).toBe(nuxt.__name) + }) + + expect(tryUseNuxt()?.__name).not.toBe(nuxt.__name) + + // second nuxt context + const second = await loadNuxt({ + cwd: repoRoot, + }) + + expect(second.__name).not.toBe(nuxt.__name) + expect(tryUseNuxt()?.__name).not.toBe(nuxt.__name) + + // @ts-expect-error - random hook + await nuxt.callHook('test') + + expect(loggerWarn).not.toHaveBeenCalled() + }) }) diff --git a/packages/schema/src/types/nuxt.ts b/packages/schema/src/types/nuxt.ts index 5e50e7adaf..ed95dd6851 100644 --- a/packages/schema/src/types/nuxt.ts +++ b/packages/schema/src/types/nuxt.ts @@ -83,6 +83,7 @@ export interface NuxtApp { export interface Nuxt { // Private fields. + __name: string _version: string _ignore?: Ignore _dependencies?: Set @@ -96,6 +97,7 @@ export interface Nuxt { hook: Nuxt['hooks']['hook'] callHook: Nuxt['hooks']['callHook'] addHooks: Nuxt['hooks']['addHooks'] + runWithContext: any>(fn: T) => ReturnType ready: () => Promise close: () => Promise From b391f8f03ae88c02e8691b5f628d5915e136db32 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 11 Feb 2025 19:14:16 +0000 Subject: [PATCH 17/18] chore(deps): update all non-major dependencies (main) (#30952) --- package.json | 4 +- packages/rspack/package.json | 2 +- packages/schema/package.json | 2 +- packages/webpack/package.json | 2 +- pnpm-lock.yaml | 477 +++++++++------------------------- 5 files changed, 125 insertions(+), 362 deletions(-) diff --git a/package.json b/package.json index 87f38fab35..3e9dc7abc4 100644 --- a/package.json +++ b/package.json @@ -100,13 +100,13 @@ "cssnano": "7.0.6", "destr": "2.0.3", "devalue": "5.1.1", - "eslint": "9.20.0", + "eslint": "9.20.1", "eslint-plugin-no-only-tests": "3.3.0", "eslint-plugin-perfectionist": "4.8.0", "eslint-typegen": "1.0.0", "estree-walker": "3.0.3", "h3": "npm:h3-nightly@1.14.0-20250122-114730-3f9e703", - "happy-dom": "17.0.3", + "happy-dom": "17.0.4", "installed-check": "9.3.0", "jiti": "2.4.2", "knip": "5.44.0", diff --git a/packages/rspack/package.json b/packages/rspack/package.json index 50feb33e40..65ec11827b 100644 --- a/packages/rspack/package.json +++ b/packages/rspack/package.json @@ -38,7 +38,7 @@ "css-minimizer-webpack-plugin": "^7.0.0", "cssnano": "^7.0.6", "defu": "^6.1.4", - "esbuild-loader": "^4.2.2", + "esbuild-loader": "^4.3.0", "escape-string-regexp": "^5.0.0", "file-loader": "^6.2.0", "fork-ts-checker-webpack-plugin": "^9.0.2", diff --git a/packages/schema/package.json b/packages/schema/package.json index 4c09d5c9c1..8ce5c20252 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -51,7 +51,7 @@ "compatx": "0.1.8", "css-minimizer-webpack-plugin": "7.0.0", "esbuild": "0.25.0", - "esbuild-loader": "4.2.2", + "esbuild-loader": "4.3.0", "file-loader": "6.2.0", "h3": "npm:h3-nightly@1.14.0-20250122-114730-3f9e703", "hookable": "5.5.3", diff --git a/packages/webpack/package.json b/packages/webpack/package.json index 2b8a35ef80..bc90403caf 100644 --- a/packages/webpack/package.json +++ b/packages/webpack/package.json @@ -37,7 +37,7 @@ "css-minimizer-webpack-plugin": "^7.0.0", "cssnano": "^7.0.6", "defu": "^6.1.4", - "esbuild-loader": "^4.2.2", + "esbuild-loader": "^4.3.0", "escape-string-regexp": "^5.0.0", "file-loader": "^6.2.0", "fork-ts-checker-webpack-plugin": "^9.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c643737a1c..0797efe70a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -55,13 +55,13 @@ importers: version: 7.26.5 '@codspeed/vitest-plugin': specifier: 4.0.0 - version: 4.0.0(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0)) + version: 4.0.0(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.4)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0)) '@nuxt/cli': specifier: 3.21.1 version: 3.21.1(magicast@0.3.5) '@nuxt/eslint-config': specifier: 1.0.1 - version: 1.0.1(@vue/compiler-sfc@3.5.13)(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + version: 1.0.1(@vue/compiler-sfc@3.5.13)(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) '@nuxt/kit': specifier: workspace:* version: link:packages/kit @@ -70,7 +70,7 @@ importers: version: link:packages/rspack '@nuxt/test-utils': specifier: 3.15.4 - version: 3.15.4(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3)))(@types/node@22.13.1)(@vue/test-utils@2.4.6)(happy-dom@17.0.3)(jiti@2.4.2)(magicast@0.3.5)(playwright-core@1.50.1)(terser@5.32.0)(tsx@4.19.2)(typescript@5.7.3)(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0) + version: 3.15.4(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3)))(@types/node@22.13.1)(@vue/test-utils@2.4.6)(happy-dom@17.0.4)(jiti@2.4.2)(magicast@0.3.5)(playwright-core@1.50.1)(terser@5.32.0)(tsx@4.19.2)(typescript@5.7.3)(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.4)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0) '@nuxt/webpack-builder': specifier: workspace:* version: link:packages/webpack @@ -97,7 +97,7 @@ importers: version: 1.11.18(vue@3.5.13(typescript@5.7.3)) '@vitest/coverage-v8': specifier: 3.0.5 - version: 3.0.5(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0)) + version: 3.0.5(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.4)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0)) '@vue/test-utils': specifier: 2.4.6 version: 2.4.6 @@ -126,17 +126,17 @@ importers: specifier: 5.1.1 version: 5.1.1 eslint: - specifier: 9.20.0 - version: 9.20.0(jiti@2.4.2) + specifier: 9.20.1 + version: 9.20.1(jiti@2.4.2) eslint-plugin-no-only-tests: specifier: 3.3.0 version: 3.3.0 eslint-plugin-perfectionist: specifier: 4.8.0 - version: 4.8.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + version: 4.8.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) eslint-typegen: specifier: 1.0.0 - version: 1.0.0(eslint@9.20.0(jiti@2.4.2)) + version: 1.0.0(eslint@9.20.1(jiti@2.4.2)) estree-walker: specifier: 3.0.3 version: 3.0.3 @@ -144,8 +144,8 @@ importers: specifier: npm:h3-nightly@1.14.0-20250122-114730-3f9e703 version: h3-nightly@1.14.0-20250122-114730-3f9e703 happy-dom: - specifier: 17.0.3 - version: 17.0.3 + specifier: 17.0.4 + version: 17.0.4 installed-check: specifier: 9.3.0 version: 9.3.0 @@ -217,10 +217,10 @@ importers: version: 3.3.1(typescript@5.7.3)(vue-tsc@2.2.0(typescript@5.7.3))(vue@3.5.13(typescript@5.7.3)) vitest: specifier: 3.0.5 - version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.4)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) vitest-environment-nuxt: specifier: 1.0.1 - version: 1.0.1(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3)))(@types/node@22.13.1)(@vue/test-utils@2.4.6)(happy-dom@17.0.3)(jiti@2.4.2)(magicast@0.3.5)(playwright-core@1.50.1)(terser@5.32.0)(tsx@4.19.2)(typescript@5.7.3)(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0) + version: 1.0.1(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3)))(@types/node@22.13.1)(@vue/test-utils@2.4.6)(happy-dom@17.0.4)(jiti@2.4.2)(magicast@0.3.5)(playwright-core@1.50.1)(terser@5.32.0)(tsx@4.19.2)(typescript@5.7.3)(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.4)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0) vue: specifier: 3.5.13 version: 3.5.13(typescript@5.7.3) @@ -314,7 +314,7 @@ importers: version: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) vitest: specifier: 3.0.5 - version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.4)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) webpack: specifier: 5.97.1 version: 5.97.1 @@ -543,7 +543,7 @@ importers: version: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) vitest: specifier: 3.0.5 - version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.4)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) packages/rspack: dependencies: @@ -572,8 +572,8 @@ importers: specifier: ^6.1.4 version: 6.1.4 esbuild-loader: - specifier: ^4.2.2 - version: 4.2.2(webpack@5.97.1) + specifier: ^4.3.0 + version: 4.3.0(webpack@5.97.1) escape-string-regexp: specifier: ^5.0.0 version: 5.0.0 @@ -748,8 +748,8 @@ importers: specifier: 0.25.0 version: 0.25.0 esbuild-loader: - specifier: 4.2.2 - version: 4.2.2(webpack@5.97.1(esbuild@0.25.0)) + specifier: 4.3.0 + version: 4.3.0(webpack@5.97.1(esbuild@0.25.0)) file-loader: specifier: 6.2.0 version: 6.2.0(webpack@5.97.1(esbuild@0.25.0)) @@ -827,7 +827,7 @@ importers: version: 0.2.0 html-validate: specifier: 9.2.1 - version: 9.2.1(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0)) + version: 9.2.1(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.4)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0)) htmlnano: specifier: 2.1.1 version: 2.1.1(cssnano@7.0.6(postcss@8.5.2))(postcss@8.5.2)(relateurl@0.2.7)(svgo@3.3.2)(terser@5.32.0)(typescript@5.7.3) @@ -944,7 +944,7 @@ importers: version: 3.0.5(@types/node@22.13.1)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) vite-plugin-checker: specifier: ^0.8.0 - version: 0.8.0(eslint@9.20.0(jiti@2.4.2))(optionator@0.9.4)(typescript@5.7.3)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(vue-tsc@2.1.10(typescript@5.7.3)) + version: 0.8.0(eslint@9.20.1(jiti@2.4.2))(optionator@0.9.4)(typescript@5.7.3)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(vue-tsc@2.1.10(typescript@5.7.3)) vue-bundle-renderer: specifier: ^2.1.1 version: 2.1.1 @@ -986,8 +986,8 @@ importers: specifier: ^6.1.4 version: 6.1.4 esbuild-loader: - specifier: ^4.2.2 - version: 4.2.2(webpack@5.97.1) + specifier: ^4.3.0 + version: 4.3.0(webpack@5.97.1) escape-string-regexp: specifier: ^5.0.0 version: 5.0.0 @@ -1158,7 +1158,7 @@ importers: version: 0.11.2(rollup@4.34.6)(vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3)) vitest: specifier: latest - version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.4)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) vue: specifier: 3.5.13 version: 3.5.13(typescript@5.7.3) @@ -1427,12 +1427,6 @@ packages: resolution: {integrity: sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==} engines: {node: '>=16'} - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.23.1': resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} engines: {node: '>=18'} @@ -1451,12 +1445,6 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.23.1': resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} engines: {node: '>=18'} @@ -1475,12 +1463,6 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.23.1': resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} engines: {node: '>=18'} @@ -1499,12 +1481,6 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.23.1': resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} engines: {node: '>=18'} @@ -1523,12 +1499,6 @@ packages: cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.23.1': resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} engines: {node: '>=18'} @@ -1547,12 +1517,6 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.23.1': resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} engines: {node: '>=18'} @@ -1571,12 +1535,6 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.23.1': resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} engines: {node: '>=18'} @@ -1595,12 +1553,6 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.23.1': resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} engines: {node: '>=18'} @@ -1619,12 +1571,6 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.23.1': resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} engines: {node: '>=18'} @@ -1643,12 +1589,6 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.23.1': resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} engines: {node: '>=18'} @@ -1667,12 +1607,6 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.23.1': resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} engines: {node: '>=18'} @@ -1691,12 +1625,6 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.23.1': resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} engines: {node: '>=18'} @@ -1715,12 +1643,6 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.23.1': resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} engines: {node: '>=18'} @@ -1739,12 +1661,6 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.23.1': resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} engines: {node: '>=18'} @@ -1763,12 +1679,6 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.23.1': resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} engines: {node: '>=18'} @@ -1787,12 +1697,6 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.23.1': resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} engines: {node: '>=18'} @@ -1811,12 +1715,6 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.23.1': resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} engines: {node: '>=18'} @@ -1847,12 +1745,6 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.23.1': resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} engines: {node: '>=18'} @@ -1889,12 +1781,6 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.23.1': resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} engines: {node: '>=18'} @@ -1913,12 +1799,6 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.23.1': resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} engines: {node: '>=18'} @@ -1937,12 +1817,6 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.23.1': resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} engines: {node: '>=18'} @@ -1961,12 +1835,6 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.23.1': resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} engines: {node: '>=18'} @@ -1985,12 +1853,6 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.23.1': resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} engines: {node: '>=18'} @@ -4353,16 +4215,11 @@ packages: es-module-lexer@1.6.0: resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} - esbuild-loader@4.2.2: - resolution: {integrity: sha512-Mdq/A1L8p37hkibp8jGFwuQTDSWhDmlueAefsrCPRwNWThEOlQmIglV7Gd6GE2mO5bt7ksfxKOMwkuY7jjVTXg==} + esbuild-loader@4.3.0: + resolution: {integrity: sha512-D7HeJNdkDKKMarPQO/3dlJT6RwN2YJO7ENU6RPlpOz5YxSHnUNi2yvW41Bckvi1EVwctIaLzlb0ni5ag2GINYA==} peerDependencies: webpack: ^4.40.0 || ^5.0.0 - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} - hasBin: true - esbuild@0.23.1: resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} engines: {node: '>=18'} @@ -4484,8 +4341,8 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.20.0: - resolution: {integrity: sha512-aL4F8167Hg4IvsW89ejnpTwx+B/UQRzJPGgbIOl+4XqffWsahVVsLEWoZvnrVuwpWmnRd7XeXmQI1zlKcFDteA==} + eslint@9.20.1: + resolution: {integrity: sha512-m1mM33o6dBUjxl2qb6wv6nGNwCAsns1eKtaQ4l/NPHeTvhiUPbtdfMyktxN4B3fgHIgsYh1VT3V9txblpQHq+g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -4831,8 +4688,8 @@ packages: h3-nightly@1.14.0-20250122-114730-3f9e703: resolution: {integrity: sha512-mAl1YHJq2fwAIVXBaDCQD9uIiAFs+Jl3uNg6vGFfHG8VPHzcEqFbImUE83wCLHYCxC68qSjEnkaDCRzO8SNQAA==} - happy-dom@17.0.3: - resolution: {integrity: sha512-1vWCwpeguN02wQF8kGeaj69FDX19bXKQXmyUKcE+O0WLY0uhS0RPTLCJR8Omy8hrjMHwV3dUJ24JUrK07aOA9Q==} + happy-dom@17.0.4: + resolution: {integrity: sha512-yVo3MZnvsirE4pb/P+ipllK/lfCmxDiBoKaz9IU3uJkyDl7WYF1J9mJkNWkpKRyy7w2Y60mYz5ISpEtN9sfpUA==} engines: {node: '>=18.0.0'} has-bigints@1.0.2: @@ -5527,6 +5384,7 @@ packages: lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} @@ -8374,11 +8232,11 @@ snapshots: transitivePeerDependencies: - debug - '@codspeed/vitest-plugin@4.0.0(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))': + '@codspeed/vitest-plugin@4.0.0(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.4)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))': dependencies: '@codspeed/core': 4.0.0 vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) - vitest: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) + vitest: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.4)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) transitivePeerDependencies: - debug @@ -8393,9 +8251,6 @@ snapshots: esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 - '@esbuild/aix-ppc64@0.21.5': - optional: true - '@esbuild/aix-ppc64@0.23.1': optional: true @@ -8405,9 +8260,6 @@ snapshots: '@esbuild/aix-ppc64@0.25.0': optional: true - '@esbuild/android-arm64@0.21.5': - optional: true - '@esbuild/android-arm64@0.23.1': optional: true @@ -8417,9 +8269,6 @@ snapshots: '@esbuild/android-arm64@0.25.0': optional: true - '@esbuild/android-arm@0.21.5': - optional: true - '@esbuild/android-arm@0.23.1': optional: true @@ -8429,9 +8278,6 @@ snapshots: '@esbuild/android-arm@0.25.0': optional: true - '@esbuild/android-x64@0.21.5': - optional: true - '@esbuild/android-x64@0.23.1': optional: true @@ -8441,9 +8287,6 @@ snapshots: '@esbuild/android-x64@0.25.0': optional: true - '@esbuild/darwin-arm64@0.21.5': - optional: true - '@esbuild/darwin-arm64@0.23.1': optional: true @@ -8453,9 +8296,6 @@ snapshots: '@esbuild/darwin-arm64@0.25.0': optional: true - '@esbuild/darwin-x64@0.21.5': - optional: true - '@esbuild/darwin-x64@0.23.1': optional: true @@ -8465,9 +8305,6 @@ snapshots: '@esbuild/darwin-x64@0.25.0': optional: true - '@esbuild/freebsd-arm64@0.21.5': - optional: true - '@esbuild/freebsd-arm64@0.23.1': optional: true @@ -8477,9 +8314,6 @@ snapshots: '@esbuild/freebsd-arm64@0.25.0': optional: true - '@esbuild/freebsd-x64@0.21.5': - optional: true - '@esbuild/freebsd-x64@0.23.1': optional: true @@ -8489,9 +8323,6 @@ snapshots: '@esbuild/freebsd-x64@0.25.0': optional: true - '@esbuild/linux-arm64@0.21.5': - optional: true - '@esbuild/linux-arm64@0.23.1': optional: true @@ -8501,9 +8332,6 @@ snapshots: '@esbuild/linux-arm64@0.25.0': optional: true - '@esbuild/linux-arm@0.21.5': - optional: true - '@esbuild/linux-arm@0.23.1': optional: true @@ -8513,9 +8341,6 @@ snapshots: '@esbuild/linux-arm@0.25.0': optional: true - '@esbuild/linux-ia32@0.21.5': - optional: true - '@esbuild/linux-ia32@0.23.1': optional: true @@ -8525,9 +8350,6 @@ snapshots: '@esbuild/linux-ia32@0.25.0': optional: true - '@esbuild/linux-loong64@0.21.5': - optional: true - '@esbuild/linux-loong64@0.23.1': optional: true @@ -8537,9 +8359,6 @@ snapshots: '@esbuild/linux-loong64@0.25.0': optional: true - '@esbuild/linux-mips64el@0.21.5': - optional: true - '@esbuild/linux-mips64el@0.23.1': optional: true @@ -8549,9 +8368,6 @@ snapshots: '@esbuild/linux-mips64el@0.25.0': optional: true - '@esbuild/linux-ppc64@0.21.5': - optional: true - '@esbuild/linux-ppc64@0.23.1': optional: true @@ -8561,9 +8377,6 @@ snapshots: '@esbuild/linux-ppc64@0.25.0': optional: true - '@esbuild/linux-riscv64@0.21.5': - optional: true - '@esbuild/linux-riscv64@0.23.1': optional: true @@ -8573,9 +8386,6 @@ snapshots: '@esbuild/linux-riscv64@0.25.0': optional: true - '@esbuild/linux-s390x@0.21.5': - optional: true - '@esbuild/linux-s390x@0.23.1': optional: true @@ -8585,9 +8395,6 @@ snapshots: '@esbuild/linux-s390x@0.25.0': optional: true - '@esbuild/linux-x64@0.21.5': - optional: true - '@esbuild/linux-x64@0.23.1': optional: true @@ -8603,9 +8410,6 @@ snapshots: '@esbuild/netbsd-arm64@0.25.0': optional: true - '@esbuild/netbsd-x64@0.21.5': - optional: true - '@esbuild/netbsd-x64@0.23.1': optional: true @@ -8624,9 +8428,6 @@ snapshots: '@esbuild/openbsd-arm64@0.25.0': optional: true - '@esbuild/openbsd-x64@0.21.5': - optional: true - '@esbuild/openbsd-x64@0.23.1': optional: true @@ -8636,9 +8437,6 @@ snapshots: '@esbuild/openbsd-x64@0.25.0': optional: true - '@esbuild/sunos-x64@0.21.5': - optional: true - '@esbuild/sunos-x64@0.23.1': optional: true @@ -8648,9 +8446,6 @@ snapshots: '@esbuild/sunos-x64@0.25.0': optional: true - '@esbuild/win32-arm64@0.21.5': - optional: true - '@esbuild/win32-arm64@0.23.1': optional: true @@ -8660,9 +8455,6 @@ snapshots: '@esbuild/win32-arm64@0.25.0': optional: true - '@esbuild/win32-ia32@0.21.5': - optional: true - '@esbuild/win32-ia32@0.23.1': optional: true @@ -8672,9 +8464,6 @@ snapshots: '@esbuild/win32-ia32@0.25.0': optional: true - '@esbuild/win32-x64@0.21.5': - optional: true - '@esbuild/win32-x64@0.23.1': optional: true @@ -8684,16 +8473,16 @@ snapshots: '@esbuild/win32-x64@0.25.0': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@9.20.0(jiti@2.4.2))': + '@eslint-community/eslint-utils@4.4.0(eslint@9.20.1(jiti@2.4.2))': dependencies: - eslint: 9.20.0(jiti@2.4.2) + eslint: 9.20.1(jiti@2.4.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/compat@1.2.5(eslint@9.20.0(jiti@2.4.2))': + '@eslint/compat@1.2.5(eslint@9.20.1(jiti@2.4.2))': optionalDependencies: - eslint: 9.20.0(jiti@2.4.2) + eslint: 9.20.1(jiti@2.4.2) '@eslint/config-array@0.19.0': dependencies: @@ -9026,39 +8815,39 @@ snapshots: - utf-8-validate - vue - '@nuxt/eslint-config@1.0.1(@vue/compiler-sfc@3.5.13)(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': + '@nuxt/eslint-config@1.0.1(@vue/compiler-sfc@3.5.13)(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@antfu/install-pkg': 1.0.0 '@clack/prompts': 0.9.1 '@eslint/js': 9.20.0 - '@nuxt/eslint-plugin': 1.0.1(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) - '@stylistic/eslint-plugin': 3.0.1(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/eslint-plugin': 8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/parser': 8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) - eslint: 9.20.0(jiti@2.4.2) - eslint-config-flat-gitignore: 2.0.0(eslint@9.20.0(jiti@2.4.2)) + '@nuxt/eslint-plugin': 1.0.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) + '@stylistic/eslint-plugin': 3.0.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/eslint-plugin': 8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.23.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) + eslint: 9.20.1(jiti@2.4.2) + eslint-config-flat-gitignore: 2.0.0(eslint@9.20.1(jiti@2.4.2)) eslint-flat-config-utils: 2.0.1 - eslint-merge-processors: 1.0.0(eslint@9.20.0(jiti@2.4.2)) - eslint-plugin-import-x: 4.6.1(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) - eslint-plugin-jsdoc: 50.6.3(eslint@9.20.0(jiti@2.4.2)) - eslint-plugin-regexp: 2.7.0(eslint@9.20.0(jiti@2.4.2)) - eslint-plugin-unicorn: 56.0.1(eslint@9.20.0(jiti@2.4.2)) - eslint-plugin-vue: 9.32.0(eslint@9.20.0(jiti@2.4.2)) - eslint-processor-vue-blocks: 1.0.0(@vue/compiler-sfc@3.5.13)(eslint@9.20.0(jiti@2.4.2)) + eslint-merge-processors: 1.0.0(eslint@9.20.1(jiti@2.4.2)) + eslint-plugin-import-x: 4.6.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) + eslint-plugin-jsdoc: 50.6.3(eslint@9.20.1(jiti@2.4.2)) + eslint-plugin-regexp: 2.7.0(eslint@9.20.1(jiti@2.4.2)) + eslint-plugin-unicorn: 56.0.1(eslint@9.20.1(jiti@2.4.2)) + eslint-plugin-vue: 9.32.0(eslint@9.20.1(jiti@2.4.2)) + eslint-processor-vue-blocks: 1.0.0(@vue/compiler-sfc@3.5.13)(eslint@9.20.1(jiti@2.4.2)) globals: 15.14.0 local-pkg: 1.0.0 pathe: 2.0.2 - vue-eslint-parser: 9.4.3(eslint@9.20.0(jiti@2.4.2)) + vue-eslint-parser: 9.4.3(eslint@9.20.1(jiti@2.4.2)) transitivePeerDependencies: - '@vue/compiler-sfc' - supports-color - typescript - '@nuxt/eslint-plugin@1.0.1(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': + '@nuxt/eslint-plugin@1.0.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@typescript-eslint/types': 8.23.0 - '@typescript-eslint/utils': 8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) - eslint: 9.20.0(jiti@2.4.2) + '@typescript-eslint/utils': 8.23.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) + eslint: 9.20.1(jiti@2.4.2) transitivePeerDependencies: - supports-color - typescript @@ -9132,7 +8921,7 @@ snapshots: rc9: 2.1.2 std-env: 3.8.0 - '@nuxt/test-utils@3.15.4(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3)))(@types/node@22.13.1)(@vue/test-utils@2.4.6)(happy-dom@17.0.3)(jiti@2.4.2)(magicast@0.3.5)(playwright-core@1.50.1)(terser@5.32.0)(tsx@4.19.2)(typescript@5.7.3)(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0)': + '@nuxt/test-utils@3.15.4(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3)))(@types/node@22.13.1)(@vue/test-utils@2.4.6)(happy-dom@17.0.4)(jiti@2.4.2)(magicast@0.3.5)(playwright-core@1.50.1)(terser@5.32.0)(tsx@4.19.2)(typescript@5.7.3)(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.4)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0)': dependencies: '@nuxt/kit': link:packages/kit '@nuxt/schema': link:packages/schema @@ -9158,14 +8947,14 @@ snapshots: unenv: 1.10.0 unplugin: 2.2.0 vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) - vitest-environment-nuxt: 1.0.1(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3)))(@types/node@22.13.1)(@vue/test-utils@2.4.6)(happy-dom@17.0.3)(jiti@2.4.2)(magicast@0.3.5)(playwright-core@1.50.1)(terser@5.32.0)(tsx@4.19.2)(typescript@5.7.3)(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0) + vitest-environment-nuxt: 1.0.1(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3)))(@types/node@22.13.1)(@vue/test-utils@2.4.6)(happy-dom@17.0.4)(jiti@2.4.2)(magicast@0.3.5)(playwright-core@1.50.1)(terser@5.32.0)(tsx@4.19.2)(typescript@5.7.3)(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.4)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0) vue: 3.5.13(typescript@5.7.3) optionalDependencies: '@testing-library/vue': 8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3)) '@vue/test-utils': 2.4.6 - happy-dom: 17.0.3 + happy-dom: 17.0.4 playwright-core: 1.50.1 - vitest: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) + vitest: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.4)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -9735,10 +9524,10 @@ snapshots: ignore: 5.3.2 p-map: 4.0.0 - '@stylistic/eslint-plugin@3.0.1(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': + '@stylistic/eslint-plugin@3.0.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@typescript-eslint/utils': 8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) - eslint: 9.20.0(jiti@2.4.2) + '@typescript-eslint/utils': 8.23.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) + eslint: 9.20.1(jiti@2.4.2) eslint-visitor-keys: 4.2.0 espree: 10.3.0 estraverse: 5.3.0 @@ -9933,15 +9722,15 @@ snapshots: '@types/youtube@0.1.0': optional: true - '@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.23.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/scope-manager': 8.23.0 - '@typescript-eslint/type-utils': 8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/type-utils': 8.23.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.23.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.23.0 - eslint: 9.20.0(jiti@2.4.2) + eslint: 9.20.1(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -9950,14 +9739,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/parser@8.23.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@typescript-eslint/scope-manager': 8.23.0 '@typescript-eslint/types': 8.23.0 '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.23.0 debug: 4.4.0(supports-color@9.4.0) - eslint: 9.20.0(jiti@2.4.2) + eslint: 9.20.1(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -9967,12 +9756,12 @@ snapshots: '@typescript-eslint/types': 8.23.0 '@typescript-eslint/visitor-keys': 8.23.0 - '@typescript-eslint/type-utils@8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.23.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) - '@typescript-eslint/utils': 8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.23.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) debug: 4.4.0(supports-color@9.4.0) - eslint: 9.20.0(jiti@2.4.2) + eslint: 9.20.1(jiti@2.4.2) ts-api-utils: 2.0.1(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: @@ -9994,13 +9783,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/utils@8.23.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.20.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.20.1(jiti@2.4.2)) '@typescript-eslint/scope-manager': 8.23.0 '@typescript-eslint/types': 8.23.0 '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) - eslint: 9.20.0(jiti@2.4.2) + eslint: 9.20.1(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -10232,7 +10021,7 @@ snapshots: vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) vue: 3.5.13(typescript@5.7.3) - '@vitest/coverage-v8@3.0.5(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))': + '@vitest/coverage-v8@3.0.5(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.4)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -10246,7 +10035,7 @@ snapshots: std-env: 3.8.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) + vitest: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.4)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) transitivePeerDependencies: - supports-color @@ -11520,48 +11309,22 @@ snapshots: es-module-lexer@1.6.0: {} - esbuild-loader@4.2.2(webpack@5.97.1(esbuild@0.25.0)): + esbuild-loader@4.3.0(webpack@5.97.1(esbuild@0.25.0)): dependencies: - esbuild: 0.21.5 + esbuild: 0.25.0 get-tsconfig: 4.8.0 loader-utils: 2.0.4 webpack: 5.97.1(esbuild@0.25.0) webpack-sources: 1.4.3 - esbuild-loader@4.2.2(webpack@5.97.1): + esbuild-loader@4.3.0(webpack@5.97.1): dependencies: - esbuild: 0.21.5 + esbuild: 0.25.0 get-tsconfig: 4.8.0 loader-utils: 2.0.4 webpack: 5.97.1 webpack-sources: 1.4.3 - esbuild@0.21.5: - optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 - esbuild@0.23.1: optionalDependencies: '@esbuild/aix-ppc64': 0.23.1 @@ -11655,10 +11418,10 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-config-flat-gitignore@2.0.0(eslint@9.20.0(jiti@2.4.2)): + eslint-config-flat-gitignore@2.0.0(eslint@9.20.1(jiti@2.4.2)): dependencies: - '@eslint/compat': 1.2.5(eslint@9.20.0(jiti@2.4.2)) - eslint: 9.20.0(jiti@2.4.2) + '@eslint/compat': 1.2.5(eslint@9.20.1(jiti@2.4.2)) + eslint: 9.20.1(jiti@2.4.2) eslint-flat-config-utils@2.0.1: dependencies: @@ -11672,19 +11435,19 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-merge-processors@1.0.0(eslint@9.20.0(jiti@2.4.2)): + eslint-merge-processors@1.0.0(eslint@9.20.1(jiti@2.4.2)): dependencies: - eslint: 9.20.0(jiti@2.4.2) + eslint: 9.20.1(jiti@2.4.2) - eslint-plugin-import-x@4.6.1(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3): + eslint-plugin-import-x@4.6.1(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3): dependencies: '@types/doctrine': 0.0.9 '@typescript-eslint/scope-manager': 8.23.0 - '@typescript-eslint/utils': 8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.23.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) debug: 4.4.0(supports-color@9.4.0) doctrine: 3.0.0 enhanced-resolve: 5.18.0 - eslint: 9.20.0(jiti@2.4.2) + eslint: 9.20.1(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 get-tsconfig: 4.8.0 is-glob: 4.0.3 @@ -11696,14 +11459,14 @@ snapshots: - supports-color - typescript - eslint-plugin-jsdoc@50.6.3(eslint@9.20.0(jiti@2.4.2)): + eslint-plugin-jsdoc@50.6.3(eslint@9.20.1(jiti@2.4.2)): dependencies: '@es-joy/jsdoccomment': 0.49.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.4.0(supports-color@9.4.0) escape-string-regexp: 4.0.0 - eslint: 9.20.0(jiti@2.4.2) + eslint: 9.20.1(jiti@2.4.2) espree: 10.3.0 esquery: 1.6.0 parse-imports: 2.1.1 @@ -11715,35 +11478,35 @@ snapshots: eslint-plugin-no-only-tests@3.3.0: {} - eslint-plugin-perfectionist@4.8.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3): + eslint-plugin-perfectionist@4.8.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3): dependencies: '@typescript-eslint/types': 8.23.0 - '@typescript-eslint/utils': 8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) - eslint: 9.20.0(jiti@2.4.2) + '@typescript-eslint/utils': 8.23.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3) + eslint: 9.20.1(jiti@2.4.2) natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-regexp@2.7.0(eslint@9.20.0(jiti@2.4.2)): + eslint-plugin-regexp@2.7.0(eslint@9.20.1(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.20.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.20.1(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 comment-parser: 1.4.1 - eslint: 9.20.0(jiti@2.4.2) + eslint: 9.20.1(jiti@2.4.2) jsdoc-type-pratt-parser: 4.1.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 - eslint-plugin-unicorn@56.0.1(eslint@9.20.0(jiti@2.4.2)): + eslint-plugin-unicorn@56.0.1(eslint@9.20.1(jiti@2.4.2)): dependencies: '@babel/helper-validator-identifier': 7.25.9 - '@eslint-community/eslint-utils': 4.4.0(eslint@9.20.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.20.1(jiti@2.4.2)) ci-info: 4.0.0 clean-regexp: 1.0.0 core-js-compat: 3.38.1 - eslint: 9.20.0(jiti@2.4.2) + eslint: 9.20.1(jiti@2.4.2) esquery: 1.6.0 globals: 15.14.0 indent-string: 4.0.0 @@ -11756,24 +11519,24 @@ snapshots: semver: 7.7.1 strip-indent: 3.0.0 - eslint-plugin-vue@9.32.0(eslint@9.20.0(jiti@2.4.2)): + eslint-plugin-vue@9.32.0(eslint@9.20.1(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.20.0(jiti@2.4.2)) - eslint: 9.20.0(jiti@2.4.2) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.20.1(jiti@2.4.2)) + eslint: 9.20.1(jiti@2.4.2) globals: 13.24.0 natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.1.2 semver: 7.7.1 - vue-eslint-parser: 9.4.3(eslint@9.20.0(jiti@2.4.2)) + vue-eslint-parser: 9.4.3(eslint@9.20.1(jiti@2.4.2)) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color - eslint-processor-vue-blocks@1.0.0(@vue/compiler-sfc@3.5.13)(eslint@9.20.0(jiti@2.4.2)): + eslint-processor-vue-blocks@1.0.0(@vue/compiler-sfc@3.5.13)(eslint@9.20.1(jiti@2.4.2)): dependencies: '@vue/compiler-sfc': 3.5.13 - eslint: 9.20.0(jiti@2.4.2) + eslint: 9.20.1(jiti@2.4.2) eslint-scope@5.1.1: dependencies: @@ -11790,9 +11553,9 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-typegen@1.0.0(eslint@9.20.0(jiti@2.4.2)): + eslint-typegen@1.0.0(eslint@9.20.1(jiti@2.4.2)): dependencies: - eslint: 9.20.0(jiti@2.4.2) + eslint: 9.20.1(jiti@2.4.2) json-schema-to-typescript-lite: 14.1.0 ohash: 1.1.4 @@ -11800,9 +11563,9 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.20.0(jiti@2.4.2): + eslint@9.20.1(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.20.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.20.1(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.19.0 '@eslint/core': 0.11.0 @@ -12210,7 +11973,7 @@ snapshots: uncrypto: 0.1.3 unenv: 1.10.0 - happy-dom@17.0.3: + happy-dom@17.0.4: dependencies: webidl-conversions: 7.0.0 whatwg-mimetype: 3.0.0 @@ -12338,7 +12101,7 @@ snapshots: html-tags@3.3.1: {} - html-validate@9.2.1(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0)): + html-validate@9.2.1(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.4)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0)): dependencies: '@html-validate/stylish': 4.2.0 '@sidvind/better-ajv-errors': 3.0.1(ajv@8.17.1) @@ -12349,7 +12112,7 @@ snapshots: prompts: 2.4.2 semver: 7.7.1 optionalDependencies: - vitest: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) + vitest: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.4)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0) html-void-elements@3.0.0: {} @@ -15571,7 +15334,7 @@ snapshots: - tsx - yaml - vite-plugin-checker@0.8.0(eslint@9.20.0(jiti@2.4.2))(optionator@0.9.4)(typescript@5.7.3)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(vue-tsc@2.1.10(typescript@5.7.3)): + vite-plugin-checker@0.8.0(eslint@9.20.1(jiti@2.4.2))(optionator@0.9.4)(typescript@5.7.3)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(vue-tsc@2.1.10(typescript@5.7.3)): dependencies: '@babel/code-frame': 7.26.2 ansi-escapes: 4.3.2 @@ -15589,7 +15352,7 @@ snapshots: vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.0.8 optionalDependencies: - eslint: 9.20.0(jiti@2.4.2) + eslint: 9.20.1(jiti@2.4.2) optionator: 0.9.4 typescript: 5.7.3 vue-tsc: 2.1.10(typescript@5.7.3) @@ -15636,9 +15399,9 @@ snapshots: tsx: 4.19.2 yaml: 2.7.0 - vitest-environment-nuxt@1.0.1(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3)))(@types/node@22.13.1)(@vue/test-utils@2.4.6)(happy-dom@17.0.3)(jiti@2.4.2)(magicast@0.3.5)(playwright-core@1.50.1)(terser@5.32.0)(tsx@4.19.2)(typescript@5.7.3)(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0): + vitest-environment-nuxt@1.0.1(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3)))(@types/node@22.13.1)(@vue/test-utils@2.4.6)(happy-dom@17.0.4)(jiti@2.4.2)(magicast@0.3.5)(playwright-core@1.50.1)(terser@5.32.0)(tsx@4.19.2)(typescript@5.7.3)(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.4)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0): dependencies: - '@nuxt/test-utils': 3.15.4(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3)))(@types/node@22.13.1)(@vue/test-utils@2.4.6)(happy-dom@17.0.3)(jiti@2.4.2)(magicast@0.3.5)(playwright-core@1.50.1)(terser@5.32.0)(tsx@4.19.2)(typescript@5.7.3)(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0) + '@nuxt/test-utils': 3.15.4(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3)))(@types/node@22.13.1)(@vue/test-utils@2.4.6)(happy-dom@17.0.4)(jiti@2.4.2)(magicast@0.3.5)(playwright-core@1.50.1)(terser@5.32.0)(tsx@4.19.2)(typescript@5.7.3)(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.4)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0))(yaml@2.7.0) transitivePeerDependencies: - '@cucumber/cucumber' - '@jest/globals' @@ -15664,7 +15427,7 @@ snapshots: - vitest - yaml - vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.3)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0): + vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(happy-dom@17.0.4)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0): dependencies: '@vitest/expect': 3.0.5 '@vitest/mocker': 3.0.5(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(sass@1.78.0)(terser@5.32.0)(tsx@4.19.2)(yaml@2.7.0)) @@ -15689,7 +15452,7 @@ snapshots: optionalDependencies: '@types/debug': 4.1.12 '@types/node': 22.13.1 - happy-dom: 17.0.3 + happy-dom: 17.0.4 transitivePeerDependencies: - jiti - less @@ -15737,10 +15500,10 @@ snapshots: vue-devtools-stub@0.1.0: {} - vue-eslint-parser@9.4.3(eslint@9.20.0(jiti@2.4.2)): + vue-eslint-parser@9.4.3(eslint@9.20.1(jiti@2.4.2)): dependencies: debug: 4.4.0(supports-color@9.4.0) - eslint: 9.20.0(jiti@2.4.2) + eslint: 9.20.1(jiti@2.4.2) eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 From 5aca9e63c1527d7614ec9cac3a815e2cb5e3a9a1 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Tue, 11 Feb 2025 20:58:42 +0000 Subject: [PATCH 18/18] feat(kit): add named layer aliases (#30948) --- docs/1.getting-started/9.layers.md | 10 ++++-- docs/2.guide/3.going-further/7.layers.md | 18 +++++++++- packages/kit/src/loader/config.ts | 33 +++++++++++++------ .../layer-fixture/layers/test/assets/foo.js | 1 + .../layer-fixture/layers/test/nuxt.config.ts | 1 + .../kit/test/layer-fixture/nuxt.config.ts | 5 +++ packages/kit/test/load-nuxt-config.spec.ts | 28 ++++++++++++++++ 7 files changed, 83 insertions(+), 13 deletions(-) create mode 100644 packages/kit/test/layer-fixture/layers/test/assets/foo.js create mode 100644 packages/kit/test/layer-fixture/layers/test/nuxt.config.ts create mode 100644 packages/kit/test/layer-fixture/nuxt.config.ts create mode 100644 packages/kit/test/load-nuxt-config.spec.ts diff --git a/docs/1.getting-started/9.layers.md b/docs/1.getting-started/9.layers.md index e1fec4fd91..6365b16ad5 100644 --- a/docs/1.getting-started/9.layers.md +++ b/docs/1.getting-started/9.layers.md @@ -18,10 +18,16 @@ One of the core features of Nuxt is the layers and extending support. You can ex ## Usage -By default, any layers within your project in the `~~/layers` directory will be automatically registered as layers in your project +By default, any layers within your project in the `~~/layers` directory will be automatically registered as layers in your project. ::note -Layer auto-registration was introduced in Nuxt v3.12.0 +Layer auto-registration was introduced in Nuxt v3.12.0. +:: + +In addition, named layer aliases to the `srcDir` of each of these layers will automatically be created. For example, you will be able to access the `~~/layers/test` layer via `#layers/test`. + +::note +Named layer aliases were introduced in Nuxt v3.16.0. :: In addition, you can extend from a layer by adding the [extends](/docs/api/nuxt-config#extends) property to your [`nuxt.config`](/docs/guide/directory-structure/nuxt-config) file. diff --git a/docs/2.guide/3.going-further/7.layers.md b/docs/2.guide/3.going-further/7.layers.md index f22e64a2ec..36a3211382 100644 --- a/docs/2.guide/3.going-further/7.layers.md +++ b/docs/2.guide/3.going-further/7.layers.md @@ -164,9 +164,25 @@ When publishing the layer as a private npm package, you need to make sure you lo ## Tips +### Named Layer Aliases + +Auto-scanned layers (from your `~~/layers` directory) automatically create aliases. For example, you can access your `~~/layers/test` layer via `#layers/test`. + +If you want to create named layer aliases for other layers, you can specify a name in the configuration of the layer. + +```ts [nuxt.config.ts] +export default defineNuxtConfig({ + $meta: { + name: 'example', + }, +}) +``` + +This will produce an alias of `#layers/example` which points to your layer. + ### Relative Paths and Aliases -When importing using aliases (such as `~/` and `@/`) in a layer components and composables, note that aliases are resolved relative to the user's project paths. As a workaround, you can **use relative paths** to import them. We are working on a better solution for named layer aliases. +When importing using global aliases (such as `~/` and `@/`) in a layer components and composables, note that these aliases are resolved relative to the user's project paths. As a workaround, you can **use relative paths** to import them, or use named layer aliases. Also when using relative paths in `nuxt.config` file of a layer, (with exception of nested `extends`) they are resolved relative to user's project instead of the layer. As a workaround, use full resolved paths in `nuxt.config`: diff --git a/packages/kit/src/loader/config.ts b/packages/kit/src/loader/config.ts index f8d892bb3d..5fd9a1dfe4 100644 --- a/packages/kit/src/loader/config.ts +++ b/packages/kit/src/loader/config.ts @@ -7,7 +7,7 @@ import { loadConfig } from 'c12' import type { NuxtConfig, NuxtOptions } from '@nuxt/schema' import { globby } from 'globby' import defu from 'defu' -import { join } from 'pathe' +import { basename, join, relative } from 'pathe' import { isWindows } from 'std-env' import { tryResolveModule } from '../internal/esm' @@ -18,14 +18,11 @@ export interface LoadNuxtConfigOptions extends Omit { // Automatically detect and import layers from `~~/layers/` directory - opts.overrides = defu(opts.overrides, { - _extends: await globby('layers/*', { - onlyDirectories: true, - cwd: opts.cwd || process.cwd(), - }), - }); + const localLayers = await globby('layers/*', { onlyDirectories: true, cwd: opts.cwd || process.cwd() }) + opts.overrides = defu(opts.overrides, { _extends: localLayers }); + (globalThis as any).defineNuxtConfig = (c: any) => c - const result = await loadConfig({ + const { configFile, layers = [], cwd, config: nuxtConfig, meta } = await loadConfig({ name: 'nuxt', configFile: 'nuxt.config', rcFile: '.nuxtrc', @@ -35,13 +32,17 @@ export async function loadNuxtConfig (opts: LoadNuxtConfigOptions): Promise { + it('should add named aliases for local layers', async () => { + const cwd = fileURLToPath(new URL('./layer-fixture', import.meta.url)) + const config = await loadNuxtConfig({ cwd }) + for (const alias in config.alias) { + config.alias[alias] = config.alias[alias]!.replace(cwd, '') + } + expect(config.alias).toMatchInlineSnapshot(` + { + "#build": "/.nuxt", + "#internal/nuxt/paths": "/.nuxt/paths.mjs", + "#layers/layer-fixture": "", + "#layers/test": "/layers/test", + "#shared": "/shared", + "@": "", + "@@": "", + "assets": "/assets", + "public": "/public", + "~": "", + "~~": "", + } + `) + }) +})