UNPKG

7.46 kBTypeScriptView Raw
1import { Dict, Option, PresentArray, WireFormat } from '@glimmer/interfaces';
2import { SourceLocation } from '../source/location';
3import { SourceSpan } from '../source/span';
4export interface Symbols {
5 symbols: string[];
6 has(name: string): boolean;
7 get(name: string): number;
8 getLocalsMap(): Dict<number>;
9 getEvalInfo(): WireFormat.Core.EvalInfo;
10 allocateFree(name: string): number;
11 allocateNamed(name: string): number;
12 allocateBlock(name: string): number;
13 allocate(identifier: string): number;
14 child(locals: string[]): BlockSymbols;
15}
16export interface BlockSymbols extends Symbols {
17 slots: number[];
18}
19export interface ProgramSymbols extends Symbols {
20 freeVariables: string[];
21}
22export interface BaseNode {
23 type: NodeType;
24 loc: SourceSpan;
25}
26export interface CommonProgram extends BaseNode {
27 body: Statement[];
28 blockParams: string[];
29 chained?: boolean;
30}
31export interface Program extends CommonProgram {
32 type: 'Program';
33 symbols?: Symbols;
34}
35export interface Block extends CommonProgram {
36 type: 'Block';
37}
38export declare type EntityEncodingState = 'transformed' | 'raw';
39export interface Template extends CommonProgram {
40 type: 'Template';
41}
42export declare type PossiblyDeprecatedBlock = Block | Template;
43export interface CallParts {
44 path: Expression;
45 params: Expression[];
46 hash: Hash;
47}
48export interface Call extends BaseNode {
49 name?: Expression;
50 path: Expression;
51 params: Expression[];
52 hash: Hash;
53}
54export declare type CallNode = MustacheStatement | BlockStatement | ElementModifierStatement | SubExpression;
55export interface MustacheStatement extends BaseNode {
56 type: 'MustacheStatement';
57 path: Expression;
58 params: Expression[];
59 hash: Hash;
60 /** @deprecated */
61 escaped: boolean;
62 trusting: boolean;
63 strip: StripFlags;
64}
65export interface BlockStatement extends BaseNode {
66 type: 'BlockStatement';
67 path: Expression;
68 params: Expression[];
69 hash: Hash;
70 program: Block;
71 inverse?: Option<Block>;
72 openStrip: StripFlags;
73 inverseStrip: StripFlags;
74 closeStrip: StripFlags;
75 chained?: boolean;
76}
77export interface ElementModifierStatement extends BaseNode {
78 type: 'ElementModifierStatement';
79 path: Expression;
80 params: Expression[];
81 hash: Hash;
82}
83export interface PartialStatement extends BaseNode {
84 type: 'PartialStatement';
85 name: PathExpression | SubExpression;
86 params: Expression[];
87 hash: Hash;
88 indent: string;
89 strip: StripFlags;
90}
91export interface CommentStatement extends BaseNode {
92 type: 'CommentStatement';
93 value: string;
94}
95export interface MustacheCommentStatement extends BaseNode {
96 type: 'MustacheCommentStatement';
97 value: string;
98}
99export interface NamedBlockName {
100 type: 'NamedBlockName';
101 name: string;
102 loc: SourceLocation;
103}
104export interface ElementName {
105 type: 'ElementName';
106 name: string;
107 loc: SourceLocation;
108}
109export interface ElementNode extends BaseNode {
110 type: 'ElementNode';
111 tag: string;
112 selfClosing: boolean;
113 attributes: AttrNode[];
114 blockParams: string[];
115 modifiers: ElementModifierStatement[];
116 comments: MustacheCommentStatement[];
117 children: Statement[];
118}
119export declare type StatementName = 'MustacheStatement' | 'CommentStatement' | 'BlockStatement' | 'PartialStatement' | 'MustacheCommentStatement' | 'TextNode' | 'ElementNode';
120export interface AttrNode extends BaseNode {
121 type: 'AttrNode';
122 name: string;
123 value: TextNode | MustacheStatement | ConcatStatement;
124}
125export declare type AttrValue = TextNode | MustacheStatement | ConcatStatement;
126export interface TextNode extends BaseNode {
127 type: 'TextNode';
128 chars: string;
129}
130export interface ConcatStatement extends BaseNode {
131 type: 'ConcatStatement';
132 parts: PresentArray<TextNode | MustacheStatement>;
133}
134export declare type ExpressionName = 'SubExpression' | 'PathExpression' | LiteralName;
135export interface SubExpression extends Call {
136 type: 'SubExpression';
137 path: Expression;
138 params: Expression[];
139 hash: Hash;
140}
141export interface ThisHead {
142 type: 'ThisHead';
143 loc: SourceLocation;
144}
145export interface AtHead {
146 type: 'AtHead';
147 name: string;
148 loc: SourceLocation;
149}
150export interface VarHead {
151 type: 'VarHead';
152 name: string;
153 loc: SourceLocation;
154}
155export interface FreeVarHead {
156 type: 'FreeVarHead';
157 name: string;
158 loc: SourceLocation;
159}
160export interface LocalVarHead {
161 type: 'LocalVarHead';
162 name: string;
163 loc: SourceLocation;
164}
165export declare type PathHead = ThisHead | AtHead | VarHead;
166export interface MinimalPathExpression extends BaseNode {
167 type: 'PathExpression';
168 head: PathHead;
169 tail: string[];
170}
171export interface PathExpression extends MinimalPathExpression {
172 type: 'PathExpression';
173 original: string;
174 head: PathHead;
175 tail: string[];
176 /**
177 * @deprecated use `head` and `tail` instead
178 */
179 parts: string[];
180 /**
181 * @deprecated use `head.type` instead
182 */
183 this: boolean;
184 /**
185 * @deprecated use `head.type' instead
186 */
187 data: boolean;
188}
189export declare type LiteralName = 'StringLiteral' | 'BooleanLiteral' | 'NumberLiteral' | 'UndefinedLiteral' | 'NullLiteral';
190export interface StringLiteral extends BaseNode {
191 type: 'StringLiteral';
192 value: string;
193 original: string;
194}
195export interface BooleanLiteral extends BaseNode {
196 type: 'BooleanLiteral';
197 value: boolean;
198 original: boolean;
199}
200export interface NumberLiteral extends BaseNode {
201 type: 'NumberLiteral';
202 value: number;
203 original: number;
204}
205export interface UndefinedLiteral extends BaseNode {
206 type: 'UndefinedLiteral';
207 value: undefined;
208 original: undefined;
209}
210export interface NullLiteral extends BaseNode {
211 type: 'NullLiteral';
212 value: null;
213 original: null;
214}
215export interface Hash extends BaseNode {
216 type: 'Hash';
217 pairs: HashPair[];
218}
219export interface HashPair extends BaseNode {
220 type: 'HashPair';
221 key: string;
222 value: Expression;
223}
224export interface StripFlags {
225 open: boolean;
226 close: boolean;
227}
228export declare type SharedNodes = {
229 CommentStatement: CommentStatement;
230 MustacheCommentStatement: MustacheCommentStatement;
231 TextNode: TextNode;
232 StringLiteral: StringLiteral;
233 BooleanLiteral: BooleanLiteral;
234 NumberLiteral: NumberLiteral;
235 NullLiteral: NullLiteral;
236 UndefinedLiteral: UndefinedLiteral;
237 MustacheStatement: MustacheStatement;
238 ElementModifierStatement: ElementModifierStatement;
239 PartialStatement: PartialStatement;
240 AttrNode: AttrNode;
241 ConcatStatement: ConcatStatement;
242};
243export declare type Nodes = SharedNodes & {
244 Program: Program;
245 Template: Template;
246 Block: Block;
247 BlockStatement: BlockStatement;
248 ElementNode: ElementNode;
249 SubExpression: SubExpression;
250 PathExpression: PathExpression;
251 Hash: Hash;
252 HashPair: HashPair;
253};
254export declare type NodeType = keyof Nodes;
255export declare type Node = Nodes[NodeType];
256export declare type Statement = Nodes[StatementName];
257export declare type Statements = Pick<Nodes, StatementName>;
258export declare type Literal = Nodes[LiteralName];
259export declare type Expression = Nodes[ExpressionName];
260export declare type Expressions = Pick<Nodes, ExpressionName>;
261export declare type TopLevelStatement = Statement | Nodes['Block'];
262//# sourceMappingURL=nodes-v1.d.ts.map
\No newline at end of file