From dd73a8bcad8d61d8a1ed20cac7dfdacdb2fc3663 Mon Sep 17 00:00:00 2001 From: pooya parsa Date: Wed, 6 Oct 2021 14:31:52 +0200 Subject: [PATCH] feat: export `defineNuxtConfig` from `nuxt3` and `@nuxt/bridge` (#669) --- docs/content/7.bridge/2.migration.md | 11 +++++----- examples/async-data/nuxt.config.ts | 2 +- examples/hello-world/nuxt.config.ts | 2 +- examples/meta/nuxt.config.ts | 2 +- examples/pages/nuxt.config.ts | 2 +- examples/with-components/nuxt.config.ts | 2 +- examples/with-vite/nuxt.config.ts | 2 +- packages/bridge/module.cjs | 12 +++++++++++ packages/bridge/package.json | 3 ++- packages/bridge/src/module.ts | 27 +----------------------- packages/bridge/types.d.ts | 27 ++++++++++++++++++++++++ packages/kit/src/nuxt.ts | 14 ------------ packages/kit/src/types/config.ts | 18 ++++++---------- packages/nitro/types/index.d.ts | 10 ++------- packages/nuxt3/src/core/nuxt.ts | 6 +++++- packages/nuxt3/src/meta/runtime/types.ts | 4 ++-- playground/nuxt.config.ts | 2 +- test/fixtures/basic/nuxt.config.ts | 2 +- test/fixtures/bridge/nuxt.config.ts | 9 ++++---- 19 files changed, 75 insertions(+), 82 deletions(-) create mode 100644 packages/bridge/types.d.ts diff --git a/docs/content/7.bridge/2.migration.md b/docs/content/7.bridge/2.migration.md index e7fa4dec9b..366925a511 100644 --- a/docs/content/7.bridge/2.migration.md +++ b/docs/content/7.bridge/2.migration.md @@ -31,18 +31,17 @@ npm install -D @nuxt/bridge@npm:@nuxt/bridge-edge yarn add --dev @nuxt/bridge@npm:@nuxt/bridge-edge ``` -Add `@nuxt/bridge` to `buildModules` inside `nuxt.config`: +Update `nuxt.config` file: ```ts [nuxt.config.js] -export default { - buildModules: [ - '@nuxt/bridge' - ], +import { defineNuxtConfig } from '@nuxt/bridge' + +export default defineNuxtConfig({ bridge: { nitro: true, // vite: true } -} +}) ``` If you have a project with `target: 'static'`, update "build" script to use `nuxt generate` diff --git a/examples/async-data/nuxt.config.ts b/examples/async-data/nuxt.config.ts index e50dc842b0..04515cb687 100644 --- a/examples/async-data/nuxt.config.ts +++ b/examples/async-data/nuxt.config.ts @@ -1,4 +1,4 @@ -import { defineNuxtConfig } from '@nuxt/kit' +import { defineNuxtConfig } from 'nuxt3' export default defineNuxtConfig({ // vite: true diff --git a/examples/hello-world/nuxt.config.ts b/examples/hello-world/nuxt.config.ts index 854fc6bfc5..a3e4d68096 100644 --- a/examples/hello-world/nuxt.config.ts +++ b/examples/hello-world/nuxt.config.ts @@ -1,4 +1,4 @@ -import { defineNuxtConfig } from '@nuxt/kit' +import { defineNuxtConfig } from 'nuxt3' export default defineNuxtConfig({ }) diff --git a/examples/meta/nuxt.config.ts b/examples/meta/nuxt.config.ts index 854fc6bfc5..a3e4d68096 100644 --- a/examples/meta/nuxt.config.ts +++ b/examples/meta/nuxt.config.ts @@ -1,4 +1,4 @@ -import { defineNuxtConfig } from '@nuxt/kit' +import { defineNuxtConfig } from 'nuxt3' export default defineNuxtConfig({ }) diff --git a/examples/pages/nuxt.config.ts b/examples/pages/nuxt.config.ts index 854fc6bfc5..a3e4d68096 100644 --- a/examples/pages/nuxt.config.ts +++ b/examples/pages/nuxt.config.ts @@ -1,4 +1,4 @@ -import { defineNuxtConfig } from '@nuxt/kit' +import { defineNuxtConfig } from 'nuxt3' export default defineNuxtConfig({ }) diff --git a/examples/with-components/nuxt.config.ts b/examples/with-components/nuxt.config.ts index 15046bd316..e50d851765 100644 --- a/examples/with-components/nuxt.config.ts +++ b/examples/with-components/nuxt.config.ts @@ -1,4 +1,4 @@ -import { defineNuxtConfig } from '@nuxt/kit' +import { defineNuxtConfig } from 'nuxt3' export default defineNuxtConfig({ vite: false diff --git a/examples/with-vite/nuxt.config.ts b/examples/with-vite/nuxt.config.ts index 70d274d93d..760758f8b7 100644 --- a/examples/with-vite/nuxt.config.ts +++ b/examples/with-vite/nuxt.config.ts @@ -1,4 +1,4 @@ -import { defineNuxtConfig } from '@nuxt/kit' +import { defineNuxtConfig } from 'nuxt3' export default defineNuxtConfig({ vite: true diff --git a/packages/bridge/module.cjs b/packages/bridge/module.cjs index 4aeb7eb3b2..37008dead7 100644 --- a/packages/bridge/module.cjs +++ b/packages/bridge/module.cjs @@ -2,3 +2,15 @@ module.exports = function (...args) { return import('./dist/module.mjs').then(m => m.default.call(this, ...args)) } + +module.exports.defineNuxtConfig = (config = {}) => { + if (config.bridge !== false) { + if (!config.buildModules) { + config.buildModules = [] + } + if (!config.buildModules.find(m => m === '@nuxt/bridge')) { + config.buildModules.push('@nuxt/bridge') + } + } + return config +} diff --git a/packages/bridge/package.json b/packages/bridge/package.json index f17f512ef7..b08b2f626b 100644 --- a/packages/bridge/package.json +++ b/packages/bridge/package.json @@ -5,9 +5,10 @@ "license": "MIT", "type": "module", "main": "./module.cjs", - "types": "./dist/module.d.ts", + "types": "./types.d.ts", "files": [ "module.cjs", + "types.d.ts", "dist" ], "scripts": { diff --git a/packages/bridge/src/module.ts b/packages/bridge/src/module.ts index ef843c93b9..2a558f2b46 100644 --- a/packages/bridge/src/module.ts +++ b/packages/bridge/src/module.ts @@ -1,5 +1,6 @@ import { createRequire } from 'module' import { defineNuxtModule, installModule, checkNuxtCompatibilityIssues } from '@nuxt/kit' +import type { BridgeConfig } from '../types' import { setupNitroBridge } from './nitro' import { setupAppBridge } from './app' import { setupCAPIBridge } from './capi' @@ -7,19 +8,6 @@ import { setupBetterResolve } from './resolve' import { setupGlobalImports } from './global-imports' import { setupTypescript } from './typescript' -export interface BridgeConfig { - nitro: boolean - vite: boolean - app: boolean | {} - capi: boolean | {} - globalImports: boolean - constraints: boolean - postcss8: boolean - swc: boolean - resolve: boolean - typescript: boolean -} - export default defineNuxtModule({ name: 'nuxt-bridge', configKey: 'bridge', @@ -80,16 +68,3 @@ export default defineNuxtModule({ } } }) - -declare module '@nuxt/kit' { - interface NuxtConfig { - bridge?: Partial - } -} - -// @ts-ignore -declare module '@nuxt/types' { - interface NuxtConfig { - bridge?: Partial - } -} diff --git a/packages/bridge/types.d.ts b/packages/bridge/types.d.ts new file mode 100644 index 0000000000..b0f4602a5a --- /dev/null +++ b/packages/bridge/types.d.ts @@ -0,0 +1,27 @@ +import type { NuxtConfig as _NuxtConfig } from '@nuxt/kit' + +export interface BridgeConfig { + nitro: boolean + vite: boolean + app: boolean | {} + capi: boolean | {} + globalImports: boolean + constraints: boolean + postcss8: boolean + swc: boolean + resolve: boolean + typescript: boolean +} + +// TODO: Also inherit from @nuxt/types.NuxtConfig for legacy type compat +export interface NuxtConfig extends _NuxtConfig { + bridge?: Partial | false +} + +declare module '@nuxt/kit' { + interface ConfigSchema { + bridge: BridgeConfig + } +} + +export declare function defineNuxtConfig(config: NuxtConfig): NuxtConfig diff --git a/packages/kit/src/nuxt.ts b/packages/kit/src/nuxt.ts index d540665216..bfff0fe64c 100644 --- a/packages/kit/src/nuxt.ts +++ b/packages/kit/src/nuxt.ts @@ -17,20 +17,6 @@ export const nuxtCtx = getContext('nuxt') */ export const useNuxt = nuxtCtx.use -/** - * This helper serves to add the correct typings for your `nuxt.config.js`. - * - * @example - * ```ts - * import { defineNuxtConfig } from '@nuxt/kit' - * export default defineNuxtConfig({ - * // your Nuxt config - * }) - */ -export function defineNuxtConfig (config: NuxtConfig) { - return config -} - export interface LoadNuxtOptions extends LoadNuxtConfigOptions { rootDir: string dev?: boolean diff --git a/packages/kit/src/types/config.ts b/packages/kit/src/types/config.ts index 84ec11890d..c3695ad301 100644 --- a/packages/kit/src/types/config.ts +++ b/packages/kit/src/types/config.ts @@ -1,23 +1,19 @@ -import { ConfigSchema } from '../../schema/config' +import { ConfigSchema as _ConfigSchema } from '../../schema/config' import { ModuleInstallOptions } from './module' import { NuxtHooks } from './hooks' -export interface TypedConfigSchema extends ConfigSchema { +export interface ConfigSchema extends _ConfigSchema { hooks: NuxtHooks, modules: ModuleInstallOptions[] buildModules: ModuleInstallOptions[] - - /** - * Enable vite mode - * - * @default false - */ - vite: boolean | import('vite').InlineConfig [key: string]: any + + // TODO: Move to schema when untyped supports type annotation + vite: boolean | import('vite').InlineConfig } -export interface NuxtOptions extends TypedConfigSchema { } +export interface NuxtOptions extends ConfigSchema { } type DeepPartial = { [P in keyof T]?: DeepPartial | T[P] } -export interface NuxtConfig extends DeepPartial { } +export interface NuxtConfig extends DeepPartial { } diff --git a/packages/nitro/types/index.d.ts b/packages/nitro/types/index.d.ts index 0784c94898..30743bebb4 100644 --- a/packages/nitro/types/index.d.ts +++ b/packages/nitro/types/index.d.ts @@ -2,14 +2,8 @@ import './shims' import { NitroInput } from '../dist' declare module '@nuxt/kit' { - interface NuxtConfig { - nitro?: NitroInput - } -} - -declare module '@nuxt/types' { - interface NuxtConfig { - nitro?: NitroInput + interface ConfigSchema { + nitro: NitroInput } } diff --git a/packages/nuxt3/src/core/nuxt.ts b/packages/nuxt3/src/core/nuxt.ts index eb9944dd6f..229d2752a0 100644 --- a/packages/nuxt3/src/core/nuxt.ts +++ b/packages/nuxt3/src/core/nuxt.ts @@ -1,6 +1,6 @@ import { resolve } from 'pathe' import { createHooks } from 'hookable' -import { loadNuxtConfig, LoadNuxtOptions, Nuxt, NuxtOptions, nuxtCtx, installModule, ModuleContainer, NuxtHooks } from '@nuxt/kit' +import { loadNuxtConfig, LoadNuxtOptions, Nuxt, NuxtOptions, NuxtConfig, nuxtCtx, installModule, ModuleContainer, NuxtHooks } from '@nuxt/kit' import pagesModule from '../pages/module' import metaModule from '../meta/module' import componentsModule from '../components/module' @@ -72,3 +72,7 @@ export async function loadNuxt (opts: LoadNuxtOptions): Promise { return nuxt } + +export function defineNuxtConfig (config: NuxtConfig): NuxtConfig { + return config +} diff --git a/packages/nuxt3/src/meta/runtime/types.ts b/packages/nuxt3/src/meta/runtime/types.ts index 3b2c4b61ba..a4f2a3eeb5 100644 --- a/packages/nuxt3/src/meta/runtime/types.ts +++ b/packages/nuxt3/src/meta/runtime/types.ts @@ -15,7 +15,7 @@ export interface MetaObject extends Record { } declare module '@nuxt/kit' { - interface NuxtConfig { - meta?: MetaObject, + interface ConfigSchema { + meta: MetaObject, } } diff --git a/playground/nuxt.config.ts b/playground/nuxt.config.ts index 854fc6bfc5..a3e4d68096 100644 --- a/playground/nuxt.config.ts +++ b/playground/nuxt.config.ts @@ -1,4 +1,4 @@ -import { defineNuxtConfig } from '@nuxt/kit' +import { defineNuxtConfig } from 'nuxt3' export default defineNuxtConfig({ }) diff --git a/test/fixtures/basic/nuxt.config.ts b/test/fixtures/basic/nuxt.config.ts index 40da3a3407..7a1345f48c 100644 --- a/test/fixtures/basic/nuxt.config.ts +++ b/test/fixtures/basic/nuxt.config.ts @@ -1,4 +1,4 @@ -import { defineNuxtConfig } from '@nuxt/kit' +import { defineNuxtConfig } from 'nuxt3' export default defineNuxtConfig({ buildDir: process.env.NITRO_BUILD_DIR, diff --git a/test/fixtures/bridge/nuxt.config.ts b/test/fixtures/bridge/nuxt.config.ts index 11b1c51a20..2edb0a94af 100644 --- a/test/fixtures/bridge/nuxt.config.ts +++ b/test/fixtures/bridge/nuxt.config.ts @@ -1,11 +1,10 @@ +import { defineNuxtConfig } from '@nuxt/bridge' + // @ts-ignore global.__NUXT_PREPATHS__ = (global.__NUXT_PREPATHS__ || []).concat(__dirname) -export default { +export default defineNuxtConfig({ components: true, - buildModules: [ - '@nuxt/bridge' - ], serverMiddleware: [ { handle (req, _res, next) { @@ -19,4 +18,4 @@ export default { nitro: { output: { dir: process.env.NITRO_OUTPUT_DIR } } -} +})