// this file provides a well-typed wrapper about the (unchecked) PegJS parser. import { Expression, Pattern } from './types'; declare const require: (path: string) => any; // eslint-disable-line const colorExpressions: any = (require)('./colorExpressions.js'); // eslint-disable-line export function parseExpression(expression: string): Expression { try { return colorExpressions.parse(expression, { startRule: 'expression' }); } catch (e: unknown) { const message = typeof (e) === "object" && e !== null && "message" in e && typeof (e.message) === "string" && e.message; throw new Error(`Failed to parse "${expression}" as expression: ${message ?? ""}`); } } export function parseInteger(expression: string): number { try { return colorExpressions.parse(expression, { startRule: 'integer' }); } catch (e) { const message = typeof (e) === "object" && e !== null && "message" in e && typeof (e.message) === "string" && e.message; throw new Error(`Failed to parse "${expression}" as integer: ${message ?? ""}`); } } export function parsePattern(pattern: string): Pattern { try { return colorExpressions.parse(pattern, { startRule: 'pattern' }); } catch (e) { const message = typeof (e) === "object" && e !== null && "message" in e && typeof (e.message) === "string" && e.message; throw new Error(`Failed to parse "${pattern}" as pattern: ${message ?? ""}`); } }