UNPKG

@diplodoc/transform

Version:

A simple transformer of text in YFM (Yandex Flavored Markdown) to HTML

128 lines (112 loc) 3.64 kB
import {LanguageFn} from 'highlight.js'; import DefaultMarkdownIt, {Token} from 'markdown-it'; import DefaultStateCore from 'markdown-it/lib/rules_core/state_core'; import {SanitizeFunction, SanitizeOptions} from './sanitize'; import {LogLevels, Logger} from './log'; import {ChangelogItem} from './plugins/changelog/types'; export interface MarkdownIt extends DefaultMarkdownIt { assets?: string[]; meta?: string[]; } export interface StateCore extends DefaultStateCore { md: MarkdownIt; } export interface CacheContext { get(key: string): string | null | undefined; set(key: string, value: string | null | undefined): void; } export type HighlightLangMap = Record<string, LanguageFn>; export type Heading = { title: string; href: string; level: number; items?: Heading[]; }; export interface OptionsType { tokens?: boolean; vars?: Record<string, string>; path?: string; extractTitle?: boolean; needTitle?: boolean; allowHTML?: boolean; linkify?: boolean; linkifyTlds?: string | string[]; breaks?: boolean; conditionsInCode?: boolean; disableLiquid?: boolean; leftDelimiter?: string; rightDelimiter?: string; isLiquided?: boolean; needToSanitizeHtml?: boolean; sanitizeOptions?: SanitizeOptions; sanitize?: SanitizeFunction; needFlatListHeadings?: boolean; // eslint-disable-next-line @typescript-eslint/no-explicit-any plugins?: ExtendedPluginWithCollect<any, any>[]; preprocessors?: MarkdownItPreprocessorCb[]; // Preprocessors should modify the input before passing it to MD highlightLangs?: HighlightLangMap; disableRules?: string[]; extractChangelogs?: boolean; root?: string; rootPublicPath?: string; transformLink?: (href: string) => string; getPublicPath?: (options: OptionsType, href?: string) => string; renderInline?: boolean; cache?: CacheContext; // TODO: set false by default in next major /** * `markdown-it-attrs` plugin is enabled by default * * Set value to `false` to disable it */ enableMarkdownAttrs?: boolean; [x: string]: unknown; } export interface OutputType { result: { html: string; } & EnvType; logs: Record<LogLevels, string[]>; } export type EnvType<Extras extends {} = {}> = { title?: string; headings: Heading[]; assets?: unknown[]; meta?: object; changelogs?: ChangelogItem[]; additionalOptionsCssWhiteList?: CssWhiteList; } & Extras; export interface MarkdownItPluginOpts { path: string; log: Logger; lang: 'ru' | 'en' | 'es' | 'fr' | 'cs' | 'ar' | 'he'; root: string; rootPublicPath: string; isLintRun: boolean; cache?: CacheContext; conditionsInCode?: boolean; vars?: Record<string, string>; extractTitle?: boolean; disableLiquid?: boolean; skipLinkFileCheck?: boolean; } export type MarkdownItPluginCb<T extends {} = {}> = { // TODO: use "T extends unknown = {}" (md: MarkdownIt, opts: T & MarkdownItPluginOpts): void; }; export type IntrinsicCollectOptions = { tokenStream: Token[]; }; export type ExtendedPluginWithCollect< PluginRegularOptions extends {} = {}, PluginCollectOptions = {}, > = MarkdownItPluginCb<PluginRegularOptions> & { collect?: ( input: string, options: PluginCollectOptions & IntrinsicCollectOptions, ) => string | void; }; export type MarkdownItPreprocessorCb<T extends unknown = {}> = { (input: string, opts: T & Partial<MarkdownItPluginOpts>, md?: MarkdownIt): string; }; export type CssWhiteList = {[property: string]: boolean};