'use strict'; const {DOM_PARSER, GLOBALS} = require('../shared/symbols.js'); const {parseFromString} = require('../shared/parse-from-string.js'); const {HTMLDocument} = require('../html/document.js'); const {SVGDocument} = require('../svg/document.js'); const {XMLDocument} = require('../xml/document.js'); /** * @implements globalThis.DOMParser */ class DOMParser { /** @typedef {{ "text/html": HTMLDocument, "image/svg+xml": SVGDocument, "text/xml": XMLDocument }} MimeToDoc */ /** * @template {keyof MimeToDoc} MIME * @param {string} markupLanguage * @param {MIME} mimeType * @returns {MimeToDoc[MIME]} */ parseFromString(markupLanguage, mimeType, globals = null) { let isHTML = false, document; if (mimeType === 'text/html') { isHTML = true; document = new HTMLDocument; } else if (mimeType === 'image/svg+xml') document = new SVGDocument; else document = new XMLDocument; document[DOM_PARSER] = DOMParser; if (globals) document[GLOBALS] = globals; if (isHTML && markupLanguage === '...') markupLanguage = ''; return markupLanguage ? parseFromString(document, isHTML, markupLanguage) : document; } } exports.DOMParser = DOMParser