UNPKG

vitepress

Version:

Vite & Vue powered static site generator

1,717 lines (1,526 loc) 76.7 kB
/// <reference types="node" /> import * as vite from 'vite'; import { BuildOptions, Logger, UserConfig as UserConfig$1, ConfigEnv, ServerOptions } from 'vite'; export { Plugin, loadEnv } from 'vite'; import { Awaitable, SiteData, PageData, HeadConfig, LocaleSpecificConfig, LocaleConfig, SSGContext, DefaultTheme } from '../../types/shared.js'; export { DefaultTheme, HeadConfig, Header, SiteData } from '../../types/shared.js'; import { Options as Options$4 } from '@vitejs/plugin-vue'; import { UseDarkOptions } from '@vueuse/core'; import { TransformOptions } from 'stream'; import { ThemeRegistrationAny, BuiltinTheme, LanguageInput, ShikiTransformer, Highlighter } from 'shiki'; import glob from 'fast-glob'; import { Root } from 'postcss'; import { IncomingMessage, ServerResponse } from 'http'; import { Server, ListenOptions } from 'net'; declare function build(root?: string, buildOptions?: BuildOptions & { base?: string; mpa?: string; }): Promise<void>; /** * How frequently the page is likely to change. This value provides general * information to search engines and may not correlate exactly to how often they crawl the page. Please note that the * value of this tag is considered a hint and not a command. See * <https://www.sitemaps.org/protocol.html#xmlTagDefinitions> for the acceptable * values */ declare enum EnumChangefreq { DAILY = "daily", MONTHLY = "monthly", ALWAYS = "always", HOURLY = "hourly", WEEKLY = "weekly", YEARLY = "yearly", NEVER = "never" } /** * https://support.google.com/webmasters/answer/74288?hl=en&ref_topic=4581190 */ interface NewsItem { access?: 'Registration' | 'Subscription'; publication: { name: string; /** * The `<language>` is the language of your publication. Use an ISO 639 * language code (2 or 3 letters). */ language: string; }; /** * @example 'PressRelease, Blog' */ genres?: string; /** * Article publication date in W3C format, using either the "complete date" (YYYY-MM-DD) format or the "complete date * plus hours, minutes, and seconds" */ publication_date: string; /** * The title of the news article * @example 'Companies A, B in Merger Talks' */ title: string; /** * @example 'business, merger, acquisition' */ keywords?: string; /** * @example 'NASDAQ:A, NASDAQ:B' */ stock_tickers?: string; } /** * Sitemap Image * https://support.google.com/webmasters/answer/178636?hl=en&ref_topic=4581190 */ interface Img { /** * The URL of the image * @example 'https://example.com/image.jpg' */ url: string; /** * The caption of the image * @example 'Thanksgiving dinner' */ caption?: string; /** * The title of the image * @example 'Star Wars EP IV' */ title?: string; /** * The geographic location of the image. * @example 'Limerick, Ireland' */ geoLocation?: string; /** * A URL to the license of the image. * @example 'https://example.com/license.txt' */ license?: string; } /** * https://support.google.com/webmasters/answer/189077 */ interface LinkItem { /** * @example 'en' */ lang: string; /** * @example 'en-us' */ hreflang?: string; url: string; } /** * How to handle errors in passed in urls */ declare enum ErrorLevel { /** * Validation will be skipped and nothing logged or thrown. */ SILENT = "silent", /** * If an invalid value is encountered, a console.warn will be called with details */ WARN = "warn", /** * An Error will be thrown on encountering invalid data. */ THROW = "throw" } declare type ErrorHandler$1 = (error: Error, level: ErrorLevel) => void; interface NSArgs { news: boolean; video: boolean; xhtml: boolean; image: boolean; custom?: string[]; } interface SitemapStreamOptions extends TransformOptions { hostname?: string; level?: ErrorLevel; lastmodDateOnly?: boolean; xmlns?: NSArgs; xslUrl?: string; errorHandler?: ErrorHandler$1; } interface SitemapItem { lastmod?: string | number | Date; changefreq?: `${EnumChangefreq}`; fullPrecisionPriority?: boolean; priority?: number; news?: NewsItem; expires?: string; androidLink?: string; ampLink?: string; url: string; video?: any; img?: string | Img | (string | Img)[]; links?: LinkItem[]; lastmodfile?: string | Buffer | URL; lastmodISO?: string; lastmodrealtime?: boolean; } type Validate = (text: string, pos: number, self: LinkifyIt) => number | boolean; interface FullRule { validate: string | RegExp | Validate; normalize?: ((match: Match) => void) | undefined; } type Rule = string | FullRule; /** * An object, where each key/value describes protocol/rule: * * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:` * for example). `linkify-it` makes sure that prefix is not preceded with * alphanumeric char and symbols. Only whitespaces and punctuation allowed. * - __value__ - rule to check tail after link prefix * - _String_ - just alias to existing rule * - _Object_ * - _validate_ - validator function (should return matched length on success), * or `RegExp`. * - _normalize_ - optional function to normalize text & url of matched result * (for example, for `@twitter` mentions). */ interface SchemaRules { [schema: string]: Rule; } interface Options$3 { /** * recognize URL-s without `http(s):` prefix. Default `true`. */ fuzzyLink?: boolean | undefined; /** * allow IPs in fuzzy links above. Can conflict with some texts * like version numbers. Default `false`. */ fuzzyIP?: boolean | undefined; /** * recognize emails without `mailto:` prefix. Default `true`. */ fuzzyEmail?: boolean | undefined; } /** * Match result. Single element of array, returned by {@link LinkifyIt#match}. */ declare class Match { constructor(self: LinkifyIt, shift: number); /** * First position of matched string. */ index: number; /** * Next position after matched string. */ lastIndex: number; /** * Matched string. */ raw: string; /** * Prefix (protocol) for matched string. */ schema: string; /** * Normalized text of matched string. */ text: string; /** * Normalized url of matched string. */ url: string; } declare class LinkifyIt { /** * new LinkifyIt(schemas, options) * - schemas (Object): Optional. Additional schemas to validate (prefix/validator) * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false } * * Creates new linkifier instance with optional additional schemas. * Can be called without `new` keyword for convenience. * * By default understands: * * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links * - "fuzzy" links and emails (example.com, foo@bar.com). */ constructor(schemas?: SchemaRules | Options$3, options?: Options$3); // Use overloads to provide contextual typing to `FullRule.normalize`, which is ambiguous with string.normalize /** * Add new rule definition. See constructor description for details. * * @param schema rule name (fixed pattern prefix) * @param definition schema definition */ add(schema: string, definition: string): this; add(schema: string, definition: FullRule | null): this; /** * Set recognition options for links without schema. */ set(options: Options$3): this; /** * Searches linkifiable pattern and returns `true` on success or `false` on fail. */ test(text: string): boolean; /** * Very quick check, that can give false positives. Returns true if link MAY BE * can exists. Can be used for speed optimization, when you need to check that * link NOT exists. */ pretest(text: string): boolean; /** * Similar to {@link LinkifyIt#test} but checks only specific protocol tail exactly * at given position. Returns length of found pattern (0 on fail). * * @param text text to scan * @param schema rule (schema) name * @param pos text offset to check from */ testSchemaAt(text: string, schema: string, pos: number): number; /** * Returns array of found link descriptions or `null` on fail. We strongly * recommend to use {@link LinkifyIt#test} first, for best speed. */ match(text: string): Match[] | null; /** * Returns fully-formed (not fuzzy) link if it starts at the beginning * of the string, and null otherwise. */ matchAtStart(text: string): Match | null; /** * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix) * to avoid false positives. By default this algorythm used: * * - hostname with any 2-letter root zones are ok. * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф * are ok. * - encoded (`xn--...`) root zones are ok. * * If list is replaced, then exact match for 2-chars root zones will be checked. * * @param list list of tlds * @param keepOld merge with current list if `true` (`false` by default) */ tlds(list: string | string[], keepOld?: boolean): this; /** * Default normalizer (if schema does not define it's own). */ normalize(match: Match): void; /** * Override to modify basic RegExp-s. */ onCompile(): void; re: { [key: string]: RegExp; }; } declare const decode: { defaultChars: string; componentChars: string; /** * Decode percent-encoded string. */ (str: string, exclude?: string): string; }; declare const encode: { defaultChars: string; componentChars: string; /** * Encode unsafe characters with percent-encoding, skipping already * encoded sequences. * * @param str string to encode * @param exclude list of characters to ignore (in addition to a-zA-Z0-9) * @param keepEscaped don't encode '%' in a correct escape sequence (default: true) */ (str: string, exclude?: string, keepEscaped?: boolean): string; }; declare class _Url { protocol: string; slashes: string; auth: string; port: string; hostname: string; hash: string; search: string; pathname: string; constructor(); parse(url: string, slashesDenoteHost?: boolean): this; parseHost(host: string): void; } type Url = _Url; declare function parse(url: string | Url, slashesDenoteHost?: boolean): Url; declare function format(url: Omit<Url, "parse" | "parseHost">): string; type mdurl_Url = Url; declare const mdurl_decode: typeof decode; declare const mdurl_encode: typeof encode; declare const mdurl_format: typeof format; declare const mdurl_parse: typeof parse; declare namespace mdurl { export { type mdurl_Url as Url, mdurl_decode as decode, mdurl_encode as encode, mdurl_format as format, mdurl_parse as parse }; } // import * as ucmicro from "uc.micro"; declare const lib: { mdurl: typeof mdurl; ucmicro: any; }; /** * Merge objects */ declare function assign(obj: any, ...from: any[]): any; declare function isString(obj: any): obj is string; declare function has(obj: any, key: keyof any): boolean; declare function unescapeMd(str: string): string; declare function unescapeAll(str: string): string; declare function isValidEntityCode(c: number): boolean; declare function fromCodePoint(c: number): string; declare function escapeHtml(str: string): string; /** * Remove element from array and put another array at those position. * Useful for some operations with tokens */ declare function arrayReplaceAt<T>(src: T[], pos: number, newElements: T[]): T[]; declare function isSpace(code: number): boolean; /** * Zs (unicode class) || [\t\f\v\r\n] */ declare function isWhiteSpace(code: number): boolean; /** * Markdown ASCII punctuation characters. * * !, ", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \, ], ^, _, `, {, |, }, or ~ * * Don't confuse with unicode punctuation !!! It lacks some chars in ascii range. * * @see http://spec.commonmark.org/0.15/#ascii-punctuation-character */ declare function isMdAsciiPunct(code: number): boolean; /** * Currently without astral characters support. */ declare function isPunctChar(ch: string): boolean; declare function escapeRE(str: string): string; /** * Helper to unify [reference labels]. */ declare function normalizeReference(str: string): string; declare const utils_arrayReplaceAt: typeof arrayReplaceAt; declare const utils_assign: typeof assign; declare const utils_escapeHtml: typeof escapeHtml; declare const utils_escapeRE: typeof escapeRE; declare const utils_fromCodePoint: typeof fromCodePoint; declare const utils_has: typeof has; declare const utils_isMdAsciiPunct: typeof isMdAsciiPunct; declare const utils_isPunctChar: typeof isPunctChar; declare const utils_isSpace: typeof isSpace; declare const utils_isString: typeof isString; declare const utils_isValidEntityCode: typeof isValidEntityCode; declare const utils_isWhiteSpace: typeof isWhiteSpace; declare const utils_lib: typeof lib; declare const utils_normalizeReference: typeof normalizeReference; declare const utils_unescapeAll: typeof unescapeAll; declare const utils_unescapeMd: typeof unescapeMd; declare namespace utils { export { utils_arrayReplaceAt as arrayReplaceAt, utils_assign as assign, utils_escapeHtml as escapeHtml, utils_escapeRE as escapeRE, utils_fromCodePoint as fromCodePoint, utils_has as has, utils_isMdAsciiPunct as isMdAsciiPunct, utils_isPunctChar as isPunctChar, utils_isSpace as isSpace, utils_isString as isString, utils_isValidEntityCode as isValidEntityCode, utils_isWhiteSpace as isWhiteSpace, utils_lib as lib, utils_normalizeReference as normalizeReference, utils_unescapeAll as unescapeAll, utils_unescapeMd as unescapeMd }; } interface ParseLinkDestinationResult { ok: boolean; pos: number; str: string; } declare function parseLinkDestination(str: string, start: number, max: number): ParseLinkDestinationResult; type Nesting = 1 | 0 | -1; declare class Token { /** * Create new token and fill passed properties. */ constructor(type: string, tag: string, nesting: Nesting); /** * Type of the token, e.g. "paragraph_open" */ type: string; /** * HTML tag name, e.g. "p" */ tag: string; /** * HTML attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]` */ attrs: Array<[string, string]> | null; /** * Source map info. Format: `[ line_begin, line_end ]` */ map: [number, number] | null; /** * Level change (number in {-1, 0, 1} set), where: * * - `1` means the tag is opening * - `0` means the tag is self-closing * - `-1` means the tag is closing */ nesting: Nesting; /** * Nesting level, the same as `state.level` */ level: number; /** * An array of child nodes (inline and img tokens) */ children: Token[] | null; /** * In a case of self-closing tag (code, html, fence, etc.), * it has contents of this tag. */ content: string; /** * '*' or '_' for emphasis, fence string for fence, etc. */ markup: string; /** * - Info string for "fence" tokens * - The value "auto" for autolink "link_open" and "link_close" tokens * - The string value of the item marker for ordered-list "list_item_open" tokens */ info: string; /** * A place for plugins to store an arbitrary data */ meta: any; /** * True for block-level tokens, false for inline tokens. * Used in renderer to calculate line breaks */ block: boolean; /** * If it's true, ignore this element when rendering. Used for tight lists * to hide paragraphs. */ hidden: boolean; /** * Search attribute index by name. */ attrIndex(name: string): number; /** * Add `[ name, value ]` attribute to list. Init attrs if necessary */ attrPush(attrData: [string, string]): void; /** * Set `name` attribute to `value`. Override old value if exists. */ attrSet(name: string, value: string): void; /** * Get the value of attribute `name`, or null if it does not exist. */ attrGet(name: string): string | null; /** * Join value to existing attribute via space. Or create new attribute if not * exists. Useful to operate with token classes. */ attrJoin(name: string, value: string): void; } interface Scanned { can_open: boolean; can_close: boolean; length: number; } interface Delimiter { marker: number; length: number; token: number; end: number; open: boolean; close: boolean; } interface TokenMeta { delimiters: Delimiter[]; } declare class StateInline { constructor(src: string, md: MarkdownIt, env: any, outTokens: Token[]); src: string; env: any; md: MarkdownIt; tokens: Token[]; tokens_meta: Array<TokenMeta | null>; pos: number; posMax: number; level: number; pending: string; pendingLevel: number; /** * Stores { start: end } pairs. Useful for backtrack * optimization of pairs parse (emphasis, strikes). */ cache: any; /** * List of emphasis-like delimiters for current tag */ delimiters: Delimiter[]; // Stack of delimiter lists for upper level tags // _prev_delimiters: StateInline.Delimiter[][]; /** * Flush pending text */ pushPending(): Token; /** * Push new token to "stream". * If pending text exists - flush it as text token */ push(type: string, tag: string, nesting: Nesting): Token; /** * Scan a sequence of emphasis-like markers, and determine whether * it can start an emphasis sequence or end an emphasis sequence. * * @param start position to scan from (it should point at a valid marker) * @param canSplitWord determine if these markers can be found inside a word */ scanDelims(start: number, canSplitWord: boolean): Scanned; Token: typeof Token; } declare function parseLinkLabel(state: StateInline, start: number, disableNested?: boolean): number; interface ParseLinkTitleResult { /** * if `true`, this is a valid link title */ ok: boolean; /** * if `true`, this link can be continued on the next line */ can_continue: boolean; /** * if `ok`, it's the position of the first character after the closing marker */ pos: number; /** * if `ok`, it's the unescaped title */ str: string; /** * expected closing marker character code */ marker: number; } declare function parseLinkTitle( str: string, start: number, max: number, prev_state?: ParseLinkTitleResult, ): ParseLinkTitleResult; declare const helpers_parseLinkDestination: typeof parseLinkDestination; declare const helpers_parseLinkLabel: typeof parseLinkLabel; declare const helpers_parseLinkTitle: typeof parseLinkTitle; declare namespace helpers { export { helpers_parseLinkDestination as parseLinkDestination, helpers_parseLinkLabel as parseLinkLabel, helpers_parseLinkTitle as parseLinkTitle }; } interface RuleOptions { /** * array with names of "alternate" chains. */ alt: string[]; } /** * Helper class, used by {@link MarkdownIt#core}, {@link MarkdownIt#block} and * {@link MarkdownIt#inline} to manage sequences of functions (rules): * * - keep rules in defined order * - assign the name to each rule * - enable/disable rules * - add/replace rules * - allow assign rules to additional named chains (in the same) * - caching lists of active rules * * You will not need use this class directly until write plugins. For simple * rules control use {@link MarkdownIt.disable}, {@link MarkdownIt.enable} and * {@link MarkdownIt.use}. */ declare class Ruler<T> { constructor(); /** * Replace rule by name with new function & options. Throws error if name not * found. * * ##### Example * * Replace existing typographer replacement rule with new one: * * ```javascript * var md = require('markdown-it')(); * * md.core.ruler.at('replacements', function replace(state) { * //... * }); * ``` * * @param name rule name to replace. * @param fn new rule function. * @param options new rule options (not mandatory). */ at(name: string, fn: T, options?: RuleOptions): void; /** * Add new rule to chain before one with given name. * * ##### Example * * ```javascript * var md = require('markdown-it')(); * * md.block.ruler.before('paragraph', 'my_rule', function replace(state) { * //... * }); * ``` * * @see {@link Ruler.after}, {@link Ruler.push} * * @param beforeName new rule will be added before this one. * @param ruleName name of added rule. * @param fn rule function. * @param options rule options (not mandatory). */ before(beforeName: string, ruleName: string, fn: T, options?: RuleOptions): void; /** * Add new rule to chain after one with given name. * * ##### Example * * ```javascript * var md = require('markdown-it')(); * * md.inline.ruler.after('text', 'my_rule', function replace(state) { * //... * }); * ``` * * @see {@link Ruler.before}, {@link Ruler.push} * * @param afterName new rule will be added after this one. * @param ruleName name of added rule. * @param fn rule function. * @param options rule options (not mandatory). */ after(afterName: string, ruleName: string, fn: T, options?: RuleOptions): void; /** * Push new rule to the end of chain. * * ##### Example * * ```javascript * var md = require('markdown-it')(); * * md.core.ruler.push('my_rule', function replace(state) { * //... * }); * ``` * * @see {@link Ruler.before}, {@link Ruler.after} * * @param ruleName name of added rule. * @param fn rule function. * @param options rule options (not mandatory). */ push(ruleName: string, fn: T, options?: RuleOptions): void; /** * Enable rules with given names. If any rule name not found - throw Error. * Errors can be disabled by second param. * * Returns list of found rule names (if no exception happened). * * @see {@link Ruler.disable}, {@link Ruler.enableOnly} * * @param list list of rule names to enable. * @param ignoreInvalid set `true` to ignore errors when rule not found. */ enable(list: string | string[], ignoreInvalid?: boolean): string[]; /** * Enable rules with given names, and disable everything else. If any rule name * not found - throw Error. Errors can be disabled by second param. * * @see {@link Ruler.disable}, {@link Ruler.enable} * * @param list list of rule names to enable (whitelist). * @param ignoreInvalid set `true` to ignore errors when rule not found. */ enableOnly(list: string | string[], ignoreInvalid?: boolean): void; /** * Disable rules with given names. If any rule name not found - throw Error. * Errors can be disabled by second param. * * Returns list of found rule names (if no exception happened). * * @see {@link Ruler.enable}, {@link Ruler.enableOnly} * * @param list list of rule names to disable. * @param ignoreInvalid set `true` to ignore errors when rule not found. */ disable(list: string | string[], ignoreInvalid?: boolean): string[]; /** * Return array of active functions (rules) for given chain name. It analyzes * rules configuration, compiles caches if not exists and returns result. * * Default chain name is `''` (empty string). It can't be skipped. That's * done intentionally, to keep signature monomorphic for high speed. */ getRules(chainName: string): T[]; } type ParentType = "blockquote" | "list" | "root" | "paragraph" | "reference"; declare class StateBlock { constructor(src: string, md: MarkdownIt, env: any, tokens: Token[]); src: string; /** * link to parser instance */ md: MarkdownIt; env: any; // // Internal state vartiables // tokens: Token[]; /** * line begin offsets for fast jumps */ bMarks: number[]; /** * line end offsets for fast jumps */ eMarks: number[]; /** * offsets of the first non-space characters (tabs not expanded) */ tShift: number[]; /** * indents for each line (tabs expanded) */ sCount: number[]; /** * An amount of virtual spaces (tabs expanded) between beginning * of each line (bMarks) and real beginning of that line. * * It exists only as a hack because blockquotes override bMarks * losing information in the process. * * It's used only when expanding tabs, you can think about it as * an initial tab length, e.g. bsCount=21 applied to string `\t123` * means first tab should be expanded to 4-21%4 === 3 spaces. */ bsCount: number[]; // block parser variables /** * required block content indent (for example, if we are * inside a list, it would be positioned after list marker) */ blkIndent: number; /** * line index in src */ line: number; /** * lines count */ lineMax: number; /** * loose/tight mode for lists */ tight: boolean; /** * indent of the current dd block (-1 if there isn't any) */ ddIndent: number; /** * indent of the current list block (-1 if there isn't any) */ listIndent: number; /** * used in lists to determine if they interrupt a paragraph */ parentType: ParentType; level: number; /** * Push new token to "stream". */ push(type: string, tag: string, nesting: Nesting): Token; isEmpty(line: number): boolean; skipEmptyLines(from: number): number; /** * Skip spaces from given position. */ skipSpaces(pos: number): number; /** * Skip spaces from given position in reverse. */ skipSpacesBack(pos: number, min: number): number; /** * Skip char codes from given position */ skipChars(pos: number, code: number): number; /** * Skip char codes reverse from given position - 1 */ skipCharsBack(pos: number, code: number, min: number): number; /** * cut lines range from source. */ getLines(begin: number, end: number, indent: number, keepLastLF: boolean): string; Token: typeof Token; } type RuleBlock = (state: StateBlock, startLine: number, endLine: number, silent: boolean) => boolean; declare class ParserBlock { /** * {@link Ruler} instance. Keep configuration of block rules. */ ruler: Ruler<RuleBlock>; /** * Generate tokens for input range */ tokenize(state: StateBlock, startLine: number, endLine: number): void; /** * Process input string and push block tokens into `outTokens` */ parse(str: string, md: MarkdownIt, env: any, outTokens: Token[]): void; State: typeof StateBlock; } declare class StateCore { constructor(src: string, md: MarkdownIt, env: any); src: string; env: any; tokens: Token[]; inlineMode: boolean; /** * link to parser instance */ md: MarkdownIt; Token: typeof Token; } type RuleCore = (state: StateCore) => void; declare class Core { /** * {@link Ruler} instance. Keep configuration of core rules. */ ruler: Ruler<RuleCore>; /** * Executes core chain rules. */ process(state: StateCore): void; State: typeof StateCore; } type RuleInline = (state: StateInline, silent: boolean) => boolean; type RuleInline2 = (state: StateInline) => boolean; declare class ParserInline { /** * {@link Ruler} instance. Keep configuration of inline rules. */ ruler: Ruler<RuleInline>; /** * {@link Ruler} instance. Second ruler used for post-processing * (e.g. in emphasis-like rules). */ ruler2: Ruler<RuleInline2>; /** * Skip single token by running all rules in validation mode; * returns `true` if any rule reported success */ skipToken(state: StateInline): void; /** * Generate tokens for input range */ tokenize(state: StateInline): void; /** * Process input string and push inline tokens into `outTokens` */ parse(str: string, md: MarkdownIt, env: any, outTokens: Token[]): void; State: typeof StateInline; } type RenderRule = (tokens: Token[], idx: number, options: Options$2, env: any, self: Renderer) => string; interface RenderRuleRecord { [type: string]: RenderRule | undefined; code_inline?: RenderRule | undefined; code_block?: RenderRule | undefined; fence?: RenderRule | undefined; image?: RenderRule | undefined; hardbreak?: RenderRule | undefined; softbreak?: RenderRule | undefined; text?: RenderRule | undefined; html_block?: RenderRule | undefined; html_inline?: RenderRule | undefined; } declare class Renderer { /** * Creates new {@link Renderer} instance and fill {@link Renderer#rules} with defaults. */ constructor(); /** * Contains render rules for tokens. Can be updated and extended. * * ##### Example * * ```javascript * var md = require('markdown-it')(); * * md.renderer.rules.strong_open = function () { return '<b>'; }; * md.renderer.rules.strong_close = function () { return '</b>'; }; * * var result = md.renderInline(...); * ``` * * Each rule is called as independent static function with fixed signature: * * ```javascript * function my_token_render(tokens, idx, options, env, renderer) { * // ... * return renderedHTML; * } * ``` * * @see https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.mjs */ rules: RenderRuleRecord; /** * Render token attributes to string. */ renderAttrs(token: Token): string; /** * Default token renderer. Can be overriden by custom function * in {@link Renderer#rules}. * * @param tokens list of tokens * @param idx token index to render * @param options params of parser instance */ renderToken(tokens: Token[], idx: number, options: Options$2): string; /** * The same as {@link Renderer.render}, but for single token of `inline` type. * * @param tokens list of block tokens to render * @param options params of parser instance * @param env additional data from parsed input (references, for example) */ renderInline(tokens: Token[], options: Options$2, env: any): string; /** * Special kludge for image `alt` attributes to conform CommonMark spec. * Don't try to use it! Spec requires to show `alt` content with stripped markup, * instead of simple escaping. * * @param tokens list of block tokens to render * @param options params of parser instance * @param env additional data from parsed input (references, for example) */ renderInlineAsText(tokens: Token[], options: Options$2, env: any): string; /** * Takes token stream and generates HTML. Probably, you will never need to call * this method directly. * * @param tokens list of block tokens to render * @param options params of parser instance * @param env additional data from parsed input (references, for example) */ render(tokens: Token[], options: Options$2, env: any): string; } /** * MarkdownIt provides named presets as a convenience to quickly * enable/disable active syntax rules and options for common use cases. * * - ["commonmark"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/commonmark.js) - * configures parser to strict [CommonMark](http://commonmark.org/) mode. * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.js) - * similar to GFM, used when no preset name given. Enables all available rules, * but still without html, typographer & autolinker. * - ["zero"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/zero.js) - * all rules disabled. Useful to quickly setup your config via `.enable()`. * For example, when you need only `bold` and `italic` markup and nothing else. */ type PresetName = "default" | "zero" | "commonmark"; interface Options$2 { /** * Set `true` to enable HTML tags in source. Be careful! * That's not safe! You may need external sanitizer to protect output from XSS. * It's better to extend features via plugins, instead of enabling HTML. * @default false */ html?: boolean | undefined; /** * Set `true` to add '/' when closing single tags * (`<br />`). This is needed only for full CommonMark compatibility. In real * world you will need HTML output. * @default false */ xhtmlOut?: boolean | undefined; /** * Set `true` to convert `\n` in paragraphs into `<br>`. * @default false */ breaks?: boolean | undefined; /** * CSS language class prefix for fenced blocks. * Can be useful for external highlighters. * @default 'language-' */ langPrefix?: string | undefined; /** * Set `true` to autoconvert URL-like text to links. * @default false */ linkify?: boolean | undefined; /** * Set `true` to enable [some language-neutral replacement](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.js) + * quotes beautification (smartquotes). * @default false */ typographer?: boolean | undefined; /** * Double + single quotes replacement * pairs, when typographer enabled and smartquotes on. For example, you can * use `'«»„“'` for Russian, `'„“‚‘'` for German, and * `['«\xA0', '\xA0»', '‹\xA0', '\xA0›']` for French (including nbsp). * @default '“”‘’' */ quotes?: string | string[]; /** * Highlighter function for fenced code blocks. * Highlighter `function (str, lang, attrs)` should return escaped HTML. It can * also return empty string if the source was not changed and should be escaped * externally. If result starts with <pre... internal wrapper is skipped. * @default null */ highlight?: ((str: string, lang: string, attrs: string) => string) | null | undefined; } type PluginSimple = (md: MarkdownIt) => void; type PluginWithOptions<T = any> = (md: MarkdownIt, options?: T) => void; type PluginWithParams = (md: MarkdownIt, ...params: any[]) => void; interface MarkdownItConstructor { new(): MarkdownIt; new(presetName: PresetName, options?: Options$2): MarkdownIt; new(options: Options$2): MarkdownIt; (): MarkdownIt; (presetName: PresetName, options?: Options$2): MarkdownIt; (options: Options$2): MarkdownIt; } interface MarkdownIt { /** * Instance of {@link ParserInline}. You may need it to add new rules when * writing plugins. For simple rules control use {@link MarkdownIt.disable} and * {@link MarkdownIt.enable}. */ readonly inline: ParserInline; /** * Instance of {@link ParserBlock}. You may need it to add new rules when * writing plugins. For simple rules control use {@link MarkdownIt.disable} and * {@link MarkdownIt.enable}. */ readonly block: ParserBlock; /** * Instance of {@link Core} chain executor. You may need it to add new rules when * writing plugins. For simple rules control use {@link MarkdownIt.disable} and * {@link MarkdownIt.enable}. */ readonly core: Core; /** * Instance of {@link Renderer}. Use it to modify output look. Or to add rendering * rules for new token types, generated by plugins. * * ##### Example * * ```javascript * var md = require('markdown-it')(); * * function myToken(tokens, idx, options, env, self) { * //... * return result; * }; * * md.renderer.rules['my_token'] = myToken * ``` * * See {@link Renderer} docs and [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js). */ readonly renderer: Renderer; /** * [linkify-it](https://github.com/markdown-it/linkify-it) instance. * Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/linkify.js) * rule. */ readonly linkify: LinkifyIt; /** * Link validation function. CommonMark allows too much in links. By default * we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas * except some embedded image types. * * You can change this behaviour: * * ```javascript * var md = require('markdown-it')(); * // enable everything * md.validateLink = function () { return true; } * ``` */ validateLink(url: string): boolean; /** * Function used to encode link url to a machine-readable format, * which includes url-encoding, punycode, etc. */ normalizeLink(url: string): string; /** * Function used to decode link url to a human-readable format` */ normalizeLinkText(url: string): string; readonly utils: typeof utils; readonly helpers: typeof helpers; readonly options: Options$2; /** * *chainable* * * Set parser options (in the same format as in constructor). Probably, you * will never need it, but you can change options after constructor call. * * ##### Example * * ```javascript * var md = require('markdown-it')() * .set({ html: true, breaks: true }) * .set({ typographer: true }); * ``` * * __Note:__ To achieve the best possible performance, don't modify a * `markdown-it` instance options on the fly. If you need multiple configurations * it's best to create multiple instances and initialize each with separate * config. */ set(options: Options$2): this; /** * *chainable*, *internal* * * Batch load of all options and compenent settings. This is internal method, * and you probably will not need it. But if you with - see available presets * and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/lib/presets) * * We strongly recommend to use presets instead of direct config loads. That * will give better compatibility with next versions. */ configure(presets: PresetName): this; /** * *chainable* * * Enable list or rules. It will automatically find appropriate components, * containing rules with given names. If rule not found, and `ignoreInvalid` * not set - throws exception. * * ##### Example * * ```javascript * var md = require('markdown-it')() * .enable(['sub', 'sup']) * .disable('smartquotes'); * ``` * * @param list rule name or list of rule names to enable * @param ignoreInvalid set `true` to ignore errors when rule not found. */ enable(list: string | string[], ignoreInvalid?: boolean): this; /** * *chainable* * * The same as {@link MarkdownIt.enable}, but turn specified rules off. * * @param list rule name or list of rule names to disable. * @param ignoreInvalid set `true` to ignore errors when rule not found. */ disable(list: string | string[], ignoreInvalid?: boolean): this; /** * *chainable* * * Load specified plugin with given params into current parser instance. * It's just a sugar to call `plugin(md, params)` with curring. * * ##### Example * * ```javascript * var iterator = require('markdown-it-for-inline'); * var md = require('markdown-it')() * .use(iterator, 'foo_replace', 'text', function (tokens, idx) { * tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar'); * }); * ``` */ use(plugin: PluginSimple): this; use<T = any>(plugin: PluginWithOptions<T>, options?: T): this; use(plugin: PluginWithParams, ...params: any[]): this; /** * *internal* * * Parse input string and returns list of block tokens (special token type * "inline" will contain list of inline tokens). You should not call this * method directly, until you write custom renderer (for example, to produce * AST). * * `env` is used to pass data between "distributed" rules and return additional * metadata like reference info, needed for the renderer. It also can be used to * inject data in specific cases. Usually, you will be ok to pass `{}`, * and then pass updated object to renderer. * * @param src source string * @param env environment sandbox */ parse(src: string, env: any): Token[]; /** * Render markdown string into html. It does all magic for you :). * * `env` can be used to inject additional metadata (`{}` by default). * But you will not need it with high probability. See also comment * in {@link MarkdownIt.parse}. * * @param src source string * @param env environment sandbox */ render(src: string, env?: any): string; /** * *internal* * * The same as {@link MarkdownIt.parse} but skip all block rules. It returns the * block tokens list with the single `inline` element, containing parsed inline * tokens in `children` property. Also updates `env` object. * * @param src source string * @param env environment sandbox */ parseInline(src: string, env: any): Token[]; /** * Similar to {@link MarkdownIt.render} but for single paragraph content. Result * will NOT be wrapped into `<p>` tags. * * @param src source string * @param env environment sandbox */ renderInline(src: string, env?: any): string; } /** * Main parser/renderer class. * * ##### Usage * * ```javascript * // node.js, "classic" way: * var MarkdownIt = require('markdown-it'), * md = new MarkdownIt(); * var result = md.render('# markdown-it rulezz!'); * * // node.js, the same, but with sugar: * var md = require('markdown-it')(); * var result = md.render('# markdown-it rulezz!'); * * // browser without AMD, added to "window" on script load * // Note, there are no dash. * var md = window.markdownit(); * var result = md.render('# markdown-it rulezz!'); * ``` * * Single line rendering, without paragraph wrap: * * ```javascript * var md = require('markdown-it')(); * var result = md.renderInline('__markdown-it__ rulezz!'); * ``` * * ##### Example * * ```javascript * // commonmark mode * var md = require('markdown-it')('commonmark'); * * // default mode * var md = require('markdown-it')(); * * // enable everything * var md = require('markdown-it')({ * html: true, * linkify: true, * typographer: true * }); * ``` * * ##### Syntax highlighting * * ```js * var hljs = require('highlight.js') // https://highlightjs.org/ * * var md = require('markdown-it')({ * highlight: function (str, lang) { * if (lang && hljs.getLanguage(lang)) { * try { * return hljs.highlight(lang, str, true).value; * } catch (__) {} * } * * return ''; // use external default escaping * } * }); * ``` * * Or with full wrapper override (if you need assign class to `<pre>`): * * ```javascript * var hljs = require('highlight.js') // https://highlightjs.org/ * * // Actual default values * var md = require('markdown-it')({ * highlight: function (str, lang) { * if (lang && hljs.getLanguage(lang)) { * try { * return '<pre class="hljs"><code>' + * hljs.highlight(lang, str, true).value + * '</code></pre>'; * } catch (__) {} * } * * return '<pre class="hljs"><code>' + md.utils.escapeHtml(str) + '</code></pre>'; * } * }); * ``` */ declare const MarkdownIt: MarkdownItConstructor; /** * Options of @mdit-vue/plugin-component */ interface ComponentPluginOptions { /** * Extra tags to be treated as block tags. * * @default [] */ blockTags?: string[]; /** * Extra tags to be treated as inline tags. * * @default [] */ inlineTags?: string[]; } /** * Takes a string or object with `content` property, extracts * and parses front-matter from the string, then returns an object * with `data`, `content` and other [useful properties](#returned-object). * * ```js * var matter = require('gray-matter'); * console.log(matter('---\ntitle: Home\n---\nOther stuff')); * //=> { data: { title: 'Home'}, content: 'Other stuff' } * ``` * @param {Object|String} `input` String, or object with `content` string * @param {Object} `options` * @return {Object} * @api public */ declare function matter< I extends matter.Input, O extends matter.GrayMatterOption<I, O> >(input: I | { content: I }, options?: O): matter.GrayMatterFile<I> declare namespace matter { type Input = string | Buffer interface GrayMatterOption< I extends Input, O extends GrayMatterOption<I, O> > { parser?: () => void eval?: boolean excerpt?: boolean | ((input: I, options: O) => string) excerpt_separator?: string engines?: { [index: string]: | ((input: string) => object) | { parse: (input: string) => object; stringify?: (data: object) => string } } language?: string delimiters?: string | [string, string] } interface GrayMatterFile<I extends Input> { data: { [key: string]: any } content: string excerpt?: string orig: Buffer | I language: string matter: string stringify(lang: string): string } /** * Stringify an object to YAML or the specified language, and * append it to the given string. By default, only YAML and JSON * can be stringified. See the [engines](#engines) section to learn * how to stringify other languages. * * ```js * console.log(matter.stringify('foo bar baz', {title: 'Home'})); * // results in: * // --- * // title: Home * // --- * // foo bar baz * ``` * @param {String|Object} `file` The content string to append to stringified front-matter, or a file object with `file.content` string. * @param {Object} `data` Front matter to stringify. * @param {Object} `options` [Options](#options) to pass to gray-matter and [js-yaml]. * @return {String} Returns a string created by wrapping stringified yaml with delimiters, and appending that to the given string. */ export function stringify<O extends GrayMatterOption<string, O>>( file: string | { content: string }, data: object, options?: GrayMatterOption<string, O> ): string /** * Synchronously read a file from the file system and parse * front matter. Returns the same object as the [main function](#matter). * * ```js * var file = matter.read('./content/blog-post.md'); * ``` * @param {String} `filepath` file path of the file to read. * @param {Object} `options` [Options](#options) to pass to gray-matter. * @return {Object} Returns [an object](#returned-object) with `data` and `content` */ export function read<O extends GrayMatterOption<string, O>>( fp: string, options?: GrayMatterOption<string, O> ): matter.GrayMatterFile<string> /** * Returns true if the given `string` has front matter. * @param {String} `string` * @param {Object} `options` * @return {Boolean} True if front matter exists. */ export function test<O extends matter.GrayMatterOption<string, O>>( str: string, options?: GrayMatterOption<string, O> ): boolean /** * Detect the language to use, if one is defined after the * first front-matter delimiter. * @param {String} `string` * @param {Object} `options` * @return {Object} Object with `raw` (actual language string), and `name`, the language with whitespace trimmed */ export function language<O extends matter.GrayMatterOption<string, O>>( str: string, options?: GrayMatterOption<string, O> ): { name: string; raw: string } } type GrayMatterOptions = matter.GrayMatterOption<string, GrayMatterOptions>; /** * Options of @mdit-vue/plugin-frontmatter */ interface FrontmatterPluginOptions { /** * Options of gray-matter * * @see https://github.com/jonschlinkert/gray-matter#options */ grayMatterOptions?: GrayMatterOptions; /** * Render the excerpt or not * * @default true */ renderExcerpt?: boolean; } declare module '@mdit-vue/types' { interface MarkdownItEnv { /** * The raw Markdown content without frontmatter */ content?: string; /** * The excerpt that e