UNPKG

21.6 kBTypeScriptView Raw
1export interface Node {
2 start: number
3 end: number
4 type: string
5 range?: [number, number]
6 loc?: SourceLocation | null
7}
8
9export interface SourceLocation {
10 source?: string | null
11 start: Position
12 end: Position
13}
14
15export interface Position {
16 /** 1-based */
17 line: number
18 /** 0-based */
19 column: number
20}
21
22export interface Identifier extends Node {
23 type: "Identifier"
24 name: string
25}
26
27export interface Literal extends Node {
28 type: "Literal"
29 value?: string | boolean | null | number | RegExp | bigint
30 raw?: string
31 regex?: {
32 pattern: string
33 flags: string
34 }
35 bigint?: string
36}
37
38export interface Program extends Node {
39 type: "Program"
40 body: Array<Statement | ModuleDeclaration>
41 sourceType: "script" | "module"
42}
43
44export interface Function extends Node {
45 id?: Identifier | null
46 params: Array<Pattern>
47 body: BlockStatement | Expression
48 generator: boolean
49 expression: boolean
50 async: boolean
51}
52
53export interface ExpressionStatement extends Node {
54 type: "ExpressionStatement"
55 expression: Expression | Literal
56 directive?: string
57}
58
59export interface BlockStatement extends Node {
60 type: "BlockStatement"
61 body: Array<Statement>
62}
63
64export interface EmptyStatement extends Node {
65 type: "EmptyStatement"
66}
67
68export interface DebuggerStatement extends Node {
69 type: "DebuggerStatement"
70}
71
72export interface WithStatement extends Node {
73 type: "WithStatement"
74 object: Expression
75 body: Statement
76}
77
78export interface ReturnStatement extends Node {
79 type: "ReturnStatement"
80 argument?: Expression | null
81}
82
83export interface LabeledStatement extends Node {
84 type: "LabeledStatement"
85 label: Identifier
86 body: Statement
87}
88
89export interface BreakStatement extends Node {
90 type: "BreakStatement"
91 label?: Identifier | null
92}
93
94export interface ContinueStatement extends Node {
95 type: "ContinueStatement"
96 label?: Identifier | null
97}
98
99export interface IfStatement extends Node {
100 type: "IfStatement"
101 test: Expression
102 consequent: Statement
103 alternate?: Statement | null
104}
105
106export interface SwitchStatement extends Node {
107 type: "SwitchStatement"
108 discriminant: Expression
109 cases: Array<SwitchCase>
110}
111
112export interface SwitchCase extends Node {
113 type: "SwitchCase"
114 test?: Expression | null
115 consequent: Array<Statement>
116}
117
118export interface ThrowStatement extends Node {
119 type: "ThrowStatement"
120 argument: Expression
121}
122
123export interface TryStatement extends Node {
124 type: "TryStatement"
125 block: BlockStatement
126 handler?: CatchClause | null
127 finalizer?: BlockStatement | null
128}
129
130export interface CatchClause extends Node {
131 type: "CatchClause"
132 param?: Pattern | null
133 body: BlockStatement
134}
135
136export interface WhileStatement extends Node {
137 type: "WhileStatement"
138 test: Expression
139 body: Statement
140}
141
142export interface DoWhileStatement extends Node {
143 type: "DoWhileStatement"
144 body: Statement
145 test: Expression
146}
147
148export interface ForStatement extends Node {
149 type: "ForStatement"
150 init?: VariableDeclaration | Expression | null
151 test?: Expression | null
152 update?: Expression | null
153 body: Statement
154}
155
156export interface ForInStatement extends Node {
157 type: "ForInStatement"
158 left: VariableDeclaration | Pattern
159 right: Expression
160 body: Statement
161}
162
163export interface FunctionDeclaration extends Function {
164 type: "FunctionDeclaration"
165 id: Identifier
166 body: BlockStatement
167}
168
169export interface VariableDeclaration extends Node {
170 type: "VariableDeclaration"
171 declarations: Array<VariableDeclarator>
172 kind: "var" | "let" | "const"
173}
174
175export interface VariableDeclarator extends Node {
176 type: "VariableDeclarator"
177 id: Pattern
178 init?: Expression | null
179}
180
181export interface ThisExpression extends Node {
182 type: "ThisExpression"
183}
184
185export interface ArrayExpression extends Node {
186 type: "ArrayExpression"
187 elements: Array<Expression | SpreadElement | null>
188}
189
190export interface ObjectExpression extends Node {
191 type: "ObjectExpression"
192 properties: Array<Property | SpreadElement>
193}
194
195export interface Property extends Node {
196 type: "Property"
197 key: Expression
198 value: Expression
199 kind: "init" | "get" | "set"
200 method: boolean
201 shorthand: boolean
202 computed: boolean
203}
204
205export interface FunctionExpression extends Function {
206 type: "FunctionExpression"
207 body: BlockStatement
208}
209
210export interface UnaryExpression extends Node {
211 type: "UnaryExpression"
212 operator: UnaryOperator
213 prefix: boolean
214 argument: Expression
215}
216
217export type UnaryOperator = "-" | "+" | "!" | "~" | "typeof" | "void" | "delete"
218
219export interface UpdateExpression extends Node {
220 type: "UpdateExpression"
221 operator: UpdateOperator
222 argument: Expression
223 prefix: boolean
224}
225
226export type UpdateOperator = "++" | "--"
227
228export interface BinaryExpression extends Node {
229 type: "BinaryExpression"
230 operator: BinaryOperator
231 left: Expression | PrivateIdentifier
232 right: Expression
233}
234
235export type BinaryOperator = "==" | "!=" | "===" | "!==" | "<" | "<=" | ">" | ">=" | "<<" | ">>" | ">>>" | "+" | "-" | "*" | "/" | "%" | "|" | "^" | "&" | "in" | "instanceof" | "**"
236
237export interface AssignmentExpression extends Node {
238 type: "AssignmentExpression"
239 operator: AssignmentOperator
240 left: Pattern
241 right: Expression
242}
243
244export type AssignmentOperator = "=" | "+=" | "-=" | "*=" | "/=" | "%=" | "<<=" | ">>=" | ">>>=" | "|=" | "^=" | "&=" | "**=" | "||=" | "&&=" | "??="
245
246export interface LogicalExpression extends Node {
247 type: "LogicalExpression"
248 operator: LogicalOperator
249 left: Expression
250 right: Expression
251}
252
253export type LogicalOperator = "||" | "&&" | "??"
254
255export interface MemberExpression extends Node {
256 type: "MemberExpression"
257 object: Expression | Super
258 property: Expression | PrivateIdentifier
259 computed: boolean
260 optional: boolean
261}
262
263export interface ConditionalExpression extends Node {
264 type: "ConditionalExpression"
265 test: Expression
266 alternate: Expression
267 consequent: Expression
268}
269
270export interface CallExpression extends Node {
271 type: "CallExpression"
272 callee: Expression | Super
273 arguments: Array<Expression | SpreadElement>
274 optional: boolean
275}
276
277export interface NewExpression extends Node {
278 type: "NewExpression"
279 callee: Expression
280 arguments: Array<Expression | SpreadElement>
281}
282
283export interface SequenceExpression extends Node {
284 type: "SequenceExpression"
285 expressions: Array<Expression>
286}
287
288export interface ForOfStatement extends Node {
289 type: "ForOfStatement"
290 left: VariableDeclaration | Pattern
291 right: Expression
292 body: Statement
293 await: boolean
294}
295
296export interface Super extends Node {
297 type: "Super"
298}
299
300export interface SpreadElement extends Node {
301 type: "SpreadElement"
302 argument: Expression
303}
304
305export interface ArrowFunctionExpression extends Function {
306 type: "ArrowFunctionExpression"
307}
308
309export interface YieldExpression extends Node {
310 type: "YieldExpression"
311 argument?: Expression | null
312 delegate: boolean
313}
314
315export interface TemplateLiteral extends Node {
316 type: "TemplateLiteral"
317 quasis: Array<TemplateElement>
318 expressions: Array<Expression>
319}
320
321export interface TaggedTemplateExpression extends Node {
322 type: "TaggedTemplateExpression"
323 tag: Expression
324 quasi: TemplateLiteral
325}
326
327export interface TemplateElement extends Node {
328 type: "TemplateElement"
329 tail: boolean
330 value: {
331 cooked?: string | null
332 raw: string
333 }
334}
335
336export interface AssignmentProperty extends Node {
337 type: "Property"
338 key: Expression
339 value: Pattern
340 kind: "init"
341 method: false
342 shorthand: boolean
343 computed: boolean
344}
345
346export interface ObjectPattern extends Node {
347 type: "ObjectPattern"
348 properties: Array<AssignmentProperty | RestElement>
349}
350
351export interface ArrayPattern extends Node {
352 type: "ArrayPattern"
353 elements: Array<Pattern | null>
354}
355
356export interface RestElement extends Node {
357 type: "RestElement"
358 argument: Pattern
359}
360
361export interface AssignmentPattern extends Node {
362 type: "AssignmentPattern"
363 left: Pattern
364 right: Expression
365}
366
367export interface Class extends Node {
368 id?: Identifier | null
369 superClass?: Expression | null
370 body: ClassBody
371}
372
373export interface ClassBody extends Node {
374 type: "ClassBody"
375 body: Array<MethodDefinition | PropertyDefinition | StaticBlock>
376}
377
378export interface MethodDefinition extends Node {
379 type: "MethodDefinition"
380 key: Expression | PrivateIdentifier
381 value: FunctionExpression
382 kind: "constructor" | "method" | "get" | "set"
383 computed: boolean
384 static: boolean
385}
386
387export interface ClassDeclaration extends Class {
388 type: "ClassDeclaration"
389 id: Identifier
390}
391
392export interface ClassExpression extends Class {
393 type: "ClassExpression"
394}
395
396export interface MetaProperty extends Node {
397 type: "MetaProperty"
398 meta: Identifier
399 property: Identifier
400}
401
402export interface ImportDeclaration extends Node {
403 type: "ImportDeclaration"
404 specifiers: Array<ImportSpecifier | ImportDefaultSpecifier | ImportNamespaceSpecifier>
405 source: Literal
406 attributes: Array<ImportAttribute>
407}
408
409export interface ImportSpecifier extends Node {
410 type: "ImportSpecifier"
411 imported: Identifier | Literal
412 local: Identifier
413}
414
415export interface ImportDefaultSpecifier extends Node {
416 type: "ImportDefaultSpecifier"
417 local: Identifier
418}
419
420export interface ImportNamespaceSpecifier extends Node {
421 type: "ImportNamespaceSpecifier"
422 local: Identifier
423}
424
425export interface ImportAttribute extends Node {
426 type: "ImportAttribute"
427 key: Identifier | Literal
428 value: Literal
429}
430
431export interface ExportNamedDeclaration extends Node {
432 type: "ExportNamedDeclaration"
433 declaration?: Declaration | null
434 specifiers: Array<ExportSpecifier>
435 source?: Literal | null
436 attributes: Array<ImportAttribute>
437}
438
439export interface ExportSpecifier extends Node {
440 type: "ExportSpecifier"
441 exported: Identifier | Literal
442 local: Identifier | Literal
443}
444
445export interface AnonymousFunctionDeclaration extends Function {
446 type: "FunctionDeclaration"
447 id: null
448 body: BlockStatement
449}
450
451export interface AnonymousClassDeclaration extends Class {
452 type: "ClassDeclaration"
453 id: null
454}
455
456export interface ExportDefaultDeclaration extends Node {
457 type: "ExportDefaultDeclaration"
458 declaration: AnonymousFunctionDeclaration | FunctionDeclaration | AnonymousClassDeclaration | ClassDeclaration | Expression
459}
460
461export interface ExportAllDeclaration extends Node {
462 type: "ExportAllDeclaration"
463 source: Literal
464 exported?: Identifier | Literal | null
465 attributes: Array<ImportAttribute>
466}
467
468export interface AwaitExpression extends Node {
469 type: "AwaitExpression"
470 argument: Expression
471}
472
473export interface ChainExpression extends Node {
474 type: "ChainExpression"
475 expression: MemberExpression | CallExpression
476}
477
478export interface ImportExpression extends Node {
479 type: "ImportExpression"
480 source: Expression
481 options: Expression | null
482}
483
484export interface ParenthesizedExpression extends Node {
485 type: "ParenthesizedExpression"
486 expression: Expression
487}
488
489export interface PropertyDefinition extends Node {
490 type: "PropertyDefinition"
491 key: Expression | PrivateIdentifier
492 value?: Expression | null
493 computed: boolean
494 static: boolean
495}
496
497export interface PrivateIdentifier extends Node {
498 type: "PrivateIdentifier"
499 name: string
500}
501
502export interface StaticBlock extends Node {
503 type: "StaticBlock"
504 body: Array<Statement>
505}
506
507export type Statement =
508| ExpressionStatement
509| BlockStatement
510| EmptyStatement
511| DebuggerStatement
512| WithStatement
513| ReturnStatement
514| LabeledStatement
515| BreakStatement
516| ContinueStatement
517| IfStatement
518| SwitchStatement
519| ThrowStatement
520| TryStatement
521| WhileStatement
522| DoWhileStatement
523| ForStatement
524| ForInStatement
525| ForOfStatement
526| Declaration
527
528export type Declaration =
529| FunctionDeclaration
530| VariableDeclaration
531| ClassDeclaration
532
533export type Expression =
534| Identifier
535| Literal
536| ThisExpression
537| ArrayExpression
538| ObjectExpression
539| FunctionExpression
540| UnaryExpression
541| UpdateExpression
542| BinaryExpression
543| AssignmentExpression
544| LogicalExpression
545| MemberExpression
546| ConditionalExpression
547| CallExpression
548| NewExpression
549| SequenceExpression
550| ArrowFunctionExpression
551| YieldExpression
552| TemplateLiteral
553| TaggedTemplateExpression
554| ClassExpression
555| MetaProperty
556| AwaitExpression
557| ChainExpression
558| ImportExpression
559| ParenthesizedExpression
560
561export type Pattern =
562| Identifier
563| MemberExpression
564| ObjectPattern
565| ArrayPattern
566| RestElement
567| AssignmentPattern
568
569export type ModuleDeclaration =
570| ImportDeclaration
571| ExportNamedDeclaration
572| ExportDefaultDeclaration
573| ExportAllDeclaration
574
575export type AnyNode = Statement | Expression | Declaration | ModuleDeclaration | Literal | Program | SwitchCase | CatchClause | Property | Super | SpreadElement | TemplateElement | AssignmentProperty | ObjectPattern | ArrayPattern | RestElement | AssignmentPattern | ClassBody | MethodDefinition | MetaProperty | ImportAttribute | ImportSpecifier | ImportDefaultSpecifier | ImportNamespaceSpecifier | ExportSpecifier | AnonymousFunctionDeclaration | AnonymousClassDeclaration | PropertyDefinition | PrivateIdentifier | StaticBlock | VariableDeclarator
576
577export function parse(input: string, options: Options): Program
578
579export function parseExpressionAt(input: string, pos: number, options: Options): Expression
580
581export function tokenizer(input: string, options: Options): {
582 getToken(): Token
583 [Symbol.iterator](): Iterator<Token>
584}
585
586export type ecmaVersion = 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 | "latest"
587
588export interface Options {
589 /**
590 * `ecmaVersion` indicates the ECMAScript version to parse. Can be a
591 * number, either in year (`2022`) or plain version number (`6`) form,
592 * or `"latest"` (the latest the library supports). This influences
593 * support for strict mode, the set of reserved words, and support for
594 * new syntax features.
595 */
596 ecmaVersion: ecmaVersion
597
598 /**
599 * `sourceType` indicates the mode the code should be parsed in.
600 * Can be either `"script"` or `"module"`. This influences global
601 * strict mode and parsing of `import` and `export` declarations.
602 */
603 sourceType?: "script" | "module"
604
605 /**
606 * a callback that will be called when a semicolon is automatically inserted.
607 * @param lastTokEnd the position of the comma as an offset
608 * @param lastTokEndLoc location if {@link locations} is enabled
609 */
610 onInsertedSemicolon?: (lastTokEnd: number, lastTokEndLoc?: Position) => void
611
612 /**
613 * similar to `onInsertedSemicolon`, but for trailing commas
614 * @param lastTokEnd the position of the comma as an offset
615 * @param lastTokEndLoc location if `locations` is enabled
616 */
617 onTrailingComma?: (lastTokEnd: number, lastTokEndLoc?: Position) => void
618
619 /**
620 * By default, reserved words are only enforced if ecmaVersion >= 5.
621 * Set `allowReserved` to a boolean value to explicitly turn this on
622 * an off. When this option has the value "never", reserved words
623 * and keywords can also not be used as property names.
624 */
625 allowReserved?: boolean | "never"
626
627 /**
628 * When enabled, a return at the top level is not considered an error.
629 */
630 allowReturnOutsideFunction?: boolean
631
632 /**
633 * When enabled, import/export statements are not constrained to
634 * appearing at the top of the program, and an import.meta expression
635 * in a script isn't considered an error.
636 */
637 allowImportExportEverywhere?: boolean
638
639 /**
640 * By default, `await` identifiers are allowed to appear at the top-level scope only if {@link ecmaVersion} >= 2022.
641 * When enabled, await identifiers are allowed to appear at the top-level scope,
642 * but they are still not allowed in non-async functions.
643 */
644 allowAwaitOutsideFunction?: boolean
645
646 /**
647 * When enabled, super identifiers are not constrained to
648 * appearing in methods and do not raise an error when they appear elsewhere.
649 */
650 allowSuperOutsideMethod?: boolean
651
652 /**
653 * When enabled, hashbang directive in the beginning of file is
654 * allowed and treated as a line comment. Enabled by default when
655 * {@link ecmaVersion} >= 2023.
656 */
657 allowHashBang?: boolean
658
659 /**
660 * By default, the parser will verify that private properties are
661 * only used in places where they are valid and have been declared.
662 * Set this to false to turn such checks off.
663 */
664 checkPrivateFields?: boolean
665
666 /**
667 * When `locations` is on, `loc` properties holding objects with
668 * `start` and `end` properties as {@link Position} objects will be attached to the
669 * nodes.
670 */
671 locations?: boolean
672
673 /**
674 * a callback that will cause Acorn to call that export function with object in the same
675 * format as tokens returned from `tokenizer().getToken()`. Note
676 * that you are not allowed to call the parser from the
677 * callback—that will corrupt its internal state.
678 */
679 onToken?: ((token: Token) => void) | Token[]
680
681
682 /**
683 * This takes a export function or an array.
684 *
685 * When a export function is passed, Acorn will call that export function with `(block, text, start,
686 * end)` parameters whenever a comment is skipped. `block` is a
687 * boolean indicating whether this is a block (`/* *\/`) comment,
688 * `text` is the content of the comment, and `start` and `end` are
689 * character offsets that denote the start and end of the comment.
690 * When the {@link locations} option is on, two more parameters are
691 * passed, the full locations of {@link Position} export type of the start and
692 * end of the comments.
693 *
694 * When a array is passed, each found comment of {@link Comment} export type is pushed to the array.
695 *
696 * Note that you are not allowed to call the
697 * parser from the callback—that will corrupt its internal state.
698 */
699 onComment?: ((
700 isBlock: boolean, text: string, start: number, end: number, startLoc?: Position,
701 endLoc?: Position
702 ) => void) | Comment[]
703
704 /**
705 * Nodes have their start and end characters offsets recorded in
706 * `start` and `end` properties (directly on the node, rather than
707 * the `loc` object, which holds line/column data. To also add a
708 * [semi-standardized][range] `range` property holding a `[start,
709 * end]` array with the same numbers, set the `ranges` option to
710 * `true`.
711 */
712 ranges?: boolean
713
714 /**
715 * It is possible to parse multiple files into a single AST by
716 * passing the tree produced by parsing the first file as
717 * `program` option in subsequent parses. This will add the
718 * toplevel forms of the parsed file to the `Program` (top) node
719 * of an existing parse tree.
720 */
721 program?: Node
722
723 /**
724 * When {@link locations} is on, you can pass this to record the source
725 * file in every node's `loc` object.
726 */
727 sourceFile?: string
728
729 /**
730 * This value, if given, is stored in every node, whether {@link locations} is on or off.
731 */
732 directSourceFile?: string
733
734 /**
735 * When enabled, parenthesized expressions are represented by
736 * (non-standard) ParenthesizedExpression nodes
737 */
738 preserveParens?: boolean
739}
740
741export class Parser {
742 options: Options
743 input: string
744
745 protected constructor(options: Options, input: string, startPos?: number)
746 parse(): Program
747
748 static parse(input: string, options: Options): Program
749 static parseExpressionAt(input: string, pos: number, options: Options): Expression
750 static tokenizer(input: string, options: Options): {
751 getToken(): Token
752 [Symbol.iterator](): Iterator<Token>
753 }
754 static extend(...plugins: ((BaseParser: typeof Parser) => typeof Parser)[]): typeof Parser
755}
756
757export const defaultOptions: Options
758
759export function getLineInfo(input: string, offset: number): Position
760
761export class TokenType {
762 label: string
763 keyword: string | undefined
764}
765
766export const tokTypes: {
767 num: TokenType
768 regexp: TokenType
769 string: TokenType
770 name: TokenType
771 privateId: TokenType
772 eof: TokenType
773
774 bracketL: TokenType
775 bracketR: TokenType
776 braceL: TokenType
777 braceR: TokenType
778 parenL: TokenType
779 parenR: TokenType
780 comma: TokenType
781 semi: TokenType
782 colon: TokenType
783 dot: TokenType
784 question: TokenType
785 questionDot: TokenType
786 arrow: TokenType
787 template: TokenType
788 invalidTemplate: TokenType
789 ellipsis: TokenType
790 backQuote: TokenType
791 dollarBraceL: TokenType
792
793 eq: TokenType
794 assign: TokenType
795 incDec: TokenType
796 prefix: TokenType
797 logicalOR: TokenType
798 logicalAND: TokenType
799 bitwiseOR: TokenType
800 bitwiseXOR: TokenType
801 bitwiseAND: TokenType
802 equality: TokenType
803 relational: TokenType
804 bitShift: TokenType
805 plusMin: TokenType
806 modulo: TokenType
807 star: TokenType
808 slash: TokenType
809 starstar: TokenType
810 coalesce: TokenType
811
812 _break: TokenType
813 _case: TokenType
814 _catch: TokenType
815 _continue: TokenType
816 _debugger: TokenType
817 _default: TokenType
818 _do: TokenType
819 _else: TokenType
820 _finally: TokenType
821 _for: TokenType
822 _function: TokenType
823 _if: TokenType
824 _return: TokenType
825 _switch: TokenType
826 _throw: TokenType
827 _try: TokenType
828 _var: TokenType
829 _const: TokenType
830 _while: TokenType
831 _with: TokenType
832 _new: TokenType
833 _this: TokenType
834 _super: TokenType
835 _class: TokenType
836 _extends: TokenType
837 _export: TokenType
838 _import: TokenType
839 _null: TokenType
840 _true: TokenType
841 _false: TokenType
842 _in: TokenType
843 _instanceof: TokenType
844 _typeof: TokenType
845 _void: TokenType
846 _delete: TokenType
847}
848
849export interface Comment {
850 type: "Line" | "Block"
851 value: string
852 start: number
853 end: number
854 loc?: SourceLocation
855 range?: [number, number]
856}
857
858export class Token {
859 type: TokenType
860 start: number
861 end: number
862 loc?: SourceLocation
863 range?: [number, number]
864}
865
866export const version: string
867
\No newline at end of file