{"version":3,"file":"Node.cjs","sources":["../../../../src/dom/node/Node.ts"],"sourcesContent":["import type { Node } from 'libxmljs';\nimport { libxmljs } from 'libxslt';\nimport type { DOM } from '../abstract';\nimport { NodeTypes } from '../shared';\n\nconst { Element, Document } = libxmljs;\n\nObject.assign(libxmljs, {\n    Node: NodeTypes,\n});\n\n/** @package */\nexport class DOMExtendedNode implements DOM.Node {\n    get nodeName() {\n        return (this as unknown as Node & DOMExtendedNode).name();\n    }\n\n    get nodeType() {\n        const type = (this as unknown as Node & DOMExtendedNode).type();\n\n        switch (type) {\n            case 'attribute': {\n                return NodeTypes.ATTRIBUTE_NODE;\n            }\n\n            case 'comment': {\n                return NodeTypes.COMMENT_NODE;\n            }\n\n            case 'document': {\n                return NodeTypes.DOCUMENT_NODE;\n            }\n\n            case 'element': {\n                return NodeTypes.ELEMENT_NODE;\n            }\n\n            case 'text': {\n                return NodeTypes.TEXT_NODE;\n            }\n\n            default: {\n                throw new Error(`Unknown node type: `);\n            }\n        }\n    }\n\n    get ownerDocument() {\n        if (this.nodeType === NodeTypes.DOCUMENT_NODE) {\n            return this as unknown as Document;\n        }\n\n        return (this as unknown as DOMExtendedNode & Node).doc();\n    }\n\n    get parentElement() {\n        return (\n            this as unknown as DOMExtendedNode & Node\n        ).parent() as Element | null;\n    }\n\n    get textContent(): string | null {\n        return (this as unknown as DOMExtendedNode & Node).text();\n    }\n\n    set textContent(value: string) {\n        (this as unknown as DOMExtendedNode & Node).text(value);\n    }\n\n    cloneNode<T extends Node>(\n        this: DOMExtendedNode & T,\n        deep = false\n    ): DOMExtendedNode & T {\n        return this.clone(deep);\n    }\n}\n\n/* eslint-disable @typescript-eslint/no-redeclare */\ntype Document = InstanceType<typeof Document>;\ntype Element = InstanceType<typeof Element>;\n/* eslint-enable @typescript-eslint/no-redeclare */\n\nconst { constructor: _, ...descriptors } = Object.getOwnPropertyDescriptors(\n    DOMExtendedNode.prototype\n);\n\n[Element, Document].forEach((Constructor) => {\n    Object.assign(Constructor, NodeTypes);\n    Object.defineProperties(Constructor.prototype, descriptors);\n});\n"],"names":["libxmljs","NodeTypes"],"mappings":";;;;AAKA,MAAM,EAAE,SAAS,SAAa,IAAAA;AAE9B,OAAO,OAAOA,QAAAA,UAAU;AAAA,EACpB,MAAMC,OAAA;AACV,CAAC;AAGM,MAAM,gBAAoC;AAAA,EAC7C,IAAI,WAAW;AACX,WAAQ,KAA2C;EACvD;AAAA,EAEA,IAAI,WAAW;AACL,UAAA,OAAQ,KAA2C;AAEzD,YAAQ,MAAM;AAAA,MACV,KAAK,aAAa;AACd,eAAOA,OAAAA,UAAU;AAAA,MACrB;AAAA,MAEA,KAAK,WAAW;AACZ,eAAOA,OAAAA,UAAU;AAAA,MACrB;AAAA,MAEA,KAAK,YAAY;AACb,eAAOA,OAAAA,UAAU;AAAA,MACrB;AAAA,MAEA,KAAK,WAAW;AACZ,eAAOA,OAAAA,UAAU;AAAA,MACrB;AAAA,MAEA,KAAK,QAAQ;AACT,eAAOA,OAAAA,UAAU;AAAA,MACrB;AAAA,MAEA,SAAS;AACC,cAAA,IAAI,MAAM,qBAAqB;AAAA,MACzC;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,IAAI,gBAAgB;AACZ,QAAA,KAAK,aAAaA,OAAA,UAAU,eAAe;AACpC,aAAA;AAAA,IACX;AAEA,WAAQ,KAA2C;EACvD;AAAA,EAEA,IAAI,gBAAgB;AAChB,WACI,KACF;EACN;AAAA,EAEA,IAAI,cAA6B;AAC7B,WAAQ,KAA2C;EACvD;AAAA,EAEA,IAAI,YAAY,OAAe;AAC1B,SAA2C,KAAK,KAAK;AAAA,EAC1D;AAAA,EAEA,UAEI,OAAO,OACY;AACZ,WAAA,KAAK,MAAM,IAAI;AAAA,EAC1B;AACJ;AAOA,MAAM,EAAE,aAAa,GAAG,GAAG,gBAAgB,OAAO;AAAA,EAC9C,gBAAgB;AACpB;AAEA,CAAC,SAAS,QAAQ,EAAE,QAAQ,CAAC,gBAAgB;AAClC,SAAA,OAAO,aAAaA,OAAAA,SAAS;AAC7B,SAAA,iBAAiB,YAAY,WAAW,WAAW;AAC9D,CAAC;;"}