Fast HTML to markdown converter, compatible with both node and the browser
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Core conversion functionality providing both static methods for single-use conversions and instance methods for better performance when processing multiple documents.
The main converter class that provides both static and instance methods for HTML to Markdown conversion.
/**
* Main HTML to Markdown converter class
*/
class NodeHtmlMarkdown {
/**
* Create a new converter instance with optional configuration
* @param options - Conversion options and formatting settings
* @param customTranslators - Custom element translators
* @param customCodeBlockTranslators - Custom code block element translators
*/
constructor(
options?: Partial<NodeHtmlMarkdownOptions>,
customTranslators?: TranslatorConfigObject,
customCodeBlockTranslators?: TranslatorConfigObject
);
/** Main element translators collection */
translators: TranslatorCollection;
/** Anchor tag specific translators */
aTagTranslators: TranslatorCollection;
/** Code block translators collection */
codeBlockTranslators: TranslatorCollection;
/** Table translators collection */
tableTranslators: TranslatorCollection;
/** Table row translators collection */
tableRowTranslators: TranslatorCollection;
/** Table cell translators collection */
tableCellTranslators: TranslatorCollection;
/** Configuration options (read-only) */
readonly options: NodeHtmlMarkdownOptions;
}Single-use conversion methods ideal for one-off HTML to Markdown translations.
/**
* Translate HTML string to markdown (static method for single use)
* @param html - HTML string to convert
* @param options - Optional conversion options
* @param customTranslators - Optional custom element translators
* @param customCodeBlockTranslators - Optional custom code block translators
* @returns Converted markdown string
*/
static translate(
html: string,
options?: Partial<NodeHtmlMarkdownOptions>,
customTranslators?: TranslatorConfigObject,
customCodeBlockTranslators?: TranslatorConfigObject
): string;
/**
* Translate collection of HTML files to markdown (static method for single use)
* @param files - Object mapping filenames to HTML content
* @param options - Optional conversion options
* @param customTranslators - Optional custom element translators
* @param customCodeBlockTranslators - Optional custom code block translators
* @returns Object mapping filenames to converted markdown content
*/
static translate(
files: FileCollection,
options?: Partial<NodeHtmlMarkdownOptions>,
customTranslators?: TranslatorConfigObject,
customCodeBlockTranslators?: TranslatorConfigObject
): FileCollection;Usage Examples:
import { NodeHtmlMarkdown } from "node-html-markdown";
// Basic single file conversion
const markdown = NodeHtmlMarkdown.translate("<strong>Bold text</strong>");
console.log(markdown); // "**Bold text**"
// Multiple files conversion
const files = {
"page1.html": "<h1>Title</h1><p>Content</p>",
"page2.html": "<ul><li>Item 1</li><li>Item 2</li></ul>"
};
const converted = NodeHtmlMarkdown.translate(files);
console.log(converted["page1.html"]); // "# Title\n\nContent"
console.log(converted["page2.html"]); // "* Item 1\n* Item 2"
// With custom options
const customMarkdown = NodeHtmlMarkdown.translate(
"<strong>Bold</strong>",
{ strongDelimiter: "__" }
);
console.log(customMarkdown); // "__Bold__"Instance methods providing better performance for multiple conversions by reusing the configured converter.
/**
* Translate HTML string to markdown (instance method)
* @param html - HTML string to convert
* @returns Converted markdown string
*/
translate(html: string): string;
/**
* Translate collection of HTML files to markdown (instance method)
* @param files - Object mapping filenames to HTML content
* @returns Object mapping filenames to converted markdown content
*/
translate(files: FileCollection): FileCollection;Usage Examples:
import { NodeHtmlMarkdown } from "node-html-markdown";
// Create reusable instance
const nhm = new NodeHtmlMarkdown({
bulletMarker: "-",
strongDelimiter: "__"
});
// Convert multiple documents efficiently
const doc1 = nhm.translate("<strong>First document</strong>");
const doc2 = nhm.translate("<ul><li>List item</li></ul>");
const doc3 = nhm.translate("<em>Emphasized text</em>");
console.log(doc1); // "__First document__"
console.log(doc2); // "- List item"
console.log(doc3); // "_Emphasized text_"
// Batch conversion
const batch = nhm.translate({
"article1.html": "<h2>Article Title</h2><p>Content here</p>",
"article2.html": "<blockquote>Quote text</blockquote>"
});Type definition for batch processing multiple HTML files.
/**
* Collection of HTML files for batch processing
* Maps filename to HTML content string
*/
type FileCollection = { [fileName: string]: string };Usage Examples:
// Define file collection
const htmlFiles: FileCollection = {
"home.html": "<h1>Welcome</h1><p>Homepage content</p>",
"about.html": "<h1>About Us</h1><p>Company information</p>",
"contact.html": "<h1>Contact</h1><p>Get in touch</p>"
};
// Convert all files
const markdownFiles = NodeHtmlMarkdown.translate(htmlFiles);
// Access converted content
Object.entries(markdownFiles).forEach(([filename, markdown]) => {
console.log(`${filename}:`);
console.log(markdown);
console.log("---");
});Static Methods:
Instance Methods:
// Performance comparison example
import { NodeHtmlMarkdown } from "node-html-markdown";
const htmlContent = "<h1>Title</h1><p>Content</p>";
const iterations = 1000;
// Slower: Creates new instance each time
console.time("Static Method");
for (let i = 0; i < iterations; i++) {
NodeHtmlMarkdown.translate(htmlContent);
}
console.timeEnd("Static Method");
// Faster: Reuses instance
console.time("Instance Method");
const nhm = new NodeHtmlMarkdown();
for (let i = 0; i < iterations; i++) {
nhm.translate(htmlContent);
}
console.timeEnd("Instance Method");