UNPKG

ts-markdown

Version:

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

66 lines (65 loc) 2.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.tasks = exports.tasksRenderer = void 0; const rendering_1 = require("../rendering"); /** * The renderer for task list entries. * * @param entry The task list entry. * @param options Document-level render options. * @returns Block-level task list markdown content. */ const tasksRenderer = (entry, options) => { if ('tasks' in entry) { return { markdown: getTasksMarkdown(entry, options), blockLevel: true, }; } throw new Error('Entry is not a tasks entry. Unable to render.'); }; exports.tasksRenderer = tasksRenderer; function getTasksMarkdown(entry, options) { return entry.tasks .map((taskEntry) => { let completed = false; let taskText = ''; if (typeof taskEntry === 'string') { taskText = taskEntry; } else if ('task' in taskEntry) { completed = taskEntry.completed === true; let result = (0, rendering_1.getMarkdownString)(taskEntry.task, options); if (typeof result === 'string') { taskText = result; } else { throw new Error('Unexpected rendering scenario encountered. A task list item cannot have multi-line content.'); } } else { let result = (0, rendering_1.getMarkdownString)(taskEntry, options); if (typeof result === 'string') { taskText = result; } else { throw new Error('Unexpected rendering scenario encountered. A task list item cannot have multi-line content.'); } } return `- [${completed ? 'x' : ' '}] ${taskText}`; }) .join('\n'); } /** * Helper which creates a task list entry. * * @param options Entry-level options for this element. * @returns a task list entry */ function tasks(content, options) { return { tasks: content, ...options, }; } exports.tasks = tasks;