UNPKG

ts-markdown

Version:

An extensible TypeScript markdown generator that takes JSON and creates a markdown document.

55 lines (54 loc) 1.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.codeblock = exports.codeblockRenderer = void 0; /** * The renderer for codeblock entries. * * @param entry The codeblock entry * @param options Document-level render options * @returns Block-level codeblock markdown content */ const codeblockRenderer = (entry, options) => { const fencing = options.useCodeblockFencing ?? entry.fenced; if ('codeblock' in entry) { let linePrefix = fencing ? '' : ' '; let blockStart = fencing ? getCodeFenceOpen(fencing, entry.language) + '\n' : ''; let blockEnd = fencing ? '\n' + getCodeFenceClose(entry, options) : ''; let codeBlock = typeof entry.codeblock === 'string' ? linePrefix + entry.codeblock.split('\n').join('\n' + linePrefix) : entry.codeblock.map((line) => linePrefix + line).join('\n'); return { markdown: `${blockStart}${codeBlock}${blockEnd}`, blockLevel: true, }; } throw new Error('Entry is not a codeblock entry. Unable to render.'); }; exports.codeblockRenderer = codeblockRenderer; function getCodeFenceOpen(fencing, language) { let fenceCharacter = getCodeFenceCharacter(fencing); let languageCharacter = language ?? ''; return fenceCharacter + fenceCharacter + fenceCharacter + languageCharacter; } function getCodeFenceCharacter(fencing) { return fencing === '~' ? '~' : '`'; } function getCodeFenceClose(entry, options) { let fenceCharacter = getCodeFenceCharacter(entry.fenced ?? options.useCodeblockFencing); return fenceCharacter + fenceCharacter + fenceCharacter; } /** * Helper which creates a codeblock entry. * * @param options Entry-level options for this element. * @returns a codeblock entry */ function codeblock(content, options) { return { codeblock: content, ...options, }; } exports.codeblock = codeblock;