import { TSESTree } from "@typescript-eslint/types"; import { ScopeManager } from "@typescript-eslint/scope-manager"; import * as compilerBinding from "@astrojs/compiler-binding"; import { VisitorKeys as VisitorKeys$1 } from "@typescript-eslint/visitor-keys"; //#region src/context/index.d.ts type RangeAndLoc = { range: TSESTree.Range; loc: TSESTree.SourceLocation; }; declare class Context { readonly code: string; readonly filePath?: string; readonly locs: LinesAndColumns; private readonly locsMap; private readonly state; constructor(code: string, filePath?: string); getLocFromIndex(index: number): { line: number; column: number; }; getIndexFromLoc(loc: { line: number; column: number; }): number; /** * Get the location information of the given indexes. */ getLocations(start: number, end: number): RangeAndLoc; /** * Build token */ buildToken(type: TSESTree.Token["type"], range: TSESTree.Range): TSESTree.Token; /** * get text */ getText(range: TSESTree.Range): string; get originalAST(): any; set originalAST(originalAST: any); } declare class LinesAndColumns { private readonly lineStartIndices; private readonly code; constructor(origCode: string); getLocFromIndex(index: number): { line: number; column: number; }; getIndexFromLoc(loc: { line: number; column: number; }): number; } //#endregion //#region src/ast/base.d.ts interface BaseNode { loc: TSESTree.SourceLocation; range: TSESTree.Range; type: string; } //#endregion //#region src/ast/jsx.d.ts type JSXNode = JSXAttribute | JSXClosingElement | JSXClosingFragment | JSXElement | JSXEmptyExpression | JSXExpressionContainer | JSXFragment | JSXIdentifier | JSXMemberExpression | JSXNamespacedName | JSXOpeningElement | JSXOpeningFragment | JSXSpreadAttribute | JSXSpreadChild | JSXText; type JSXChild = JSXElement | JSXFragment | JSXExpression | JSXText | AstroHTMLComment | AstroRawText; type JSXParentNode = JSXElement | JSXFragment | AstroFragment; interface JSXElement extends BaseNode { type: "JSXElement"; openingElement: JSXOpeningElement; closingElement: JSXClosingElement | null; children: JSXChild[]; parent?: JSXParentNode; } interface JSXFragment extends BaseNode { type: "JSXFragment"; openingFragment: JSXOpeningFragment; closingFragment: JSXClosingFragment; children: JSXChild[]; parent?: JSXParentNode; } interface JSXOpeningElement extends BaseNode { type: "JSXOpeningElement"; typeParameters?: TSESTree.TSTypeParameterInstantiation; selfClosing: boolean; name: JSXTagNameExpression; attributes: (JSXAttribute | JSXSpreadAttribute | AstroShorthandAttribute | AstroTemplateLiteralAttribute)[]; parent?: JSXElement; } interface JSXClosingElement extends BaseNode { type: "JSXClosingElement"; name: JSXTagNameExpression; parent?: JSXElement; } interface JSXClosingFragment extends BaseNode { type: "JSXClosingFragment"; parent?: JSXFragment; } interface JSXOpeningFragment extends BaseNode { type: "JSXOpeningFragment"; parent?: JSXFragment; } interface JSXAttribute extends BaseNode { type: "JSXAttribute"; name: JSXIdentifier | JSXNamespacedName; value: JSXExpression | TSESTree.Literal | null; parent?: JSXOpeningElement; } interface JSXSpreadAttribute extends BaseNode { type: "JSXSpreadAttribute"; argument: TSESTree.Expression; parent?: JSXOpeningElement; } type JSXTagNameExpression = JSXIdentifier | JSXMemberExpression | JSXNamespacedName; interface JSXIdentifier extends BaseNode { type: "JSXIdentifier"; name: string; parent?: JSXAttribute | AstroShorthandAttribute | AstroTemplateLiteralAttribute | JSXMemberExpression | JSXNamespacedName | JSXOpeningElement | JSXClosingElement; } interface JSXMemberExpression extends BaseNode { type: "JSXMemberExpression"; object: JSXTagNameExpression; property: JSXIdentifier; parent?: JSXMemberExpression | JSXOpeningElement | JSXClosingElement; } interface JSXNamespacedName extends BaseNode { type: "JSXNamespacedName"; namespace: JSXIdentifier; name: JSXIdentifier; parent?: JSXAttribute | AstroShorthandAttribute | AstroTemplateLiteralAttribute | JSXMemberExpression | JSXOpeningElement | JSXClosingElement; } type JSXExpression = JSXExpressionContainer | JSXSpreadChild; interface JSXExpressionContainer extends BaseNode { type: "JSXExpressionContainer"; expression: TSESTree.Expression | JSXEmptyExpression; parent?: JSXAttribute | AstroShorthandAttribute | AstroTemplateLiteralAttribute | JSXParentNode; } interface JSXSpreadChild extends BaseNode { type: "JSXSpreadChild"; expression: TSESTree.Expression; parent?: JSXAttribute | JSXParentNode; } interface JSXEmptyExpression extends BaseNode { type: "JSXEmptyExpression"; parent?: JSXExpressionContainer; } interface JSXText extends BaseNode { type: "JSXText"; value: string; raw: string; parent?: JSXParentNode; } //#endregion //#region src/ast/astro.d.ts type AstroNode = AstroProgram | AstroFragment | AstroHTMLComment | AstroDoctype | AstroShorthandAttribute | AstroTemplateLiteralAttribute | AstroRawText; type AstroChild = JSXElement | JSXFragment | JSXExpression | JSXText | AstroHTMLComment | AstroRawText; type AstroParentNode = JSXElement | JSXFragment | AstroFragment; /** Node of Astro program root */ interface AstroProgram extends Omit { type: "Program"; body: (TSESTree.Program["body"][number] | AstroFragment)[]; sourceType: "script" | "module"; comments: TSESTree.Comment[]; tokens: TSESTree.Token[]; parent?: undefined; } /** Node of Astro fragment */ interface AstroFragment extends BaseNode { type: "AstroFragment"; children: (AstroChild | AstroDoctype)[]; parent?: AstroParentNode; } /** Node of Astro html comment */ interface AstroHTMLComment extends BaseNode { type: "AstroHTMLComment"; value: string; parent?: AstroParentNode; } /** Node of Astro doctype */ interface AstroDoctype extends BaseNode { type: "AstroDoctype"; parent?: AstroFragment; } /** Node of Astro shorthand attribute */ interface AstroShorthandAttribute extends Omit { type: "AstroShorthandAttribute"; value: JSXExpressionContainer; } /** Node of Astro template-literal attribute */ interface AstroTemplateLiteralAttribute extends Omit { type: "AstroTemplateLiteralAttribute"; value: JSXExpressionContainer & { expression: TSESTree.TemplateLiteral; }; } /** Node of Astro raw text */ interface AstroRawText extends Omit { type: "AstroRawText"; parent?: JSXElement; } declare namespace index_d_exports { export { AstroChild, AstroDoctype, AstroFragment, AstroHTMLComment, AstroNode, AstroParentNode, AstroProgram, AstroRawText, AstroShorthandAttribute, AstroTemplateLiteralAttribute, Comment, JSXAttribute, JSXChild, JSXClosingElement, JSXClosingFragment, JSXElement, JSXEmptyExpression, JSXExpression, JSXExpressionContainer, JSXFragment, JSXIdentifier, JSXMemberExpression, JSXNamespacedName, JSXNode, JSXOpeningElement, JSXOpeningFragment, JSXParentNode, JSXSpreadAttribute, JSXSpreadChild, JSXTagNameExpression, JSXText, Position, Range, SourceLocation, Token }; } type Comment = TSESTree.Comment; type Token = TSESTree.Token; type SourceLocation = TSESTree.SourceLocation; type Range = TSESTree.Range; type Position = TSESTree.Position; //#endregion //#region src/astro/types.d.ts type DiagnosticMessage = compilerBinding.DiagnosticMessage; type ParseResult = { ast: AstroRootNode; diagnostics: DiagnosticMessage[]; }; type LocatedNode = { start: number; end: number; }; type UnknownNode = LocatedNode & { type: unknown; }; type AstroRootNode = LocatedNode & { type: "AstroRoot"; frontmatter?: AstroFrontmatterNode; body: TemplateNode[]; }; type AstroFrontmatterNode = LocatedNode & { type: "AstroFrontmatter"; program: ProgramNode; }; type AstroScriptNode = LocatedNode & { type: "AstroScript"; program: ProgramNode; }; type ProgramNode = LocatedNode & { type: "Program"; body: UnknownNode[]; sourceType: "module" | "script"; }; type TemplateNode = AstroCommentNode | AstroDoctypeNode | JSXElementNode | JSXExpressionContainerNode | JSXFragmentNode | JSXTextNode; type AstroCommentNode = LocatedNode & { type: "AstroComment"; value: string; }; type AstroDoctypeNode = LocatedNode & { type: "AstroDoctype"; value: string; }; type JSXElementNode = LocatedNode & { type: "JSXElement"; openingElement: JSXOpeningElementNode; closingElement: JSXClosingElementNode | null; children: (TemplateNode | AstroScriptNode)[]; }; type JSXOpeningElementNode = LocatedNode & { type: "JSXOpeningElement"; name: JSXNameNode; attributes: AttributeNode[]; selfClosing: boolean; }; type JSXClosingElementNode = LocatedNode & { type: "JSXClosingElement"; name: JSXNameNode; }; type JSXFragmentNode = LocatedNode & { type: "JSXFragment"; openingFragment: JSXFragmentBoundaryNode; closingFragment?: JSXFragmentBoundaryNode | null; children: TemplateNode[]; }; type JSXFragmentBoundaryNode = LocatedNode & { type: "JSXOpeningFragment" | "JSXClosingFragment"; }; type JSXExpressionContainerNode = LocatedNode & { type: "JSXExpressionContainer"; expression: UnknownNode; }; type JSXTextNode = LocatedNode & { type: "JSXText"; value?: string; raw?: string; }; type AttributeNode = JSXAttributeNode | JSXSpreadAttributeNode; type JSXAttributeNode = LocatedNode & { type: "JSXAttribute"; name: JSXNameNode; value: JSXExpressionContainerNode | LiteralNode | null; }; type JSXSpreadAttributeNode = LocatedNode & { type: "JSXSpreadAttribute"; argument: LocatedNode; }; type LiteralNode = LocatedNode & { type: "Literal"; value: unknown; raw?: string; }; type JSXNameNode = JSXIdentifierNode | JSXMemberExpressionNode | JSXNamespacedNameNode; type JSXIdentifierNode = LocatedNode & { type: "JSXIdentifier"; name: string; }; type JSXMemberExpressionNode = LocatedNode & { type: "JSXMemberExpression"; object: JSXIdentifierNode | JSXMemberExpressionNode; property: JSXIdentifierNode; }; type JSXNamespacedNameNode = LocatedNode & { type: "JSXNamespacedName"; namespace: JSXIdentifierNode; name: JSXIdentifierNode; }; //#endregion //#region src/parser/index.d.ts /** * Parse source code */ declare function parseForESLint$1(code: string, options?: any): { ast: AstroProgram; services: Record & { isAstro: true; getAstroAst: () => ParseResult["ast"]; getAstroResult: () => ParseResult; }; visitorKeys: { [type: string]: string[]; }; scopeManager: ScopeManager; }; //#endregion //#region src/astro/walker.d.ts type WalkContext = { /** Skip walking the children of the current node. */skipChildren: () => void; /** Stop walking entirely. */ break: () => void; }; //#endregion //#region src/astro-tools/index.d.ts interface ParseTemplateResult { result: ParseResult; walk: (parent: UnknownNode, enter: (n: UnknownNode, parents: UnknownNode[], ctx: WalkContext) => void, leave?: (n: UnknownNode, parents: UnknownNode[], ctx: WalkContext) => void) => void; getLocFromIndex: (index: number) => { line: number; column: number; }; getIndexFromLoc: (loc: { line: number; column: number; }) => number; } /** * Parse the astro component template. */ declare function parseTemplate(code: string): ParseTemplateResult; //#endregion //#region src/traverse.d.ts interface Visitor { visitorKeys?: VisitorKeys$1; enterNode(node: N, parent: N | null): void; leaveNode(node: N, parent: N | null): void; } declare function traverseNodes(node: AstroNode, visitor: Visitor): void; declare function traverseNodes(node: TSESTree.Node, visitor: Visitor): void; //#endregion //#region src/errors.d.ts /** * Astro parse errors. */ declare class ParseError extends SyntaxError { index: number; lineNumber: number; column: number; originalAST: any; /** * Initialize this ParseError instance. */ constructor(message: string, offset: number | { line: number; column: number; }, ctx: Context); } //#endregion //#region package.json.d.ts declare let name: string; declare let version: string; declare namespace meta_d_exports { export { name, version }; } //#endregion //#region src/index.d.ts /** * Parse source code */ declare function parseForESLint(code: string, options?: any): ReturnType; declare const VisitorKeys: import("eslint").SourceCode.VisitorKeys; //#endregion export { index_d_exports as AST, ParseError, type ParseTemplateResult, VisitorKeys, meta_d_exports as meta, name, parseForESLint, parseTemplate, traverseNodes };