microgrok/lib/lib.ts
2024-08-07 10:17:45 +02:00

28 lines
944 B
TypeScript

import { Rule } from "./rule.ts";
import { PairElts, StructOfArr } from "./types.ts";
import { Extractor } from "./extractor.ts"
export function extr<A extends string[]>(...args: A): Extractor<StructOfArr<PairElts<A>, string>> {
const seps = [] as string[];
const vars = [] as string[];
let pair = true;
for (const arg of args) {
if (pair) seps.push(arg);
else vars.push(arg);
pair = !pair;
}
const vars_ = vars as PairElts<A>;
const rule = new Rule(seps, vars_);
return new Extractor(text => rule.get(text))
}
Deno.test("types", async () => {
const { assertEquals } = await import("https://deno.land/std@0.224.0/assert/assert_equals.ts");
const vars = extr()
.or(extr("bonjour, ", 'animal', ", poilu"))
.or(extr("bonjour, ", 'arbre', ", feuillu"))
.get("bonjour, le chêne, feuillu");
assertEquals({ vars }, { vars: { "arbre": "le chêne" } })
})