diff --git a/src/MarkedOptions.ts b/src/MarkedOptions.ts index 78754f23fe..59b4cea4c5 100644 --- a/src/MarkedOptions.ts +++ b/src/MarkedOptions.ts @@ -1,4 +1,4 @@ -import type { Token, Tokens, TokensList } from './Tokens.ts'; +import type { CustomToken, Token, TokensList } from './Tokens.ts'; import type { _Parser } from './Parser.ts'; import type { _Lexer } from './Lexer.ts'; import type { _Renderer } from './Renderer.ts'; @@ -9,15 +9,21 @@ export interface TokenizerThis { lexer: _Lexer; } -export type TokenizerExtensionFunction = (this: TokenizerThis, src: string, tokens: Token[] | TokensList) => Tokens.Generic | undefined; +export type TokenizerExtensionFunction< + N extends string = string, + T extends Record = Record +> = (this: TokenizerThis, src: string, tokens: Token[] | TokensList) => CustomToken | undefined; export type TokenizerStartFunction = (this: TokenizerThis, src: string) => number | void; -export interface TokenizerExtension { - name: string; +export interface TokenizerExtension< + N extends string = string, + T extends Record = Record +> { + name: N; level: 'block' | 'inline'; start?: TokenizerStartFunction | undefined; - tokenizer: TokenizerExtensionFunction; + tokenizer: TokenizerExtensionFunction; childTokens?: string[] | undefined; } @@ -25,14 +31,23 @@ export interface RendererThis { parser: _Parser; } -export type RendererExtensionFunction = (this: RendererThis, token: Tokens.Generic) => string | false | undefined; - -export interface RendererExtension { - name: string; - renderer: RendererExtensionFunction; +export type RendererExtensionFunction< + N extends string = string, + T extends Record = Record +> = (this: RendererThis, token: CustomToken) => string | false | undefined; + +export interface RendererExtension< + N extends string = string, + T extends Record = Record +> { + name: N; + renderer: RendererExtensionFunction; } -export type TokenizerAndRendererExtension = TokenizerExtension | RendererExtension | (TokenizerExtension & RendererExtension); +export type TokenizerAndRendererExtension< + N extends string = string, + T extends Record = Record +> = TokenizerExtension | RendererExtension | (TokenizerExtension & RendererExtension); type HooksApi = Omit<_Hooks, 'constructor' | 'options'>; type HooksObject = { @@ -49,7 +64,10 @@ type TokenizerObject = { [K in keyof TokenizerApi]?: (...args: Parameters) => ReturnType | false }; -export interface MarkedExtension { +export interface MarkedExtension< + N extends string = string, + T extends Record = Record +> { /** * True will tell marked to await any walkTokens functions before parsing the tokens and returning an HTML string. */ @@ -64,7 +82,7 @@ export interface MarkedExtension { * Add tokenizers and renderers to marked */ extensions?: - | TokenizerAndRendererExtension[] + | TokenizerAndRendererExtension[] | undefined | null; /** @@ -133,16 +151,16 @@ export interface MarkedOptions extends Omit = Record +> = { + type: N; + raw: string; + tokens?: Token[]; +} & { + [Key in keyof T]: T[Key]; +}; + export namespace Tokens { export interface Space { type: 'space';