From b08fb767cfb0fe65d9e3726b7bf108785e7ec97e Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Thu, 15 Sep 2022 14:39:58 +0200 Subject: [PATCH 1/8] feat(kit): `useNitro()` utility --- packages/kit/src/index.ts | 2 +- packages/kit/src/module/container.ts | 2 +- packages/kit/src/{server.ts => nitro.ts} | 23 ++++++++++++++++++++++- packages/nuxt/src/core/nitro.ts | 3 ++- packages/schema/src/types/nuxt.ts | 2 ++ playground/nuxt.config.ts | 10 +++++++++- 6 files changed, 37 insertions(+), 5 deletions(-) rename packages/kit/src/{server.ts => nitro.ts} (69%) diff --git a/packages/kit/src/index.ts b/packages/kit/src/index.ts index 7fb609a8424..e5f991dee8f 100644 --- a/packages/kit/src/index.ts +++ b/packages/kit/src/index.ts @@ -18,7 +18,7 @@ export * from './layout' export * from './pages' export * from './plugin' export * from './resolve' -export * from './server' +export * from './nitro' export * from './template' export * from './logger' diff --git a/packages/kit/src/module/container.ts b/packages/kit/src/module/container.ts index 9d5eecfb6a9..5f806f85071 100644 --- a/packages/kit/src/module/container.ts +++ b/packages/kit/src/module/container.ts @@ -3,7 +3,7 @@ import type { Nuxt, ModuleContainer } from '@nuxt/schema' import { chainFn } from '../internal/task' import { addTemplate } from '../template' import { addLayout } from '../layout' -import { addServerMiddleware } from '../server' +import { addServerMiddleware } from '../nitro' import { isNuxt2 } from '../compatibility' import { addPluginTemplate } from '../plugin' import { useNuxt } from '../context' diff --git a/packages/kit/src/server.ts b/packages/kit/src/nitro.ts similarity index 69% rename from packages/kit/src/server.ts rename to packages/kit/src/nitro.ts index ba2a031f118..43f3c3d6d0c 100644 --- a/packages/kit/src/server.ts +++ b/packages/kit/src/nitro.ts @@ -1,5 +1,5 @@ import type { Middleware } from 'h3' -import type { NitroEventHandler, NitroDevEventHandler } from 'nitropack' +import type { NitroEventHandler, NitroDevEventHandler, Nitro } from 'nitropack' import { useNuxt } from './context' export interface LegacyServerMiddleware { @@ -46,3 +46,24 @@ export function addServerHandler (handler: NitroEventHandler) { export function addDevServerHandler (handler: NitroDevEventHandler) { useNuxt().options.devServerHandlers.push(handler) } + +/** + * Access to nitro instance + * + * **Note:** You can use useNitro() You can call `useNitro()` only after `ready` hook. + * + * @example + * + * ```ts + * nuxt.hook('ready', () => { + * console.log(useNitro()) + * }) + * ``` + */ +export function useNitro (): Nitro { + const nuxt = useNuxt() + if (!nuxt._nitro) { + throw new Error('Nitro is not initialized yet. You can call `useNitro()` only after `ready` hook.') + } + return nuxt._nitro +} diff --git a/packages/nuxt/src/core/nitro.ts b/packages/nuxt/src/core/nitro.ts index 99a0a4086b5..19b1f51fb45 100644 --- a/packages/nuxt/src/core/nitro.ts +++ b/packages/nuxt/src/core/nitro.ts @@ -134,7 +134,8 @@ export async function initNitro (nuxt: Nuxt) { // Init nitro const nitro = await createNitro(nitroConfig) - // Expose nitro to modules + // Expose nitro to modules and kit + nuxt._nitro = nitro await nuxt.callHook('nitro:init', nitro) // Connect vfs storages diff --git a/packages/schema/src/types/nuxt.ts b/packages/schema/src/types/nuxt.ts index 8de75ae52ec..95e6dd3ce64 100644 --- a/packages/schema/src/types/nuxt.ts +++ b/packages/schema/src/types/nuxt.ts @@ -1,5 +1,6 @@ import type { Hookable } from 'hookable' import type { Ignore } from 'ignore' +import type { Nitro } from 'nitropack' import type { NuxtHooks, NuxtLayout, NuxtMiddleware } from './hooks' import type { NuxtOptions } from './config' @@ -7,6 +8,7 @@ export interface Nuxt { // Private fields. _version: string _ignore?: Ignore + _nitro?: Nitro /** The resolved Nuxt configuration. */ options: NuxtOptions diff --git a/playground/nuxt.config.ts b/playground/nuxt.config.ts index 896312f044e..ac92a7cb99f 100644 --- a/playground/nuxt.config.ts +++ b/playground/nuxt.config.ts @@ -1,3 +1,11 @@ -export default defineNuxtConfig({ +import { useNitro } from '@nuxt/kit' +export default defineNuxtConfig({ + modules: [ + (_, nuxt) => { + nuxt.hook('ready', () => { + console.log(useNitro()) + }) + } + ] }) From 335b754e17dd22c962d017192e78fe0ca95fdc95 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Thu, 15 Sep 2022 14:44:31 +0200 Subject: [PATCH 2/8] add note about modifications --- packages/kit/src/nitro.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/kit/src/nitro.ts b/packages/kit/src/nitro.ts index 43f3c3d6d0c..6cc23c1ddee 100644 --- a/packages/kit/src/nitro.ts +++ b/packages/kit/src/nitro.ts @@ -52,6 +52,8 @@ export function addDevServerHandler (handler: NitroDevEventHandler) { * * **Note:** You can use useNitro() You can call `useNitro()` only after `ready` hook. * + * **Note:** Moditifcations to nitro instance configuration are not reflected. + * * @example * * ```ts From b780c833f33d265e6508abf2dd8e3ea7bf1e190c Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Thu, 15 Sep 2022 14:45:14 +0200 Subject: [PATCH 3/8] add api docs --- docs/content/3.api/4.advanced/2.kit.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/content/3.api/4.advanced/2.kit.md b/docs/content/3.api/4.advanced/2.kit.md index fa45bd981b8..df28687ff6a 100644 --- a/docs/content/3.api/4.advanced/2.kit.md +++ b/docs/content/3.api/4.advanced/2.kit.md @@ -63,13 +63,14 @@ - `addTemplate(templateOptions)` -### Server +### Nitro -[source code](https://github.com/nuxt/framework/blob/main/packages/kit/src/server.ts) +[source code](https://github.com/nuxt/framework/blob/main/packages/kit/src/nitro.ts) - ~~`addServerMiddleware(serverMiddleware)`~~ - `addServerHandler (handler)` - `addDevServerHandler (handler)` +- `useNitro()` (only usable after `ready` hook) ### Resolving From 639100d3e8a1150ec641c9e9761de307bb216106 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Thu, 15 Sep 2022 14:48:41 +0200 Subject: [PATCH 4/8] small doc tweak --- packages/kit/src/nitro.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/kit/src/nitro.ts b/packages/kit/src/nitro.ts index 6cc23c1ddee..40599306281 100644 --- a/packages/kit/src/nitro.ts +++ b/packages/kit/src/nitro.ts @@ -48,11 +48,11 @@ export function addDevServerHandler (handler: NitroDevEventHandler) { } /** - * Access to nitro instance + * Access to the Nitro instance * - * **Note:** You can use useNitro() You can call `useNitro()` only after `ready` hook. + * **Note:** You can call `useNitro()` only after `ready` hook. * - * **Note:** Moditifcations to nitro instance configuration are not reflected. + * **Note:** Moditifcations to the Nitro instance configuration are not reflected. * * @example * From 3919b27b4569dfad50cc9db0e3cf91a66718eb3e Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Thu, 15 Sep 2022 14:49:25 +0200 Subject: [PATCH 5/8] revert playground --- playground/nuxt.config.ts | 9 --------- 1 file changed, 9 deletions(-) diff --git a/playground/nuxt.config.ts b/playground/nuxt.config.ts index ac92a7cb99f..fc5628ebc36 100644 --- a/playground/nuxt.config.ts +++ b/playground/nuxt.config.ts @@ -1,11 +1,2 @@ -import { useNitro } from '@nuxt/kit' - export default defineNuxtConfig({ - modules: [ - (_, nuxt) => { - nuxt.hook('ready', () => { - console.log(useNitro()) - }) - } - ] }) From e8508495865d78fcd1d61571a235d1eacdf02291 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Thu, 15 Sep 2022 14:49:39 +0200 Subject: [PATCH 6/8] revert --- playground/nuxt.config.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/playground/nuxt.config.ts b/playground/nuxt.config.ts index fc5628ebc36..896312f044e 100644 --- a/playground/nuxt.config.ts +++ b/playground/nuxt.config.ts @@ -1,2 +1,3 @@ export default defineNuxtConfig({ + }) From b95a8f0694a538b71e9a617f65edc156074e7a8e Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Thu, 15 Sep 2022 14:56:11 +0200 Subject: [PATCH 7/8] avoid exposing _nitro to schema --- packages/kit/src/nitro.ts | 4 ++-- packages/nuxt/src/core/nitro.ts | 4 ++-- packages/schema/src/types/nuxt.ts | 2 -- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/kit/src/nitro.ts b/packages/kit/src/nitro.ts index 40599306281..7dde1ee8f55 100644 --- a/packages/kit/src/nitro.ts +++ b/packages/kit/src/nitro.ts @@ -64,8 +64,8 @@ export function addDevServerHandler (handler: NitroDevEventHandler) { */ export function useNitro (): Nitro { const nuxt = useNuxt() - if (!nuxt._nitro) { + if (!(nuxt as any)._nitro) { throw new Error('Nitro is not initialized yet. You can call `useNitro()` only after `ready` hook.') } - return nuxt._nitro + return (nuxt as any)._nitro } diff --git a/packages/nuxt/src/core/nitro.ts b/packages/nuxt/src/core/nitro.ts index 19b1f51fb45..c0fa0db77b9 100644 --- a/packages/nuxt/src/core/nitro.ts +++ b/packages/nuxt/src/core/nitro.ts @@ -1,6 +1,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 { createNitro, createDevServer, build, prepare, copyPublicAssets, writeTypes, scanHandlers, prerender, Nitro } from 'nitropack' import type { NitroEventHandler, NitroDevEventHandler, NitroConfig } from 'nitropack' import type { Nuxt } from '@nuxt/schema' import { resolvePath } from '@nuxt/kit' @@ -10,7 +10,7 @@ import { toEventHandler, dynamicEventHandler } from 'h3' import { distDir } from '../dirs' import { ImportProtectionPlugin } from './plugins/import-protection' -export async function initNitro (nuxt: Nuxt) { +export async function initNitro (nuxt: Nuxt & { _nitro?: Nitro }) { // Resolve handlers const { handlers, devHandlers } = await resolveHandlers(nuxt) diff --git a/packages/schema/src/types/nuxt.ts b/packages/schema/src/types/nuxt.ts index 95e6dd3ce64..8de75ae52ec 100644 --- a/packages/schema/src/types/nuxt.ts +++ b/packages/schema/src/types/nuxt.ts @@ -1,6 +1,5 @@ import type { Hookable } from 'hookable' import type { Ignore } from 'ignore' -import type { Nitro } from 'nitropack' import type { NuxtHooks, NuxtLayout, NuxtMiddleware } from './hooks' import type { NuxtOptions } from './config' @@ -8,7 +7,6 @@ export interface Nuxt { // Private fields. _version: string _ignore?: Ignore - _nitro?: Nitro /** The resolved Nuxt configuration. */ options: NuxtOptions From ff5fbc3cabd847db966419cecd1f5a971fade753 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Thu, 15 Sep 2022 14:57:59 +0200 Subject: [PATCH 8/8] update docs --- packages/kit/src/nitro.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kit/src/nitro.ts b/packages/kit/src/nitro.ts index 7dde1ee8f55..a4fe041d016 100644 --- a/packages/kit/src/nitro.ts +++ b/packages/kit/src/nitro.ts @@ -52,7 +52,7 @@ export function addDevServerHandler (handler: NitroDevEventHandler) { * * **Note:** You can call `useNitro()` only after `ready` hook. * - * **Note:** Moditifcations to the Nitro instance configuration are not reflected. + * **Note:** Changes to the Nitro instance configuration are not applied. * * @example *