UNPKG

ts-markdown-parser

Version:

TypeScript library that converts markdown to HTML (with code support).

70 lines 3.28 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getMarkdownMetadata = exports.markdownToHtml = void 0; const markdown_parser_1 = require("./utils/markdown-parser"); const metadata_parser_1 = require("./utils/metadata-parser"); let warnedDeprecatedBoolean = false; /** * Converts a Markdown string into an HTML string. * * @param {string} markdown - The Markdown content to be converted to HTML. * @param {boolean|MarkdownToHtmlOptions} opts - Adds "Copy" button to HTML `<code>` blocks (legacy) or options object. * @returns {string} The resulting HTML content. */ const markdownToHtml = (markdown, opts = true) => { // Backward compatibility: support old boolean param for addCopyToClipboard //! Parse as boolean or object key, but default to `true` in either case (THIS BOOLEAN IS DEPRECATED) const addCopyToClipboard = opts === false || (typeof opts === "object" && opts.addCopyToClipboard === false) ? false : true; // Only parse as `opts` object key, but have false by default, therefore `opts.interactiveCheckboxes` must be an explicitly `true` opts key-value const interactiveCheckboxes = typeof opts === "object" ? !!(opts === null || opts === void 0 ? void 0 : opts.interactiveCheckboxes) : false; // Pass interactiveCheckboxes to parseMarkdown/elementToHtml as needed const elements = (0, markdown_parser_1.parseMarkdown)(markdown); let html = ""; // 🔥 Deprecation Warning if (typeof opts === "boolean" && !warnedDeprecatedBoolean) { console.warn("\x1b[33m[markdownToHtml] Passing a boolean as the 2nd arg is deprecated. Please use an options object.\x1b[37m"); warnedDeprecatedBoolean = true; } const totalEles = elements.length; for (let i = 0; i < totalEles; i++) { const opts = { addCopyToClipboard }; html += (0, markdown_parser_1.elementToHtml)(elements[i], opts); } if (interactiveCheckboxes && html.includes(`<li class="md-checkbox">`) && html.includes(`type="checkbox" disabled`)) { const disabledCheckboxRe = /<input type="checkbox" disabled/gm; html = html.replace(disabledCheckboxRe, `<input type="checkbox"`); html += (0, markdown_parser_1.checkboxScript)(); } if (addCopyToClipboard && html.includes(`<div class="md-code-container"`)) { html += (0, markdown_parser_1.globalScript)(); } return html; }; exports.markdownToHtml = markdownToHtml; /** * Extracts metadata from a Markdown string. * * This function extracts and parses the YAML front matter from the Markdown content, * returning it as a JavaScript object. * * @param {string} markdown - The Markdown content from which to extract metadata. * @returns {Record<string, any>} An object containing the metadata extracted from the Markdown. * * @example * const markdown = ` * --- * title: "Example Article" * author: "Author Name" * date: "2024-08-21" * --- * # Hello World * This is a test. * `; * const metadata = getMarkdownMetadata(markdown); * console.log(metadata); // Outputs the metadata object */ const getMarkdownMetadata = (markdown) => { return (0, metadata_parser_1.parseMetadata)(markdown); }; exports.getMarkdownMetadata = getMarkdownMetadata; //# sourceMappingURL=index.js.map