From ef7ad05c0bac10e0a6cdcee6d7be7dcbbab27423 Mon Sep 17 00:00:00 2001
From: Kagami Sascha Rosylight <saschanaz@outlook.com>
Date: Wed, 15 Feb 2023 09:14:47 +0100
Subject: [PATCH] Fix type errors from vite.json5.ts (#9936)

---
 packages/frontend/vite.json5.ts | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/packages/frontend/vite.json5.ts b/packages/frontend/vite.json5.ts
index 0a37fbff44..87b67c2142 100644
--- a/packages/frontend/vite.json5.ts
+++ b/packages/frontend/vite.json5.ts
@@ -5,6 +5,13 @@ import { Plugin } from 'rollup';
 import { createFilter, dataToEsm } from '@rollup/pluginutils';
 import { RollupJsonOptions } from '@rollup/plugin-json';
 
+// json5 extends SyntaxError with additional fields (without subclassing)
+// https://github.com/json5/json5/blob/de344f0619bda1465a6e25c76f1c0c3dda8108d9/lib/parse.js#L1111-L1112
+interface Json5SyntaxError extends SyntaxError {
+	lineNumber: number;
+	columnNumber: number;
+}
+
 export default function json5(options: RollupJsonOptions = {}): Plugin {
 	const filter = createFilter(options.include, options.exclude);
 	const indent = 'indent' in options ? options.indent : '\t';
@@ -28,9 +35,12 @@ export default function json5(options: RollupJsonOptions = {}): Plugin {
 					map: { mappings: '' },
 				};
 			} catch (err) {
-				const message = 'Could not parse JSON file';
-				const position = parseInt(/[\d]/.exec(err.message)[0], 10);
-				this.warn({ message, id, position });
+				if (!(err instanceof SyntaxError)) {
+					throw err;
+				}
+				const message = 'Could not parse JSON5 file';
+				const { lineNumber, columnNumber } = err as Json5SyntaxError;
+				this.warn({ message, id, loc: { line: lineNumber, column: columnNumber } });
 				return null;
 			}
 		},