diff --git a/docs/2.guide/2.directory-structure/3.app-config.md b/docs/2.guide/2.directory-structure/3.app-config.md index e614d359f7..d0f923c186 100644 --- a/docs/2.guide/2.directory-structure/3.app-config.md +++ b/docs/2.guide/2.directory-structure/3.app-config.md @@ -54,7 +54,7 @@ It is also possible to type app config manually. There are two possible things y `AppConfigInput` might be used by module authors who are declaring what valid _input_ options are when setting app config. This will not affect the type of `useAppConfig()`. ```ts [index.d.ts] -declare module '@nuxt/schema' { +declare module 'nuxt/schema' { interface AppConfigInput { /** Theme configuration */ theme?: { @@ -77,7 +77,7 @@ Be careful when typing `AppConfig` as you will overwrite the types Nuxt infers f :: ```ts [index.d.ts] -declare module '@nuxt/schema' { +declare module 'nuxt/schema' { interface AppConfig { // This will entirely replace the existing inferred `theme` property theme: { diff --git a/docs/2.guide/3.going-further/10.runtime-config.md b/docs/2.guide/3.going-further/10.runtime-config.md index 0107e8b6e4..ce70095ed9 100644 --- a/docs/2.guide/3.going-further/10.runtime-config.md +++ b/docs/2.guide/3.going-further/10.runtime-config.md @@ -147,7 +147,7 @@ Nuxt tries to automatically generate a typescript interface from provided runtim It is also possible to type your runtime config manually: ```ts [index.d.ts] -declare module '@nuxt/schema' { +declare module 'nuxt/schema' { interface RuntimeConfig { apiSecret: string public: { diff --git a/packages/nuxt/config.d.ts b/packages/nuxt/config.d.ts index 7c9ee3d0ce..8d844bad60 100644 --- a/packages/nuxt/config.d.ts +++ b/packages/nuxt/config.d.ts @@ -1,4 +1,4 @@ -import type { NuxtConfig } from '@nuxt/schema' -export { NuxtConfig } from '@nuxt/schema' +import type { NuxtConfig } from 'nuxt/schema' +export { NuxtConfig } from 'nuxt/schema' export declare function defineNuxtConfig(config: NuxtConfig): NuxtConfig diff --git a/packages/nuxt/package.json b/packages/nuxt/package.json index a06b0341db..031bcfdb6b 100644 --- a/packages/nuxt/package.json +++ b/packages/nuxt/package.json @@ -17,6 +17,10 @@ "import": "./config.mjs", "require": "./config.cjs" }, + "./schema": { + "types": "./schema.d.ts", + "import": "./schema.mjs" + }, "./app": "./dist/app/index.mjs", "./package.json": "./package.json" }, @@ -30,7 +34,8 @@ "bin", "types.d.ts", "dist", - "config.*" + "config.*", + "schema.*" ], "scripts": { "prepack": "unbuild" diff --git a/packages/nuxt/schema.d.ts b/packages/nuxt/schema.d.ts new file mode 100644 index 0000000000..b5c423e916 --- /dev/null +++ b/packages/nuxt/schema.d.ts @@ -0,0 +1 @@ +export * from '@nuxt/schema' diff --git a/packages/nuxt/schema.mjs b/packages/nuxt/schema.mjs new file mode 100644 index 0000000000..b5c423e916 --- /dev/null +++ b/packages/nuxt/schema.mjs @@ -0,0 +1 @@ +export * from '@nuxt/schema' diff --git a/packages/nuxt/src/app/components/nuxt-island.ts b/packages/nuxt/src/app/components/nuxt-island.ts index dcf2efa683..5956c3b104 100644 --- a/packages/nuxt/src/app/components/nuxt-island.ts +++ b/packages/nuxt/src/app/components/nuxt-island.ts @@ -1,10 +1,10 @@ import { defineComponent, createStaticVNode, computed, ref, watch } from 'vue' import { debounce } from 'perfect-debounce' import { hash } from 'ohash' -import type { MetaObject } from '@nuxt/schema' import { appendHeader } from 'h3' // eslint-disable-next-line import/no-restricted-paths import type { NuxtIslandResponse } from '../../core/runtime/nitro/renderer' +import type { MetaObject } from 'nuxt/schema' import { useNuxtApp } from '#app/nuxt' import { useRequestEvent } from '#app/composables/ssr' import { useHead } from '#app/composables/head' diff --git a/packages/nuxt/src/app/config.ts b/packages/nuxt/src/app/config.ts index 78fa433c8e..0c3dd95baa 100644 --- a/packages/nuxt/src/app/config.ts +++ b/packages/nuxt/src/app/config.ts @@ -1,6 +1,6 @@ -import type { AppConfig } from '@nuxt/schema' import { reactive } from 'vue' import { useNuxtApp } from './nuxt' +import type { AppConfig } from 'nuxt/schema' // @ts-ignore import __appConfig from '#build/app.config.mjs' diff --git a/packages/nuxt/src/app/nuxt.ts b/packages/nuxt/src/app/nuxt.ts index 3b3ad1f165..b2aa94333d 100644 --- a/packages/nuxt/src/app/nuxt.ts +++ b/packages/nuxt/src/app/nuxt.ts @@ -3,12 +3,12 @@ import { getCurrentInstance, reactive } from 'vue' import type { App, onErrorCaptured, VNode, Ref } from 'vue' import type { Hookable } from 'hookable' import { createHooks } from 'hookable' -import type { RuntimeConfig, AppConfigInput } from '@nuxt/schema' import { getContext } from 'unctx' import type { SSRContext } from 'vue-bundle-renderer/runtime' import type { H3Event } from 'h3' // eslint-disable-next-line import/no-restricted-paths import type { NuxtIslandContext } from '../core/runtime/nitro/renderer' +import type { RuntimeConfig, AppConfigInput } from 'nuxt/schema' const nuxtAppCtx = getContext('nuxt-app') diff --git a/packages/nuxt/src/components/loader.ts b/packages/nuxt/src/components/loader.ts index 62838e51e0..7372ac478b 100644 --- a/packages/nuxt/src/components/loader.ts +++ b/packages/nuxt/src/components/loader.ts @@ -1,12 +1,12 @@ import { pathToFileURL } from 'node:url' import { createUnplugin } from 'unplugin' import { parseQuery, parseURL } from 'ufo' -import type { Component, ComponentsOptions } from '@nuxt/schema' import { genDynamicImport, genImport } from 'knitwork' import MagicString from 'magic-string' import { pascalCase } from 'scule' import { resolve } from 'pathe' import { distDir } from '../dirs' +import type { Component, ComponentsOptions } from 'nuxt/schema' interface LoaderOptions { getComponents (): Component[] diff --git a/packages/nuxt/src/components/module.ts b/packages/nuxt/src/components/module.ts index 41d7a5a834..afc7047f43 100644 --- a/packages/nuxt/src/components/module.ts +++ b/packages/nuxt/src/components/module.ts @@ -1,12 +1,12 @@ import { statSync } from 'node:fs' import { relative, resolve } from 'pathe' import { defineNuxtModule, resolveAlias, addTemplate, addPluginTemplate, updateTemplates } from '@nuxt/kit' -import type { Component, ComponentsDir, ComponentsOptions } from '@nuxt/schema' import { distDir } from '../dirs' import { componentsPluginTemplate, componentsTemplate, componentsIslandsTemplate, componentsTypeTemplate } from './templates' import { scanComponents } from './scan' import { loaderPlugin } from './loader' import { TreeShakeTemplatePlugin } from './tree-shake' +import type { Component, ComponentsDir, ComponentsOptions } from 'nuxt/schema' const isPureObjectOrString = (val: any) => (!Array.isArray(val) && typeof val === 'object') || typeof val === 'string' const isDirectory = (p: string) => { try { return statSync(p).isDirectory() } catch (_e) { return false } } diff --git a/packages/nuxt/src/components/scan.ts b/packages/nuxt/src/components/scan.ts index 71f204521b..58d040c203 100644 --- a/packages/nuxt/src/components/scan.ts +++ b/packages/nuxt/src/components/scan.ts @@ -1,11 +1,11 @@ import { basename, extname, join, dirname, relative } from 'pathe' import { globby } from 'globby' import { pascalCase, splitByCase } from 'scule' -import type { Component, ComponentsDir } from '@nuxt/schema' import { isIgnored } from '@nuxt/kit' // eslint-disable-next-line vue/prefer-import-from-vue import { hyphenate } from '@vue/shared' import { withTrailingSlash } from 'ufo' +import type { Component, ComponentsDir } from 'nuxt/schema' /** * Scan the components inside different components folders diff --git a/packages/nuxt/src/components/templates.ts b/packages/nuxt/src/components/templates.ts index 8d56a14286..61e7a13dfc 100644 --- a/packages/nuxt/src/components/templates.ts +++ b/packages/nuxt/src/components/templates.ts @@ -1,6 +1,6 @@ import { isAbsolute, relative } from 'pathe' -import type { Component, Nuxt, NuxtPluginTemplate, NuxtTemplate } from '@nuxt/schema' import { genDynamicImport, genExport, genImport, genObjectFromRawEntries } from 'knitwork' +import type { Component, Nuxt, NuxtPluginTemplate, NuxtTemplate } from 'nuxt/schema' export interface ComponentsTemplateContext { nuxt: Nuxt diff --git a/packages/nuxt/src/components/tree-shake.ts b/packages/nuxt/src/components/tree-shake.ts index 874003d87d..7642d14e4b 100644 --- a/packages/nuxt/src/components/tree-shake.ts +++ b/packages/nuxt/src/components/tree-shake.ts @@ -5,9 +5,9 @@ import { walk } from 'estree-walker' import type { CallExpression, Property, Identifier, ImportDeclaration, MemberExpression, Literal, ReturnStatement, VariableDeclaration, ObjectExpression, Node } from 'estree' import { createUnplugin } from 'unplugin' import escapeStringRegexp from 'escape-string-regexp' -import type { Component } from '@nuxt/schema' import { resolve } from 'pathe' import { distDir } from '../dirs' +import type { Component } from 'nuxt/schema' interface TreeShakeTemplatePluginOptions { sourcemap?: boolean diff --git a/packages/nuxt/src/core/app.ts b/packages/nuxt/src/core/app.ts index de6bc971b7..fc0ce984b8 100644 --- a/packages/nuxt/src/core/app.ts +++ b/packages/nuxt/src/core/app.ts @@ -1,11 +1,11 @@ import { promises as fsp } from 'node:fs' import { dirname, resolve, join } from 'pathe' import { defu } from 'defu' -import type { Nuxt, NuxtApp, NuxtPlugin, NuxtTemplate, ResolvedNuxtTemplate } from '@nuxt/schema' import { findPath, resolveFiles, normalizePlugin, normalizeTemplate, compileTemplate, templateUtils, tryResolveModule, resolvePath, resolveAlias } from '@nuxt/kit' import * as defaultTemplates from './templates' import { getNameFromPath, hasSuffix, uniqueBy } from './utils' +import type { Nuxt, NuxtApp, NuxtPlugin, NuxtTemplate, ResolvedNuxtTemplate } from 'nuxt/schema' export function createApp (nuxt: Nuxt, options: Partial = {}): NuxtApp { return defu(options, { diff --git a/packages/nuxt/src/core/builder.ts b/packages/nuxt/src/core/builder.ts index 0fe023931d..7e0286102e 100644 --- a/packages/nuxt/src/core/builder.ts +++ b/packages/nuxt/src/core/builder.ts @@ -1,9 +1,9 @@ import chokidar from 'chokidar' -import type { Nuxt } from '@nuxt/schema' import { importModule, isIgnored } from '@nuxt/kit' import { debounce } from 'perfect-debounce' import { normalize } from 'pathe' import { createApp, generateApp as _generateApp } from './app' +import type { Nuxt } from 'nuxt/schema' export async function build (nuxt: Nuxt) { const app = createApp(nuxt) diff --git a/packages/nuxt/src/core/nitro.ts b/packages/nuxt/src/core/nitro.ts index 630c0d7ccb..424432219b 100644 --- a/packages/nuxt/src/core/nitro.ts +++ b/packages/nuxt/src/core/nitro.ts @@ -2,7 +2,6 @@ import { existsSync, promises as fsp } from 'node:fs' import { resolve, join } from 'pathe' import { createNitro, createDevServer, build, prepare, copyPublicAssets, writeTypes, scanHandlers, prerender } from 'nitropack' import type { NitroConfig, Nitro } from 'nitropack' -import type { Nuxt } from '@nuxt/schema' import { logger, resolvePath } from '@nuxt/kit' import escapeRE from 'escape-string-regexp' import { defu } from 'defu' @@ -12,6 +11,7 @@ import { createHeadCore } from 'unhead' import { renderSSRHead } from '@unhead/ssr' import { distDir } from '../dirs' import { ImportProtectionPlugin } from './plugins/import-protection' +import type { Nuxt } from 'nuxt/schema' export async function initNitro (nuxt: Nuxt & { _nitro?: Nitro }) { // Resolve config diff --git a/packages/nuxt/src/core/nuxt.ts b/packages/nuxt/src/core/nuxt.ts index 0e754ed886..9c6345ee70 100644 --- a/packages/nuxt/src/core/nuxt.ts +++ b/packages/nuxt/src/core/nuxt.ts @@ -1,6 +1,5 @@ import { join, normalize, resolve } from 'pathe' import { createHooks, createDebugger } from 'hookable' -import type { Nuxt, NuxtOptions, NuxtHooks } from '@nuxt/schema' import type { LoadNuxtOptions } from '@nuxt/kit' import { loadNuxtConfig, nuxtCtx, installModule, addComponent, addVitePlugin, addWebpackPlugin, tryResolveModule, addPlugin } from '@nuxt/kit' @@ -22,6 +21,7 @@ import { DevOnlyPlugin } from './plugins/dev-only' import { addModuleTranspiles } from './modules' import { initNitro } from './nitro' import schemaModule from './schema' +import type { Nuxt, NuxtOptions, NuxtHooks } from 'nuxt/schema' export function createNuxt (options: NuxtOptions): Nuxt { const hooks = createHooks() diff --git a/packages/nuxt/src/core/plugins/import-protection.ts b/packages/nuxt/src/core/plugins/import-protection.ts index 3c7f614df6..34a2191a57 100644 --- a/packages/nuxt/src/core/plugins/import-protection.ts +++ b/packages/nuxt/src/core/plugins/import-protection.ts @@ -2,8 +2,8 @@ import { createRequire } from 'node:module' import { createUnplugin } from 'unplugin' import { logger } from '@nuxt/kit' import { isAbsolute, join, relative } from 'pathe' -import type { Nuxt } from '@nuxt/schema' import escapeRE from 'escape-string-regexp' +import type { Nuxt } from 'nuxt/schema' const _require = createRequire(import.meta.url) diff --git a/packages/nuxt/src/core/plugins/unctx.ts b/packages/nuxt/src/core/plugins/unctx.ts index 420838e6b0..5cf7b748a5 100644 --- a/packages/nuxt/src/core/plugins/unctx.ts +++ b/packages/nuxt/src/core/plugins/unctx.ts @@ -1,7 +1,7 @@ -import type { Nuxt, NuxtApp } from '@nuxt/schema' import { normalize } from 'pathe' import { createTransformer } from 'unctx/transform' import { createUnplugin } from 'unplugin' +import type { Nuxt, NuxtApp } from 'nuxt/schema' const TRANSFORM_MARKER = '/* _processed_nuxt_unctx_transform */\n' diff --git a/packages/nuxt/src/core/schema.ts b/packages/nuxt/src/core/schema.ts index 44c6a830be..4544bfe920 100644 --- a/packages/nuxt/src/core/schema.ts +++ b/packages/nuxt/src/core/schema.ts @@ -152,7 +152,7 @@ export default defineNuxtModule({ ` export type CustomAppConfig = Exclude -declare module '@nuxt/schema' { +declare module 'nuxt/schema' { interface NuxtConfig extends NuxtCustomSchema {} interface NuxtOptions extends NuxtCustomSchema {} interface AppConfigInput extends CustomAppConfig {} diff --git a/packages/nuxt/src/core/templates.ts b/packages/nuxt/src/core/templates.ts index 5be03f5599..175135e61b 100644 --- a/packages/nuxt/src/core/templates.ts +++ b/packages/nuxt/src/core/templates.ts @@ -1,4 +1,3 @@ -import type { Nuxt, NuxtApp, NuxtTemplate } from '@nuxt/schema' import { genArrayFromRaw, genDynamicImport, genExport, genImport, genObjectFromRawEntries, genString, genSafeVariableName } from 'knitwork' import { isAbsolute, join, relative, resolve } from 'pathe' import { resolveSchema, generateTypes } from 'untyped' @@ -7,6 +6,7 @@ import { hash } from 'ohash' import { camelCase } from 'scule' import { resolvePath } from 'mlly' import { filename } from 'pathe/utils' +import type { Nuxt, NuxtApp, NuxtTemplate } from 'nuxt/schema' export interface TemplateContext { nuxt: Nuxt @@ -126,8 +126,8 @@ export const schemaTemplate: NuxtTemplate = { const modules = moduleInfo.map(meta => [genString(meta.configKey), getImportName(meta.importName)]) return [ - "import { NuxtModule } from '@nuxt/schema'", - "declare module '@nuxt/schema' {", + "import { NuxtModule } from 'nuxt/schema'", + "declare module 'nuxt/schema' {", ' interface NuxtConfig {', ...modules.map(([configKey, importName]) => ` [${configKey}]?: typeof ${genDynamicImport(importName, { wrapper: false })}.default extends NuxtModule ? Partial : Record` @@ -200,7 +200,7 @@ ${app.configs.map((id: string, index: number) => `import ${`cfg${index}`} from $ declare const inlineConfig = ${JSON.stringify(nuxt.options.appConfig, null, 2)} type ResolvedAppConfig = Defu `typeof cfg${index}`).join(', ')}]> -declare module '@nuxt/schema' { +declare module 'nuxt/schema' { interface AppConfig extends ResolvedAppConfig { } } ` diff --git a/packages/nuxt/src/head/runtime/composables.ts b/packages/nuxt/src/head/runtime/composables.ts index 068a685a38..6c3e21041c 100644 --- a/packages/nuxt/src/head/runtime/composables.ts +++ b/packages/nuxt/src/head/runtime/composables.ts @@ -1,6 +1,6 @@ import type { HeadEntryOptions, UseHeadInput, ActiveHeadEntry } from '@vueuse/head' -import type { HeadAugmentations } from '@nuxt/schema' import { useSeoMeta as _useSeoMeta } from '@vueuse/head' +import type { HeadAugmentations } from 'nuxt/schema' import { useNuxtApp } from '#app/nuxt' /** diff --git a/packages/nuxt/src/head/runtime/index.ts b/packages/nuxt/src/head/runtime/index.ts index a8f5fb9bed..b39ad2a547 100644 --- a/packages/nuxt/src/head/runtime/index.ts +++ b/packages/nuxt/src/head/runtime/index.ts @@ -1,5 +1,5 @@ import type { UseHeadInput } from '@vueuse/head' -import type { HeadAugmentations } from '@nuxt/schema' +import type { HeadAugmentations } from 'nuxt/schema' export * from './composables' diff --git a/packages/nuxt/src/imports/module.ts b/packages/nuxt/src/imports/module.ts index 8fad47af86..9d0333b24a 100644 --- a/packages/nuxt/src/imports/module.ts +++ b/packages/nuxt/src/imports/module.ts @@ -2,9 +2,9 @@ import { addVitePlugin, addWebpackPlugin, defineNuxtModule, addTemplate, resolve import { isAbsolute, join, relative, resolve, normalize } from 'pathe' import type { Import, Unimport } from 'unimport' import { createUnimport, scanDirExports } from 'unimport' -import type { ImportsOptions, ImportPresetWithDeprecation } from '@nuxt/schema' import { TransformPlugin } from './transform' import { defaultPresets } from './presets' +import type { ImportsOptions, ImportPresetWithDeprecation } from 'nuxt/schema' export default defineNuxtModule>({ meta: { diff --git a/packages/nuxt/src/imports/transform.ts b/packages/nuxt/src/imports/transform.ts index fb71e89f4d..ae353d5605 100644 --- a/packages/nuxt/src/imports/transform.ts +++ b/packages/nuxt/src/imports/transform.ts @@ -2,8 +2,8 @@ import { pathToFileURL } from 'node:url' import { createUnplugin } from 'unplugin' import { parseQuery, parseURL } from 'ufo' import type { Unimport } from 'unimport' -import type { ImportsOptions } from '@nuxt/schema' import { normalize } from 'pathe' +import type { ImportsOptions } from 'nuxt/schema' export const TransformPlugin = createUnplugin(({ ctx, options, sourcemap }: { ctx: Unimport, options: Partial, sourcemap?: boolean }) => { return { diff --git a/packages/nuxt/src/pages/module.ts b/packages/nuxt/src/pages/module.ts index a494277df7..ea8d13ae3d 100644 --- a/packages/nuxt/src/pages/module.ts +++ b/packages/nuxt/src/pages/module.ts @@ -3,12 +3,12 @@ import { defineNuxtModule, addTemplate, addPlugin, addVitePlugin, addWebpackPlug import { relative, resolve } from 'pathe' import { genString, genImport, genObjectFromRawEntries } from 'knitwork' import escapeRE from 'escape-string-regexp' -import type { NuxtApp, NuxtPage } from '@nuxt/schema' import { joinURL } from 'ufo' import { distDir } from '../dirs' import { resolvePagesRoutes, normalizeRoutes } from './utils' import type { PageMetaPluginOptions } from './page-meta' import { PageMetaPlugin } from './page-meta' +import type { NuxtApp, NuxtPage } from 'nuxt/schema' export default defineNuxtModule({ meta: { diff --git a/packages/nuxt/src/pages/runtime/router.options.ts b/packages/nuxt/src/pages/runtime/router.options.ts index 2837a95482..aeb7575485 100644 --- a/packages/nuxt/src/pages/runtime/router.options.ts +++ b/packages/nuxt/src/pages/runtime/router.options.ts @@ -1,6 +1,6 @@ -import type { RouterConfig } from '@nuxt/schema' import type { RouterScrollBehavior, RouteLocationNormalized } from 'vue-router' import { nextTick } from 'vue' +import type { RouterConfig } from 'nuxt/schema' import { useNuxtApp } from '#app/nuxt' // @ts-ignore import { appPageTransition as defaultPageTransition } from '#build/nuxt.config.mjs' diff --git a/packages/nuxt/src/pages/utils.ts b/packages/nuxt/src/pages/utils.ts index 54f64e5180..8065598b7a 100644 --- a/packages/nuxt/src/pages/utils.ts +++ b/packages/nuxt/src/pages/utils.ts @@ -1,12 +1,12 @@ import { extname, normalize, relative, resolve } from 'pathe' import { encodePath } from 'ufo' -import type { NuxtPage } from '@nuxt/schema' import { resolveFiles, useNuxt } from '@nuxt/kit' import { genImport, genDynamicImport, genArrayFromRaw, genSafeVariableName } from 'knitwork' import escapeRE from 'escape-string-regexp' import { filename } from 'pathe/utils' import { hash } from 'ohash' import { uniqueBy } from '../core/utils' +import type { NuxtPage } from 'nuxt/schema' enum SegmentParserState { initial, diff --git a/packages/nuxt/test/scan-components.test.ts b/packages/nuxt/test/scan-components.test.ts index d9fa5fbdf6..c3dc99aa2b 100644 --- a/packages/nuxt/test/scan-components.test.ts +++ b/packages/nuxt/test/scan-components.test.ts @@ -1,7 +1,7 @@ import { resolve } from 'node:path' -import type { ComponentsDir } from '@nuxt/schema' import { expect, it, vi } from 'vitest' import { scanComponents } from '../src/components/scan' +import type { ComponentsDir } from 'nuxt/schema' const fixtureDir = resolve(__dirname, 'fixture') const rFixture = (...p: string[]) => resolve(fixtureDir, ...p) diff --git a/packages/nuxt/types.d.ts b/packages/nuxt/types.d.ts index 408597d258..773e276a24 100644 --- a/packages/nuxt/types.d.ts +++ b/packages/nuxt/types.d.ts @@ -1,7 +1,7 @@ /// export * from './dist/index' -import type { SchemaDefinition } from '@nuxt/schema' +import type { SchemaDefinition } from 'nuxt/schema' declare global { const defineNuxtConfig: typeof import('nuxt/config')['defineNuxtConfig']