diff --git a/packages/website/src/components/ErrorsViewer.tsx b/packages/website/src/components/ErrorsViewer.tsx
index 6d7621d096a..10a19922fdb 100644
--- a/packages/website/src/components/ErrorsViewer.tsx
+++ b/packages/website/src/components/ErrorsViewer.tsx
@@ -7,7 +7,7 @@ import IconExternalLink from '@theme/IconExternalLink';
import styles from './ErrorsViewer.module.css';
export interface ErrorsViewerProps {
- readonly value?: ErrorGroup[];
+ readonly value?: ErrorGroup[] | Error;
}
export interface ErrorBlockProps {
@@ -100,6 +100,17 @@ export default function ErrorsViewer({
setIsLocked(false);
}, [value]);
+ if (value && !Array.isArray(value)) {
+ return (
+
+
+
ESLint internal error
+ {value?.stack}
+
+
+ );
+ }
+
return (
{value?.map(({ group, uri, items }) => {
diff --git a/packages/website/src/components/Playground.tsx b/packages/website/src/components/Playground.tsx
index d5fade82343..d86893bb56c 100644
--- a/packages/website/src/components/Playground.tsx
+++ b/packages/website/src/components/Playground.tsx
@@ -66,7 +66,7 @@ function Playground(): JSX.Element {
const [esAst, setEsAst] = useState();
const [tsAst, setTsAST] = useState();
const [scope, setScope] = useState | null>();
- const [markers, setMarkers] = useState();
+ const [markers, setMarkers] = useState();
const [ruleNames, setRuleNames] = useState([]);
const [isLoading, setIsLoading] = useState(true);
const [tsVersions, setTSVersion] = useState([]);
diff --git a/packages/website/src/components/editor/LoadedEditor.tsx b/packages/website/src/components/editor/LoadedEditor.tsx
index f325fb91e6d..65de546a25a 100644
--- a/packages/website/src/components/editor/LoadedEditor.tsx
+++ b/packages/website/src/components/editor/LoadedEditor.tsx
@@ -127,21 +127,27 @@ export const LoadedEditor: React.FC = ({
webLinter.updateParserOptions(jsx, sourceType);
- const messages = webLinter.lint(code);
+ try {
+ const messages = webLinter.lint(code);
- const markers = parseLintResults(messages, codeActions, ruleId =>
- sandboxInstance.monaco.Uri.parse(webLinter.rulesUrl.get(ruleId) ?? ''),
- );
+ const markers = parseLintResults(messages, codeActions, ruleId =>
+ sandboxInstance.monaco.Uri.parse(
+ webLinter.rulesUrl.get(ruleId) ?? '',
+ ),
+ );
- sandboxInstance.monaco.editor.setModelMarkers(
- tabs.code,
- 'eslint',
- markers,
- );
+ sandboxInstance.monaco.editor.setModelMarkers(
+ tabs.code,
+ 'eslint',
+ markers,
+ );
- // fallback when event is not preset, ts < 4.0.5
- if (!sandboxInstance.monaco.editor.onDidChangeMarkers) {
- updateMarkers();
+ // fallback when event is not preset, ts < 4.0.5
+ if (!sandboxInstance.monaco.editor.onDidChangeMarkers) {
+ updateMarkers();
+ }
+ } catch (e) {
+ onMarkersChange(e as Error);
}
onEsASTChange(webLinter.storedAST);
diff --git a/packages/website/src/components/editor/types.ts b/packages/website/src/components/editor/types.ts
index 7b904b4bf5f..fd790946069 100644
--- a/packages/website/src/components/editor/types.ts
+++ b/packages/website/src/components/editor/types.ts
@@ -11,6 +11,6 @@ export interface CommonEditorProps extends ConfigModel {
readonly onTsASTChange: (value: undefined | SourceFile) => void;
readonly onEsASTChange: (value: undefined | TSESTree.Program) => void;
readonly onScopeChange: (value: undefined | Record) => void;
- readonly onMarkersChange: (value: ErrorGroup[]) => void;
+ readonly onMarkersChange: (value: ErrorGroup[] | Error) => void;
readonly onSelect: (position: Monaco.Position | null) => void;
}