diff --git a/packages/kit/package.json b/packages/kit/package.json index 2447c1f472..d383c5c02c 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -27,7 +27,6 @@ "test:attw": "attw --pack" }, "dependencies": { - "@nuxt/schema": "workspace:*", "c12": "^2.0.1", "consola": "^3.4.0", "defu": "^6.1.4", @@ -50,6 +49,7 @@ "untyped": "^1.5.2" }, "devDependencies": { + "@nuxt/schema": "workspace:*", "@rspack/core": "1.2.2", "@types/lodash-es": "4.17.12", "@types/semver": "7.5.8", diff --git a/packages/kit/src/loader/config.ts b/packages/kit/src/loader/config.ts index 86a01a5c70..c8eeb979e2 100644 --- a/packages/kit/src/loader/config.ts +++ b/packages/kit/src/loader/config.ts @@ -1,27 +1,21 @@ import { existsSync } from 'node:fs' +import { pathToFileURL } from 'node:url' import type { JSValue } from 'untyped' import { applyDefaults } from 'untyped' import type { ConfigLayer, ConfigLayerMeta, LoadConfigOptions } from 'c12' import { loadConfig } from 'c12' import type { NuxtConfig, NuxtOptions } from '@nuxt/schema' -import { NuxtConfigSchema } from '@nuxt/schema' import { globby } from 'globby' import defu from 'defu' import { join } from 'pathe' +import { isWindows } from 'std-env' +import { tryResolveModule } from '../internal/esm' export interface LoadNuxtConfigOptions extends Omit, 'overrides'> { // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type overrides?: Exclude['overrides'], Promise | Function> } -const layerSchemaKeys = ['future', 'srcDir', 'rootDir', 'serverDir', 'dir'] -const layerSchema = Object.create(null) -for (const key of layerSchemaKeys) { - if (key in NuxtConfigSchema) { - layerSchema[key] = NuxtConfigSchema[key] - } -} - export async function loadNuxtConfig (opts: LoadNuxtConfigOptions): Promise { // Automatically detect and import layers from `~~/layers/` directory opts.overrides = defu(opts.overrides, { @@ -54,6 +48,16 @@ export async function loadNuxtConfig (opts: LoadNuxtConfigOptions): Promise[] = [] const processedLayers = new Set() for (const layer of layers) { @@ -89,3 +93,13 @@ export async function loadNuxtConfig (opts: LoadNuxtConfigOptions): Promise) as unknown as NuxtOptions } + +async function loadNuxtSchema (cwd: string) { + const paths = [cwd] + const nuxtPath = await tryResolveModule('nuxt', cwd) ?? await tryResolveModule('nuxt-nightly', cwd) + if (nuxtPath) { + paths.unshift(nuxtPath) + } + const schemaPath = await tryResolveModule('@nuxt/schema', paths) ?? '@nuxt/schema' + return await import(isWindows ? pathToFileURL(schemaPath).href : schemaPath).then(r => r.NuxtConfigSchema) +} diff --git a/packages/nuxt/src/core/nuxt.ts b/packages/nuxt/src/core/nuxt.ts index f1f4e855dc..6c11c3384b 100644 --- a/packages/nuxt/src/core/nuxt.ts +++ b/packages/nuxt/src/core/nuxt.ts @@ -81,7 +81,6 @@ const nightlies = { export const keyDependencies = [ '@nuxt/kit', - '@nuxt/schema', ] let warnedAboutCompatDate = false diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fa5fd14acf..e6952435e6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -230,9 +230,6 @@ importers: packages/kit: dependencies: - '@nuxt/schema': - specifier: workspace:* - version: link:../schema c12: specifier: ^2.0.1 version: 2.0.1(magicast@0.3.5) @@ -294,6 +291,9 @@ importers: specifier: ^1.5.2 version: 1.5.2 devDependencies: + '@nuxt/schema': + specifier: workspace:* + version: link:../schema '@rspack/core': specifier: 1.2.2 version: 1.2.2