1import { Parser, type ParserOptions } from './parser/index.js'; 2 3import type { DefaultTreeAdapterMap } from './tree-adapters/default.js'; 4import type { TreeAdapterTypeMap } from './tree-adapters/interface.js'; 5 6export { type DefaultTreeAdapterMap, defaultTreeAdapter } from './tree-adapters/default.js'; 7export type { TreeAdapter, TreeAdapterTypeMap } from './tree-adapters/interface.js'; 8export { type ParserOptions, /** @internal */ Parser } from './parser/index.js'; 9export { serialize, serializeOuter, type SerializerOptions } from './serializer/index.js'; 10export { ERR as ErrorCodes, type ParserError } from './common/error-codes.js'; 11 12/** @internal */ 13export * as foreignContent from './common/foreign-content.js'; 14/** @internal */ 15export * as html from './common/html.js'; 16/** @internal */ 17export * as Token from './common/token.js'; 18/** @internal */ 19export { Tokenizer, type TokenizerOptions, TokenizerMode, type TokenHandler } from './tokenizer/index.js'; 20 21// Shorthands 22 23/** 24 * Parses an HTML string. 25 * 26 * @param html Input HTML string. 27 * @param options Parsing options. 28 * @returns Document 29 * 30 * @example 31 * 32 * ```js 33 * const parse5 = require('parse5'); 34 * 35 * const document = parse5.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>'); 36 * 37 * console.log(document.childNodes[1].tagName); //> 'html' 38 *``` 39 */ 40export function parse<T extends TreeAdapterTypeMap = DefaultTreeAdapterMap>( 41 html: string, 42 options?: ParserOptions<T> 43): T['document'] { 44 return Parser.parse(html, options); 45} 46 47/** 48 * Parses an HTML fragment. 49 * 50 * @example 51 * 52 * ```js 53 * const parse5 = require('parse5'); 54 * 55 * const documentFragment = parse5.parseFragment('<table></table>'); 56 * 57 * console.log(documentFragment.childNodes[0].tagName); //> 'table' 58 * 59 * // Parses the html fragment in the context of the parsed <table> element. 60 * const trFragment = parse5.parseFragment(documentFragment.childNodes[0], '<tr><td>Shake it, baby</td></tr>'); 61 * 62 * console.log(trFragment.childNodes[0].childNodes[0].tagName); //> 'td' 63 * ``` 64 * 65 * @param fragmentContext Parsing context element. If specified, given fragment will be parsed as if it was set to the context element's `innerHTML` property. 66 * @param html Input HTML fragment string. 67 * @param options Parsing options. 68 * @returns DocumentFragment 69 */ 70export function parseFragment<T extends TreeAdapterTypeMap = DefaultTreeAdapterMap>( 71 fragmentContext: T['parentNode'] | null, 72 html: string, 73 options: ParserOptions<T> 74): T['documentFragment']; 75export function parseFragment<T extends TreeAdapterTypeMap = DefaultTreeAdapterMap>( 76 html: string, 77 options?: ParserOptions<T> 78): T['documentFragment']; 79export function parseFragment<T extends TreeAdapterTypeMap = DefaultTreeAdapterMap>( 80 fragmentContext: T['parentNode'] | null | string, 81 html?: string | ParserOptions<T>, 82 options?: ParserOptions<T> 83): T['documentFragment'] { 84 if (typeof fragmentContext === 'string') { 85 options = html as ParserOptions<T>; 86 html = fragmentContext; 87 fragmentContext = null; 88 } 89 90 const parser = Parser.getFragmentParser(fragmentContext, options); 91 92 parser.tokenizer.write(html as string, true); 93 94 return parser.getFragment(); 95} 96