30 lines
954 B
TypeScript
30 lines
954 B
TypeScript
import { RuleError, transformError } from "./error";
|
|
import parse, { ParserError } from "./parser";
|
|
import tokenize, { TokenizerError } from "./tokenise";
|
|
import { getRuleRunner, RuleRunner } from "./compile";
|
|
import { inspect } from "util";
|
|
|
|
export default function compileRule(rule: string) {
|
|
let runner: RuleRunner | undefined;
|
|
let error: RuleError | undefined;
|
|
try {
|
|
const tokenised = tokenize(rule);
|
|
const parsed = parse(tokenised);
|
|
const dbservice = parsed.find((e) => e.name === "realtimedb");
|
|
|
|
if (!dbservice) throw new Error("No realtimedb service available!");
|
|
|
|
runner = getRuleRunner(dbservice);
|
|
} catch (err) {
|
|
if (err instanceof TokenizerError) {
|
|
error = transformError(err, rule, err.index);
|
|
} else if (err instanceof ParserError) {
|
|
error = transformError(err, rule, err.token.startIdx);
|
|
} else {
|
|
throw err;
|
|
}
|
|
}
|
|
|
|
return { runner, error };
|
|
}
|