CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-node-html-markdown

Fast HTML to markdown converter, compatible with both node and the browser

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

conversion.mddocs/

HTML to Markdown Conversion

Core conversion functionality providing both static methods for single-use conversions and instance methods for better performance when processing multiple documents.

Capabilities

NodeHtmlMarkdown Class

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;
}

Static Translation Methods

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 Translation Methods

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>"
});

File Collection Type

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("---");
});

Performance Considerations

Static Methods:

  • Best for single conversions or infrequent use
  • Creates new instance for each call
  • No setup overhead for one-time conversions

Instance Methods:

  • Best for multiple conversions
  • Reuses configured translators and options
  • Significant performance improvement for batch processing
  • Recommended when processing many documents
// 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");

docs

conversion.md

index.md

options.md

translators.md

tile.json