@glimmer/syntax
Version:
98 lines (97 loc) • 4.62 kB
TypeScript
import type { Nullable } from '@glimmer/interfaces';
import { EntityParser, EventedTokenizer } from 'simple-html-tokenizer';
import type * as src from './source/api';
import type * as ASTv1 from './v1/api';
import type * as HBS from './v1/handlebars-ast';
export type ParserNodeBuilder<N extends {
loc: src.SourceSpan;
}> = Omit<N, 'loc'> & {
start: src.SourceOffset;
};
export interface StartTag {
readonly type: 'StartTag';
name: string;
nameStart: Nullable<src.SourceOffset>;
nameEnd: Nullable<src.SourceOffset>;
readonly attributes: ASTv1.AttrNode[];
readonly modifiers: ASTv1.ElementModifierStatement[];
readonly comments: ASTv1.MustacheCommentStatement[];
readonly params: ASTv1.VarHead[];
selfClosing: boolean;
readonly loc: src.SourceSpan;
}
export interface EndTag {
readonly type: 'EndTag';
name: string;
readonly loc: src.SourceSpan;
}
export interface Attribute {
name: string;
currentPart: ASTv1.TextNode | null;
parts: (ASTv1.MustacheStatement | ASTv1.TextNode)[];
isQuoted: boolean;
isDynamic: boolean;
start: src.SourceOffset;
valueSpan: src.SourceSpan;
}
export declare abstract class Parser {
protected elementStack: ASTv1.ParentNode[];
private lines;
readonly source: src.Source;
currentAttribute: Nullable<Attribute>;
currentNode: Nullable<Readonly<ParserNodeBuilder<ASTv1.CommentStatement> | ParserNodeBuilder<ASTv1.TextNode> | ParserNodeBuilder<StartTag> | ParserNodeBuilder<EndTag>>>;
tokenizer: EventedTokenizer;
constructor(source: src.Source, entityParser?: EntityParser, mode?: 'precompile' | 'codemod');
offset(): src.SourceOffset;
pos({ line, column }: src.SourcePosition): src.SourceOffset;
finish<T extends {
loc: src.SourceSpan;
}>(node: ParserNodeBuilder<T>): T;
abstract parse(node: HBS.Program, locals: string[]): ASTv1.Template;
abstract Program(node: HBS.Program): HBS.Output<'Program'>;
abstract MustacheStatement(node: HBS.MustacheStatement): HBS.Output<'MustacheStatement'>;
abstract Decorator(node: HBS.Decorator): HBS.Output<'Decorator'>;
abstract BlockStatement(node: HBS.BlockStatement): HBS.Output<'BlockStatement'>;
abstract DecoratorBlock(node: HBS.DecoratorBlock): HBS.Output<'DecoratorBlock'>;
abstract PartialStatement(node: HBS.PartialStatement): HBS.Output<'PartialStatement'>;
abstract PartialBlockStatement(node: HBS.PartialBlockStatement): HBS.Output<'PartialBlockStatement'>;
abstract ContentStatement(node: HBS.ContentStatement): HBS.Output<'ContentStatement'>;
abstract CommentStatement(node: HBS.CommentStatement): HBS.Output<'CommentStatement'>;
abstract SubExpression(node: HBS.SubExpression): HBS.Output<'SubExpression'>;
abstract PathExpression(node: HBS.PathExpression): HBS.Output<'PathExpression'>;
abstract StringLiteral(node: HBS.StringLiteral): HBS.Output<'StringLiteral'>;
abstract BooleanLiteral(node: HBS.BooleanLiteral): HBS.Output<'BooleanLiteral'>;
abstract NumberLiteral(node: HBS.NumberLiteral): HBS.Output<'NumberLiteral'>;
abstract UndefinedLiteral(node: HBS.UndefinedLiteral): HBS.Output<'UndefinedLiteral'>;
abstract NullLiteral(node: HBS.NullLiteral): HBS.Output<'NullLiteral'>;
abstract reset(): void;
abstract finishData(): void;
abstract tagOpen(): void;
abstract beginData(): void;
abstract appendToData(char: string): void;
abstract beginStartTag(): void;
abstract appendToTagName(char: string): void;
abstract beginAttribute(): void;
abstract appendToAttributeName(char: string): void;
abstract beginAttributeValue(quoted: boolean): void;
abstract appendToAttributeValue(char: string): void;
abstract finishAttributeValue(): void;
abstract markTagAsSelfClosing(): void;
abstract beginEndTag(): void;
abstract finishTag(): void;
abstract beginComment(): void;
abstract appendToCommentData(char: string): void;
abstract finishComment(): void;
abstract reportSyntaxError(error: string): void;
get currentAttr(): Attribute;
get currentTag(): ParserNodeBuilder<StartTag> | ParserNodeBuilder<EndTag>;
get currentStartTag(): ParserNodeBuilder<StartTag>;
get currentEndTag(): ParserNodeBuilder<EndTag>;
get currentComment(): ParserNodeBuilder<ASTv1.CommentStatement>;
get currentData(): ParserNodeBuilder<ASTv1.TextNode>;
acceptNode<T extends HBS.NodeType>(node: HBS.Node<T>): HBS.Output<T>;
currentElement(): ASTv1.ParentNode;
sourceForNode(node: HBS.Node, endNode?: {
loc: HBS.SourceLocation;
}): string;
}