mirror of
https://github.com/docmost/docmost.git
synced 2026-07-15 03:26:50 +10:00
41 lines
965 B
TypeScript
41 lines
965 B
TypeScript
// packages/base-formula/src/error.ts
|
|
import type { ErrorCell, ErrorCode } from "./types";
|
|
|
|
export type ParseErrorCode =
|
|
| "UNEXPECTED_TOKEN"
|
|
| "UNEXPECTED_EOF"
|
|
| "UNKNOWN_PROPERTY"
|
|
| "UNKNOWN_FUNCTION"
|
|
| "ARITY_MISMATCH"
|
|
| "TYPE_MISMATCH"
|
|
| "CYCLE";
|
|
|
|
export type ParseError = {
|
|
code: ParseErrorCode;
|
|
message: string;
|
|
span: { start: number; end: number };
|
|
hint?: string;
|
|
};
|
|
|
|
export class FormulaParseError extends Error {
|
|
readonly errors: ParseError[];
|
|
constructor(errors: ParseError[]) {
|
|
super(errors.map((e) => `${e.code}: ${e.message}`).join("; "));
|
|
this.errors = errors;
|
|
this.name = "FormulaParseError";
|
|
}
|
|
}
|
|
|
|
export function makeErrorCell(code: ErrorCode, msg: string): ErrorCell {
|
|
return { __err: code, msg, v: 1 };
|
|
}
|
|
|
|
export function isErrorCell(v: unknown): v is ErrorCell {
|
|
return (
|
|
typeof v === "object" &&
|
|
v !== null &&
|
|
"__err" in v &&
|
|
typeof (v as { __err: unknown }).__err === "string"
|
|
);
|
|
}
|