llmxml
Version:
Convert between markdown and LLM-friendly pseudo-XML
95 lines (81 loc) • 1.76 kB
text/typescript
export interface SourceLocation {
start: {
offset: number;
line: number;
column: number;
};
end: {
offset: number;
line: number;
column: number;
};
}
export interface ParseOptions {
filename?: string;
}
export interface ParseResult {
ast: ASTNode[];
errors: ParseError[];
}
export class ParseError extends Error {
constructor(
message: string,
public location: SourceLocation
) {
super(message);
this.name = 'ParseError';
}
}
export interface BaseNode {
type: string;
location?: SourceLocation;
}
export interface TagNode extends BaseNode {
type: 'tag';
name: string;
attributes: Record<string, string>;
children?: ASTNode[];
text?: string;
depth?: number;
}
export interface TextNode extends BaseNode {
type: 'text';
value: string;
textType?: 'code';
language?: string;
}
export interface HeadingNode extends BaseNode {
type: 'heading';
text: string;
depth: number;
children: ASTNode[];
}
export interface CodeBlockNode extends BaseNode {
type: 'code';
value: string;
lang?: string;
}
export interface ListNode extends BaseNode {
type: 'list';
ordered?: boolean;
children: ASTNode[];
}
export interface ListItemNode extends BaseNode {
type: 'listItem';
children: ASTNode[];
}
export interface ParagraphNode extends BaseNode {
type: 'paragraph';
children: ASTNode[];
}
export interface EmphasisNode extends BaseNode {
type: 'emphasis' | 'strong';
marker?: string;
children: ASTNode[];
}
export interface LinkNode extends BaseNode {
type: 'link';
url: string;
children: ASTNode[];
}
export type ASTNode = TagNode | TextNode | HeadingNode | CodeBlockNode | ListNode | ListItemNode | ParagraphNode | EmphasisNode | LinkNode;