• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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