import type { Html, Parent } from 'mdast';
import type { JsonValue, Simplify } from 'type-fest';
/**
 * Structured data about a parsed comment.
 * Note that this is a discriminated union based on the `type` field.
 */
type CommentMarker = Simplify<{
    /** The complete original comment, e.g. `<!-- keyword -->`  */
    html: string;
} & ({
    /** Character used to delimit closing tags, e.g. the `/` in `<!-- /keyword -->`  */
    closingPrefix: string;
    /** The first complete word in the comment  */
    keyword: string;
    /** The unique keyword prefix  */
    keywordPrefix: string;
    /** Parsed JSON object of argument string that followed the keyword, empty object if nothing passed  */
    options: JsonValue;
    /**
     * `open`: A mdat-style opening comment tag, e.g. `<!-- keyword -->`  \
     * `close`: A mdat-style closing comment tag, e.g. `<!-- /keyword -->`
     */
    type: 'close' | 'open';
} | {
    /** The original text inside the comment, e.g. `<!-- content -->`  */
    content: string;
    /**
     * `meta`: A mdat-style generated meta comment tag  \
     * `native`: A normal comment that does not match the the `keywordPrefix` (if specified)
     */
    type: 'meta' | 'native';
})>;
/**
 * Parsed comment with additional information about the Mdast Node and its Parent.
 */
export type CommentMarkerNode = Simplify<CommentMarker & {
    /** Original Mdast HTML Node where the comment was found. */
    node: Html;
    /** Parent of original Mdast HTML Node where the comment was found. */
    parent: Parent;
}>;
type CommentMarkerParseOptions = {
    /** Character to identify closing tags, e.g. the `/` in `<!-- /keyword -->`  */
    closingPrefix: string;
    /** Prefix to require on all mdat comments, e.g. `mm-`  */
    keywordPrefix: string;
    /** Means of identifying mdat generated meta comments, e.g. `+`  */
    metaCommentIdentifier: string;
};
/**
 * Parse an Mdast HTML comment node into structured data.
 * @returns A discriminated union of CommentMarkerNode based on comment type, or
 * undefined if the node is not a comment.
 */
export declare function parseCommentNode(node: Html, parent: Parent, options: CommentMarkerParseOptions): CommentMarkerNode | undefined;
/**
 * Parse any comment string into structured data.
 * @returns A discriminated union of CommentMarker based on comment type, or
 * undefined if the node is not a comment.
 */
export declare function parseComment(text: string, options: CommentMarkerParseOptions): CommentMarker | undefined;
export {};
