diff --git a/docs/3.api/2.composables/use-loading-indicator.md b/docs/3.api/2.composables/use-loading-indicator.md index 357c260bbd..9d112ed764 100644 --- a/docs/3.api/2.composables/use-loading-indicator.md +++ b/docs/3.api/2.composables/use-loading-indicator.md @@ -40,7 +40,11 @@ It hooks into [`page:loading:start`](/docs/api/advanced/hooks#app-hooks-runtime) ### `start()` -Set `isLoading` to true and start to increase the `progress` value. +Set `isLoading` to true and start to increase the `progress` value. `start` accepts a `{ force: true }` option to skip the interval and show the loading state immediately. + +### `set()` + +Set the `progress` value to a specific value. `set` accepts a `{ force: true }` option to skip the interval and show the loading state immediately. ### `finish()` @@ -62,3 +66,12 @@ Used by `finish()`. Clear all timers and intervals used by the composable. }) ``` + +```vue + +``` diff --git a/package.json b/package.json index 5ea6b36fe3..7eac973c8c 100644 --- a/package.json +++ b/package.json @@ -128,7 +128,7 @@ "vitest-environment-nuxt": "1.0.1", "vue": "3.5.13", "vue-tsc": "2.2.0", - "webpack": "5.97.1" + "webpack": "5.98.0" }, "packageManager": "pnpm@10.3.0", "version": "" diff --git a/packages/kit/package.json b/packages/kit/package.json index b42781529c..ae6c7fc550 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -56,7 +56,7 @@ "unbuild": "3.3.1", "vite": "6.1.0", "vitest": "3.0.5", - "webpack": "5.97.1" + "webpack": "5.98.0" }, "engines": { "node": ">=18.12.0" diff --git a/packages/kit/src/index.ts b/packages/kit/src/index.ts index 8855c4fd96..55360576ae 100644 --- a/packages/kit/src/index.ts +++ b/packages/kit/src/index.ts @@ -32,5 +32,5 @@ export { addTemplate, addServerTemplate, addTypeTemplate, normalizeTemplate, upd export { logger, useLogger } from './logger' // Internal Utils -export { resolveModule, tryResolveModule, importModule, tryImportModule, requireModule, tryRequireModule } from './internal/esm' +export { directoryToURL, resolveModule, tryResolveModule, importModule, tryImportModule, requireModule, tryRequireModule } from './internal/esm' export type { ImportModuleOptions, ResolveModuleOptions } from './internal/esm' diff --git a/packages/kit/src/internal/esm.ts b/packages/kit/src/internal/esm.ts index dabfa78d15..f69d9a276e 100644 --- a/packages/kit/src/internal/esm.ts +++ b/packages/kit/src/internal/esm.ts @@ -4,7 +4,13 @@ import { createJiti } from 'jiti' import { captureStackTrace } from 'errx' export interface ResolveModuleOptions { + /** @deprecated use `url` with URLs pointing at a file - never a directory */ paths?: string | string[] + url?: URL | URL[] +} + +export function directoryToURL (dir: string): URL { + return pathToFileURL(dir + '/') } /** @@ -13,7 +19,10 @@ export interface ResolveModuleOptions { * * @internal */ -export async function tryResolveModule (id: string, url: string | string[] = import.meta.url) { +export async function tryResolveModule (id: string, url: URL | URL[]): Promise +/** @deprecated pass URLs pointing at files */ +export async function tryResolveModule (id: string, url: string | string[]): Promise +export async function tryResolveModule (id: string, url: string | string[] | URL | URL[] = import.meta.url) { try { return await resolvePath(id, { url }) } catch { @@ -22,7 +31,7 @@ export async function tryResolveModule (id: string, url: string | string[] = imp } export function resolveModule (id: string, options?: ResolveModuleOptions) { - return resolvePathSync(id, { url: options?.paths ?? [import.meta.url] }) + return resolvePathSync(id, { url: options?.url ?? options?.paths ?? [import.meta.url] }) } export interface ImportModuleOptions extends ResolveModuleOptions { @@ -31,8 +40,8 @@ export interface ImportModuleOptions extends ResolveModuleOptions { } export async function importModule (id: string, opts?: ImportModuleOptions) { - const resolvedPath = await resolveModule(id, opts) - return import(pathToFileURL(resolvedPath).href).then(r => opts?.interopDefault !== false ? interopDefault(r) : r) as Promise + const resolvedPath = resolveModule(id, opts) + return await import(pathToFileURL(resolvedPath).href).then(r => opts?.interopDefault !== false ? interopDefault(r) : r) as Promise } export function tryImportModule (id: string, opts?: ImportModuleOptions) { diff --git a/packages/kit/src/loader/config.ts b/packages/kit/src/loader/config.ts index 5fd9a1dfe4..98e84e84d6 100644 --- a/packages/kit/src/loader/config.ts +++ b/packages/kit/src/loader/config.ts @@ -9,7 +9,7 @@ import { globby } from 'globby' import defu from 'defu' import { basename, join, relative } from 'pathe' import { isWindows } from 'std-env' -import { tryResolveModule } from '../internal/esm' +import { directoryToURL, tryResolveModule } from '../internal/esm' export interface LoadNuxtConfigOptions extends Omit, 'overrides'> { // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type @@ -108,11 +108,12 @@ export async function loadNuxtConfig (opts: LoadNuxtConfigOptions): Promise r.NuxtConfigSchema) } diff --git a/packages/kit/src/loader/nuxt.ts b/packages/kit/src/loader/nuxt.ts index 23a0d1e5d3..21c2870c8d 100644 --- a/packages/kit/src/loader/nuxt.ts +++ b/packages/kit/src/loader/nuxt.ts @@ -1,9 +1,7 @@ -import { pathToFileURL } from 'node:url' import { readPackageJSON, resolvePackageJSON } from 'pkg-types' import type { Nuxt, NuxtConfig } from '@nuxt/schema' import { resolve } from 'pathe' -import { withTrailingSlash } from 'ufo' -import { importModule, tryImportModule } from '../internal/esm' +import { directoryToURL, importModule, tryImportModule } from '../internal/esm' import { runWithNuxtContext } from '../context' import type { LoadNuxtConfigOptions } from './config' @@ -23,24 +21,24 @@ export async function loadNuxt (opts: LoadNuxtOptions): Promise { // Apply dev as config override opts.overrides.dev = !!opts.dev - const rootDir = withTrailingSlash(pathToFileURL(opts.cwd!).href) + const rootURL = directoryToURL(opts.cwd!) const nearestNuxtPkg = await Promise.all(['nuxt-nightly', 'nuxt'] - .map(pkg => resolvePackageJSON(pkg, { url: rootDir }).catch(() => null))) + .map(pkg => resolvePackageJSON(pkg, { url: rootURL }).catch(() => null))) .then(r => (r.filter(Boolean) as string[]).sort((a, b) => b.length - a.length)[0]) if (!nearestNuxtPkg) { throw new Error(`Cannot find any nuxt version from ${opts.cwd}`) } const pkg = await readPackageJSON(nearestNuxtPkg) - const { loadNuxt } = await importModule((pkg as any)._name || pkg.name, { paths: rootDir }) + const { loadNuxt } = await importModule((pkg as any)._name || pkg.name, { url: rootURL }) const nuxt = await loadNuxt(opts) return nuxt } export async function buildNuxt (nuxt: Nuxt): Promise { - const rootDir = withTrailingSlash(pathToFileURL(nuxt.options.rootDir).href) + const rootURL = directoryToURL(nuxt.options.rootDir) - const { build } = await tryImportModule('nuxt-nightly', { paths: rootDir }) || await importModule('nuxt', { paths: rootDir }) + const { build } = await tryImportModule('nuxt-nightly', { url: rootURL }) || await importModule('nuxt', { url: rootURL }) return runWithNuxtContext(nuxt, () => build(nuxt)) } diff --git a/packages/kit/src/module/install.ts b/packages/kit/src/module/install.ts index 44fead197f..db8749fe2a 100644 --- a/packages/kit/src/module/install.ts +++ b/packages/kit/src/module/install.ts @@ -6,6 +6,7 @@ import { defu } from 'defu' import { createJiti } from 'jiti' import { parseNodeModulePath, resolve as resolveModule } from 'mlly' import { isRelative } from 'ufo' +import { directoryToURL } from '../internal/esm' import { useNuxt } from '../context' import { resolveAlias, resolvePath } from '../resolve' import { logger } from '../logger' @@ -101,7 +102,10 @@ export async function loadNuxtModuleInstance (nuxtModule: string | NuxtModule, n try { const src = isAbsolute(path) ? pathToFileURL(await resolvePath(path, { fallbackToOriginal: false, extensions: nuxt.options.extensions })).href - : await resolveModule(path, { url: nuxt.options.modulesDir.map(m => pathToFileURL(m.replace(/\/node_modules\/?$/, ''))), extensions: nuxt.options.extensions }) + : await resolveModule(path, { + url: nuxt.options.modulesDir.map(m => directoryToURL(m.replace(/\/node_modules\/?$/, '/'))), + extensions: nuxt.options.extensions, + }) nuxtModule = await jiti.import(src, { default: true }) as NuxtModule resolvedModulePath = fileURLToPath(new URL(src)) diff --git a/packages/kit/src/resolve.ts b/packages/kit/src/resolve.ts index aed41f2cbb..bfb57409e6 100644 --- a/packages/kit/src/resolve.ts +++ b/packages/kit/src/resolve.ts @@ -4,6 +4,7 @@ import { basename, dirname, isAbsolute, join, normalize, resolve } from 'pathe' import { globby } from 'globby' import { resolvePath as _resolvePath } from 'mlly' import { resolveAlias as _resolveAlias } from 'pathe/utils' +import { directoryToURL } from './internal/esm' import { tryUseNuxt } from './context' import { isIgnored } from './ignore' import { toArray } from './utils' @@ -201,7 +202,7 @@ async function _resolvePathGranularly (path: string, opts: ResolvePathOptions = } // Try to resolve as module id - const resolvedModulePath = await _resolvePath(_path, { url: [cwd, ...modulesDir] }).catch(() => null) + const resolvedModulePath = await _resolvePath(_path, { url: [cwd, ...modulesDir].map(d => directoryToURL(d)) }).catch(() => null) if (resolvedModulePath) { return { path: resolvedModulePath, diff --git a/packages/kit/src/template.ts b/packages/kit/src/template.ts index fe9fcec825..29384336c7 100644 --- a/packages/kit/src/template.ts +++ b/packages/kit/src/template.ts @@ -9,7 +9,7 @@ import { gte } from 'semver' import { readPackageJSON } from 'pkg-types' import { filterInPlace } from './utils' -import { tryResolveModule } from './internal/esm' +import { directoryToURL, tryResolveModule } from './internal/esm' import { getDirectory } from './module/install' import { tryUseNuxt, useNuxt } from './context' import { resolveNuxtModule } from './resolve' @@ -244,6 +244,8 @@ export async function _generateTypes (nuxt: Nuxt) { tsConfig.compilerOptions.paths ||= {} tsConfig.include ||= [] + const importPaths = nuxt.options.modulesDir.map(d => directoryToURL(d)) + for (const alias in aliases) { if (excludedAlias.some(re => re.test(alias))) { continue @@ -251,7 +253,7 @@ export async function _generateTypes (nuxt: Nuxt) { let absolutePath = resolve(basePath, aliases[alias]!) let stats = await fsp.stat(absolutePath).catch(() => null /* file does not exist */) if (!stats) { - const resolvedModule = await tryResolveModule(aliases[alias]!, nuxt.options.modulesDir) + const resolvedModule = await tryResolveModule(aliases[alias]!, importPaths) if (resolvedModule) { absolutePath = resolvedModule stats = await fsp.stat(resolvedModule).catch(() => null) diff --git a/packages/nuxt/src/app/composables/loading-indicator.ts b/packages/nuxt/src/app/composables/loading-indicator.ts index b3c0a86455..e3d1031d79 100644 --- a/packages/nuxt/src/app/composables/loading-indicator.ts +++ b/packages/nuxt/src/app/composables/loading-indicator.ts @@ -24,8 +24,8 @@ export type LoadingIndicator = { progress: Ref isLoading: Ref error: Ref - start: () => void - set: (value: number) => void + start: (opts?: { force?: boolean }) => void + set: (value: number, opts?: { force?: boolean }) => void finish: (opts?: { force?: boolean, error?: boolean }) => void clear: () => void } @@ -49,23 +49,24 @@ function createLoadingIndicator (opts: Partial = {}) { let hideTimeout: number | NodeJS.Timeout let resetTimeout: number | NodeJS.Timeout - const start = () => { + const start = (opts: { force?: boolean } = {}) => { error.value = false - set(0) + set(0, opts) } - function set (at = 0) { + function set (at = 0, opts: { force?: boolean } = {}) { if (nuxtApp.isHydrating) { return } - if (at >= 100) { return finish() } + if (at >= 100) { return finish({ force: opts.force }) } clear() progress.value = at < 0 ? 0 : at - if (throttle && import.meta.client) { + const throttleTime = opts.force ? 0 : throttle + if (throttleTime && import.meta.client) { throttleTimeout = setTimeout(() => { isLoading.value = true _startProgress() - }, throttle) + }, throttleTime) } else { isLoading.value = true _startProgress() diff --git a/packages/nuxt/src/app/nuxt.ts b/packages/nuxt/src/app/nuxt.ts index 4314d78b3a..5ca30f441e 100644 --- a/packages/nuxt/src/app/nuxt.ts +++ b/packages/nuxt/src/app/nuxt.ts @@ -517,7 +517,7 @@ export function tryUseNuxtApp (id?: string): NuxtApp | null { nuxtAppInstance = getCurrentInstance()?.appContext.app.$nuxt } - nuxtAppInstance = nuxtAppInstance || getNuxtAppCtx(id).tryUse() + nuxtAppInstance ||= getNuxtAppCtx(id).tryUse() return nuxtAppInstance || null } diff --git a/packages/nuxt/src/components/runtime/client-component.ts b/packages/nuxt/src/components/runtime/client-component.ts index 42c8976352..31b0ca0065 100644 --- a/packages/nuxt/src/components/runtime/client-component.ts +++ b/packages/nuxt/src/components/runtime/client-component.ts @@ -52,7 +52,7 @@ function pageToClientOnly (component: T) { if (isPromise(setupState)) { return Promise.resolve(setupState).then((setupState: any) => { if (typeof setupState !== 'function') { - setupState = setupState || {} + setupState ||= {} setupState.mounted$ = mounted$ return setupState } diff --git a/packages/nuxt/src/core/builder.ts b/packages/nuxt/src/core/builder.ts index 29bb6f2645..a0ce6aca04 100644 --- a/packages/nuxt/src/core/builder.ts +++ b/packages/nuxt/src/core/builder.ts @@ -1,7 +1,7 @@ import type { EventType } from '@parcel/watcher' import type { FSWatcher } from 'chokidar' import { watch as chokidarWatch } from 'chokidar' -import { createIsIgnored, importModule, isIgnored, tryResolveModule, useNuxt } from '@nuxt/kit' +import { createIsIgnored, directoryToURL, importModule, isIgnored, tryResolveModule, useNuxt } from '@nuxt/kit' import { debounce } from 'perfect-debounce' import { normalize, relative, resolve } from 'pathe' import type { Nuxt, NuxtBuilder } from 'nuxt/schema' @@ -193,7 +193,7 @@ async function createParcelWatcher () { // eslint-disable-next-line no-console console.time('[nuxt] builder:parcel:watch') } - const watcherPath = await tryResolveModule('@parcel/watcher', [nuxt.options.rootDir, ...nuxt.options.modulesDir]) + const watcherPath = await tryResolveModule('@parcel/watcher', [nuxt.options.rootDir, ...nuxt.options.modulesDir].map(d => directoryToURL(d))) if (!watcherPath) { logger.warn('Falling back to `chokidar-granular` as `@parcel/watcher` cannot be resolved in your project.') return false @@ -244,7 +244,7 @@ async function bundle (nuxt: Nuxt) { } async function loadBuilder (nuxt: Nuxt, builder: string): Promise { - const builderPath = await tryResolveModule(builder, [nuxt.options.rootDir, import.meta.url]) + const builderPath = await tryResolveModule(builder, [directoryToURL(nuxt.options.rootDir), new URL(import.meta.url)]) if (!builderPath) { throw new Error(`Loading \`${builder}\` builder failed. You can read more about the nuxt \`builder\` option at: \`https://nuxt.com/docs/api/nuxt-config#builder\``) diff --git a/packages/nuxt/src/core/nuxt.ts b/packages/nuxt/src/core/nuxt.ts index 5a41dd3720..3a00720f51 100644 --- a/packages/nuxt/src/core/nuxt.ts +++ b/packages/nuxt/src/core/nuxt.ts @@ -6,7 +6,7 @@ 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, runWithNuxtContext, tryResolveModule, useNitro } from '@nuxt/kit' +import { addBuildPlugin, addComponent, addPlugin, addPluginTemplate, addRouteMiddleware, addServerPlugin, addTypeTemplate, addVitePlugin, addWebpackPlugin, directoryToURL, 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' @@ -391,12 +391,13 @@ async function initNuxt (nuxt: Nuxt) { } nuxt.hook('modules:done', async () => { + const importPaths = nuxt.options.modulesDir.map(dir => directoryToURL((dir))) // Add unctx transform addBuildPlugin(UnctxTransformPlugin({ sourcemap: !!nuxt.options.sourcemap.server || !!nuxt.options.sourcemap.client, transformerOptions: { ...nuxt.options.optimization.asyncTransforms, - helperModule: await tryResolveModule('unctx', nuxt.options.modulesDir) ?? 'unctx', + helperModule: await tryResolveModule('unctx', importPaths) ?? 'unctx', }, })) diff --git a/packages/nuxt/src/core/plugins/composable-keys.ts b/packages/nuxt/src/core/plugins/composable-keys.ts index ea603c4e1c..df099bef40 100644 --- a/packages/nuxt/src/core/plugins/composable-keys.ts +++ b/packages/nuxt/src/core/plugins/composable-keys.ts @@ -68,7 +68,7 @@ export const ComposableKeysPlugin = (options: ComposableKeysOptions) => createUn const name = node.callee.name if (!name || !keyedFunctions.has(name) || node.arguments.length >= maxLength) { return } - imports = imports || detectImportNames(script, composableMeta) + imports ||= detectImportNames(script, composableMeta) if (imports.has(name)) { return } const meta = composableMeta[name] diff --git a/packages/nuxt/src/core/plugins/resolve-deep-imports.ts b/packages/nuxt/src/core/plugins/resolve-deep-imports.ts index 90f3373aba..abc281830e 100644 --- a/packages/nuxt/src/core/plugins/resolve-deep-imports.ts +++ b/packages/nuxt/src/core/plugins/resolve-deep-imports.ts @@ -1,7 +1,7 @@ import { parseNodeModulePath, resolvePath } from 'mlly' import { isAbsolute, normalize } from 'pathe' import type { Plugin } from 'vite' -import { resolveAlias } from '@nuxt/kit' +import { directoryToURL, resolveAlias } from '@nuxt/kit' import type { Nuxt } from '@nuxt/schema' import { pkgDir } from '../../dirs' @@ -37,7 +37,7 @@ export function resolveDeepImportsPlugin (nuxt: Nuxt): Plugin { const dir = parseNodeModulePath(normalisedImporter).dir || pkgDir return await this.resolve?.(normalisedId, dir, { skipSelf: true }) ?? await resolvePath(id, { - url: [dir, ...nuxt.options.modulesDir], + url: [dir, ...nuxt.options.modulesDir].map(d => directoryToURL(d)), conditions, }).catch(() => { logger.debug('Could not resolve id', id, importer) diff --git a/packages/nuxt/src/core/schema.ts b/packages/nuxt/src/core/schema.ts index 0a81a15aa2..f8e000870d 100644 --- a/packages/nuxt/src/core/schema.ts +++ b/packages/nuxt/src/core/schema.ts @@ -5,7 +5,7 @@ import { resolve } from 'pathe' import { watch } from 'chokidar' import { defu } from 'defu' import { debounce } from 'perfect-debounce' -import { createIsIgnored, createResolver, defineNuxtModule, importModule, tryResolveModule } from '@nuxt/kit' +import { createIsIgnored, createResolver, defineNuxtModule, directoryToURL, importModule, tryResolveModule } from '@nuxt/kit' import { generateTypes, resolveSchema as resolveUntypedSchema } from 'untyped' import type { Schema, SchemaDefinition } from 'untyped' import untypedPlugin from 'untyped/babel-plugin' @@ -54,7 +54,7 @@ export default defineNuxtModule({ }) if (nuxt.options.experimental.watcher === 'parcel') { - const watcherPath = await tryResolveModule('@parcel/watcher', [nuxt.options.rootDir, ...nuxt.options.modulesDir]) + const watcherPath = await tryResolveModule('@parcel/watcher', [nuxt.options.rootDir, ...nuxt.options.modulesDir].map(dir => directoryToURL(dir))) if (watcherPath) { const { subscribe } = await importModule(watcherPath) for (const layer of nuxt.options._layers) { diff --git a/packages/nuxt/src/core/utils/types.ts b/packages/nuxt/src/core/utils/types.ts index 23069fd4f9..504962b989 100644 --- a/packages/nuxt/src/core/utils/types.ts +++ b/packages/nuxt/src/core/utils/types.ts @@ -1,11 +1,11 @@ import { resolvePackageJSON } from 'pkg-types' import { resolvePath as _resolvePath } from 'mlly' import { dirname } from 'pathe' -import { tryUseNuxt } from '@nuxt/kit' +import { directoryToURL, tryUseNuxt } from '@nuxt/kit' export async function resolveTypePath (path: string, subpath: string, searchPaths = tryUseNuxt()?.options.modulesDir) { try { - const r = await _resolvePath(path, { url: searchPaths, conditions: ['types', 'import', 'require'] }) + const r = await _resolvePath(path, { url: searchPaths?.map(d => directoryToURL(d)), conditions: ['types', 'import', 'require'] }) if (subpath) { return r.replace(/(?:\.d)?\.[mc]?[jt]s$/, '') } diff --git a/packages/nuxt/src/head/module.ts b/packages/nuxt/src/head/module.ts index 07fb1a1b21..a5fa4f74d8 100644 --- a/packages/nuxt/src/head/module.ts +++ b/packages/nuxt/src/head/module.ts @@ -1,5 +1,5 @@ import { resolve } from 'pathe' -import { addBuildPlugin, addComponent, addPlugin, addTemplate, defineNuxtModule, tryResolveModule } from '@nuxt/kit' +import { addBuildPlugin, addComponent, addPlugin, addTemplate, defineNuxtModule, directoryToURL, tryResolveModule } from '@nuxt/kit' import type { NuxtOptions } from '@nuxt/schema' import { distDir } from '../dirs' import { UnheadImportsPlugin } from './plugins/unhead-imports' @@ -45,7 +45,10 @@ export default defineNuxtModule({ rootDir: nuxt.options.rootDir, })) - const unheadPlugins = await tryResolveModule('@unhead/vue/plugins', nuxt.options.modulesDir) || '@unhead/vue/plugins' + // Opt-out feature allowing dependencies using @vueuse/head to work + const importPaths = nuxt.options.modulesDir.map(d => directoryToURL(d)) + const unheadPlugins = await tryResolveModule('@unhead/vue/plugins', importPaths) || '@unhead/vue/plugins' + addTemplate({ filename: 'unhead-options.mjs', getContents () { diff --git a/packages/nuxt/src/imports/module.ts b/packages/nuxt/src/imports/module.ts index 5ba65ab75b..45620e7e80 100644 --- a/packages/nuxt/src/imports/module.ts +++ b/packages/nuxt/src/imports/module.ts @@ -1,5 +1,5 @@ import { existsSync } from 'node:fs' -import { addBuildPlugin, addTemplate, addTypeTemplate, createIsIgnored, defineNuxtModule, resolveAlias, tryResolveModule, updateTemplates, useNuxt } from '@nuxt/kit' +import { addBuildPlugin, addTemplate, addTypeTemplate, createIsIgnored, defineNuxtModule, directoryToURL, resolveAlias, tryResolveModule, updateTemplates, useNuxt } from '@nuxt/kit' import { isAbsolute, join, normalize, relative, resolve } from 'pathe' import type { Import, Unimport } from 'unimport' import { createUnimport, scanDirExports, toExports } from 'unimport' @@ -181,6 +181,8 @@ function addDeclarationTemplates (ctx: Unimport, options: Partial i.replace('.', '')).join('|')})$`) + const importPaths = nuxt.options.modulesDir.map(dir => directoryToURL(dir)) + async function cacheImportPaths (imports: Import[]) { const importSource = Array.from(new Set(imports.map(i => i.from))) // skip relative import paths for node_modules that are explicitly installed @@ -190,7 +192,7 @@ function addDeclarationTemplates (ctx: Unimport, options: Partial { + path = await tryResolveModule(from, importPaths).then(async (r) => { if (!r) { return r } const { dir, name } = parseNodeModulePath(r) diff --git a/packages/schema/package.json b/packages/schema/package.json index 4dc191daf4..203aecc499 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -71,7 +71,7 @@ "vue-bundle-renderer": "2.1.1", "vue-loader": "17.4.2", "vue-router": "4.5.0", - "webpack": "5.97.1", + "webpack": "5.98.0", "webpack-dev-middleware": "7.4.2" }, "dependencies": { diff --git a/packages/vite/src/server.ts b/packages/vite/src/server.ts index 51bb3470c1..8a1f09716a 100644 --- a/packages/vite/src/server.ts +++ b/packages/vite/src/server.ts @@ -2,7 +2,7 @@ import { resolve } from 'pathe' import * as vite from 'vite' import vuePlugin from '@vitejs/plugin-vue' import viteJsxPlugin from '@vitejs/plugin-vue-jsx' -import { logger, resolvePath, tryImportModule } from '@nuxt/kit' +import { directoryToURL, logger, resolvePath, tryImportModule } from '@nuxt/kit' import { joinURL, withTrailingSlash, withoutLeadingSlash } from 'ufo' import type { ViteConfig } from '@nuxt/schema' import defu from 'defu' @@ -117,7 +117,7 @@ export async function buildServer (ctx: ViteBuildContext) { if (!ctx.nuxt.options.dev) { const { runtimeDependencies = [] } = await tryImportModule('nitro/runtime/meta', { - paths: ctx.nuxt.options.modulesDir, + url: ctx.nuxt.options.modulesDir.map(d => directoryToURL(d)), }) || {} if (Array.isArray(serverConfig.ssr!.external)) { serverConfig.ssr!.external.push( diff --git a/packages/webpack/package.json b/packages/webpack/package.json index c0f0326679..4f463c5282 100644 --- a/packages/webpack/package.json +++ b/packages/webpack/package.json @@ -65,7 +65,7 @@ "url-loader": "^4.1.1", "vue-bundle-renderer": "^2.1.1", "vue-loader": "^17.4.2", - "webpack": "^5.97.1", + "webpack": "^5.98.0", "webpack-bundle-analyzer": "^4.10.2", "webpack-dev-middleware": "^7.4.2", "webpack-hot-middleware": "^2.26.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a49f9d7593..44f6bb5484 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -220,8 +220,8 @@ importers: specifier: 2.2.0 version: 2.2.0(typescript@5.7.3) webpack: - specifier: 5.97.1 - version: 5.97.1 + specifier: 5.98.0 + version: 5.98.0 packages/kit: dependencies: @@ -308,8 +308,8 @@ importers: specifier: 3.0.5 version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.2)(happy-dom@17.1.0)(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 + specifier: 5.98.0 + version: 5.98.0 packages/nuxt: dependencies: @@ -529,7 +529,7 @@ importers: dependencies: '@nuxt/friendly-errors-webpack-plugin': specifier: ^2.6.0 - version: 2.6.0(webpack@5.97.1) + version: 2.6.0(webpack@5.98.0) '@nuxt/kit': specifier: workspace:* version: link:../kit @@ -541,10 +541,10 @@ importers: version: 10.4.20(postcss@8.5.2) css-loader: specifier: ^7.1.2 - version: 7.1.2(@rspack/core@1.2.3)(webpack@5.97.1) + version: 7.1.2(@rspack/core@1.2.3)(webpack@5.98.0) css-minimizer-webpack-plugin: specifier: ^7.0.0 - version: 7.0.0(webpack@5.97.1) + version: 7.0.0(webpack@5.98.0) cssnano: specifier: ^7.0.6 version: 7.0.6(postcss@8.5.2) @@ -553,16 +553,16 @@ importers: version: 6.1.4 esbuild-loader: specifier: ^4.3.0 - version: 4.3.0(webpack@5.97.1) + version: 4.3.0(webpack@5.98.0) escape-string-regexp: specifier: ^5.0.0 version: 5.0.0 file-loader: specifier: ^6.2.0 - version: 6.2.0(webpack@5.97.1) + version: 6.2.0(webpack@5.98.0) fork-ts-checker-webpack-plugin: specifier: ^9.0.2 - version: 9.0.2(typescript@5.7.3)(webpack@5.97.1) + version: 9.0.2(typescript@5.7.3)(webpack@5.98.0) globby: specifier: ^14.1.0 version: 14.1.0 @@ -601,7 +601,7 @@ importers: version: 2.0.0 postcss-loader: specifier: ^8.1.1 - version: 8.1.1(@rspack/core@1.2.3)(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.98.0) postcss-url: specifier: ^10.1.3 version: 10.1.3(postcss@8.5.2) @@ -613,7 +613,7 @@ importers: version: 3.8.0 time-fix-plugin: specifier: ^2.0.7 - version: 2.0.7(webpack@5.97.1) + version: 2.0.7(webpack@5.98.0) ufo: specifier: 1.5.4 version: 1.5.4 @@ -625,25 +625,25 @@ importers: 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) + version: 4.1.1(file-loader@6.2.0(webpack@5.98.0))(webpack@5.98.0) vue-bundle-renderer: specifier: ^2.1.1 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.98.0) webpack-bundle-analyzer: specifier: ^4.10.2 version: 4.10.2 webpack-dev-middleware: specifier: ^7.4.2 - version: 7.4.2(webpack@5.97.1) + version: 7.4.2(webpack@5.98.0) webpack-hot-middleware: specifier: ^2.26.1 version: 2.26.1 webpackbar: specifier: ^7.0.0 - version: 7.0.0(@rspack/core@1.2.3)(webpack@5.97.1) + version: 7.0.0(@rspack/core@1.2.3)(webpack@5.98.0) devDependencies: '@nuxt/schema': specifier: workspace:* @@ -720,16 +720,16 @@ importers: version: 0.1.8 css-minimizer-webpack-plugin: specifier: 7.0.0 - version: 7.0.0(esbuild@0.25.0)(webpack@5.97.1(esbuild@0.25.0)) + version: 7.0.0(esbuild@0.25.0)(webpack@5.98.0(esbuild@0.25.0)) esbuild: specifier: 0.25.0 version: 0.25.0 esbuild-loader: specifier: 4.3.0 - version: 4.3.0(webpack@5.97.1(esbuild@0.25.0)) + version: 4.3.0(webpack@5.98.0(esbuild@0.25.0)) file-loader: specifier: 6.2.0 - version: 6.2.0(webpack@5.97.1(esbuild@0.25.0)) + version: 6.2.0(webpack@5.98.0(esbuild@0.25.0)) h3: specifier: npm:h3-nightly@1.14.0-20250122-114730-3f9e703 version: h3-nightly@1.14.0-20250122-114730-3f9e703 @@ -741,7 +741,7 @@ importers: version: 7.0.3 mini-css-extract-plugin: specifier: 2.9.2 - version: 2.9.2(webpack@5.97.1(esbuild@0.25.0)) + version: 2.9.2(webpack@5.98.0(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) @@ -756,7 +756,7 @@ importers: version: 8.5.2 sass-loader: specifier: 16.0.4 - version: 16.0.4(@rspack/core@1.2.3)(webpack@5.97.1(esbuild@0.25.0)) + version: 16.0.4(@rspack/core@1.2.3)(webpack@5.98.0(esbuild@0.25.0)) scule: specifier: 1.3.0 version: 1.3.0 @@ -783,16 +783,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(esbuild@0.25.0)) + version: 17.4.2(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3))(webpack@5.98.0(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(esbuild@0.25.0) + specifier: 5.98.0 + version: 5.98.0(esbuild@0.25.0) webpack-dev-middleware: specifier: 7.4.2 - version: 7.4.2(webpack@5.97.1(esbuild@0.25.0)) + version: 7.4.2(webpack@5.98.0(esbuild@0.25.0)) packages/ui-templates: devDependencies: @@ -943,7 +943,7 @@ importers: dependencies: '@nuxt/friendly-errors-webpack-plugin': specifier: ^2.6.0 - version: 2.6.0(webpack@5.97.1) + version: 2.6.0(webpack@5.98.0) '@nuxt/kit': specifier: workspace:* version: link:../kit @@ -952,10 +952,10 @@ importers: version: 10.4.20(postcss@8.5.2) css-loader: specifier: ^7.1.2 - version: 7.1.2(@rspack/core@1.2.3)(webpack@5.97.1) + version: 7.1.2(@rspack/core@1.2.3)(webpack@5.98.0) css-minimizer-webpack-plugin: specifier: ^7.0.0 - version: 7.0.0(webpack@5.97.1) + version: 7.0.0(webpack@5.98.0) cssnano: specifier: ^7.0.6 version: 7.0.6(postcss@8.5.2) @@ -964,16 +964,16 @@ importers: version: 6.1.4 esbuild-loader: specifier: ^4.3.0 - version: 4.3.0(webpack@5.97.1) + version: 4.3.0(webpack@5.98.0) escape-string-regexp: specifier: ^5.0.0 version: 5.0.0 file-loader: specifier: ^6.2.0 - version: 6.2.0(webpack@5.97.1) + version: 6.2.0(webpack@5.98.0) fork-ts-checker-webpack-plugin: specifier: ^9.0.2 - version: 9.0.2(typescript@5.7.3)(webpack@5.97.1) + version: 9.0.2(typescript@5.7.3)(webpack@5.98.0) globby: specifier: ^14.1.0 version: 14.1.0 @@ -994,7 +994,7 @@ importers: version: 4.17.0 mini-css-extract-plugin: specifier: ^2.9.2 - version: 2.9.2(webpack@5.97.1) + version: 2.9.2(webpack@5.98.0) ohash: specifier: 1.1.4 version: 1.1.4 @@ -1015,7 +1015,7 @@ importers: version: 2.0.0 postcss-loader: specifier: ^8.1.1 - version: 8.1.1(@rspack/core@1.2.3)(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.98.0) postcss-url: specifier: ^10.1.3 version: 10.1.3(postcss@8.5.2) @@ -1027,7 +1027,7 @@ importers: version: 3.8.0 time-fix-plugin: specifier: ^2.0.7 - version: 2.0.7(webpack@5.97.1) + version: 2.0.7(webpack@5.98.0) ufo: specifier: 1.5.4 version: 1.5.4 @@ -1039,28 +1039,28 @@ importers: 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) + version: 4.1.1(file-loader@6.2.0(webpack@5.98.0))(webpack@5.98.0) vue-bundle-renderer: specifier: ^2.1.1 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.98.0) webpack: - specifier: ^5.97.1 - version: 5.97.1 + specifier: ^5.98.0 + version: 5.98.0 webpack-bundle-analyzer: specifier: ^4.10.2 version: 4.10.2 webpack-dev-middleware: specifier: ^7.4.2 - version: 7.4.2(webpack@5.97.1) + version: 7.4.2(webpack@5.98.0) webpack-hot-middleware: specifier: ^2.26.1 version: 2.26.1 webpackbar: specifier: ^7.0.0 - version: 7.0.0(@rspack/core@1.2.3)(webpack@5.97.1) + version: 7.0.0(@rspack/core@1.2.3)(webpack@5.98.0) devDependencies: '@nuxt/schema': specifier: workspace:* @@ -6750,6 +6750,10 @@ packages: resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} engines: {node: '>= 12.13.0'} + schema-utils@4.3.0: + resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==} + engines: {node: '>= 10.13.0'} + scslre@0.3.0: resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==} engines: {node: ^14.0.0 || >=16.0.0} @@ -7092,8 +7096,8 @@ packages: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} - terser-webpack-plugin@5.3.10: - resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} + terser-webpack-plugin@5.3.11: + resolution: {integrity: sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -7777,8 +7781,8 @@ packages: webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} - webpack@5.97.1: - resolution: {integrity: sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==} + webpack@5.98.0: + resolution: {integrity: sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -8842,13 +8846,13 @@ snapshots: - supports-color - typescript - '@nuxt/friendly-errors-webpack-plugin@2.6.0(webpack@5.97.1)': + '@nuxt/friendly-errors-webpack-plugin@2.6.0(webpack@5.98.0)': dependencies: chalk: 2.4.2 consola: 3.4.0 error-stack-parser: 2.1.4 string-width: 4.2.3 - webpack: 5.97.1 + webpack: 5.98.0 '@nuxt/scripts@0.10.1(@types/google.maps@3.58.1)(@types/vimeo__player@2.18.3)(@types/youtube@0.1.0)(@unhead/vue@2.0.0-alpha.13(vue@3.5.13(typescript@5.7.3)))(typescript@5.7.3)': dependencies: @@ -9663,7 +9667,7 @@ snapshots: dependencies: '@types/node': 22.13.2 tapable: 2.2.1 - webpack: 5.97.1 + webpack: 5.98.0 transitivePeerDependencies: - '@swc/core' - esbuild @@ -9674,7 +9678,7 @@ snapshots: dependencies: '@types/node': 22.13.2 tapable: 2.2.1 - webpack: 5.97.1(esbuild@0.25.0) + webpack: 5.98.0(esbuild@0.25.0) transitivePeerDependencies: - '@swc/core' - esbuild @@ -9685,7 +9689,7 @@ snapshots: dependencies: '@types/connect': 3.4.38 tapable: 2.2.1 - webpack: 5.97.1 + webpack: 5.98.0 transitivePeerDependencies: - '@swc/core' - esbuild @@ -9696,7 +9700,7 @@ snapshots: dependencies: '@types/connect': 3.4.38 tapable: 2.2.1 - webpack: 5.97.1(esbuild@0.25.0) + webpack: 5.98.0(esbuild@0.25.0) transitivePeerDependencies: - '@swc/core' - esbuild @@ -10962,7 +10966,7 @@ snapshots: dependencies: postcss: 8.5.2 - css-loader@7.1.2(@rspack/core@1.2.3)(webpack@5.97.1): + css-loader@7.1.2(@rspack/core@1.2.3)(webpack@5.98.0): dependencies: icss-utils: 5.1.0(postcss@8.5.2) postcss: 8.5.2 @@ -10974,9 +10978,9 @@ snapshots: semver: 7.7.1 optionalDependencies: '@rspack/core': 1.2.3 - webpack: 5.97.1 + webpack: 5.98.0 - css-minimizer-webpack-plugin@7.0.0(esbuild@0.25.0)(webpack@5.97.1(esbuild@0.25.0)): + css-minimizer-webpack-plugin@7.0.0(esbuild@0.25.0)(webpack@5.98.0(esbuild@0.25.0)): dependencies: '@jridgewell/trace-mapping': 0.3.25 cssnano: 7.0.6(postcss@8.5.2) @@ -10984,11 +10988,11 @@ snapshots: postcss: 8.5.2 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.97.1(esbuild@0.25.0) + webpack: 5.98.0(esbuild@0.25.0) optionalDependencies: esbuild: 0.25.0 - css-minimizer-webpack-plugin@7.0.0(webpack@5.97.1): + css-minimizer-webpack-plugin@7.0.0(webpack@5.98.0): dependencies: '@jridgewell/trace-mapping': 0.3.25 cssnano: 7.0.6(postcss@8.5.2) @@ -10996,7 +11000,7 @@ snapshots: postcss: 8.5.2 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.97.1 + webpack: 5.98.0 css-select@5.1.0: dependencies: @@ -11328,20 +11332,20 @@ snapshots: es-module-lexer@1.6.0: {} - esbuild-loader@4.3.0(webpack@5.97.1(esbuild@0.25.0)): + esbuild-loader@4.3.0(webpack@5.98.0(esbuild@0.25.0)): dependencies: esbuild: 0.25.0 get-tsconfig: 4.8.0 loader-utils: 2.0.4 - webpack: 5.97.1(esbuild@0.25.0) + webpack: 5.98.0(esbuild@0.25.0) webpack-sources: 1.4.3 - esbuild-loader@4.3.0(webpack@5.97.1): + esbuild-loader@4.3.0(webpack@5.98.0): dependencies: esbuild: 0.25.0 get-tsconfig: 4.8.0 loader-utils: 2.0.4 - webpack: 5.97.1 + webpack: 5.98.0 webpack-sources: 1.4.3 esbuild@0.23.1: @@ -11732,17 +11736,17 @@ snapshots: dependencies: flat-cache: 4.0.1 - file-loader@6.2.0(webpack@5.97.1(esbuild@0.25.0)): + file-loader@6.2.0(webpack@5.98.0(esbuild@0.25.0)): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.97.1(esbuild@0.25.0) + webpack: 5.98.0(esbuild@0.25.0) - file-loader@6.2.0(webpack@5.97.1): + file-loader@6.2.0(webpack@5.98.0): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.97.1 + webpack: 5.98.0 file-uri-to-path@1.0.0: {} @@ -11795,7 +11799,7 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - fork-ts-checker-webpack-plugin@9.0.2(typescript@5.7.3)(webpack@5.97.1): + fork-ts-checker-webpack-plugin@9.0.2(typescript@5.7.3)(webpack@5.98.0): dependencies: '@babel/code-frame': 7.26.2 chalk: 4.1.2 @@ -11810,7 +11814,7 @@ snapshots: semver: 7.7.1 tapable: 2.2.1 typescript: 5.7.3 - webpack: 5.97.1 + webpack: 5.98.0 form-data@4.0.1: dependencies: @@ -13179,17 +13183,17 @@ snapshots: min-indent@1.0.1: {} - mini-css-extract-plugin@2.9.2(webpack@5.97.1(esbuild@0.25.0)): + mini-css-extract-plugin@2.9.2(webpack@5.98.0(esbuild@0.25.0)): dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.97.1(esbuild@0.25.0) + webpack: 5.98.0(esbuild@0.25.0) - mini-css-extract-plugin@2.9.2(webpack@5.97.1): + mini-css-extract-plugin@2.9.2(webpack@5.98.0): dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.97.1 + webpack: 5.98.0 minimatch@3.0.8: dependencies: @@ -13806,7 +13810,7 @@ snapshots: read-cache: 1.0.0 resolve: 1.22.8 - postcss-loader@8.1.1(@rspack/core@1.2.3)(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.98.0): dependencies: cosmiconfig: 9.0.0(typescript@5.7.3) jiti: 2.4.2 @@ -13814,7 +13818,7 @@ snapshots: semver: 7.7.1 optionalDependencies: '@rspack/core': 1.2.3 - webpack: 5.97.1 + webpack: 5.98.0 transitivePeerDependencies: - typescript @@ -14457,12 +14461,12 @@ snapshots: safe-buffer@5.2.1: {} - sass-loader@16.0.4(@rspack/core@1.2.3)(webpack@5.97.1(esbuild@0.25.0)): + sass-loader@16.0.4(@rspack/core@1.2.3)(webpack@5.98.0(esbuild@0.25.0)): dependencies: neo-async: 2.6.2 optionalDependencies: '@rspack/core': 1.2.3 - webpack: 5.97.1(esbuild@0.25.0) + webpack: 5.98.0(esbuild@0.25.0) sass@1.78.0: dependencies: @@ -14484,6 +14488,13 @@ snapshots: ajv-formats: 2.1.1(ajv@8.17.1) ajv-keywords: 5.1.0(ajv@8.17.1) + schema-utils@4.3.0: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) + scslre@0.3.0: dependencies: '@eslint-community/regexpp': 4.12.1 @@ -14840,25 +14851,25 @@ 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)): + terser-webpack-plugin@5.3.11(esbuild@0.25.0)(webpack@5.98.0(esbuild@0.25.0)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 - schema-utils: 3.3.0 + schema-utils: 4.3.0 serialize-javascript: 6.0.2 terser: 5.32.0 - webpack: 5.97.1(esbuild@0.25.0) + webpack: 5.98.0(esbuild@0.25.0) optionalDependencies: esbuild: 0.25.0 - terser-webpack-plugin@5.3.10(webpack@5.97.1): + terser-webpack-plugin@5.3.11(webpack@5.98.0): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 - schema-utils: 3.3.0 + schema-utils: 4.3.0 serialize-javascript: 6.0.2 terser: 5.32.0 - webpack: 5.97.1 + webpack: 5.98.0 terser@5.32.0: dependencies: @@ -14889,9 +14900,9 @@ snapshots: dependencies: tslib: 2.7.0 - time-fix-plugin@2.0.7(webpack@5.97.1): + time-fix-plugin@2.0.7(webpack@5.98.0): dependencies: - webpack: 5.97.1 + webpack: 5.98.0 timsort@0.3.0: {} @@ -15282,14 +15293,14 @@ snapshots: url-join@5.0.0: {} - url-loader@4.1.1(file-loader@6.2.0(webpack@5.97.1))(webpack@5.97.1): + url-loader@4.1.1(file-loader@6.2.0(webpack@5.98.0))(webpack@5.98.0): dependencies: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.3.0 - webpack: 5.97.1 + webpack: 5.98.0 optionalDependencies: - file-loader: 6.2.0(webpack@5.97.1) + file-loader: 6.2.0(webpack@5.98.0) urlpattern-polyfill@8.0.2: {} @@ -15531,22 +15542,22 @@ 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)): + vue-loader@17.4.2(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3))(webpack@5.98.0(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) + webpack: 5.98.0(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): + vue-loader@17.4.2(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.7.3))(webpack@5.98.0): dependencies: chalk: 4.1.2 hash-sum: 2.0.0 watchpack: 2.4.2 - webpack: 5.97.1 + webpack: 5.98.0 optionalDependencies: '@vue/compiler-sfc': 3.5.13 vue: 3.5.13(typescript@5.7.3) @@ -15618,7 +15629,7 @@ snapshots: - bufferutil - utf-8-validate - webpack-dev-middleware@7.4.2(webpack@5.97.1(esbuild@0.25.0)): + webpack-dev-middleware@7.4.2(webpack@5.98.0(esbuild@0.25.0)): dependencies: colorette: 2.0.20 memfs: 4.17.0 @@ -15627,9 +15638,9 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.2.0 optionalDependencies: - webpack: 5.97.1(esbuild@0.25.0) + webpack: 5.98.0(esbuild@0.25.0) - webpack-dev-middleware@7.4.2(webpack@5.97.1): + webpack-dev-middleware@7.4.2(webpack@5.98.0): dependencies: colorette: 2.0.20 memfs: 4.17.0 @@ -15638,7 +15649,7 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.2.0 optionalDependencies: - webpack: 5.97.1 + webpack: 5.98.0 webpack-hot-middleware@2.26.1: dependencies: @@ -15655,7 +15666,7 @@ snapshots: webpack-virtual-modules@0.6.2: {} - webpack@5.97.1: + webpack@5.98.0: dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.6 @@ -15675,9 +15686,9 @@ snapshots: loader-runner: 4.3.0 mime-types: 2.1.35 neo-async: 2.6.2 - schema-utils: 3.3.0 + schema-utils: 4.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.97.1) + terser-webpack-plugin: 5.3.11(webpack@5.98.0) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -15685,7 +15696,7 @@ snapshots: - esbuild - uglify-js - webpack@5.97.1(esbuild@0.25.0): + webpack@5.98.0(esbuild@0.25.0): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.6 @@ -15705,9 +15716,9 @@ snapshots: loader-runner: 4.3.0 mime-types: 2.1.35 neo-async: 2.6.2 - schema-utils: 3.3.0 + schema-utils: 4.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(esbuild@0.25.0)(webpack@5.97.1(esbuild@0.25.0)) + terser-webpack-plugin: 5.3.11(esbuild@0.25.0)(webpack@5.98.0(esbuild@0.25.0)) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -15715,7 +15726,7 @@ snapshots: - esbuild - uglify-js - webpackbar@7.0.0(@rspack/core@1.2.3)(webpack@5.97.1): + webpackbar@7.0.0(@rspack/core@1.2.3)(webpack@5.98.0): dependencies: ansis: 3.3.2 consola: 3.4.0 @@ -15723,7 +15734,7 @@ snapshots: std-env: 3.8.0 optionalDependencies: '@rspack/core': 1.2.3 - webpack: 5.97.1 + webpack: 5.98.0 whatwg-mimetype@3.0.0: {} diff --git a/test/nuxt/composables.test.ts b/test/nuxt/composables.test.ts index 8b62ef6a8a..2066b0f193 100644 --- a/test/nuxt/composables.test.ts +++ b/test/nuxt/composables.test.ts @@ -531,6 +531,23 @@ describe('loading state', () => { }) }) +describe('loading state', () => { + it('expect state from set opts: { force: true }', async () => { + vi.stubGlobal('setTimeout', vi.fn((cb: () => void) => cb())) + const nuxtApp = useNuxtApp() + const { isLoading, start, finish, set } = useLoadingIndicator() + await nuxtApp.callHook('page:loading:start') + start({ force: true }) + expect(isLoading.value).toBeTruthy() + finish() + expect(isLoading.value).toBeFalsy() + set(0, { force: true }) + expect(isLoading.value).toBeTruthy() + set(100, { force: true }) + expect(isLoading.value).toBeFalsy() + }) +}) + describe.skipIf(process.env.TEST_MANIFEST === 'manifest-off')('app manifests', () => { it('getAppManifest', async () => { const manifest = await getAppManifest()