This commit is contained in:
Chris Kruining 2025-02-13 17:18:03 +11:00
parent 69fd9a1753
commit 8e0eee5847
No known key found for this signature in database
GPG key ID: EB894A3560CCCAD2
8 changed files with 220 additions and 70 deletions

View file

@ -0,0 +1,31 @@
import { createEffect, createSignal, Signal } from "solid-js";
import { Parser, RichTextAST } from "./parser";
export interface Source<TIn extends Parser, TOut extends Parser> {
readonly in: Signal<string>;
readonly out: Signal<string>;
}
export function createSource<TIn extends Parser, TOut extends Parser>(inParser: TIn, outParser: TOut, initalValue: string): Source<TIn, TOut> {
const [inValue, setIn] = createSignal<string>(initalValue);
const [outValue, setOut] = createSignal<string>('');
const [ast, setAst] = createSignal<RichTextAST>();
createEffect(() => {
setAst(inParser.parse(inValue()));
});
createEffect(() => {
setAst(outParser.parse(outValue()));
});
return {
get in() {
return [inValue, setIn] as Signal<string>;
},
get out() {
return [outValue, setOut] as Signal<string>;
},
};
}