nuxt-nightly 4.1.0-29279319.00ede5ce → 4.1.0-29279382.7234ae61

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.
Files changed (2) hide show
  1. package/dist/index.mjs +82 -90
  2. package/package.json +4 -4
package/dist/index.mjs CHANGED
@@ -5,7 +5,7 @@ import { AsyncLocalStorage } from 'node:async_hooks';
5
5
  import { dirname, resolve, normalize, basename, extname, relative, isAbsolute, join } from 'pathe';
6
6
  import { createHooks, createDebugger } from 'hookable';
7
7
  import ignore from 'ignore';
8
- import { useLogger, tryUseNuxt, useNuxt, directoryToURL, resolveFiles, resolvePath, defineNuxtModule, findPath, addPlugin, addTemplate, addTypeTemplate, addComponent, useNitro, addBuildPlugin, isIgnored, resolveAlias as resolveAlias$1, addPluginTemplate, addImportsSources, addVitePlugin, createIsIgnored, updateTemplates, tryResolveModule, normalizeModuleTranspilePath, resolveNuxtModule, resolveIgnorePatterns, logger as logger$1, createResolver, importModule, tryImportModule, runWithNuxtContext, nuxtCtx, loadNuxtConfig, addWebpackPlugin, addServerPlugin, installModules, addServerTemplate, addServerHandler, addRouteMiddleware, resolveModuleWithOptions, normalizeTemplate, normalizePlugin } from '@nuxt/kit';
8
+ import { useLogger, tryUseNuxt, useNuxt, directoryToURL, getLayerDirectories, resolveFiles, resolvePath, defineNuxtModule, findPath, addPlugin, addTemplate, addTypeTemplate, addComponent, useNitro, addBuildPlugin, isIgnored, resolveAlias as resolveAlias$1, addPluginTemplate, addImportsSources, addVitePlugin, createIsIgnored, updateTemplates, tryResolveModule, normalizeModuleTranspilePath, resolveNuxtModule, resolveIgnorePatterns, logger as logger$1, createResolver, importModule, tryImportModule, runWithNuxtContext, nuxtCtx, loadNuxtConfig, addWebpackPlugin, addServerPlugin, installModules, addServerTemplate, addServerHandler, addRouteMiddleware, resolveModuleWithOptions, normalizeTemplate, normalizePlugin } from '@nuxt/kit';
9
9
  import { resolvePackageJSON, readPackageJSON } from 'pkg-types';
10
10
  import { hash, isEqual, serialize } from 'ohash';
11
11
  import consola, { consola as consola$1 } from 'consola';
@@ -13,7 +13,7 @@ import onChange from 'on-change';
13
13
  import { colors } from 'consola/utils';
14
14
  import { resolveCompatibilityDatesFromEnv, formatDate } from 'compatx';
15
15
  import escapeRE from 'escape-string-regexp';
16
- import { withTrailingSlash, parseURL, parseQuery, joinURL, withLeadingSlash, encodePath, withoutLeadingSlash } from 'ufo';
16
+ import { withTrailingSlash as withTrailingSlash$1, parseURL, parseQuery, joinURL, withLeadingSlash, encodePath, withoutLeadingSlash } from 'ufo';
17
17
  import { ImpoundPlugin } from 'impound';
18
18
  import defu$1, { defu } from 'defu';
19
19
  import { satisfies, coerce } from 'semver';
@@ -150,7 +150,7 @@ async function resolveTypePath(path, subpath, searchPaths = tryUseNuxt()?.option
150
150
  }
151
151
 
152
152
  function getNameFromPath(path, relativeTo) {
153
- const relativePath = relativeTo ? normalize(path).replace(withTrailingSlash(normalize(relativeTo)), "") : basename(path);
153
+ const relativePath = relativeTo ? normalize(path).replace(withTrailingSlash$1(normalize(relativeTo)), "") : basename(path);
154
154
  const prefixParts = splitByCase(dirname(relativePath));
155
155
  const fileName = basename(relativePath, extname(relativePath));
156
156
  const segments = resolveComponentNameSegments(fileName.toLowerCase() === "index" ? "" : fileName, prefixParts).filter(Boolean);
@@ -256,9 +256,7 @@ const SegmentParserState = {
256
256
  };
257
257
  const enUSComparator = new Intl.Collator("en-US");
258
258
  async function resolvePagesRoutes(pattern, nuxt = useNuxt()) {
259
- const pagesDirs = nuxt.options._layers.map(
260
- (layer) => resolve(layer.config.srcDir, (layer.config.rootDir === nuxt.options.rootDir ? nuxt.options.dir : layer.config.dir)?.pages || "pages")
261
- );
259
+ const pagesDirs = getLayerDirectories(nuxt).map((d) => d.appPages);
262
260
  const scannedFiles = [];
263
261
  for (const dir of pagesDirs) {
264
262
  const files = await resolveFiles(dir, pattern);
@@ -1204,9 +1202,7 @@ const pagesModule = defineNuxtModule({
1204
1202
  };
1205
1203
  const useExperimentalTypedPages = nuxt.options.experimental.typedPages;
1206
1204
  const builtInRouterOptions = await findPath(resolve(runtimeDir, "router.options")) || resolve(runtimeDir, "router.options");
1207
- const pagesDirs = nuxt.options._layers.map(
1208
- (layer) => resolve(layer.config.srcDir, (layer.config.rootDir === nuxt.options.rootDir ? nuxt.options : layer.config).dir?.pages || "pages")
1209
- );
1205
+ const pagesDirs = getLayerDirectories(nuxt).map((dirs) => dirs.appPages);
1210
1206
  nuxt.options.alias["#vue-router"] = "vue-router";
1211
1207
  const routerPath = await resolveTypePath("vue-router", "", nuxt.options.modulesDir) || "vue-router";
1212
1208
  nuxt.hook("prepare:types", ({ tsConfig }) => {
@@ -1381,14 +1377,11 @@ const pagesModule = defineNuxtModule({
1381
1377
  routerImports.from = "vue-router";
1382
1378
  }
1383
1379
  });
1384
- const updateTemplatePaths = nuxt.options._layers.flatMap((l) => {
1385
- const dir = l.config.rootDir === nuxt.options.rootDir ? nuxt.options.dir : l.config.dir;
1386
- return [
1387
- resolve(l.config.srcDir || l.cwd, dir?.pages || "pages") + "/",
1388
- resolve(l.config.srcDir || l.cwd, dir?.layouts || "layouts") + "/",
1389
- resolve(l.config.srcDir || l.cwd, dir?.middleware || "middleware") + "/"
1390
- ];
1391
- });
1380
+ const updateTemplatePaths = getLayerDirectories(nuxt).flatMap((dirs) => [
1381
+ dirs.appPages,
1382
+ dirs.appLayouts,
1383
+ dirs.appMiddleware
1384
+ ]);
1392
1385
  function isPage(file, pages = nuxt.apps.default?.pages) {
1393
1386
  if (!pages) {
1394
1387
  return false;
@@ -2283,7 +2276,7 @@ async function scanComponents(dirs, srcDir) {
2283
2276
  }
2284
2277
  for (const _file of files) {
2285
2278
  const filePath = join(dir.path, _file);
2286
- if (scannedPaths.find((d) => filePath.startsWith(withTrailingSlash(d))) || isIgnored(filePath)) {
2279
+ if (scannedPaths.find((d) => filePath.startsWith(withTrailingSlash$1(d))) || isIgnored(filePath)) {
2287
2280
  continue;
2288
2281
  }
2289
2282
  if (filePaths.has(filePath)) {
@@ -3662,7 +3655,7 @@ const importsModule = defineNuxtModule({
3662
3655
  });
3663
3656
  nuxt.options.alias["#imports"] = join(nuxt.options.buildDir, "imports");
3664
3657
  addBuildPlugin(TransformPlugin({ ctx, options, sourcemap: !!nuxt.options.sourcemap.server || !!nuxt.options.sourcemap.client }));
3665
- const priorities = nuxt.options._layers.map((layer, i) => [layer.config.srcDir, -i]).sort(([a], [b]) => b.length - a.length);
3658
+ const priorities = getLayerDirectories(nuxt).map((dirs, i) => [dirs.app, -i]).sort(([a], [b]) => b.length - a.length);
3666
3659
  const IMPORTS_TEMPLATE_RE = /\/imports\.(?:d\.ts|mjs)$/;
3667
3660
  function isImportsTemplate(template) {
3668
3661
  return IMPORTS_TEMPLATE_RE.test(template.filename);
@@ -3765,7 +3758,7 @@ function addDeclarationTemplates(ctx, options) {
3765
3758
  });
3766
3759
  }
3767
3760
 
3768
- const version = "4.1.0-29279319.00ede5ce";
3761
+ const version = "4.1.0-29279382.7234ae61";
3769
3762
 
3770
3763
  const createImportProtectionPatterns = (nuxt, options) => {
3771
3764
  const patterns = [];
@@ -4006,12 +3999,13 @@ const logLevelMapReverse = {
4006
3999
  const NODE_MODULES_RE = /(?<=\/)node_modules\/(.+)$/;
4007
4000
  const PNPM_NODE_MODULES_RE = /\.pnpm\/.+\/node_modules\/(.+)$/;
4008
4001
  async function initNitro(nuxt) {
4009
- const excludePaths = nuxt.options._layers.flatMap((l) => [
4010
- l.cwd.match(NODE_MODULES_RE)?.[1],
4011
- l.cwd.match(PNPM_NODE_MODULES_RE)?.[1]
4012
- ]).filter((dir) => Boolean(dir)).map((dir) => escapeRE(dir));
4002
+ const layerDirs = getLayerDirectories(nuxt);
4003
+ const excludePaths = layerDirs.flatMap((dirs) => [
4004
+ dirs.root.match(NODE_MODULES_RE)?.[1]?.replace(/\/$/, ""),
4005
+ dirs.root.match(PNPM_NODE_MODULES_RE)?.[1]?.replace(/\/$/, "")
4006
+ ].filter((dir) => Boolean(dir)).map((dir) => escapeRE(dir)));
4013
4007
  const excludePattern = excludePaths.length ? [new RegExp(`node_modules\\/(?!${excludePaths.join("|")})`)] : [/node_modules/];
4014
- const rootDirWithSlash = withTrailingSlash(nuxt.options.rootDir);
4008
+ const rootDirWithSlash = withTrailingSlash$1(nuxt.options.rootDir);
4015
4009
  const moduleEntryPaths = [];
4016
4010
  for (const m of nuxt.options._installedModules) {
4017
4011
  const path = m.meta?.rawPath || m.entryPath;
@@ -4078,7 +4072,7 @@ async function initNitro(nuxt) {
4078
4072
  projectRoot: nuxt.options.rootDir,
4079
4073
  filename: join(nuxt.options.analyzeDir, "{name}.html")
4080
4074
  } : false,
4081
- scanDirs: nuxt.options._layers.map((layer) => (layer.config.serverDir || layer.config.srcDir) && resolve(layer.cwd, layer.config.serverDir || resolve(layer.config.srcDir, "server"))).filter(Boolean),
4075
+ scanDirs: layerDirs.map((dirs) => dirs.server),
4082
4076
  renderer: resolve(distDir, "core/runtime/nitro/handlers/renderer"),
4083
4077
  nodeModulesDirs: nuxt.options.modulesDir,
4084
4078
  handlers: nuxt.options.serverHandlers,
@@ -4095,9 +4089,7 @@ async function initNitro(nuxt) {
4095
4089
  "/__nuxt_error": { cache: false }
4096
4090
  },
4097
4091
  appConfig: nuxt.options.appConfig,
4098
- appConfigFiles: nuxt.options._layers.map(
4099
- (layer) => resolve(layer.config.srcDir, "app.config")
4100
- ),
4092
+ appConfigFiles: layerDirs.map((dirs) => join(dirs.app, "app.config")),
4101
4093
  typescript: {
4102
4094
  strict: true,
4103
4095
  generateTsConfig: true,
@@ -4116,12 +4108,7 @@ async function initNitro(nuxt) {
4116
4108
  join(moduleDir, "dist/runtime/server")
4117
4109
  ];
4118
4110
  }),
4119
- ...nuxt.options._layers.map(
4120
- (layer) => relativeWithDot(
4121
- nuxt.options.buildDir,
4122
- resolve(layer.config.rootDir, layer.config.dir?.shared ?? "shared", "**/*.d.ts")
4123
- )
4124
- )
4111
+ ...getLayerDirectories(nuxt).map((dirs) => relativeWithDot(nuxt.options.buildDir, join(dirs.shared, "**/*.d.ts")))
4125
4112
  ],
4126
4113
  exclude: [
4127
4114
  ...nuxt.options.modulesDir.map((m) => relativeWithDot(nuxt.options.buildDir, m)),
@@ -4136,7 +4123,7 @@ async function initNitro(nuxt) {
4136
4123
  maxAge: 31536e3,
4137
4124
  baseURL: nuxt.options.app.buildAssetsDir
4138
4125
  },
4139
- ...nuxt.options._layers.map((layer) => resolve(layer.config.srcDir, (layer.config.rootDir === nuxt.options.rootDir ? nuxt.options.dir : layer.config.dir)?.public || "public")).filter((dir) => existsSync(dir)).map((dir) => ({ dir }))
4126
+ ...getLayerDirectories(nuxt).filter((dirs) => existsSync(dirs.public)).map((dirs) => ({ dir: dirs.public }))
4140
4127
  ],
4141
4128
  prerender: {
4142
4129
  ignoreUnprefixedPublicAssets: true,
@@ -4158,7 +4145,7 @@ async function initNitro(nuxt) {
4158
4145
  "nuxt-nightly/dist",
4159
4146
  distDir,
4160
4147
  // Ensure app config files have auto-imports injected even if they are pure .js files
4161
- ...nuxt.options._layers.map((layer) => resolve(layer.config.srcDir, "app.config"))
4148
+ ...getLayerDirectories(nuxt).map((dirs) => join(dirs.app, "app.config"))
4162
4149
  ],
4163
4150
  traceInclude: [
4164
4151
  // force include files used in generated code from the runtime-compiler
@@ -4353,8 +4340,8 @@ async function initNitro(nuxt) {
4353
4340
  }
4354
4341
  nitroConfig.rollupConfig.plugins = await nitroConfig.rollupConfig.plugins || [];
4355
4342
  nitroConfig.rollupConfig.plugins = toArray(nitroConfig.rollupConfig.plugins);
4356
- const sharedDir = withTrailingSlash(resolve(nuxt.options.rootDir, nuxt.options.dir.shared));
4357
- const relativeSharedDir = withTrailingSlash(relative(nuxt.options.rootDir, resolve(nuxt.options.rootDir, nuxt.options.dir.shared)));
4343
+ const sharedDir = withTrailingSlash$1(resolve(nuxt.options.rootDir, nuxt.options.dir.shared));
4344
+ const relativeSharedDir = withTrailingSlash$1(relative(nuxt.options.rootDir, resolve(nuxt.options.rootDir, nuxt.options.dir.shared)));
4358
4345
  const sharedPatterns = [/^#shared\//, new RegExp("^" + escapeRE(sharedDir)), new RegExp("^" + escapeRE(relativeSharedDir))];
4359
4346
  nitroConfig.rollupConfig.plugins.push(
4360
4347
  ImpoundPlugin.rollup({
@@ -4663,6 +4650,7 @@ const schemaModule = defineNuxtModule({
4663
4650
  schema = await resolveSchema$1();
4664
4651
  });
4665
4652
  nuxt.hooks.hook("build:done", () => writeSchema(schema));
4653
+ const layerDirs = getLayerDirectories(nuxt);
4666
4654
  if (nuxt.options.dev) {
4667
4655
  const onChange = debounce(async () => {
4668
4656
  schema = await resolveSchema$1();
@@ -4673,8 +4661,8 @@ const schemaModule = defineNuxtModule({
4673
4661
  const { subscribe } = await importModule("@parcel/watcher", {
4674
4662
  url: [nuxt.options.rootDir, ...nuxt.options.modulesDir].map((dir) => directoryToURL(dir))
4675
4663
  });
4676
- for (const layer of nuxt.options._layers) {
4677
- const subscription = await subscribe(layer.config.rootDir, onChange, {
4664
+ for (const dirs of layerDirs) {
4665
+ const subscription = await subscribe(dirs.root, onChange, {
4678
4666
  ignore: ["!nuxt.schema.*"]
4679
4667
  });
4680
4668
  nuxt.hook("close", () => subscription.unsubscribe());
@@ -4685,9 +4673,9 @@ const schemaModule = defineNuxtModule({
4685
4673
  }
4686
4674
  }
4687
4675
  const isIgnored = createIsIgnored(nuxt);
4688
- const dirsToWatch = nuxt.options._layers.map((layer) => resolver.resolve(layer.config.rootDir));
4676
+ const rootDirs = layerDirs.map((layer) => layer.root);
4689
4677
  const SCHEMA_RE = /(?:^|\/)nuxt.schema.\w+$/;
4690
- const watcher = watch$1(dirsToWatch, {
4678
+ const watcher = watch$1(rootDirs, {
4691
4679
  ...nuxt.options.watchers.chokidar,
4692
4680
  depth: 1,
4693
4681
  ignored: [
@@ -4703,8 +4691,8 @@ const schemaModule = defineNuxtModule({
4703
4691
  async function resolveSchema$1() {
4704
4692
  globalThis.defineNuxtSchema = (val) => val;
4705
4693
  const schemaDefs = [nuxt.options.$schema];
4706
- for (const layer of nuxt.options._layers) {
4707
- const filePath = await resolver.resolvePath(resolve(layer.config.rootDir, "nuxt.schema"));
4694
+ for (const dirs of layerDirs) {
4695
+ const filePath = await resolver.resolvePath(join(dirs.root, "nuxt.schema"));
4708
4696
  if (filePath && existsSync(filePath)) {
4709
4697
  let loadedConfig;
4710
4698
  try {
@@ -5428,6 +5416,7 @@ const nightlies = {
5428
5416
  };
5429
5417
  let warnedAboutCompatDate = false;
5430
5418
  async function initNuxt(nuxt) {
5419
+ const layerDirs = getLayerDirectories(nuxt);
5431
5420
  for (const config of nuxt.options._layers.map((layer) => layer.config).reverse()) {
5432
5421
  if (config.hooks) {
5433
5422
  nuxt.hooks.addHooks(config.hooks);
@@ -5503,8 +5492,8 @@ Using \`${fallbackCompatibilityDate}\` as fallback. More info at: ${colors.under
5503
5492
  opts.tsConfig.compilerOptions = defu$1(opts.tsConfig.compilerOptions, { paths: { ...paths } });
5504
5493
  opts.nodeTsConfig.compilerOptions = defu$1(opts.nodeTsConfig.compilerOptions, { paths: { ...paths } });
5505
5494
  opts.sharedTsConfig.compilerOptions = defu$1(opts.sharedTsConfig.compilerOptions, { paths: { ...paths } });
5506
- for (const layer of nuxt.options._layers) {
5507
- const declaration = join(layer.cwd, "index.d.ts");
5495
+ for (const dirs of layerDirs) {
5496
+ const declaration = join(dirs.root, "index.d.ts");
5508
5497
  if (existsSync(declaration)) {
5509
5498
  opts.references.push({ path: declaration });
5510
5499
  opts.nodeReferences.push({ path: declaration });
@@ -5621,10 +5610,18 @@ Using \`${fallbackCompatibilityDate}\` as fallback. More info at: ${colors.under
5621
5610
  }
5622
5611
  nuxt.options.build.transpile.push("nuxt/app");
5623
5612
  nuxt.options.build.transpile.push(
5624
- ...nuxt.options._layers.filter((i) => i.cwd.includes("node_modules")).map((i) => i.cwd)
5613
+ ...layerDirs.filter((i) => i.root.includes("node_modules")).map((i) => i.root.replace(/\/$/, ""))
5625
5614
  );
5626
- const locallyScannedLayersDirs = nuxt.options._layers.map((l) => resolve(l.cwd, "layers").replace(/\/?$/, "/"));
5627
- nuxt.options.modulesDir.push(...nuxt.options._layers.filter((l) => l.cwd !== nuxt.options.rootDir && locallyScannedLayersDirs.every((dir) => !l.cwd.startsWith(dir))).map((l) => resolve(l.cwd, "node_modules")));
5615
+ const locallyScannedLayersDirs = layerDirs.map((l) => join(l.root, "layers/"));
5616
+ const rootWithTrailingSlash = withTrailingSlash(nuxt.options.rootDir);
5617
+ for (const dirs of layerDirs) {
5618
+ if (dirs.root === rootWithTrailingSlash) {
5619
+ continue;
5620
+ }
5621
+ if (locallyScannedLayersDirs.every((dir) => !dirs.root.startsWith(dir))) {
5622
+ nuxt.options.modulesDir.push(join(dirs.root, "node_modules"));
5623
+ }
5624
+ }
5628
5625
  await nuxt.callHook("modules:before");
5629
5626
  const { paths: watchedModulePaths, resolvedModulePaths, modules } = await resolveModules(nuxt);
5630
5627
  nuxt.options.watch.push(...watchedModulePaths);
@@ -5816,7 +5813,7 @@ export default defineNuxtPlugin({
5816
5813
  if (watchedModulePaths.has(path)) {
5817
5814
  return nuxt.callHook("restart", { hard: true });
5818
5815
  }
5819
- const layerRelativePaths = new Set(nuxt.options._layers.map((l) => relative(l.config.srcDir || l.cwd, path)));
5816
+ const layerRelativePaths = new Set(getLayerDirectories(nuxt).map((l) => relative(l.app, path)));
5820
5817
  for (const pattern of nuxt.options.watch) {
5821
5818
  if (typeof pattern === "string") {
5822
5819
  if (pattern === path || layerRelativePaths.has(pattern)) {
@@ -5995,10 +5992,10 @@ async function resolveModules(nuxt) {
5995
5992
  }
5996
5993
  }
5997
5994
  }
5998
- const modulesDir = (config.rootDir === nuxt.options.rootDir ? nuxt.options.dir : config.dir)?.modules || "modules";
5999
- const layerModules = await resolveFiles(config.srcDir, [
6000
- `${modulesDir}/*{${nuxt.options.extensions.join(",")}}`,
6001
- `${modulesDir}/*/index{${nuxt.options.extensions.join(",")}}`
5995
+ const modulesDir = resolve(config.srcDir, (config.rootDir === nuxt.options.rootDir ? nuxt.options.dir : config.dir)?.modules || "modules");
5996
+ const layerModules = await resolveFiles(modulesDir, [
5997
+ `*{${nuxt.options.extensions.join(",")}}`,
5998
+ `*/index{${nuxt.options.extensions.join(",")}}`
6002
5999
  ]);
6003
6000
  for (const module of layerModules) {
6004
6001
  paths.add(module);
@@ -6049,6 +6046,9 @@ async function resolveTypescriptPaths(nuxt) {
6049
6046
  })).then((r) => r.flat()));
6050
6047
  return paths;
6051
6048
  }
6049
+ function withTrailingSlash(dir) {
6050
+ return dir.replace(/[^/]$/, "$&/");
6051
+ }
6052
6052
 
6053
6053
  const vueShim = {
6054
6054
  filename: "types/vue-shim.d.ts",
@@ -6741,26 +6741,18 @@ async function compileTemplate(template, ctx) {
6741
6741
  throw new Error("[nuxt] Invalid template. Templates must have either `src` or `getContents`: " + JSON.stringify(template));
6742
6742
  }
6743
6743
  async function resolveApp(nuxt, app) {
6744
- app.mainComponent ||= await findPath(
6745
- nuxt.options._layers.flatMap((layer) => [
6746
- join(layer.config.srcDir, "App"),
6747
- join(layer.config.srcDir, "app")
6748
- ])
6749
- );
6744
+ const layerDirs = getLayerDirectories(nuxt);
6745
+ const reversedLayerDirs = [...layerDirs].reverse();
6746
+ app.mainComponent ||= await findPath(layerDirs.flatMap((d) => [join(d.app, "App"), join(d.app, "app")]));
6750
6747
  app.mainComponent ||= resolve(nuxt.options.appDir, "components/welcome.vue");
6751
6748
  app.rootComponent ||= await findPath(["~/app.root", resolve(nuxt.options.appDir, "components/nuxt-root.vue")]);
6752
- app.errorComponent ||= await findPath(
6753
- nuxt.options._layers.map((layer) => join(layer.config.srcDir, "error"))
6754
- ) ?? resolve(nuxt.options.appDir, "components/nuxt-error-page.vue");
6749
+ app.errorComponent ||= await findPath(layerDirs.map((d) => join(d.app, "error"))) ?? resolve(nuxt.options.appDir, "components/nuxt-error-page.vue");
6755
6750
  const extensionGlob = nuxt.options.extensions.join(",");
6756
- const layerConfigs = nuxt.options._layers.map((layer) => layer.config);
6757
- const reversedConfigs = layerConfigs.slice().reverse();
6758
6751
  const layouts = {};
6759
- for (const config of layerConfigs) {
6760
- const layoutDir = (config.rootDir === nuxt.options.rootDir ? nuxt.options.dir : config.dir)?.layouts || "layouts";
6761
- const layoutFiles = await resolveFiles(config.srcDir, `${layoutDir}/**/*{${extensionGlob}}`);
6752
+ for (const dirs of layerDirs) {
6753
+ const layoutFiles = await resolveFiles(dirs.appLayouts, `**/*{${extensionGlob}}`);
6762
6754
  for (const file of layoutFiles) {
6763
- const name = getNameFromPath(file, resolve(config.srcDir, layoutDir));
6755
+ const name = getNameFromPath(file, dirs.appLayouts);
6764
6756
  if (!name) {
6765
6757
  logger.warn(`No layout name could be resolved for \`${resolveToAlias(file, nuxt)}\`. Bear in mind that \`index\` is ignored for the purpose of creating a layout name.`);
6766
6758
  continue;
@@ -6769,11 +6761,10 @@ async function resolveApp(nuxt, app) {
6769
6761
  }
6770
6762
  }
6771
6763
  let middleware = [];
6772
- for (const config of reversedConfigs) {
6773
- const middlewareDir = (config.rootDir === nuxt.options.rootDir ? nuxt.options.dir : config.dir)?.middleware || "middleware";
6774
- const middlewareFiles = await resolveFiles(config.srcDir, [
6775
- `${middlewareDir}/*{${extensionGlob}}`,
6776
- `${middlewareDir}/*/index{${extensionGlob}}`
6764
+ for (const dirs of reversedLayerDirs) {
6765
+ const middlewareFiles = await resolveFiles(dirs.appMiddleware, [
6766
+ `*{${extensionGlob}}`,
6767
+ `*/index{${extensionGlob}}`
6777
6768
  ]);
6778
6769
  for (const file of middlewareFiles) {
6779
6770
  const name = getNameFromPath(file);
@@ -6784,15 +6775,17 @@ async function resolveApp(nuxt, app) {
6784
6775
  middleware.push({ name, path: file, global: hasSuffix(file, ".global") });
6785
6776
  }
6786
6777
  }
6778
+ const reversedLayers = nuxt.options._layers.slice().reverse();
6787
6779
  let plugins = [];
6788
- for (const config of reversedConfigs) {
6789
- const pluginDir = (config.rootDir === nuxt.options.rootDir ? nuxt.options.dir : config.dir)?.plugins || "plugins";
6780
+ for (let i = 0; i < reversedLayerDirs.length; i++) {
6781
+ const config = reversedLayers[i].config;
6782
+ const dirs = reversedLayerDirs[i];
6790
6783
  plugins.push(...[
6791
6784
  ...config.plugins || [],
6792
- ...config.srcDir ? await resolveFiles(config.srcDir, [
6793
- `${pluginDir}/*{${extensionGlob}}`,
6794
- `${pluginDir}/*/index{${extensionGlob}}`
6795
- ]) : []
6785
+ ...await resolveFiles(dirs.appPlugins, [
6786
+ `*{${extensionGlob}}`,
6787
+ `*/index{${extensionGlob}}`
6788
+ ])
6796
6789
  ].map((plugin) => normalizePlugin(plugin)));
6797
6790
  }
6798
6791
  for (const p of [...nuxt.options.plugins].reverse()) {
@@ -6804,8 +6797,8 @@ async function resolveApp(nuxt, app) {
6804
6797
  middleware = uniqueBy(await resolvePaths(nuxt, [...middleware].reverse(), "path"), "name").reverse();
6805
6798
  plugins = uniqueBy(await resolvePaths(nuxt, plugins, "src"), "src");
6806
6799
  const configs = [];
6807
- for (const config of layerConfigs) {
6808
- const appConfigPath = await findPath(resolve(config.srcDir, "app.config"));
6800
+ for (const dirs of layerDirs) {
6801
+ const appConfigPath = await findPath(join(dirs.app, "app.config"));
6809
6802
  if (appConfigPath) {
6810
6803
  configs.push(appConfigPath);
6811
6804
  }
@@ -7170,8 +7163,8 @@ async function build(nuxt) {
7170
7163
  nuxt.hook("builder:watch", async (event, relativePath) => {
7171
7164
  if (event === "add" || event === "unlink") {
7172
7165
  const path = resolve(nuxt.options.srcDir, relativePath);
7173
- for (const layer of nuxt.options._layers) {
7174
- const relativePath2 = relative(layer.config.srcDir || layer.cwd, path);
7166
+ for (const dirs of getLayerDirectories(nuxt)) {
7167
+ const relativePath2 = relative(dirs.app, path);
7175
7168
  if (/^app\./i.test(relativePath2)) {
7176
7169
  app.mainComponent = void 0;
7177
7170
  break;
@@ -7236,7 +7229,7 @@ async function watch(nuxt) {
7236
7229
  function createWatcher() {
7237
7230
  const nuxt = useNuxt();
7238
7231
  const isIgnored2 = createIsIgnored(nuxt);
7239
- const watcher = watch$1(nuxt.options._layers.map((i) => i.config.srcDir).filter(Boolean), {
7232
+ const watcher = watch$1(getLayerDirectories(nuxt).map((dirs) => dirs.app), {
7240
7233
  ...nuxt.options.watchers.chokidar,
7241
7234
  ignoreInitial: true,
7242
7235
  ignored: [isIgnored2, /[\\/]node_modules[\\/]/]
@@ -7368,12 +7361,11 @@ async function loadBuilder(nuxt, builder) {
7368
7361
  }
7369
7362
  function resolvePathsToWatch(nuxt, opts = {}) {
7370
7363
  const pathsToWatch = /* @__PURE__ */ new Set();
7371
- for (const layer of nuxt.options._layers) {
7372
- const dir = layer.config.srcDir || layer.cwd;
7373
- if (!dir || isIgnored(dir)) {
7364
+ for (const dirs of getLayerDirectories(nuxt)) {
7365
+ if (!dirs.app || isIgnored(dirs.app)) {
7374
7366
  continue;
7375
7367
  }
7376
- pathsToWatch.add(dir.replace(/[^/]$/, "$&/"));
7368
+ pathsToWatch.add(dirs.app);
7377
7369
  }
7378
7370
  for (const pattern of nuxt.options.watch) {
7379
7371
  if (typeof pattern !== "string") {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nuxt-nightly",
3
- "version": "4.1.0-29279319.00ede5ce",
3
+ "version": "4.1.0-29279382.7234ae61",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/nuxt/nuxt.git",
@@ -67,10 +67,10 @@
67
67
  "@nuxt/cli": "npm:@nuxt/cli-nightly@latest",
68
68
  "@nuxt/devalue": "^2.0.2",
69
69
  "@nuxt/devtools": "^2.6.3",
70
- "@nuxt/kit": "npm:@nuxt/kit-nightly@4.1.0-29279319.00ede5ce",
71
- "@nuxt/schema": "npm:@nuxt/schema-nightly@4.1.0-29279319.00ede5ce",
70
+ "@nuxt/kit": "npm:@nuxt/kit-nightly@4.1.0-29279382.7234ae61",
71
+ "@nuxt/schema": "npm:@nuxt/schema-nightly@4.1.0-29279382.7234ae61",
72
72
  "@nuxt/telemetry": "^2.6.6",
73
- "@nuxt/vite-builder": "npm:@nuxt/vite-builder-nightly@4.1.0-29279319.00ede5ce",
73
+ "@nuxt/vite-builder": "npm:@nuxt/vite-builder-nightly@4.1.0-29279382.7234ae61",
74
74
  "@unhead/vue": "^2.0.14",
75
75
  "@vue/shared": "^3.5.20",
76
76
  "c12": "^3.2.0",