ts-markdown
Version:
An extensible TypeScript markdown generator that takes JSON and creates a markdown document.
66 lines (65 loc) • 2.07 kB
JavaScript
;
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;