@textlint/ast-node-types
Version:
textlint AST node type definition.
98 lines (95 loc) • 3.37 kB
text/typescript
import type { ASTNodeTypes } from "./ASTNodeTypes.js";
import type {
AnyTxtNode,
TxtBlockQuoteNode,
TxtBreakNode,
TxtCodeBlockNode,
TxtCommentNode,
TxtDeleteNode,
TxtDocumentNode,
TxtEmphasisNode,
TxtHeaderNode,
TxtHorizontalRuleNode,
TxtHtmlNode,
TxtImageNode,
TxtImageReferenceNode,
TxtDefinitionNode,
TxtCodeNode,
TxtLinkNode,
TxtLinkReferenceNode,
TxtListItemNode,
TxtListNode,
TxtParagraphNode,
TxtStrNode,
TxtStrongNode,
TxtTableCellNode,
TxtTableNode,
TxtTableRowNode
} from "./NodeType.js";
/**
* Mapping from ASTNodeTypes (enter/exit) to the corresponding TxtNode interface.
*/
interface TxtNodeTypeMap {
[]: TxtDocumentNode;
[]: TxtDocumentNode;
[]: TxtParagraphNode;
[]: TxtParagraphNode;
[]: TxtBlockQuoteNode;
[]: TxtBlockQuoteNode;
[]: TxtListNode;
[]: TxtListNode;
[]: TxtListItemNode;
[]: TxtListItemNode;
[]: TxtHeaderNode;
[]: TxtHeaderNode;
[]: TxtCodeBlockNode;
[]: TxtCodeBlockNode;
[]: TxtHtmlNode;
[]: TxtHtmlNode;
[]: TxtLinkNode;
[]: TxtLinkNode;
[]: TxtLinkReferenceNode;
[]: TxtLinkReferenceNode;
[]: TxtDeleteNode;
[]: TxtDeleteNode;
[]: TxtEmphasisNode;
[]: TxtEmphasisNode;
[]: TxtStrongNode;
[]: TxtStrongNode;
[]: TxtBreakNode;
[]: TxtBreakNode;
[]: TxtImageNode;
[]: TxtImageNode;
[]: TxtImageReferenceNode;
[]: TxtImageReferenceNode;
[]: TxtDefinitionNode;
[]: TxtDefinitionNode;
[]: TxtHorizontalRuleNode;
[]: TxtHorizontalRuleNode;
[]: TxtCommentNode;
[]: TxtCommentNode;
[]: TxtStrNode;
[]: TxtStrNode;
[]: TxtCodeNode;
[]: TxtCodeNode;
[]: TxtHtmlNode;
[]: TxtHtmlNode;
[]: TxtTableNode;
[]: TxtTableNode;
[]: TxtTableRowNode;
[]: TxtTableRowNode;
[]: TxtTableCellNode;
[]: TxtTableCellNode;
}
/**
* Type utility for TxtNodeType
* Return TxtNode interface for the TxtNodeType
*
* @example
* ```ts
* type NodeType = TypeofTxtNode<ASTNodeTypes.Document>;
* ```
*/
export type TypeofTxtNode<T extends ASTNodeTypes | string> = T extends keyof TxtNodeTypeMap
? TxtNodeTypeMap[T]
: AnyTxtNode;