UNPKG

html-dom-parser

Version:
1 lines 17.5 kB
{"version":3,"file":"node.mjs","sources":["../../../../node_modules/domhandler/dist/node.js"],"sourcesContent":["import { ElementType, isTag as isTagRaw } from \"domelementtype\";\n/**\n * This object will be used as the prototype for Nodes when creating a\n * DOM-Level-1-compliant structure.\n */\nexport class Node {\n /** Parent of the node */\n parent = null;\n /** Previous sibling */\n prev = null;\n /** Next sibling */\n next = null;\n /** The start index of the node. Requires `withStartIndices` on the handler to be `true. */\n startIndex = null;\n /** The end index of the node. Requires `withEndIndices` on the handler to be `true. */\n endIndex = null;\n // Read-write aliases for properties\n /**\n * Same as {@link parent}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get parentNode() {\n return this.parent;\n }\n set parentNode(parent) {\n this.parent = parent;\n }\n /**\n * Same as {@link prev}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get previousSibling() {\n return this.prev;\n }\n set previousSibling(previous) {\n this.prev = previous;\n }\n /**\n * Same as {@link next}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get nextSibling() {\n return this.next;\n }\n set nextSibling(next) {\n this.next = next;\n }\n /**\n * Clone this node, and optionally its children.\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\n cloneNode(recursive = false) {\n return cloneNode(this, recursive);\n }\n}\n/**\n * A node that contains some data.\n */\nexport class DataNode extends Node {\n data;\n /**\n * @param data The content of the data node\n */\n constructor(data) {\n super();\n this.data = data;\n }\n /**\n * Same as {@link data}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get nodeValue() {\n return this.data;\n }\n set nodeValue(data) {\n this.data = data;\n }\n}\n/**\n * Text within the document.\n */\nexport class Text extends DataNode {\n type = ElementType.Text;\n get nodeType() {\n return 3;\n }\n}\n/**\n * Comments within the document.\n */\nexport class Comment extends DataNode {\n type = ElementType.Comment;\n get nodeType() {\n return 8;\n }\n}\n/**\n * Processing instructions, including doc types.\n */\nexport class ProcessingInstruction extends DataNode {\n type = ElementType.Directive;\n name;\n constructor(name, data) {\n super(data);\n this.name = name;\n }\n get nodeType() {\n return 1;\n }\n /** If this is a doctype, the document type name (parse5 only). */\n \"x-name\";\n /** If this is a doctype, the document type public identifier (parse5 only). */\n \"x-publicId\";\n /** If this is a doctype, the document type system identifier (parse5 only). */\n \"x-systemId\";\n}\n/**\n * A node that can have children.\n */\nexport class NodeWithChildren extends Node {\n children;\n /**\n * @param children Children of the node. Only certain node types can have children.\n */\n constructor(children) {\n super();\n this.children = children;\n }\n // Aliases\n /** First child of the node. */\n get firstChild() {\n return this.children[0] ?? null;\n }\n /** Last child of the node. */\n get lastChild() {\n return this.children.length > 0\n ? this.children[this.children.length - 1]\n : null;\n }\n /**\n * Same as {@link children}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get childNodes() {\n return this.children;\n }\n set childNodes(children) {\n this.children = children;\n }\n}\n/**\n * CDATA nodes.\n */\nexport class CDATA extends NodeWithChildren {\n type = ElementType.CDATA;\n get nodeType() {\n return 4;\n }\n}\n/**\n * The root node of the document.\n */\nexport class Document extends NodeWithChildren {\n type = ElementType.Root;\n get nodeType() {\n return 9;\n }\n}\n/**\n * An element within the DOM.\n */\nexport class Element extends NodeWithChildren {\n name;\n attribs;\n type;\n /**\n * @param name Name of the tag, eg. `div`, `span`.\n * @param attribs Object mapping attribute names to attribute values.\n * @param children Children of the node.\n * @param type Node type used for the new node instance.\n */\n constructor(name, attribs, children = [], type = name === \"script\"\n ? ElementType.Script\n : name === \"style\"\n ? ElementType.Style\n : ElementType.Tag) {\n super(children);\n this.name = name;\n this.attribs = attribs;\n this.type = type;\n }\n get nodeType() {\n return 1;\n }\n // DOM Level 1 aliases\n /**\n * Same as {@link name}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get tagName() {\n return this.name;\n }\n set tagName(name) {\n this.name = name;\n }\n get attributes() {\n return Object.keys(this.attribs).map((name) => ({\n name,\n value: this.attribs[name],\n namespace: this[\"x-attribsNamespace\"]?.[name],\n prefix: this[\"x-attribsPrefix\"]?.[name],\n }));\n }\n /** Element namespace (parse5 only). */\n namespace;\n /** Element attribute namespaces (parse5 only). */\n \"x-attribsNamespace\";\n /** Element attribute namespace-related prefixes (parse5 only). */\n \"x-attribsPrefix\";\n}\n/**\n * Checks if `node` is an element node.\n * @param node Node to check.\n * @returns `true` if the node is an element node.\n */\nexport function isTag(node) {\n return isTagRaw(node);\n}\n/**\n * Checks if `node` is a CDATA node.\n * @param node Node to check.\n * @returns `true` if the node is a CDATA node.\n */\nexport function isCDATA(node) {\n return node.type === ElementType.CDATA;\n}\n/**\n * Checks if `node` is a text node.\n * @param node Node to check.\n * @returns `true` if the node is a text node.\n */\nexport function isText(node) {\n return node.type === ElementType.Text;\n}\n/**\n * Checks if `node` is a comment node.\n * @param node Node to check.\n * @returns `true` if the node is a comment node.\n */\nexport function isComment(node) {\n return node.type === ElementType.Comment;\n}\n/**\n * Checks if `node` is a directive node.\n * @param node Node to check.\n * @returns `true` if the node is a directive node.\n */\nexport function isDirective(node) {\n return node.type === ElementType.Directive;\n}\n/**\n * Checks if `node` is a document node.\n * @param node Node to check.\n * @returns `true` if the node is a document node.\n */\nexport function isDocument(node) {\n return node.type === ElementType.Root;\n}\n/**\n * Checks if `node` has children.\n * @param node Node to check.\n * @returns `true` if the node has children.\n */\nexport function hasChildren(node) {\n return Object.hasOwn(node, \"children\");\n}\n/**\n * Clone a node, and optionally its children.\n * @param node Node to clone.\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\nexport function cloneNode(node, recursive = false) {\n let result;\n if (isText(node)) {\n result = new Text(node.data);\n }\n else if (isComment(node)) {\n result = new Comment(node.data);\n }\n else if (isTag(node)) {\n const children = recursive ? cloneChildren(node.children) : [];\n const clone = new Element(node.name, { ...node.attribs }, children);\n for (const child of children) {\n child.parent = clone;\n }\n if (node.namespace != null) {\n clone.namespace = node.namespace;\n }\n if (node[\"x-attribsNamespace\"]) {\n clone[\"x-attribsNamespace\"] = { ...node[\"x-attribsNamespace\"] };\n }\n if (node[\"x-attribsPrefix\"]) {\n clone[\"x-attribsPrefix\"] = { ...node[\"x-attribsPrefix\"] };\n }\n result = clone;\n }\n else if (isCDATA(node)) {\n const children = recursive ? cloneChildren(node.children) : [];\n const clone = new CDATA(children);\n for (const child of children) {\n child.parent = clone;\n }\n result = clone;\n }\n else if (isDocument(node)) {\n const children = recursive ? cloneChildren(node.children) : [];\n const clone = new Document(children);\n for (const child of children) {\n child.parent = clone;\n }\n if (node[\"x-mode\"]) {\n clone[\"x-mode\"] = node[\"x-mode\"];\n }\n result = clone;\n }\n else if (isDirective(node)) {\n const instruction = new ProcessingInstruction(node.name, node.data);\n if (node[\"x-name\"] != null) {\n instruction[\"x-name\"] = node[\"x-name\"];\n instruction[\"x-publicId\"] = node[\"x-publicId\"];\n instruction[\"x-systemId\"] = node[\"x-systemId\"];\n }\n result = instruction;\n }\n else {\n throw new Error(`Not implemented yet: ${node.type}`);\n }\n result.startIndex = node.startIndex;\n result.endIndex = node.endIndex;\n if (node.sourceCodeLocation != null) {\n result.sourceCodeLocation = node.sourceCodeLocation;\n }\n return result;\n}\n/**\n * Clone a list of child nodes.\n * @param childs The child nodes to clone.\n * @returns A list of cloned child nodes.\n */\nfunction cloneChildren(childs) {\n const children = childs.map((child) => cloneNode(child, true));\n for (let index = 1; index < children.length; index++) {\n children[index].prev = children[index - 1];\n children[index - 1].next = children[index];\n }\n return children;\n}\n"],"names":["isTagRaw"],"mappings":"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","x_google_ignoreList":[0]}