calque/src/features/source/source.ts
Chris Kruining 8e0eee5847
stashing
2025-02-13 17:18:03 +11:00

31 lines
No EOL
921 B
TypeScript

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>;
},
};
}