-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.ts
39 lines (31 loc) · 1.21 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import BitcoinMiniscript from "./miniscript-modules/bitcoin-miniscript";
import ElementsMiniscript from "./miniscript-modules/elements-miniscript";
import { MiniscriptFragment, MiniscriptModule } from "./types";
import { MiniscriptParser } from "./parse/parser";
import Lexer from "./lex/lexer";
let miniscriptModules: MiniscriptModule[] = [BitcoinMiniscript];
let wrappers = miniscriptModules.flatMap((m) => m.wrappers);
let expressions = miniscriptModules.flatMap((m) => m.expressions);
export default class Miniscript {
static parse(
input: string,
elementsSupport: boolean = false
): MiniscriptFragment {
input = input?.toLowerCase().replace(/\s/g, "");
if (elementsSupport) {
wrappers.push(...ElementsMiniscript.wrappers);
expressions.push(...ElementsMiniscript.expressions);
}
let lexer = new Lexer(wrappers, expressions);
let tokens = lexer.lex(input);
let parser = new MiniscriptParser(expressions, wrappers);
return parser.parse(tokens);
}
static parseScript(
input: string,
): string {
let parser = new MiniscriptParser(expressions, wrappers);
let reversedScript = input.split(" ").reverse();
return parser.parseScript(reversedScript);
}
}