UNPKG

@clearfeed-ai/node-html-markdown

Version:

Fast HTML to markdown cross-compiler, compatible with both node and the browser

109 lines (108 loc) 3.52 kB
import { NodeHtmlMarkdownOptions } from './options'; import { NodeMetadata, NodeMetadataMap, Visitor } from './visitor'; import { ElementNode } from './nodes'; export type TranslatorConfigFactory = { (ctx: TranslatorContext): TranslatorConfig; base?: TranslatorConfig; }; export type TranslatorConfigObject = { [tags: string]: TranslatorConfig | TranslatorConfigFactory; }; export type TranslatorContext = Partial<NodeMetadata> & { node: ElementNode; options: NodeHtmlMarkdownOptions; parent?: ElementNode; nodeMetadata: NodeMetadataMap; visitor: Visitor; base?: TranslatorConfig; }; export interface TranslatorConfig { /** * Preceeds content, follows surroundingNewLines */ prefix?: string; /** * Follows content, preceeds surroundingNewLines */ postfix?: string; /** * Set fixed output content */ content?: string; /** * Post-process content after inner nodes have been rendered. * Returning undefined will cause the content to not be updated */ postprocess?: (ctx: TranslatorContext & { content: string; }) => string | PostProcessResult; /** * If false, no child elements will be scanned * @default true */ recurse?: boolean; /** * Adds newline before and after (true, false, or number of newlines to add per side) * @default false */ surroundingNewlines?: boolean | number; /** * Ignore node entirely */ ignore?: boolean; /** * Do not escape content */ noEscape?: boolean; /** * If first character matches end of the last written data, add a space * @example * // old text: **abc** * // new text: **def** * // becomes: **abc** **def** */ spaceIfRepeatingChar?: boolean; /** * Ensure translator is always visited, even if element is empty * Note: For speed, trees are optimized beforehand to only visit elements which have child nodes or text content. * In some cases, however, you may want to create or alter a translator to be triggered even if the element is empty. * (If using a TranslatorConfigFactory, this value is always treated as true) */ preserveIfEmpty?: boolean; /** * Keep whitespace as it is */ preserveWhitespace?: boolean; /** * Custom translator collection to use for child HTML nodes */ childTranslators?: TranslatorCollection; } export declare enum PostProcessResult { NoChange = 0, RemoveNode = 1 } export declare class TranslatorCollection { get size(): number; /** * Add / update translator config for one or more element tags */ set(keys: string, config: TranslatorConfig | TranslatorConfigFactory, /* @internal */ preserveBase?: boolean): void; /** * Get translator config for element tag */ get(key: string): TranslatorConfig | TranslatorConfigFactory; /** * Returns array of entries */ entries(): [elementName: string, config: TranslatorConfig | TranslatorConfigFactory][]; /** * Remove translator config for one or more element tags */ remove(keys: string): void; } /** * Only use to narrow union of types where only TranslatorConfig has JS type 'object' */ export declare const isTranslatorConfig: (v: any) => v is TranslatorConfig; export declare function createTranslatorContext(visitor: Visitor, node: ElementNode, metadata?: NodeMetadata, base?: TranslatorConfig): TranslatorContext;