From 6dcff8e428279ae82c50e25af428a6a1338343e1 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Sat, 15 Oct 2022 11:56:15 +0100 Subject: [PATCH] feat(nuxt): add hook debug mode (#7690) --- packages/nuxt/package.json | 2 +- packages/nuxt/src/app/plugins/debug.ts | 6 ++++++ packages/nuxt/src/core/nitro.ts | 1 + packages/nuxt/src/core/nuxt.ts | 11 ++++++++++- packages/schema/src/config/_common.ts | 9 ++++++--- yarn.lock | 9 ++++++++- 6 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 packages/nuxt/src/app/plugins/debug.ts diff --git a/packages/nuxt/package.json b/packages/nuxt/package.json index b2daa818662..d706549f218 100644 --- a/packages/nuxt/package.json +++ b/packages/nuxt/package.json @@ -54,7 +54,7 @@ "globby": "^13.1.2", "h3": "^0.7.21", "hash-sum": "^2.0.0", - "hookable": "^5.4.0", + "hookable": "^5.4.1", "knitwork": "^0.1.2", "magic-string": "^0.26.7", "mlly": "^0.5.16", diff --git a/packages/nuxt/src/app/plugins/debug.ts b/packages/nuxt/src/app/plugins/debug.ts new file mode 100644 index 00000000000..e0c67f2b863 --- /dev/null +++ b/packages/nuxt/src/app/plugins/debug.ts @@ -0,0 +1,6 @@ +import { createDebugger } from 'hookable' +import { defineNuxtPlugin } from '#app' + +export default defineNuxtPlugin((nuxtApp) => { + createDebugger(nuxtApp.hooks, { tag: 'nuxt-app' }) +}) diff --git a/packages/nuxt/src/core/nitro.ts b/packages/nuxt/src/core/nitro.ts index 7273aadacd3..051b87dbfaf 100644 --- a/packages/nuxt/src/core/nitro.ts +++ b/packages/nuxt/src/core/nitro.ts @@ -17,6 +17,7 @@ export async function initNitro (nuxt: Nuxt & { _nitro?: Nitro }) { // Resolve config const _nitroConfig = ((nuxt.options as any).nitro || {}) as NitroConfig const nitroConfig: NitroConfig = defu(_nitroConfig, { + debug: nuxt.options.debug, rootDir: nuxt.options.rootDir, workspaceDir: nuxt.options.workspaceDir, srcDir: nuxt.options.serverDir, diff --git a/packages/nuxt/src/core/nuxt.ts b/packages/nuxt/src/core/nuxt.ts index 81305b82691..801311d62cc 100644 --- a/packages/nuxt/src/core/nuxt.ts +++ b/packages/nuxt/src/core/nuxt.ts @@ -1,5 +1,5 @@ import { join, normalize, resolve } from 'pathe' -import { createHooks } from 'hookable' +import { createHooks, createDebugger } from 'hookable' import type { Nuxt, NuxtOptions, NuxtConfig, ModuleContainer, NuxtHooks } from '@nuxt/schema' import { loadNuxtConfig, LoadNuxtOptions, nuxtCtx, installModule, addComponent, addVitePlugin, addWebpackPlugin, tryResolveModule, addPlugin } from '@nuxt/kit' // Temporary until finding better placement @@ -183,6 +183,11 @@ async function initNuxt (nuxt: Nuxt) { addPlugin(resolve(nuxt.options.appDir, 'plugins/preload.server')) } + // Add nuxt app debugger + if (nuxt.options.debug) { + addPlugin(resolve(nuxt.options.appDir, 'plugins/debug')) + } + for (const m of modulesToInstall) { if (Array.isArray(m)) { await installModule(m[0], m[1]) @@ -229,6 +234,10 @@ export async function loadNuxt (opts: LoadNuxtOptions): Promise { const nuxt = createNuxt(options) + if (nuxt.options.debug) { + createDebugger(nuxt.hooks, { tag: 'nuxt' }) + } + if (opts.ready !== false) { await nuxt.ready() } diff --git a/packages/schema/src/config/_common.ts b/packages/schema/src/config/_common.ts index ed043c8d541..2aa4b4d882c 100644 --- a/packages/schema/src/config/_common.ts +++ b/packages/schema/src/config/_common.ts @@ -1,5 +1,5 @@ import { join, resolve } from 'pathe' -import { isDevelopment } from 'std-env' +import { isDebug, isDevelopment } from 'std-env' import createRequire from 'create-require' import { pascalCase } from 'scule' import jiti from 'jiti' @@ -149,11 +149,14 @@ export default defineUntypedSchema({ /** * Set to `true` to enable debug mode. * - * By default, it's only enabled in development mode. + * At the moment, it prints out hook names and timings on the server, and + * logs hook arguments as well in the browser. + * * @version 2 + * @version 3 */ debug: { - $resolve: async (val, get) => val ?? await get('dev') + $resolve: async (val, get) => val ?? isDebug }, /** diff --git a/yarn.lock b/yarn.lock index c03e61cfdd9..f3e05a5f3f1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8380,6 +8380,13 @@ __metadata: languageName: node linkType: hard +"hookable@npm:^5.4.1": + version: 5.4.1 + resolution: "hookable@npm:5.4.1" + checksum: 2a48150436bf70b4b756bcf15694809032c490c1747aba363a6de928a96712e808b0918de06c933e082cc2042c3f051b593d400df6af4773cd9ad1e85d677839 + languageName: node + linkType: hard + "hosted-git-info@npm:^2.1.4": version: 2.8.9 resolution: "hosted-git-info@npm:2.8.9" @@ -11029,7 +11036,7 @@ __metadata: globby: ^13.1.2 h3: ^0.7.21 hash-sum: ^2.0.0 - hookable: ^5.4.0 + hookable: ^5.4.1 knitwork: ^0.1.2 magic-string: ^0.26.7 mlly: ^0.5.16