Skip to content

Commit c121f93

Browse files
committed
Create subscript.d.ts
1 parent e1a1d5b commit c121f93

1 file changed

Lines changed: 46 additions & 0 deletions

File tree

subscript.d.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// AST node types
2+
export type Identifier = string;
3+
export type Literal = [undefined, any];
4+
export type Operation = [string, ...AST[]];
5+
export type AST = Identifier | Literal | Operation;
6+
7+
// Evaluator function
8+
export type Evaluator = (ctx?: any) => any;
9+
10+
// Operator compiler: receives args, returns evaluator
11+
export type Operator = (...args: AST[]) => Evaluator | undefined;
12+
13+
// Parse exports
14+
export let idx: number;
15+
export let cur: string;
16+
export function parse(s: string): AST;
17+
export function err(msg?: string, at?: number): never;
18+
export function loc<T>(node: T, at?: number): T;
19+
export function next(is: (c: number) => number, from?: number): string;
20+
export function skip(n?: number): string;
21+
export function seek(n: number): number;
22+
export function expr(prec?: number, end?: number): AST;
23+
export const lookup: ((a: AST, prec: number, op?: string) => AST)[];
24+
export function token(op: string, prec?: number, map?: (a: AST) => AST): void;
25+
export function binary(op: string, prec: number, right?: boolean): void;
26+
export function unary(op: string, prec: number, post?: boolean): void;
27+
export function literal(op: string, val: any): void;
28+
export function nary(op: string, prec: number, right?: boolean): void;
29+
export function group(op: string, prec: number): void;
30+
export function access(op: string, prec: number): void;
31+
32+
// Compile exports
33+
export const operators: Record<string, Operator>;
34+
export function operator(op: string, fn: Operator): void;
35+
export function compile(node: AST): Evaluator;
36+
37+
// Default export
38+
export default parse;
39+
40+
// subscript template tag
41+
interface Subscript {
42+
(strings: TemplateStringsArray, ...values: any[]): Evaluator;
43+
(s: string): Evaluator;
44+
}
45+
declare const subscript: Subscript;
46+
export { subscript };

0 commit comments

Comments
 (0)