From a91fd5218253c8a9e3a2c62d9810462b1428f171 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Thu, 31 Mar 2022 21:43:15 +0200 Subject: [PATCH] feat: create `nitro.logger` to control verbosity --- src/build.ts | 31 ++++++++++++++++--------------- src/nitro.ts | 7 +++++++ src/options.ts | 1 + src/prerender.ts | 1 + src/presets/browser.ts | 20 ++++++++++---------- src/presets/netlify.ts | 5 ++--- src/types/nitro.ts | 4 ++++ 7 files changed, 41 insertions(+), 28 deletions(-) diff --git a/src/build.ts b/src/build.ts index 53664ed5cb..2288d206ee 100644 --- a/src/build.ts +++ b/src/build.ts @@ -1,12 +1,11 @@ import { relative, resolve, join } from 'pathe' -import consola from 'consola' import * as rollup from 'rollup' import fse from 'fs-extra' import { watch } from 'chokidar' import { debounce } from 'perfect-debounce' import { printFSTree } from './utils/tree' import { getRollupConfig } from './rollup/config' -import { prettyPath, writeFile, isDirectory, replaceAll, serializeTemplate } from './utils' +import { prettyPath, writeFile, isDirectory, serializeTemplate } from './utils' import { GLOB_SCAN_PATTERN, scanHandlers } from './scan' import type { Nitro } from './types' @@ -23,12 +22,12 @@ export async function prepare (nitro: Nitro) { } async function cleanupDir (dir: string) { - consola.info('Cleaning up', prettyPath(dir)) + // consola.info('Cleaning up', prettyPath(dir)) await fse.emptyDir(dir) } export async function copyPublicAssets (nitro: Nitro) { - consola.start('Generating public...') + nitro.logger.start('Generating public...') const clientDist = resolve(nitro.options.buildDir, 'dist/client') if (await isDirectory(clientDist)) { @@ -40,7 +39,7 @@ export async function copyPublicAssets (nitro: Nitro) { await fse.copy(publicDir, nitro.options.output.publicDir) } - consola.success('Generated public ' + prettyPath(nitro.options.output.publicDir)) + nitro.logger.success('Generated public ' + prettyPath(nitro.options.output.publicDir)) } export async function build (nitro: Nitro) { @@ -105,13 +104,13 @@ async function _build (nitro: Nitro) { await scanHandlers(nitro) await writeTypes(nitro) - consola.start('Building server...') + nitro.logger.start('Building server...') const build = await rollup.rollup(nitro.options.rollupConfig).catch((error) => { - consola.error('Rollup error: ' + error.message) + nitro.logger.error('Rollup error: ' + error.message) throw error }) - consola.start('Writing server bundle...') + nitro.logger.start('Writing server bundle...') await build.write(nitro.options.rollupConfig.output) // Write build info @@ -126,8 +125,10 @@ async function _build (nitro: Nitro) { } await writeFile(nitroConfigPath, JSON.stringify(buildInfo, null, 2)) - consola.success('Server built') - await printFSTree(nitro.options.output.serverDir) + nitro.logger.success('Server built') + if (nitro.options.logLevel > 1) { + await printFSTree(nitro.options.output.serverDir) + } await nitro.hooks.callHook('nitro:compiled', nitro) // Show deploy and preview hints @@ -136,10 +137,10 @@ async function _build (nitro: Nitro) { return input.replaceAll(/\s\.\/([^\s]+)/g, ` ${rOutput}/$1`) } if (buildInfo.commands.preview) { - consola.info(`You can preview this build using \`${rewriteRelativePaths(buildInfo.commands.preview)}\``) + nitro.logger.info(`You can preview this build using \`${rewriteRelativePaths(buildInfo.commands.preview)}\``) } if (buildInfo.commands.deploy) { - consola.info(`You can deploy this build using \`${rewriteRelativePaths(buildInfo.commands.deploy)}\``) + nitro.logger.info(`You can deploy this build using \`${rewriteRelativePaths(buildInfo.commands.deploy)}\``) } return { @@ -165,14 +166,14 @@ function startRollupWatcher (nitro: Nitro) { // Finished building all bundles case 'END': nitro.hooks.callHook('nitro:compiled', nitro) - consola.success('Nitro built', start ? `in ${Date.now() - start} ms` : '') + nitro.logger.success('Nitro built', start ? `in ${Date.now() - start} ms` : '') nitro.hooks.callHook('nitro:dev:reload') return // Encountered an error while bundling case 'ERROR': - consola.error('Rollup error: ' + event.error) - // consola.error(event.error) + nitro.logger.error('Rollup error: ' + event.error) + // nitro.logger.error(event.error) } }) return watcher diff --git a/src/nitro.ts b/src/nitro.ts index 391c9394b7..5154e392c5 100644 --- a/src/nitro.ts +++ b/src/nitro.ts @@ -1,6 +1,7 @@ import { resolve } from 'pathe' import { createHooks } from 'hookable' import { createUnimport } from 'unimport' +import consola from 'consola' import type { NitroConfig, Nitro } from './types' import { resolvePath } from './utils' import { loadOptions } from './options' @@ -14,9 +15,15 @@ export async function createNitro (config: NitroConfig = {}): Promise { options, hooks: createHooks(), vfs: {}, + logger: consola.withTag('nitro'), scannedHandlers: [] } + // Logger config + if (nitro.options.logLevel !== undefined) { + nitro.logger.level = nitro.options.logLevel + } + // Init hooks nitro.hooks.addHooks(nitro.options.hooks) diff --git a/src/options.ts b/src/options.ts index 3d42a3b0f7..b618c74ee7 100644 --- a/src/options.ts +++ b/src/options.ts @@ -35,6 +35,7 @@ const NitroDefaults: NitroConfig = { crawlLinks: false, routes: [] }, + logLevel: 3, publicDir: 'public', buildDir: '.nitro', generateDir: 'dist', diff --git a/src/prerender.ts b/src/prerender.ts index 4f19b75102..fa4e647515 100644 --- a/src/prerender.ts +++ b/src/prerender.ts @@ -19,6 +19,7 @@ export async function prerender (nitro: Nitro) { nitro = await createNitro({ ...nitro.options._config, rootDir: nitro.options.rootDir, + logLevel: 0, preset: 'prerender' }) await build(nitro) diff --git a/src/presets/browser.ts b/src/presets/browser.ts index de222f9c5c..09c17d7108 100644 --- a/src/presets/browser.ts +++ b/src/presets/browser.ts @@ -1,9 +1,9 @@ import { existsSync, promises as fsp } from 'fs' import { resolve } from 'pathe' -import consola from 'consola' import { joinURL } from 'ufo' import { prettyPath } from '../utils' import { defineNitroPreset } from '../preset' +import type { Nitro } from '../types' export const browser = defineNitroPreset((_input) => { // TODO @@ -58,20 +58,20 @@ if ('serviceWorker' in navigator) { 'nitro:document' (tmpl) { tmpl.contents = tmpl.contents.replace('', script + '') }, - async 'nitro:compiled' ({ output }: any) { - await fsp.writeFile(resolve(output.publicDir, 'sw.js'), `self.importScripts('${joinURL(baseURL, '_server/index.mjs')}');`, 'utf8') + async 'nitro:compiled' (nitro: Nitro) { + await fsp.writeFile(resolve(nitro.options.output.publicDir, 'sw.js'), `self.importScripts('${joinURL(baseURL, '_server/index.mjs')}');`, 'utf8') // Temp fix - if (!existsSync(resolve(output.publicDir, 'index.html'))) { - await fsp.writeFile(resolve(output.publicDir, 'index.html'), html, 'utf8') + if (!existsSync(resolve(nitro.options.output.publicDir, 'index.html'))) { + await fsp.writeFile(resolve(nitro.options.publicDir, 'index.html'), html, 'utf8') } - if (!existsSync(resolve(output.publicDir, '200.html'))) { - await fsp.writeFile(resolve(output.publicDir, '200.html'), html, 'utf8') + if (!existsSync(resolve(nitro.options.publicDir, '200.html'))) { + await fsp.writeFile(resolve(nitro.options.publicDir, '200.html'), html, 'utf8') } - if (!existsSync(resolve(output.publicDir, '404.html'))) { - await fsp.writeFile(resolve(output.publicDir, '404.html'), html, 'utf8') + if (!existsSync(resolve(nitro.options.publicDir, '404.html'))) { + await fsp.writeFile(resolve(nitro.options.publicDir, '404.html'), html, 'utf8') } - consola.info('Ready to deploy to static hosting:', prettyPath(output.publicDir as string)) + nitro.logger.info('Ready to deploy to static hosting:', prettyPath(nitro.options.publicDir as string)) } } } diff --git a/src/presets/netlify.ts b/src/presets/netlify.ts index ffc84a7135..5113da3ea7 100644 --- a/src/presets/netlify.ts +++ b/src/presets/netlify.ts @@ -1,6 +1,5 @@ import { existsSync, promises as fsp } from 'fs' import { join } from 'pathe' -import consola from 'consola' import { defineNitroPreset } from '../preset' import type { Nitro } from '../types' @@ -17,10 +16,10 @@ export const netlify = defineNitroPreset({ if (existsSync(redirectsPath)) { const currentRedirects = await fsp.readFile(redirectsPath, 'utf-8') if (currentRedirects.match(/^\/\* /m)) { - consola.info('Not adding Nitro fallback to `_redirects` (as an existing fallback was found).') + nitro.logger.info('Not adding Nitro fallback to `_redirects` (as an existing fallback was found).') return } - consola.info('Adding Nitro fallback to `_redirects` to handle all unmatched routes.') + nitro.logger.info('Adding Nitro fallback to `_redirects` to handle all unmatched routes.') contents = currentRedirects + '\n' + contents } await fsp.writeFile(redirectsPath, contents) diff --git a/src/types/nitro.ts b/src/types/nitro.ts index 066ac4883f..7a9c7fee9e 100644 --- a/src/types/nitro.ts +++ b/src/types/nitro.ts @@ -3,6 +3,7 @@ import type { Preset as UnenvPreset } from 'unenv' import type { Unimport, UnimportOptions } from 'unimport' import type { PluginVisualizerOptions } from 'rollup-plugin-visualizer' import type { NestedHooks, Hookable } from 'hookable' +import type { Consola, LogLevel } from 'consola' import type { NodeExternalsOptions } from '../rollup/plugins/externals' import type { StorageOptions } from '../rollup/plugins/storage' import type { AssetOptions } from '../rollup/plugins/assets' @@ -16,6 +17,7 @@ export interface Nitro { vfs: Record hooks: Hookable unimport?: Unimport + logger: Consola } export interface NitroHooks { @@ -58,6 +60,8 @@ export interface NitroOptions { publicPath: string staticAssets: any + logLevel: LogLevel + routes: { [path: string]: NitroRouteRule },