{"version":3,"file":"Element.cjs","sources":["../../../../src/dom/node/Element.ts"],"sourcesContent":["import type { Node } from 'libxmljs';\nimport { libxmljs } from 'libxslt';\nimport type { DOM } from '../abstract';\nimport { NodeTypes } from '../shared';\n\nconst { Element, parseXml } = libxmljs;\n\n/** @package */\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport interface DOMExtendedElement extends DOM.Node {\n    remove(): void;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport class DOMExtendedElement implements DOM.Element {\n    readonly nodeType = NodeTypes.DOCUMENT_NODE;\n\n    get attributes() {\n        return (this as unknown as DOMExtendedElement & Element)\n            .attrs()\n            .map((attr) => ({\n                name: attr.name(),\n                namespaceURI: null,\n                value: attr.value() ?? '',\n            }));\n    }\n\n    get firstChild() {\n        return (\n            (this as unknown as DOMExtendedElement & Element).child(0) ?? null\n        );\n    }\n\n    get firstElementChild(): Element | null {\n        return (\n            (this as unknown as DOMExtendedElement & Element).get('*') ?? null\n        );\n    }\n\n    get localName() {\n        const prefix = (this as unknown as Element).namespace()?.prefix();\n\n        if (prefix == null) {\n            return this.nodeName;\n        }\n\n        return this.nodeName.replace(`${prefix}:`, '');\n    }\n\n    get nodeName() {\n        return (this as unknown as Element).name();\n    }\n\n    get outerHTML() {\n        return (this as unknown as Element).toString(false);\n    }\n\n    append(this: DOMExtendedElement & Element, ...nodes: Node[]) {\n        nodes.forEach((node) => {\n            this.addChild(node);\n        });\n    }\n\n    getAttribute(this: DOMExtendedElement & Element, name: string) {\n        return this.attr(name)?.value() ?? null;\n    }\n\n    hasAttribute(this: Element & DOMExtendedElement, name: string) {\n        return this.attr(name) != null;\n    }\n\n    insertAdjacentHTML(\n        this: Element & DOMExtendedElement,\n        _position: 'afterend',\n        html: string\n    ) {\n        const childNodes = parseXml(`<root>${html}</root>`).find('/root/*');\n\n        childNodes.forEach((node) => {\n            this.addNextSibling(node);\n        });\n    }\n\n    replaceWith(this: Element & DOMExtendedElement, ...nodes: Node[]) {\n        nodes.forEach((node) => {\n            this.addPrevSibling(node);\n        });\n\n        this.remove();\n    }\n\n    removeAttribute(this: DOMExtendedElement & Element, name: string): void {\n        this.attr(name)?.remove();\n    }\n\n    setAttribute(\n        this: DOMExtendedElement & Element,\n        name: string,\n        value: string\n    ) {\n        this.attr(name, value);\n    }\n\n    setAttributeNS(\n        this: DOMExtendedElement & Element,\n        _namespaceURI: string | null,\n        name: string,\n        value: string\n    ) {\n        this.attr(name, value);\n    }\n}\n\n/* eslint-disable @typescript-eslint/no-redeclare */\ntype Element = InstanceType<typeof Element>;\n/* eslint-enable @typescript-eslint/no-redeclare */\n\nconst { constructor: _, ...descriptors } = Object.getOwnPropertyDescriptors(\n    DOMExtendedElement.prototype\n);\n\nObject.defineProperties(Element.prototype, descriptors);\n"],"names":["libxmljs","NodeTypes"],"mappings":";;;;AAKA,MAAM,EAAE,SAAS,SAAa,IAAAA;AASvB,MAAM,mBAA0C;AAAA,EAAhD,cAAA;AACH,SAAS,WAAWC,OAAU,UAAA;AAAA,EAAA;AAAA,EAE9B,IAAI,aAAa;AACb,WAAQ,KACH,MAAA,EACA,IAAI,CAAC,UAAU;AAAA,MACZ,MAAM,KAAK,KAAK;AAAA,MAChB,cAAc;AAAA,MACd,OAAO,KAAK,MAAA,KAAW;AAAA,IACzB,EAAA;AAAA,EACV;AAAA,EAEA,IAAI,aAAa;AAER,WAAA,KAAiD,MAAM,CAAC,KAAK;AAAA,EAEtE;AAAA,EAEA,IAAI,oBAAoC;AAE/B,WAAA,KAAiD,IAAI,GAAG,KAAK;AAAA,EAEtE;AAAA,EAEA,IAAI,YAAY;;AACZ,UAAM,UAAU,UAA4B,UAAU,MAAtC,mBAAyC;AAEzD,QAAI,UAAU,MAAM;AAChB,aAAO,KAAK;AAAA,IAChB;AAEA,WAAO,KAAK,SAAS,QAAQ,GAAG,MAAM,KAAK,EAAE;AAAA,EACjD;AAAA,EAEA,IAAI,WAAW;AACX,WAAQ,KAA4B;EACxC;AAAA,EAEA,IAAI,YAAY;AACJ,WAAA,KAA4B,SAAS,KAAK;AAAA,EACtD;AAAA,EAEA,UAA8C,OAAe;AACnD,UAAA,QAAQ,CAAC,SAAS;AACpB,WAAK,SAAS,IAAI;AAAA,IAAA,CACrB;AAAA,EACL;AAAA,EAEA,aAAiD,MAAc;;AAC3D,aAAO,UAAK,KAAK,IAAI,MAAd,mBAAiB,YAAW;AAAA,EACvC;AAAA,EAEA,aAAiD,MAAc;AACpD,WAAA,KAAK,KAAK,IAAI,KAAK;AAAA,EAC9B;AAAA,EAEA,mBAEI,WACA,MACF;AACE,UAAM,aAAa,SAAS,SAAS,IAAI,SAAS,EAAE,KAAK,SAAS;AAEvD,eAAA,QAAQ,CAAC,SAAS;AACzB,WAAK,eAAe,IAAI;AAAA,IAAA,CAC3B;AAAA,EACL;AAAA,EAEA,eAAmD,OAAe;AACxD,UAAA,QAAQ,CAAC,SAAS;AACpB,WAAK,eAAe,IAAI;AAAA,IAAA,CAC3B;AAED,SAAK,OAAO;AAAA,EAChB;AAAA,EAEA,gBAAoD,MAAoB;;AAC/D,eAAA,KAAK,IAAI,MAAT,mBAAY;AAAA,EACrB;AAAA,EAEA,aAEI,MACA,OACF;AACO,SAAA,KAAK,MAAM,KAAK;AAAA,EACzB;AAAA,EAEA,eAEI,eACA,MACA,OACF;AACO,SAAA,KAAK,MAAM,KAAK;AAAA,EACzB;AACJ;AAMA,MAAM,EAAE,aAAa,GAAG,GAAG,gBAAgB,OAAO;AAAA,EAC9C,mBAAmB;AACvB;AAEA,OAAO,iBAAiB,QAAQ,WAAW,WAAW;;"}