export type UnknownToken = any; export type TokenTypeByTag = Map[Tag] extends object ? { $: Tag; } & Map[Tag] : never; export type TokenType = Map extends object ? { [Tag in keyof Map]: TokenTypeByTag; }[keyof Map] : never; export type TokensType = TokenType[]; export interface TaggedToken { $: Tag; } export type TokenTag = Token extends TaggedToken ? Tag : never; export type TokenByTag = Token extends TaggedToken ? Token : never; export interface HasMeta { _: object; } export interface HasContexts { $: object; } export type InitTag = 0; export interface HasInit { $: { [0]: any; }; } export type ContextKey = keyof CtxMap['$']; export type ContextToken> = CtxMap['$'][Ctx]; export type ContextMeta = CtxMap['_']; export type ParserResult> = [ContextMeta, ContextToken[]]; export const enum ContextTag { Block, BlockNest, Inline, InlineLink, } export interface ContextMap { _: Meta; $: { [ContextTag.Block]: TokenType; [ContextTag.BlockNest]: TokenType; [ContextTag.Inline]: TokenType; [ContextTag.InlineLink]: TokenType; }; } export interface NoMeta { }