From 0a381ed73917c4d88b828f83efe01e42bc994ba0 Mon Sep 17 00:00:00 2001 From: Niputi <7137178+Niputi@users.noreply.github.com> Date: Tue, 28 Dec 2021 23:28:17 +0100 Subject: [PATCH 1/3] catch postcss error messages --- packages/vite/src/node/server/pluginContainer.ts | 8 ++++++-- packages/vite/src/node/utils.ts | 4 +++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/vite/src/node/server/pluginContainer.ts b/packages/vite/src/node/server/pluginContainer.ts index 38cb38ebe1fc7f..30c73200934165 100644 --- a/packages/vite/src/node/server/pluginContainer.ts +++ b/packages/vite/src/node/server/pluginContainer.ts @@ -70,6 +70,7 @@ import type { ResolvedConfig } from '../config' import { buildErrorMessage } from './middlewares/error' import type { ModuleGraph } from './moduleGraph' import { performance } from 'perf_hooks' +import { type CssSyntaxError } from 'postcss' export interface PluginContainerOptions { cwd?: string @@ -309,7 +310,10 @@ export async function createPluginContainer( position: number | { column: number; line: number } | undefined, ctx: Context ) { - const err = (typeof e === 'string' ? new Error(e) : e) as RollupError + const err = (typeof e === 'string' ? new Error(e) : e) as CssSyntaxError & RollupError + if (err.file && err.name === 'CssSyntaxError') { + err.id = normalizePath(err.file) + } if (ctx._activePlugin) err.plugin = ctx._activePlugin.name if (ctx._activeId && !err.id) err.id = ctx._activeId if (ctx._activeCode) { @@ -358,7 +362,7 @@ export async function createPluginContainer( line: (err as any).line, column: (err as any).column } - err.frame = err.frame || generateCodeFrame(ctx._activeCode, err.loc) + err.frame = err.frame || generateCodeFrame(err.id!, err.loc) } } return err diff --git a/packages/vite/src/node/utils.ts b/packages/vite/src/node/utils.ts index ad6ce05d6d6ed3..8abfe5c8db7839 100644 --- a/packages/vite/src/node/utils.ts +++ b/packages/vite/src/node/utils.ts @@ -326,7 +326,9 @@ export function posToNumber( const { line, column } = pos let start = 0 for (let i = 0; i < line - 1; i++) { - start += lines[i].length + 1 + if (lines[i]) { + start += lines[i].length + 1 + } } return start + column } From 01c704382b6220a4bfcfab20b39540222ff48d11 Mon Sep 17 00:00:00 2001 From: Niputi <7137178+Niputi@users.noreply.github.com> Date: Tue, 28 Dec 2021 23:46:24 +0100 Subject: [PATCH 2/3] update type import --- packages/vite/src/node/server/pluginContainer.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/vite/src/node/server/pluginContainer.ts b/packages/vite/src/node/server/pluginContainer.ts index 30c73200934165..a773d66fbdad05 100644 --- a/packages/vite/src/node/server/pluginContainer.ts +++ b/packages/vite/src/node/server/pluginContainer.ts @@ -70,7 +70,7 @@ import type { ResolvedConfig } from '../config' import { buildErrorMessage } from './middlewares/error' import type { ModuleGraph } from './moduleGraph' import { performance } from 'perf_hooks' -import { type CssSyntaxError } from 'postcss' +import type * as postcss from 'postcss' export interface PluginContainerOptions { cwd?: string @@ -310,7 +310,7 @@ export async function createPluginContainer( position: number | { column: number; line: number } | undefined, ctx: Context ) { - const err = (typeof e === 'string' ? new Error(e) : e) as CssSyntaxError & RollupError + const err = (typeof e === 'string' ? new Error(e) : e) as postcss.CssSyntaxError & RollupError if (err.file && err.name === 'CssSyntaxError') { err.id = normalizePath(err.file) } From 672ed16d19660ae2405f8480e7d9b6eb98e2f076 Mon Sep 17 00:00:00 2001 From: Niputi <7137178+Niputi@users.noreply.github.com> Date: Tue, 28 Dec 2021 23:52:51 +0100 Subject: [PATCH 3/3] update format --- packages/vite/src/node/server/pluginContainer.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/vite/src/node/server/pluginContainer.ts b/packages/vite/src/node/server/pluginContainer.ts index a773d66fbdad05..b408f849d74c49 100644 --- a/packages/vite/src/node/server/pluginContainer.ts +++ b/packages/vite/src/node/server/pluginContainer.ts @@ -310,9 +310,11 @@ export async function createPluginContainer( position: number | { column: number; line: number } | undefined, ctx: Context ) { - const err = (typeof e === 'string' ? new Error(e) : e) as postcss.CssSyntaxError & RollupError + const err = ( + typeof e === 'string' ? new Error(e) : e + ) as postcss.CssSyntaxError & RollupError if (err.file && err.name === 'CssSyntaxError') { - err.id = normalizePath(err.file) + err.id = normalizePath(err.file) } if (ctx._activePlugin) err.plugin = ctx._activePlugin.name if (ctx._activeId && !err.id) err.id = ctx._activeId