@depup/nuxt__kit 4.5.0-depup.0 → 4.5.1-depup.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -13,8 +13,8 @@ npm install @depup/nuxt__kit
13
13
 
14
14
  | Field | Value |
15
15
  |-------|-------|
16
- | Original | [@nuxt/kit](https://www.npmjs.com/package/@nuxt/kit) @ 4.5.0 |
17
- | Processed | 2026-07-21 |
16
+ | Original | [@nuxt/kit](https://www.npmjs.com/package/@nuxt/kit) @ 4.5.1 |
17
+ | Processed | 2026-07-27 |
18
18
  | Smoke test | passed |
19
19
  | Deps updated | 2 |
20
20
 
@@ -23,7 +23,7 @@ npm install @depup/nuxt__kit
23
23
  | Dependency | From | To |
24
24
  |------------|------|-----|
25
25
  | c12 | ^3.3.4 | ^4.0.0-beta.5 |
26
- | nostics | ^1.1.4 | ^1.2.0 |
26
+ | verkit | ^0.2.0 | ^0.3.1 |
27
27
 
28
28
  ---
29
29
 
package/changes.json CHANGED
@@ -4,11 +4,11 @@
4
4
  "from": "^3.3.4",
5
5
  "to": "^4.0.0-beta.5"
6
6
  },
7
- "nostics": {
8
- "from": "^1.1.4",
9
- "to": "^1.2.0"
7
+ "verkit": {
8
+ "from": "^0.2.0",
9
+ "to": "^0.3.1"
10
10
  }
11
11
  },
12
- "timestamp": "2026-07-21T16:05:39.039Z",
12
+ "timestamp": "2026-07-27T16:43:41.446Z",
13
13
  "totalUpdated": 2
14
14
  }
package/dist/index.d.mts CHANGED
@@ -6,8 +6,7 @@ import { Component, ComponentsDir, ModuleDefinition, ModuleMeta, ModuleOptions,
6
6
  import { Import, Preset } from "unimport";
7
7
  import { Configuration, WebpackPluginInstance } from "webpack";
8
8
  import { Plugin, UserConfig } from "vite";
9
- import * as NitroV2 from "nitropack/types";
10
- import * as NitroV3 from "nitro/types";
9
+ import { Nitro, NitroDevEventHandler, NitroEventHandler, NitroRouteConfig } from "nitropack/types";
11
10
 
12
11
  //#region src/module/define.d.ts
13
12
  /**
@@ -118,6 +117,15 @@ interface LayerDirectories {
118
117
  */
119
118
  declare function getLayerDirectories(nuxt?: Nuxt): LayerDirectories[];
120
119
  //#endregion
120
+ //#region src/constants.d.ts
121
+ /**
122
+ * Default extensions for files that may contain JSX.
123
+ * @internal
124
+ */
125
+ declare const DEFAULT_JSX_FILE_EXTENSIONS: string[];
126
+ /** Default extensions for JavaScript/TypeScript files, in order of resolution priority. */
127
+ declare const DEFAULT_JS_FILE_EXTENSIONS: string[];
128
+ //#endregion
121
129
  //#region src/head.d.ts
122
130
  declare function setGlobalHead(head: NuxtAppConfig['head']): void;
123
131
  //#endregion
@@ -339,14 +347,6 @@ declare function resolveIgnorePatterns(relativePath?: string): string[];
339
347
  //#region src/layout.d.ts
340
348
  declare function addLayout(template: NuxtTemplate | string, name?: string): void;
341
349
  //#endregion
342
- //#region src/nitro-types.d.ts
343
- type isNitroV2 = 'options' extends keyof NitroV2.Nitro ? '___INVALID' extends keyof NitroV2.Nitro ? false : true : false;
344
- type isNitroV3 = 'options' extends keyof NitroV3.Nitro ? '___INVALID' extends keyof NitroV3.Nitro ? false : true : false;
345
- type Nitro = isNitroV2 extends true ? isNitroV3 extends true ? NitroV2.Nitro | NitroV3.Nitro : NitroV2.Nitro : NitroV3.Nitro;
346
- type NitroDevEventHandler = isNitroV2 extends true ? isNitroV3 extends true ? NitroV2.NitroDevEventHandler | NitroV3.NitroDevEventHandler : NitroV2.NitroDevEventHandler : NitroV3.NitroDevEventHandler;
347
- type NitroEventHandler = isNitroV2 extends true ? isNitroV3 extends true ? NitroV2.NitroEventHandler | NitroV3.NitroEventHandler : NitroV2.NitroEventHandler : NitroV3.NitroEventHandler;
348
- type NitroRouteConfig = isNitroV2 extends true ? isNitroV3 extends true ? NitroV2.NitroRouteConfig | NitroV3.NitroRouteConfig : NitroV2.NitroRouteConfig : NitroV3.NitroRouteConfig;
349
- //#endregion
350
350
  //#region src/pages.d.ts
351
351
  declare function extendPages(cb: NuxtHooks['pages:extend']): void;
352
352
  interface ExtendRouteRulesOptions {
@@ -671,21 +671,21 @@ declare const buildDiagnostics: import("nostics").Diagnostics<{
671
671
  readonly why: (p: {
672
672
  file: string;
673
673
  }) => string;
674
- readonly fix: "Check that the file exists and is readable, or try clearing the build cache with `nuxi clean`.";
674
+ readonly fix: "Check that the file exists and is readable, or try clearing the build cache with `nuxt clean`.";
675
675
  readonly docs: false;
676
676
  };
677
677
  readonly NUXT_B1012: {
678
678
  readonly why: (p: {
679
679
  path: string;
680
680
  }) => string;
681
- readonly fix: "Delete the cache with `nuxi clean` and rebuild.";
681
+ readonly fix: "Delete the cache with `nuxt clean` and rebuild.";
682
682
  readonly docs: false;
683
683
  };
684
684
  readonly NUXT_B1013: {
685
685
  readonly why: (p: {
686
686
  file: string;
687
687
  }) => string;
688
- readonly fix: "Try clearing the build cache with `nuxi clean` and rebuilding from scratch.";
688
+ readonly fix: "Try clearing the build cache with `nuxt clean` and rebuilding from scratch.";
689
689
  readonly docs: false;
690
690
  };
691
691
  readonly NUXT_B1014: {
@@ -820,6 +820,15 @@ declare const pluginDiagnostics: import("nostics").Diagnostics<{
820
820
  readonly fix: "Pass a string path, or an object with a `src` property, to `addPlugin()`.";
821
821
  readonly docs: false;
822
822
  };
823
+ readonly NUXT_B2012: {
824
+ readonly why: (p: {
825
+ name: string;
826
+ dependencies: string[];
827
+ mode: "client" | "server";
828
+ }) => string;
829
+ readonly fix: "Do not depend on plugins that are unavailable in the same build environment; remove them from the `dependsOn` array.";
830
+ readonly docs: false;
831
+ };
823
832
  }, readonly [import("nostics").DiagnosticReporter<{
824
833
  method?: import("nostics").ConsoleMethod;
825
834
  }>]>;
@@ -1050,6 +1059,22 @@ declare const pageDiagnostics: import("nostics").Diagnostics<{
1050
1059
  readonly fix: "Rename one of the layouts, or remove the duplicate layout registration.";
1051
1060
  readonly docs: false;
1052
1061
  };
1062
+ readonly NUXT_B4016: {
1063
+ readonly why: (p: {
1064
+ path: string;
1065
+ detail: string;
1066
+ }) => string;
1067
+ readonly fix: "Define the affected route rules explicitly in `nitro.routeRules`.";
1068
+ readonly docs: false;
1069
+ };
1070
+ readonly NUXT_B4017: {
1071
+ readonly why: (p: {
1072
+ path: string;
1073
+ pattern: string;
1074
+ }) => string;
1075
+ readonly fix: "The later inline route rules override the earlier ones. Use distinct routes, or define the rules explicitly in `nitro.routeRules`.";
1076
+ readonly docs: false;
1077
+ };
1053
1078
  }, readonly [import("nostics").DiagnosticReporter<{
1054
1079
  method?: import("nostics").ConsoleMethod;
1055
1080
  }>]>;
@@ -1171,6 +1196,14 @@ declare const headDiagnostics: import("nostics").Diagnostics<{
1171
1196
  readonly fix: "Remove `experimental.headNext` from your `nuxt.config`, or set `unhead.legacy: true` to opt out temporarily.";
1172
1197
  readonly docs: false;
1173
1198
  };
1199
+ readonly NUXT_B6005: {
1200
+ readonly why: (p: {
1201
+ name: string;
1202
+ from: string;
1203
+ }) => string;
1204
+ readonly fix: "Check the `from` path in `imports.presets` (or the module that registered this import). Auto-imports from an unresolvable module are silently skipped and can surface as unrelated type errors elsewhere.";
1205
+ readonly docs: false;
1206
+ };
1174
1207
  }, readonly [import("nostics").DiagnosticReporter<{
1175
1208
  method?: import("nostics").ConsoleMethod;
1176
1209
  }>]>;
@@ -1272,7 +1305,7 @@ declare const bundlerDiagnostics: import("nostics").Diagnostics<{
1272
1305
  readonly why: (p: {
1273
1306
  name: string;
1274
1307
  }) => string;
1275
- readonly fix: "Fix the build errors listed above. If the errors are unclear, try running `nuxi clean` and rebuilding.";
1308
+ readonly fix: "Fix the build errors listed above. If the errors are unclear, try running `nuxt cleanup` and rebuilding.";
1276
1309
  readonly docs: false;
1277
1310
  };
1278
1311
  readonly NUXT_B7015: {
@@ -1311,7 +1344,7 @@ interface ResolveModuleOptions {
1311
1344
  /** @deprecated use `url` with URLs pointing at a file - never a directory */
1312
1345
  paths?: string | string[];
1313
1346
  url?: URL | URL[];
1314
- /** @default ['.js', '.mjs', '.cjs', '.ts', '.mts', '.cts'] */
1347
+ /** @default ['.mjs', '.js', '.cjs', '.mts', '.ts', '.cts', '.tsx', '.jsx'] */
1315
1348
  extensions?: string[];
1316
1349
  }
1317
1350
  declare function directoryToURL(dir: string): URL;
@@ -1340,4 +1373,4 @@ declare function requireModule<T = unknown>(id: string, opts?: ImportModuleOptio
1340
1373
  */
1341
1374
  declare function tryRequireModule<T = unknown>(id: string, opts?: ImportModuleOptions): T | undefined;
1342
1375
  //#endregion
1343
- export { type AddComponentOptions, type AddPluginOptions, type AddRouteMiddlewareOptions, type ExtendConfigOptions, type ExtendRouteRulesOptions, type ExtendViteConfigOptions, type ExtendWebpackConfigOptions, type ImportModuleOptions, type LayerDirectories, type LoadNuxtConfigOptions, type LoadNuxtOptions, type NuxtMajorVersion, type ResolveModuleOptions, type ResolvePathOptions, type Resolver, addBuildPlugin, addComponent, addComponentExports, addComponentsDir, addDevServerHandler, addImports, addImportsDir, addImportsSources, addLayout, addPlugin, addPluginTemplate, addPrerenderRoutes, addRouteMiddleware, addRspackPlugin, addServerHandler, addServerImports, addServerImportsDir, addServerPlugin, addServerScanDir, addServerTemplate, addTemplate, addTypeTemplate, addVitePlugin, addWebpackPlugin, assertNuxtCompatibility, buildDiagnostics, buildNuxt, bundlerDiagnostics, checkNuxtCompatibility, componentDiagnostics, configDiagnostics, createIsIgnored, createResolver, defineNuxtModule, directoryToURL, extendNuxtSchema, extendPages, extendRouteRules, extendRspackConfig, extendViteConfig, extendWebpackConfig, findPath, getDirectory, getLayerDirectories, getNuxtCtx, getNuxtModuleVersion, getNuxtVersion, hasNuxtCompatibility, hasNuxtModule, hasNuxtModuleCompatibility, headDiagnostics, importModule, installModule, installModules, isIgnored, isNuxt2, isNuxt3, isNuxtMajorVersion, loadNuxt, loadNuxtConfig, loadNuxtModuleInstance, logger, normalizeModuleTranspilePath, normalizePlugin, normalizeSemanticVersion, normalizeTemplate, nuxtCtx, packageName, pageDiagnostics, pluginDiagnostics, requireModule, resolveAlias, resolveDeclarationPath, resolveFiles, resolveIgnorePatterns, resolveModule, resolveModuleWithOptions, resolveNuxtModule, resolvePath, resolveTypePaths, runWithNuxtContext, setBuildOutput, setGlobalHead, tryImportModule, tryRequireModule, tryResolveModule, tryUseNuxt, updateAppConfig, updateRuntimeConfig, updateTemplates, useLogger, useNitro, useNuxt, useRuntimeConfig, writeTypes };
1376
+ export { type AddComponentOptions, type AddPluginOptions, type AddRouteMiddlewareOptions, DEFAULT_JSX_FILE_EXTENSIONS, DEFAULT_JS_FILE_EXTENSIONS, type ExtendConfigOptions, type ExtendRouteRulesOptions, type ExtendViteConfigOptions, type ExtendWebpackConfigOptions, type ImportModuleOptions, type LayerDirectories, type LoadNuxtConfigOptions, type LoadNuxtOptions, type NuxtMajorVersion, type ResolveModuleOptions, type ResolvePathOptions, type Resolver, addBuildPlugin, addComponent, addComponentExports, addComponentsDir, addDevServerHandler, addImports, addImportsDir, addImportsSources, addLayout, addPlugin, addPluginTemplate, addPrerenderRoutes, addRouteMiddleware, addRspackPlugin, addServerHandler, addServerImports, addServerImportsDir, addServerPlugin, addServerScanDir, addServerTemplate, addTemplate, addTypeTemplate, addVitePlugin, addWebpackPlugin, assertNuxtCompatibility, buildDiagnostics, buildNuxt, bundlerDiagnostics, checkNuxtCompatibility, componentDiagnostics, configDiagnostics, createIsIgnored, createResolver, defineNuxtModule, directoryToURL, extendNuxtSchema, extendPages, extendRouteRules, extendRspackConfig, extendViteConfig, extendWebpackConfig, findPath, getDirectory, getLayerDirectories, getNuxtCtx, getNuxtModuleVersion, getNuxtVersion, hasNuxtCompatibility, hasNuxtModule, hasNuxtModuleCompatibility, headDiagnostics, importModule, installModule, installModules, isIgnored, isNuxt2, isNuxt3, isNuxtMajorVersion, loadNuxt, loadNuxtConfig, loadNuxtModuleInstance, logger, normalizeModuleTranspilePath, normalizePlugin, normalizeSemanticVersion, normalizeTemplate, nuxtCtx, packageName, pageDiagnostics, pluginDiagnostics, requireModule, resolveAlias, resolveDeclarationPath, resolveFiles, resolveIgnorePatterns, resolveModule, resolveModuleWithOptions, resolveNuxtModule, resolvePath, resolveTypePaths, runWithNuxtContext, setBuildOutput, setGlobalHead, tryImportModule, tryRequireModule, tryResolveModule, tryUseNuxt, updateAppConfig, updateRuntimeConfig, updateTemplates, useLogger, useNitro, useNuxt, useRuntimeConfig, writeTypes };
package/dist/index.mjs CHANGED
@@ -8,9 +8,9 @@ import { createConsoleReporter, defineDiagnostics } from "nostics";
8
8
  import process from "node:process";
9
9
  import { ansiFormatter } from "nostics/formatters/ansi";
10
10
  import { colors } from "consola/utils";
11
- import satisfies from "semver/functions/satisfies.js";
11
+ import { isGreater, isGreaterOrEqual, satisfies } from "verkit";
12
12
  import { readPackageJSON, resolvePackageJSON } from "pkg-types";
13
- import { existsSync, lstatSync, promises, readFileSync } from "node:fs";
13
+ import { existsSync, lstatSync, promises, readFileSync, realpathSync, statSync } from "node:fs";
14
14
  import { fileURLToPath, pathToFileURL } from "node:url";
15
15
  import { basename, dirname, isAbsolute, join, normalize, parse, relative, resolve } from "pathe";
16
16
  import { createJiti } from "jiti";
@@ -18,15 +18,15 @@ import { interopDefault, lookupNodeModuleSubpath, parseNodeModulePath, resolveMo
18
18
  import { resolveModulePath, resolveModuleURL } from "exsolve";
19
19
  import { isRelative, withTrailingSlash, withoutTrailingSlash } from "ufo";
20
20
  import { read, update } from "rc9";
21
- import semver, { gte } from "semver";
22
21
  import { captureStackTrace } from "errx";
23
22
  import { glob } from "tinyglobby";
24
23
  import { resolveAlias as resolveAlias$1, reverseResolveAlias } from "pathe/utils";
25
24
  import ignore from "ignore";
26
25
  import { loadConfig, setupDotenv } from "c12";
26
+ import { klona } from "klona/full";
27
27
  import destr from "destr";
28
28
  import { kebabCase, pascalCase, snakeCase } from "scule";
29
- import { klona } from "klona";
29
+ import { klona as klona$1 } from "klona";
30
30
  import { hash } from "ohash";
31
31
  import { isAbsolute as isAbsolute$1 } from "node:path";
32
32
  //#region src/logger.ts
@@ -504,6 +504,23 @@ function filterInPlace(array, predicate) {
504
504
  const MODE_RE = /\.(server|client)(\.\w+)*$/;
505
505
  const distDirURL = new URL(".", import.meta.url);
506
506
  //#endregion
507
+ //#region src/constants.ts
508
+ /**
509
+ * Default extensions for files that may contain JSX.
510
+ * @internal
511
+ */
512
+ const DEFAULT_JSX_FILE_EXTENSIONS = [".tsx", ".jsx"];
513
+ /** Default extensions for JavaScript/TypeScript files, in order of resolution priority. */
514
+ const DEFAULT_JS_FILE_EXTENSIONS = [
515
+ ".mjs",
516
+ ".js",
517
+ ".cjs",
518
+ ".mts",
519
+ ".ts",
520
+ ".cts",
521
+ ...DEFAULT_JSX_FILE_EXTENSIONS
522
+ ];
523
+ //#endregion
507
524
  //#region src/resolve.ts
508
525
  /**
509
526
  * Resolve the full path to a file or a directory (based on the provided type), respecting Nuxt alias and extensions options.
@@ -602,12 +619,7 @@ async function _resolvePathGranularly(path, opts = { type: "file" }) {
602
619
  }
603
620
  const nuxt = tryUseNuxt();
604
621
  const cwd = opts.cwd || (nuxt ? nuxt.options.rootDir : process.cwd());
605
- const extensions = opts.extensions || (nuxt ? nuxt.options.extensions : [
606
- ".ts",
607
- ".mjs",
608
- ".cjs",
609
- ".json"
610
- ]);
622
+ const extensions = opts.extensions || (nuxt ? nuxt.options.extensions : [...DEFAULT_JS_FILE_EXTENSIONS, ".json"]);
611
623
  const modulesDir = nuxt ? nuxt.options.modulesDir : [];
612
624
  path = resolveAlias$1(path, opts.alias ?? nuxt?.options.alias ?? {});
613
625
  if (!isAbsolute(path)) path = resolve(cwd, path);
@@ -676,14 +688,7 @@ function tryResolveModule(id, url = import.meta.url) {
676
688
  function resolveModule(id, options) {
677
689
  return resolveModulePath(id, {
678
690
  from: options?.url ?? options?.paths ?? [import.meta.url],
679
- extensions: options?.extensions ?? [
680
- ".js",
681
- ".mjs",
682
- ".cjs",
683
- ".ts",
684
- ".mts",
685
- ".cts"
686
- ]
691
+ extensions: options?.extensions ?? DEFAULT_JS_FILE_EXTENSIONS
687
692
  });
688
693
  }
689
694
  async function importModule(id, opts) {
@@ -764,7 +769,7 @@ async function installModules(modulesToInstall, resolvedModulePaths, nuxt = useN
764
769
  }
765
770
  if (value.version) {
766
771
  const pkg = await readPackageJSON(name, { from: [res.resolvedModulePath, ...nuxt.options.modulesDir].filter(Boolean) }).catch(() => null);
767
- if (pkg?.version && !semver.satisfies(pkg.version, value.version, { includePrerelease: true })) {
772
+ if (pkg?.version && !satisfies(pkg.version, value.version, { includePrerelease: true })) {
768
773
  const message = `Module \`${name}\` version (\`${pkg.version}\`) does not satisfy \`${value.version}\` (requested by ${moduleToAttribute}).`;
769
774
  error = new TypeError(message);
770
775
  }
@@ -881,14 +886,7 @@ function resolveModuleWithOptions(definition, nuxt) {
881
886
  "",
882
887
  "index"
883
888
  ],
884
- extensions: [
885
- ".js",
886
- ".mjs",
887
- ".cjs",
888
- ".ts",
889
- ".mts",
890
- ".cts"
891
- ]
889
+ extensions: DEFAULT_JS_FILE_EXTENSIONS
892
890
  }) || modAlias,
893
891
  options
894
892
  };
@@ -913,8 +911,9 @@ async function loadNuxtModuleInstance(nuxtModule, nuxt = useNuxt()) {
913
911
  const jiti = getSharedJiti(nuxt);
914
912
  nuxtModule = resolveAlias(nuxtModule, nuxt.options.alias);
915
913
  if (isRelative(nuxtModule)) nuxtModule = resolve(nuxt.options.rootDir, nuxtModule);
914
+ let src;
916
915
  try {
917
- const src = resolveModuleURL(nuxtModule, {
916
+ src = resolveModuleURL(nuxtModule, {
918
917
  from: nuxt.options.modulesDir.map((m) => directoryToURL(m.replace(/\/node_modules\/?$/, "/"))),
919
918
  suffixes: [
920
919
  "nuxt",
@@ -924,41 +923,33 @@ async function loadNuxtModuleInstance(nuxtModule, nuxt = useNuxt()) {
924
923
  "",
925
924
  "index"
926
925
  ],
927
- extensions: [
928
- ".js",
929
- ".mjs",
930
- ".cjs",
931
- ".ts",
932
- ".mts",
933
- ".cts"
934
- ]
926
+ extensions: DEFAULT_JS_FILE_EXTENSIONS
935
927
  });
936
- const resolvedModulePath = fileURLToPath(src);
937
- const resolvedNuxtModule = await jiti.import(src, { default: true });
938
- if (typeof resolvedNuxtModule !== "function") throw kitDiagnostics.NUXT_B8016({ module: nuxtModule });
939
- const moduleMetadataPath = new URL("module.json", src);
940
- if (existsSync(moduleMetadataPath)) buildTimeModuleMeta = JSON.parse(await promises.readFile(moduleMetadataPath, "utf-8"));
941
- return {
942
- nuxtModule: resolvedNuxtModule,
943
- buildTimeModuleMeta,
944
- resolvedModulePath
945
- };
946
928
  } catch (error) {
947
- const code = error.code;
948
- if (code === "ERR_PACKAGE_PATH_NOT_EXPORTED" || code === "ERR_UNSUPPORTED_DIR_IMPORT" || code === "ENOTDIR") throw kitDiagnostics.NUXT_B8017({
929
+ throw kitDiagnostics.NUXT_B8017({
949
930
  module: nuxtModule,
950
931
  cause: error
951
932
  });
952
- if (code === "MODULE_NOT_FOUND" || code === "ERR_MODULE_NOT_FOUND") {
953
- const module = MissingModuleMatcher.exec(error.message)?.[1];
954
- if (module && !module.includes(nuxtModule)) throw kitDiagnostics.NUXT_B8018({
955
- module: nuxtModule,
956
- error: String(error),
957
- cause: error
958
- });
959
- }
960
933
  }
961
- throw kitDiagnostics.NUXT_B8017({ module: nuxtModule });
934
+ const resolvedModulePath = fileURLToPath(src);
935
+ let resolvedNuxtModule;
936
+ try {
937
+ resolvedNuxtModule = await jiti.import(src, { default: true });
938
+ } catch (error) {
939
+ throw kitDiagnostics.NUXT_B8018({
940
+ module: nuxtModule,
941
+ error: String(error),
942
+ cause: error
943
+ });
944
+ }
945
+ if (typeof resolvedNuxtModule !== "function") throw kitDiagnostics.NUXT_B8016({ module: nuxtModule });
946
+ const moduleMetadataPath = new URL("module.json", src);
947
+ if (existsSync(moduleMetadataPath)) buildTimeModuleMeta = JSON.parse(await promises.readFile(moduleMetadataPath, "utf-8"));
948
+ return {
949
+ nuxtModule: resolvedNuxtModule,
950
+ buildTimeModuleMeta,
951
+ resolvedModulePath
952
+ };
962
953
  }
963
954
  function getDirectory(p) {
964
955
  try {
@@ -969,7 +960,6 @@ function getDirectory(p) {
969
960
  const normalizeModuleTranspilePath = (p) => {
970
961
  return getDirectory(p).split("node_modules/").pop();
971
962
  };
972
- const MissingModuleMatcher = /Cannot find module\s+['"]?([^'")\s]+)['"]?/i;
973
963
  async function callLifecycleHooks(nuxtModule, meta = {}, inlineOptions, nuxt = useNuxt()) {
974
964
  if (!meta.name || !meta.version) return;
975
965
  if (!nuxtModule.onInstall && !nuxtModule.onUpgrade) return;
@@ -979,7 +969,7 @@ async function callLifecycleHooks(nuxtModule, meta = {}, inlineOptions, nuxt = u
979
969
  })?.setups?.[meta.name];
980
970
  try {
981
971
  if (!previousVersion) await nuxtModule.onInstall?.(nuxt);
982
- else if (semver.gt(meta.version, previousVersion)) await nuxtModule.onUpgrade?.(nuxt, inlineOptions, previousVersion);
972
+ else if (isGreater(meta.version, previousVersion)) await nuxtModule.onUpgrade?.(nuxt, inlineOptions, previousVersion);
983
973
  if (previousVersion !== meta.version) update({ setups: { [meta.name]: meta?.version } }, {
984
974
  dir: nuxt.options.rootDir,
985
975
  name: ".nuxtrc"
@@ -1073,17 +1063,22 @@ const merger = createDefu((obj, key, value) => {
1073
1063
  }
1074
1064
  });
1075
1065
  async function loadNuxtConfig(opts) {
1066
+ const rootCwd = resolve(opts.cwd || process.cwd());
1076
1067
  const localLayers = (await glob("layers/*", {
1077
1068
  onlyDirectories: true,
1078
- cwd: opts.cwd || process.cwd()
1069
+ cwd: rootCwd
1079
1070
  })).map((d) => withTrailingSlash(d)).sort((a, b) => b.localeCompare(a));
1080
1071
  opts.overrides = defu(opts.overrides, { _extends: localLayers });
1072
+ const autoScanSources = new Set(localLayers);
1073
+ const localLayerDirs = new Set(localLayers.map((dir) => canonicalLayerDir(resolve(rootCwd, withoutTrailingSlash(dir)))));
1074
+ const extendsLocalLayerOrder = [];
1081
1075
  if (opts.dotenv !== false) await setupDotenv({
1082
1076
  cwd: opts.cwd || process.cwd(),
1083
1077
  ...typeof opts.dotenv === "object" ? opts.dotenv : {}
1084
1078
  });
1085
1079
  const schemaPromise = loadNuxtSchema(opts.cwd || process.cwd());
1086
- const { configFile, layers = [], cwd, config: nuxtConfig, meta } = await withDefineNuxtConfig(() => loadConfig({
1080
+ const seenLayerDirs = /* @__PURE__ */ new Set();
1081
+ const resolved = await withDefineNuxtConfig(() => loadConfig({
1087
1082
  name: "nuxt",
1088
1083
  configFile: "nuxt.config",
1089
1084
  rcFile: ".nuxtrc",
@@ -1095,8 +1090,48 @@ async function loadNuxtConfig(opts) {
1095
1090
  globalRc: true,
1096
1091
  merger,
1097
1092
  ...opts,
1098
- dotenv: false
1093
+ dotenv: false,
1094
+ async resolve(source, resolveOptions) {
1095
+ const custom = await opts.resolve?.(source, resolveOptions);
1096
+ if (custom) return custom;
1097
+ if (typeof source !== "string") return;
1098
+ const base = resolveOptions.cwd ? resolve(resolveOptions.cwd) : rootCwd;
1099
+ const aliased = resolveLayerExtendsAlias(source, rootCwd);
1100
+ const path = aliased ?? resolve(base, source);
1101
+ if (!existsSync(path)) return;
1102
+ const layerDir = canonicalLayerDir(path);
1103
+ if (base === rootCwd && !autoScanSources.has(source) && localLayerDirs.has(layerDir)) extendsLocalLayerOrder.push(layerDir);
1104
+ if (seenLayerDirs.has(layerDir)) return {
1105
+ config: {},
1106
+ cwd: layerDir,
1107
+ source
1108
+ };
1109
+ seenLayerDirs.add(layerDir);
1110
+ if (aliased) {
1111
+ const layer = await loadConfig({
1112
+ cwd: aliased,
1113
+ name: "nuxt",
1114
+ configFile: "nuxt.config",
1115
+ rcFile: false,
1116
+ extend: false,
1117
+ jiti: resolveOptions.jiti
1118
+ });
1119
+ return layer.configFile ? {
1120
+ config: layer.config,
1121
+ configFile: layer.configFile,
1122
+ cwd: aliased,
1123
+ source: aliased,
1124
+ meta: layer.meta
1125
+ } : {
1126
+ config: {},
1127
+ cwd: aliased,
1128
+ source
1129
+ };
1130
+ }
1131
+ }
1099
1132
  }));
1133
+ const { configFile, layers = [], cwd, meta } = resolved;
1134
+ const nuxtConfig = klona(resolved.config);
1100
1135
  nuxtConfig.rootDir ||= cwd;
1101
1136
  nuxtConfig._nuxtConfigFile = configFile;
1102
1137
  nuxtConfig._nuxtConfigFiles = [configFile];
@@ -1142,6 +1177,7 @@ async function loadNuxtConfig(opts) {
1142
1177
  }
1143
1178
  _layers.push(layer);
1144
1179
  }
1180
+ if (extendsLocalLayerOrder.length) reorderLocalLayersByExtends(_layers, extendsLocalLayerOrder, localLayerDirs);
1145
1181
  nuxtConfig._layers = _layers;
1146
1182
  if (!_layers.length) _layers.push({
1147
1183
  cwd,
@@ -1152,6 +1188,63 @@ async function loadNuxtConfig(opts) {
1152
1188
  });
1153
1189
  return await applyDefaults(NuxtConfigSchema, nuxtConfig);
1154
1190
  }
1191
+ /**
1192
+ * Canonicalise a filesystem path to a layer directory: config-file paths collapse to their
1193
+ * directory and symlinks resolve to their target, so different spellings of the same layer
1194
+ * share one identity. The path must exist.
1195
+ */
1196
+ function canonicalLayerDir(path) {
1197
+ return normalize(realpathSync(statSync(path).isDirectory() ? path : dirname(path)));
1198
+ }
1199
+ const LAYER_EXTENDS_ALIASES = [
1200
+ "~~",
1201
+ "@@",
1202
+ "~",
1203
+ "@"
1204
+ ];
1205
+ /**
1206
+ * Resolve a leading `~`, `~~`, `@` or `@@` alias in an `extends` source to an absolute path.
1207
+ * Local layers live at the project root, so every alias resolves against `rootDir`. Returns
1208
+ * `undefined` when the source is not alias-prefixed.
1209
+ */
1210
+ function resolveLayerExtendsAlias(source, rootDir) {
1211
+ for (const alias of LAYER_EXTENDS_ALIASES) {
1212
+ if (source === alias) return rootDir;
1213
+ if (source.startsWith(`${alias}/`)) return join(rootDir, source.slice(alias.length + 1));
1214
+ }
1215
+ }
1216
+ /**
1217
+ * Reorder local layers (from the `~~/layers/` directory) in place to match the order they are
1218
+ * listed in `extends` (first entry = highest priority). Listed layers come first in that order;
1219
+ * unlisted local layers keep their existing alphabetical order after them. Non-local layers keep
1220
+ * their positions.
1221
+ */
1222
+ function reorderLocalLayersByExtends(layers, extendsOrder, localLayerDirs) {
1223
+ const layerDir = (layer) => {
1224
+ const dir = withoutTrailingSlash(layer.config?.rootDir ?? layer.cwd ?? "");
1225
+ try {
1226
+ return normalize(realpathSync(dir));
1227
+ } catch {
1228
+ return normalize(dir);
1229
+ }
1230
+ };
1231
+ const priorityByDir = new Map(extendsOrder.map((dir, index) => [dir, index]));
1232
+ const localSlots = [];
1233
+ const localLayers = [];
1234
+ for (let index = 0; index < layers.length; index++) if (localLayerDirs.has(layerDir(layers[index]))) {
1235
+ localSlots.push(index);
1236
+ localLayers.push(layers[index]);
1237
+ }
1238
+ const orderedLocalLayers = localLayers.map((layer, index) => ({
1239
+ layer,
1240
+ index
1241
+ })).sort((a, b) => {
1242
+ return (priorityByDir.get(layerDir(a.layer)) ?? Number.POSITIVE_INFINITY) - (priorityByDir.get(layerDir(b.layer)) ?? Number.POSITIVE_INFINITY) || a.index - b.index;
1243
+ }).map((entry) => entry.layer);
1244
+ localSlots.forEach((slot, index) => {
1245
+ layers[slot] = orderedLocalLayers[index];
1246
+ });
1247
+ }
1155
1248
  function loadNuxtSchema(cwd) {
1156
1249
  const url = directoryToURL(cwd);
1157
1250
  const urls = [url];
@@ -1355,7 +1448,7 @@ function addServerScanDir(dirs, opts = {}) {
1355
1448
  */
1356
1449
  function useRuntimeConfig() {
1357
1450
  const nuxt = useNuxt();
1358
- return applyEnv(klona(nuxt.options.nitro.runtimeConfig), {
1451
+ return applyEnv(klona$1(nuxt.options.nitro.runtimeConfig), {
1359
1452
  prefix: "NITRO_",
1360
1453
  altPrefix: "NUXT_",
1361
1454
  envExpansion: nuxt.options.nitro.experimental?.envExpansion ?? !!process.env.NITRO_ENV_EXPANSION
@@ -1747,6 +1840,16 @@ const pageDiagnostics = /* #__PURE__ */ defineDiagnostics({
1747
1840
  why: (p) => `Layout \`${p.layoutName}\` is already provided by \`${p.existingPath}\` and was not overridden with \`${p.newPath}\`.`,
1748
1841
  fix: "Rename one of the layouts, or remove the duplicate layout registration.",
1749
1842
  docs: false
1843
+ },
1844
+ NUXT_B4016: {
1845
+ why: (p) => `Inline route rules for \`${p.path}\` cannot be represented exactly by Nitro route rules, so they were not applied: ${p.detail}.`,
1846
+ fix: "Define the affected route rules explicitly in `nitro.routeRules`.",
1847
+ docs: false
1848
+ },
1849
+ NUXT_B4017: {
1850
+ why: (p) => `Inline route rules for \`${p.path}\` generated \`${p.pattern}\`, which is already used by another page.`,
1851
+ fix: "The later inline route rules override the earlier ones. Use distinct routes, or define the rules explicitly in `nitro.routeRules`.",
1852
+ docs: false
1750
1853
  }
1751
1854
  }
1752
1855
  });
@@ -2057,7 +2160,7 @@ async function _generateTypes(nuxt) {
2057
2160
  if (nestedModulesDirs.every((d) => !d.startsWith(withSlash))) nestedModulesDirs.push(withSlash);
2058
2161
  }
2059
2162
  let hasTypescriptVersionWithModulePreserve;
2060
- for (const parent of nestedModulesDirs) hasTypescriptVersionWithModulePreserve ??= await readPackageJSON("typescript", { parent }).then((r) => r?.version && gte(r.version, "5.4.0")).catch(() => void 0);
2163
+ for (const parent of nestedModulesDirs) hasTypescriptVersionWithModulePreserve ??= await readPackageJSON("typescript", { parent }).then((r) => r?.version && isGreaterOrEqual(r.version, "5.4.0")).catch(() => void 0);
2061
2164
  hasTypescriptVersionWithModulePreserve ??= true;
2062
2165
  const useDecorators = Boolean(nuxt.options.experimental?.decorators);
2063
2166
  const isV5OrHigher = (nuxt.options.future?.compatibilityVersion ?? 4) >= 5;
@@ -2472,6 +2575,15 @@ const pluginDiagnostics = /* #__PURE__ */ defineDiagnostics({
2472
2575
  why: (p) => `Invalid plugin \`${p.src}\`. The \`src\` option is required.`,
2473
2576
  fix: "Pass a string path, or an object with a `src` property, to `addPlugin()`.",
2474
2577
  docs: false
2578
+ },
2579
+ NUXT_B2012: {
2580
+ why: (p) => {
2581
+ const dependencies = p.dependencies.map((name) => `\`${name}\``).join(", ");
2582
+ const plural = p.dependencies.length > 1;
2583
+ return `Plugin \`${p.name}\` depends on ${dependencies}, but ${plural ? "these dependencies are" : "this dependency is"} unavailable in the ${p.mode} build and will be ignored.`;
2584
+ },
2585
+ fix: "Do not depend on plugins that are unavailable in the same build environment; remove them from the `dependsOn` array.",
2586
+ docs: false
2475
2587
  }
2476
2588
  }
2477
2589
  });
@@ -2488,15 +2600,7 @@ function normalizePlugin(plugin) {
2488
2600
  if (!plugin.src) throw pluginDiagnostics.NUXT_B2011({ src: JSON.stringify(plugin) });
2489
2601
  plugin.src = normalize(resolveAlias(plugin.src));
2490
2602
  if (!existsSync(plugin.src) && isAbsolute$1(plugin.src)) try {
2491
- plugin.src = resolveModulePath(plugin.src, { extensions: tryUseNuxt()?.options.extensions ?? [
2492
- ".js",
2493
- ".mjs",
2494
- ".cjs",
2495
- ".ts",
2496
- ".tsx",
2497
- ".mts",
2498
- ".cts"
2499
- ] });
2603
+ plugin.src = resolveModulePath(plugin.src, { extensions: tryUseNuxt()?.options.extensions ?? DEFAULT_JS_FILE_EXTENSIONS });
2500
2604
  } catch {}
2501
2605
  if (plugin.ssr) plugin.mode = "server";
2502
2606
  if (!plugin.mode) {
@@ -2586,17 +2690,17 @@ const buildDiagnostics = /* #__PURE__ */ defineDiagnostics({
2586
2690
  },
2587
2691
  NUXT_B1011: {
2588
2692
  why: (p) => `Failed to read file \`${p.file}\`.`,
2589
- fix: "Check that the file exists and is readable, or try clearing the build cache with `nuxi clean`.",
2693
+ fix: "Check that the file exists and is readable, or try clearing the build cache with `nuxt clean`.",
2590
2694
  docs: false
2591
2695
  },
2592
2696
  NUXT_B1012: {
2593
2697
  why: (p) => `Skipping unsafe cache path: ${p.path}. This cache file has a path that escapes the project directory (possible path traversal).`,
2594
- fix: "Delete the cache with `nuxi clean` and rebuild.",
2698
+ fix: "Delete the cache with `nuxt clean` and rebuild.",
2595
2699
  docs: false
2596
2700
  },
2597
2701
  NUXT_B1013: {
2598
2702
  why: (p) => `Failed to restore cached file \`${p.file}\`.`,
2599
- fix: "Try clearing the build cache with `nuxi clean` and rebuilding from scratch.",
2703
+ fix: "Try clearing the build cache with `nuxt clean` and rebuilding from scratch.",
2600
2704
  docs: false
2601
2705
  },
2602
2706
  NUXT_B1014: {
@@ -2728,6 +2832,11 @@ const headDiagnostics = /* #__PURE__ */ defineDiagnostics({
2728
2832
  why: "`experimental.headNext` is deprecated. CAPO sorting is now the default.",
2729
2833
  fix: "Remove `experimental.headNext` from your `nuxt.config`, or set `unhead.legacy: true` to opt out temporarily.",
2730
2834
  docs: false
2835
+ },
2836
+ NUXT_B6005: {
2837
+ why: (p) => `Could not resolve \`${p.from}\` used by the auto-import \`${p.name}\`.`,
2838
+ fix: "Check the `from` path in `imports.presets` (or the module that registered this import). Auto-imports from an unresolvable module are silently skipped and can surface as unrelated type errors elsewhere.",
2839
+ docs: false
2731
2840
  }
2732
2841
  }
2733
2842
  });
@@ -2805,7 +2914,7 @@ const bundlerDiagnostics = /* #__PURE__ */ defineDiagnostics({
2805
2914
  },
2806
2915
  NUXT_B7014: {
2807
2916
  why: (p) => `The webpack \`${p.name}\` build failed with errors.`,
2808
- fix: "Fix the build errors listed above. If the errors are unclear, try running `nuxi clean` and rebuilding.",
2917
+ fix: "Fix the build errors listed above. If the errors are unclear, try running `nuxt cleanup` and rebuilding.",
2809
2918
  docs: false
2810
2919
  },
2811
2920
  NUXT_B7015: {
@@ -2836,4 +2945,4 @@ const bundlerDiagnostics = /* #__PURE__ */ defineDiagnostics({
2836
2945
  }
2837
2946
  });
2838
2947
  //#endregion
2839
- export { addBuildPlugin, addComponent, addComponentExports, addComponentsDir, addDevServerHandler, addImports, addImportsDir, addImportsSources, addLayout, addPlugin, addPluginTemplate, addPrerenderRoutes, addRouteMiddleware, addRspackPlugin, addServerHandler, addServerImports, addServerImportsDir, addServerPlugin, addServerScanDir, addServerTemplate, addTemplate, addTypeTemplate, addVitePlugin, addWebpackPlugin, assertNuxtCompatibility, buildDiagnostics, buildNuxt, bundlerDiagnostics, checkNuxtCompatibility, componentDiagnostics, configDiagnostics, createIsIgnored, createResolver, defineNuxtModule, directoryToURL, extendNuxtSchema, extendPages, extendRouteRules, extendRspackConfig, extendViteConfig, extendWebpackConfig, findPath, getDirectory, getLayerDirectories, getNuxtCtx, getNuxtModuleVersion, getNuxtVersion, hasNuxtCompatibility, hasNuxtModule, hasNuxtModuleCompatibility, headDiagnostics, importModule, installModule, installModules, isIgnored, isNuxt2, isNuxt3, isNuxtMajorVersion, loadNuxt, loadNuxtConfig, loadNuxtModuleInstance, logger, normalizeModuleTranspilePath, normalizePlugin, normalizeSemanticVersion, normalizeTemplate, nuxtCtx, packageName, pageDiagnostics, pluginDiagnostics, requireModule, resolveAlias, resolveDeclarationPath, resolveFiles, resolveIgnorePatterns, resolveModule, resolveModuleWithOptions, resolveNuxtModule, resolvePath, resolveTypePaths, runWithNuxtContext, setBuildOutput, setGlobalHead, tryImportModule, tryRequireModule, tryResolveModule, tryUseNuxt, updateAppConfig, updateRuntimeConfig, updateTemplates, useLogger, useNitro, useNuxt, useRuntimeConfig, writeTypes };
2948
+ export { DEFAULT_JSX_FILE_EXTENSIONS, DEFAULT_JS_FILE_EXTENSIONS, addBuildPlugin, addComponent, addComponentExports, addComponentsDir, addDevServerHandler, addImports, addImportsDir, addImportsSources, addLayout, addPlugin, addPluginTemplate, addPrerenderRoutes, addRouteMiddleware, addRspackPlugin, addServerHandler, addServerImports, addServerImportsDir, addServerPlugin, addServerScanDir, addServerTemplate, addTemplate, addTypeTemplate, addVitePlugin, addWebpackPlugin, assertNuxtCompatibility, buildDiagnostics, buildNuxt, bundlerDiagnostics, checkNuxtCompatibility, componentDiagnostics, configDiagnostics, createIsIgnored, createResolver, defineNuxtModule, directoryToURL, extendNuxtSchema, extendPages, extendRouteRules, extendRspackConfig, extendViteConfig, extendWebpackConfig, findPath, getDirectory, getLayerDirectories, getNuxtCtx, getNuxtModuleVersion, getNuxtVersion, hasNuxtCompatibility, hasNuxtModule, hasNuxtModuleCompatibility, headDiagnostics, importModule, installModule, installModules, isIgnored, isNuxt2, isNuxt3, isNuxtMajorVersion, loadNuxt, loadNuxtConfig, loadNuxtModuleInstance, logger, normalizeModuleTranspilePath, normalizePlugin, normalizeSemanticVersion, normalizeTemplate, nuxtCtx, packageName, pageDiagnostics, pluginDiagnostics, requireModule, resolveAlias, resolveDeclarationPath, resolveFiles, resolveIgnorePatterns, resolveModule, resolveModuleWithOptions, resolveNuxtModule, resolvePath, resolveTypePaths, runWithNuxtContext, setBuildOutput, setGlobalHead, tryImportModule, tryRequireModule, tryResolveModule, tryUseNuxt, updateAppConfig, updateRuntimeConfig, updateTemplates, useLogger, useNitro, useNuxt, useRuntimeConfig, writeTypes };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@depup/nuxt__kit",
3
- "version": "4.5.0-depup.0",
3
+ "version": "4.5.1-depup.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/nuxt/nuxt.git",
@@ -37,23 +37,21 @@
37
37
  "pkg-types": "^2.3.1",
38
38
  "rc9": "^3.0.1",
39
39
  "scule": "^1.3.0",
40
- "semver": "^7.8.5",
41
40
  "tinyglobby": "^0.2.17",
42
41
  "ufo": "^1.6.4",
43
42
  "unctx": "^3.0.0",
44
- "untyped": "^2.0.0"
43
+ "untyped": "^2.0.0",
44
+ "verkit": "^0.3.1"
45
45
  },
46
46
  "devDependencies": {
47
- "@types/semver": "7.7.1",
48
- "hookable": "6.1.1",
49
- "nitro": "3.0.260311-beta",
47
+ "hookable": "^6.1.1",
50
48
  "nitropack": "2.13.4",
51
49
  "tsdown": "0.22.0",
52
- "unimport": "6.3.0",
53
- "vite": "8.1.4",
50
+ "unimport": "^6.3.1",
51
+ "vite": "^8.1.5",
54
52
  "vitest": "4.1.10",
55
- "webpack": "5.108.4",
56
- "@nuxt/schema": "4.5.0"
53
+ "webpack": "^5.108.4",
54
+ "@nuxt/schema": "4.5.1"
57
55
  },
58
56
  "engines": {
59
57
  "node": ">=18.12.0"
@@ -76,15 +74,15 @@
76
74
  "from": "^3.3.4",
77
75
  "to": "^4.0.0-beta.5"
78
76
  },
79
- "nostics": {
80
- "from": "^1.1.4",
81
- "to": "^1.2.0"
77
+ "verkit": {
78
+ "from": "^0.2.0",
79
+ "to": "^0.3.1"
82
80
  }
83
81
  },
84
82
  "depsUpdated": 2,
85
83
  "originalPackage": "@nuxt/kit",
86
- "originalVersion": "4.5.0",
87
- "processedAt": "2026-07-21T16:05:58.863Z",
84
+ "originalVersion": "4.5.1",
85
+ "processedAt": "2026-07-27T16:44:14.139Z",
88
86
  "smokeTest": "passed"
89
87
  }
90
88
  }