import { Highlighter, HighlighterOptions } from "shiki"; import { TwoSlashOptions, TwoSlashReturn } from "@typescript/twoslash"; import { twoslashRenderer } from "./renderers/twoslash"; import { plainTextRenderer } from "./renderers/plain"; import { defaultShikiRenderer } from "./renderers/shiki"; import { tsconfigJSONRenderer } from "./renderers/tsconfig"; import { Meta } from "./utils"; export interface TwoslashShikiOptions { /** A way to turn on the try buttons seen on the TS website */ addTryButton?: true; /** A way to disable implicit React imports on tsx/jsx language codeblocks */ disableImplicitReactImport?: true; /** A way to add a div wrapper for multi-theme outputs */ wrapFragments?: true; /** Include JSDoc comments in the hovers */ includeJSDocInHover?: true; /** Instead of showing twoslash exceptions inline, throw the entire process like it will on CI */ alwayRaiseForTwoslashExceptions?: true; /** Ignore transforming certain code blocks */ ignoreCodeblocksWithCodefenceMeta?: string[]; } /** The possible user config, a combination of all shiki, twoslash and twoslash-shiki options */ export declare type UserConfigSettings = HighlighterOptions & TwoSlashOptions & TwoslashShikiOptions; /** * Creates a *cached singleton* Shiki highlighter, this is an async call because of the call to WASM to get * the regex parser set up. * * In other functions, passing a the result of this highlighter function is kind of optional but it's the author's * opinion that you should be in control of the highlighter, and not this library. * */ export declare const createShikiHighlighter: (options: HighlighterOptions) => Promise; /** * Renders a code sample to HTML, automatically taking into account: * * - rendering overrides for twoslash and tsconfig * - whether the language exists in shiki * * @param code the source code to render * @param lang the language to use in highlighting * @param info additional metadata which lives after the code-fence lang (e.g. `{ twoslash: true }`) * @param shikiOptions user settings * @param highlighter optional, but you should use it, highlighter * @param twoslash optional, but required when info contains 'twoslash' as a string */ export declare const renderCodeToHTML: (code: string, lang: string, meta: Meta, shikiOptions?: (HighlighterOptions & TwoSlashOptions & TwoslashShikiOptions & { themeName: string; }) | undefined, highlighter?: Highlighter | undefined, twoslash?: TwoSlashReturn | undefined) => string; /** * Runs Twoslash over the code passed in with a particular language as the default file. */ export declare const runTwoSlash: (input: string, lang: string, settings?: UserConfigSettings) => TwoSlashReturn; /** Set of renderers if you want to explicitly call one instead of using renderCodeToHTML */ export declare const renderers: { plainTextRenderer: typeof plainTextRenderer; defaultShikiRenderer: typeof defaultShikiRenderer; twoslashRenderer: typeof twoslashRenderer; tsconfigJSONRenderer: typeof tsconfigJSONRenderer; };