/** * Module for converting MHTML to HTML and parsing MHTML data to a structured object representation. * * @author Gildas Lormeau * @license MIT * * @example * Convert MHTML to HTML * ```js * import { convert } from "mhtml-to-html"; // Node.js * // import { convert } from "@mhtml-to-html/mhtml-to-html"; // Deno via JSR * // import { convert } from "mhtml-to-html/deno"; // Deno via NPM * // import { convert } from "mhtml-to-html/browser"; // Browser * * const mhtml = `...`; // or new Uint8Array([...]) * const { data, title, favicons } = await convert(mhtml); * console.log(data); // HTML content * ``` * * @example * Parse MHTML data * ```js * import { parse, convert } from "mhtml-to-html"; // Node.js * // import { parse, convert } from "@mhtml-to-html/mhtml-to-html"; // Deno via JSR * // import { parse, convert } from "mhtml-to-html/deno"; // Deno via NPM * // import { parse, convert } from "mhtml-to-html/browser"; // Browser * * const data = `...`; // or new Uint8Array([...]) * const mhtml = parse(data); * console.log(mhtml); // { headers, frames, resources, index } * // convert mhtml to html * const { data, title, favicons } = await convert(mhtml); * console.log(data); // HTML content * ``` * * @module mhtml-to-html */ /** * Convert MHTML to HTML * * @param mhtml the MHTML data to convert to HTML provided as a string or Uint8Array or MHTML object * @param config optional configuration object * @returns the converted HTML, the title of the page and the favicons */ export function convert(mhtml: MHTML | string | Uint8Array, config?: ConvertConfig): Promise; /** * Parse MHTML data * * @param data the MHTML data to parse provided as a string or Uint8Array * @param config optional configuration object * @returns the parsed MHTML data */ export function parse(data: string | Uint8Array, config?: ParseConfig): MHTML; /** * Configuration object for convert function */ export interface ConvertConfig { /** * DOMParser implementation to use for parsing HTML * * @default globalThis.DOMParser */ DOMParser?: DOMParser; /** * Enable scripts in the converted HTML * * @default false */ enableScripts?: boolean; /** * Fetch missing resources * * @default false */ fetchMissingResources?: boolean; /** * Fetch implementation to use for fetching resources * * @default globalThis.fetch */ fetch?: typeof fetch; } /** * Configuration object for parse function */ export interface ParseConfig { /** * DOMParser implementation to use for parsing HTML * * @default globalThis.DOMParser */ DOMParser?: DOMParser; } /** * MHTML data structure */ export interface MHTML { /** * Headers of the MHTML */ headers: Record; /** * Frames of the MHTML */ frames: Record; /** * Resources of the MHTML */ resources: Record; /** * Id of the index page */ index: string; } /** * Resource data structure */ export interface Resource { /** * Id of the resource */ id: string; /** * Content type of the resource */ contentType: string; /** * Transfer encoding of the resource ("binary" resources are automatically converted to "base64") */ transferEncoding?: "base64" | "quoted-printable" | "7bit" | "8bit"; /** * Content of the resource as text or base64 encoded data */ data: string; } /** * Page data structure */ export interface PageData { /** * HTML content of the page */ data: string; /** * Title of the page */ title?: string; /** * Favicons */ favicons?: { /** * URL of the favicon */ href: string, /** * Original URL of the favicon */ originalHref?: string, /** * Media type of the favicon */ media?: string, /** * Type of the favicon */ type?: string, /** * Sizes of the favicon */ sizes?: string }[]; }