Skip to content

Commit

Permalink
minor refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
brillout committed Jun 13, 2023
1 parent 655eb2f commit b2d02a0
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 57 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
export { transpileAndLoadFile }
export { isEsbuildFormattedError }
export { getEsbuildFormattedError }

import { build, type BuildResult, type BuildOptions } from 'esbuild'
import { build, type BuildResult, type BuildOptions, formatMessages } from 'esbuild'
import fs from 'fs'
import path from 'path'
import pc from '@brillout/picocolors'
Expand All @@ -19,10 +21,11 @@ import { isImportData, replaceImportStatements, type FileImport } from './replac
import { getConfigData_dependenciesInvisibleToVite, getFilePathToShowToUser, type FilePath } from './getConfigData'
import 'source-map-support/register'
import { addErrorIntroMsg } from '../../../shared/loggerNotProd'
import { formatEsbuildError } from '../../../shared/loggerTranspile/formatEsbuildError'

assertIsVitePluginCode()

const esbuildErrMsgKey = '_esbuildFormatted'

type Result = { fileExports: Record<string, unknown> }

async function transpileAndLoadFile(filePath: FilePath, isPageConfig: boolean): Promise<Result> {
Expand Down Expand Up @@ -215,3 +218,26 @@ function addErrorIntro(err: unknown, operation: 'transpile' | 'execute', filePat
].join(' ')
addErrorIntroMsg(err, msg, 'config', 'error', { clearIfFirstLog: true })
}

async function formatEsbuildError(err: unknown): Promise<void> {
assert(isObject(err))
if (err.errors) {
const msgs = await formatMessages(err.errors as any, {
kind: 'error',
color: true
})
err[esbuildErrMsgKey] = msgs.map((m) => m.trim()).join('\n')
}
}

function isEsbuildFormattedError(err: unknown): err is { [esbuildErrMsgKey]: string } {
if (!isObject(err)) return false
if (!(esbuildErrMsgKey in err)) return false
assert(typeof err[esbuildErrMsgKey] === 'string')
return true
}

function getEsbuildFormattedError(err: unknown): null | string {
if (!isEsbuildFormattedError(err)) return null
return err[esbuildErrMsgKey]
}
14 changes: 8 additions & 6 deletions vite-plugin-ssr/node/plugin/shared/asyncHook.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ export { getAsyncHookStore }
import { renderPage_setWrapper } from '../../runtime/renderPage'
import { assert, isObject } from '../utils'
import type { AsyncLocalStorage as AsyncLocalStorageType } from 'node:async_hooks'
import { esbuildFormattedMessageKey } from './loggerTranspile/formatEsbuildError'
import { getEsbuildFormattedError } from '../plugins/importUserCode/v1-design/transpileAndLoadFile'

type AsyncHookStore = {
httpRequestId: number
Expand Down Expand Up @@ -74,11 +74,16 @@ function isEquivalentOrSubset(err: unknown, errAlreadyLogged: unknown) {
if (err1 === err2) return true
if (!isObject(err1) || !isObject(err2)) return false

{
const esbuildErrMsg1 = getEsbuildFormattedError(err1)
const esbuildErrMsg2 = getEsbuildFormattedError(err2)
if (esbuildErrMsg1 && esbuildErrMsg1 === esbuildErrMsg2) return true
}

if (
isDefinedAndSame(err1.message, err2.message) &&
isDefinedAndSame(err1.frame, err2.frame) &&
isDefinedAndSame(err1.id, err2.id) &&
isUndefinedOrSame(err1[esbuildFormattedMessageKey], err2[esbuildFormattedMessageKey])
isDefinedAndSame(err1.id, err2.id)
) {
return true
}
Expand All @@ -97,6 +102,3 @@ function isEquivalentOrSubset(err: unknown, errAlreadyLogged: unknown) {
function isDefinedAndSame(val1: unknown, val2: unknown) {
return val1 && val1 === val2
}
function isUndefinedOrSame(val1: unknown, val2: unknown) {
return (val1 === undefined && val2 === undefined) || val1 === val2
}
17 changes: 11 additions & 6 deletions vite-plugin-ssr/node/plugin/shared/loggerNotProd.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,11 @@ import {
import { getAsyncHookStore } from './asyncHook'
import { isErrorDebug } from './isErrorDebug'
import { isFrameError, formatFrameError } from './loggerTranspile/formatFrameError'
import { getEsbuildFormattedError, isEsbuildFormattedError } from './loggerTranspile/formatEsbuildError'
import type { LogErrorArgs } from '../../runtime/renderPage/loggerProd'
import {
getEsbuildFormattedError,
isEsbuildFormattedError
} from '../plugins/importUserCode/v1-design/transpileAndLoadFile'

assertIsVitePluginCode()
setRuntimeLogger(logErrorNotProd, logInfoNotProd)
Expand All @@ -50,15 +53,16 @@ function logInfoNotProd(
logType: LogType,
options: { clearErrors?: boolean; clearIfFirstLog?: boolean } = {}
) {
msg = addPrefix(msg, projectInfo.projectName, category, logType)

const clear = (options.clearErrors && screenHasErrors) || (options.clearIfFirstLog && isFirstViteLog)
if (clear) {
const viteConfig = getViteConfig()
assert(viteConfig)
clearWithVite(viteConfig)
}

logWithPrefix(msg, logType, category)
}
function logWithPrefix(msg: string, logType: LogType, category: LogCategory) {
msg = addPrefix(msg, projectInfo.projectName, category, logType)
log(msg, logType)
}
function log(msg: unknown, logType: LogType) {
Expand All @@ -76,6 +80,7 @@ function log(msg: unknown, logType: LogType) {
assert(false)
}
}

function clearWithVite(viteConfig: ResolvedConfig) {
screenHasErrors = false
// We use Vite's logger in order to respect the user's `clearScreen: false` setting
Expand Down Expand Up @@ -159,11 +164,11 @@ function logErrorIntro(err: unknown, httpRequestId: number | null, category: nul
const hook = isUserHookError(err)
if (hook) {
const { hookName, hookFilePath } = hook
logInfoNotProd(pc.red(`Error thrown by hook ${hookName}() (${hookFilePath}):`), category, 'error')
logWithPrefix(pc.red(`Error thrown by hook ${hookName}() (${hookFilePath}):`), 'error', category)
return
}
if (category) {
logInfoNotProd(pc.red('Error thrown:'), category, 'error')
logWithPrefix(pc.red('Error thrown:'), 'error', category)
return
}
}
Expand Down

This file was deleted.

0 comments on commit b2d02a0

Please sign in to comment.