import type { Data, Parent, BlockContent, DefinitionContent, PhrasingContent } from 'mdast' export {directiveFromMarkdown, directiveToMarkdown} from './lib/index.js' /** * Fields shared by directives. */ interface DirectiveFields { /** * Directive name. */ name: string /** * Directive attributes. */ attributes?: Record | null | undefined } /** * Markdown directive (container form). */ export interface ContainerDirective extends Parent, DirectiveFields { /** * Node type of container directive. */ type: 'containerDirective' /** * Children of container directive. */ children: Array /** * Data associated with the mdast container directive. */ data?: ContainerDirectiveData | undefined } /** * Info associated with mdast container directive nodes by the ecosystem. */ export interface ContainerDirectiveData extends Data {} /** * Markdown directive (leaf form). */ export interface LeafDirective extends Parent, DirectiveFields { /** * Node type of leaf directive. */ type: 'leafDirective' /** * Children of leaf directive. */ children: PhrasingContent[] /** * Data associated with the mdast leaf directive. */ data?: LeafDirectiveData | undefined } /** * Info associated with mdast leaf directive nodes by the ecosystem. */ export interface LeafDirectiveData extends Data {} /** * Markdown directive (text form). */ export interface TextDirective extends Parent, DirectiveFields { /** * Node type of text directive. */ type: 'textDirective' /** * Children of text directive. */ children: PhrasingContent[] /** * Data associated with the text leaf directive. */ data?: TextDirectiveData | undefined } /** * Info associated with mdast text directive nodes by the ecosystem. */ export interface TextDirectiveData extends Data {} /** * Union of registered mdast directive nodes. * * It is not possible to register custom mdast directive node types. */ export type Directives = ContainerDirective | LeafDirective | TextDirective // Add custom data tracked to turn markdown into a tree. declare module 'mdast-util-from-markdown' { interface CompileData { /** * Attributes for current directive. */ directiveAttributes?: Array<[string, string]> | undefined } } // Add custom data tracked to turn a syntax tree into markdown. declare module 'mdast-util-to-markdown' { interface ConstructNameMap { /** * Whole container directive. * * ```markdown * > | :::a * ^^^^ * > | ::: * ^^^ * ``` */ containerDirective: 'containerDirective' /** * Label of a container directive. * * ```markdown * > | :::a[b] * ^^^ * | ::: * ``` */ containerDirectiveLabel: 'containerDirectiveLabel' /** * Whole leaf directive. * * ```markdown * > | ::a * ^^^ * ``` */ leafDirective: 'leafDirective' /** * Label of a leaf directive. * * ```markdown * > | ::a[b] * ^^^ * ``` */ leafDirectiveLabel: 'leafDirectiveLabel' /** * Whole text directive. * * ```markdown * > | :a * ^^ * ``` */ textDirective: 'textDirective' /** * Label of a text directive. * * ```markdown * > | :a[b] * ^^^ * ``` */ textDirectiveLabel: 'textDirectiveLabel' } } // Add nodes to content, register `data` on paragraph. declare module 'mdast' { interface BlockContentMap { /** * Directive in flow content (such as in the root document, or block * quotes), which contains further flow content. */ containerDirective: ContainerDirective /** * Directive in flow content (such as in the root document, or block * quotes), which contains nothing. */ leafDirective: LeafDirective } interface ParagraphData { /** * Field set on the first paragraph which is a child of a container * directive. * When this is `true`, that means the paragraph represents the *label*: * * ```markdown * :::a[This is the label] * This is further things. * ::: * ``` */ directiveLabel?: boolean | null | undefined } interface PhrasingContentMap { /** * Directive in phrasing content (such as in paragraphs, headings). */ textDirective: TextDirective } interface RootContentMap { /** * Directive in flow content (such as in the root document, or block * quotes), which contains further flow content. */ containerDirective: ContainerDirective /** * Directive in flow content (such as in the root document, or block * quotes), which contains nothing. */ leafDirective: LeafDirective /** * Directive in phrasing content (such as in paragraphs, headings). */ textDirective: TextDirective } }