28 lines
906 B
TypeScript
28 lines
906 B
TypeScript
export interface CustomJsxTemplateDiagnostic {
|
|
severity: "error" | "warning";
|
|
message: string;
|
|
index: number;
|
|
line: number;
|
|
column: number;
|
|
}
|
|
|
|
export function createCustomJsxParseDiagnostic(_template: string, error: unknown): CustomJsxTemplateDiagnostic {
|
|
const parseError = error as Error & { pos?: number; loc?: { line?: number; column?: number } };
|
|
const parseIndex = Math.max(0, (parseError.pos ?? 2) - 2);
|
|
const duplicateArgument = /Argument name clash/iu.test(parseError.message);
|
|
const message = duplicateArgument
|
|
? "DUPLICATE_LOCAL_BINDING: Callback parameter names must be unique"
|
|
: parseError.message;
|
|
|
|
return {
|
|
severity: "error",
|
|
message,
|
|
index: parseIndex,
|
|
line: parseError.loc?.line ?? 1,
|
|
column: Math.max(
|
|
1,
|
|
(parseError.loc?.column ?? 0) + (parseError.loc?.line === 1 || parseError.loc?.line === undefined ? -1 : 1),
|
|
),
|
|
};
|
|
}
|