diff --git a/packages/vite/src/node/server/pluginContainer.ts b/packages/vite/src/node/server/pluginContainer.ts index 73e962c6c0931d..15f98d5a4438f0 100644 --- a/packages/vite/src/node/server/pluginContainer.ts +++ b/packages/vite/src/node/server/pluginContainer.ts @@ -285,10 +285,18 @@ export async function createPluginContainer( : // some rollup plugins, e.g. json, sets position instead of pos (err as any).position if (pos != null) { - err.loc = err.loc || { - file: err.id, - ...numberToPos(ctx._activeCode, pos) + let errLocation; + try { + errLocation = numberToPos(ctx._activeCode, pos); } + catch (err2) { + console.log(`formatError: error in numberToPos (${err2}) while handling the error:`); + throw err; + } + err.loc = err.loc || { + file: err.id, + ...errLocation + }; err.frame = err.frame || generateCodeFrame(ctx._activeCode, pos) } else if (err.loc) { // css preprocessors may report errors in an included file diff --git a/packages/vite/src/node/utils.ts b/packages/vite/src/node/utils.ts index 3e350e5051c221..d9a186f57d51af 100644 --- a/packages/vite/src/node/utils.ts +++ b/packages/vite/src/node/utils.ts @@ -273,7 +273,7 @@ export function numberToPos( ): { line: number; column: number } { if (typeof offset !== 'number') return offset if (offset > source.length) { - throw new Error('offset is longer than source length!') + throw new Error(`offset is longer than source length! offset ${offset} > length ${source.length}`); } const lines = source.split(splitRE) let counted = 0