UNPKG

@nodecfdi/cfdi-cleaner

Version:

Librería para limpiar comprobantes fiscales digitales v3.3 y v4.0

36 lines (35 loc) 1.55 kB
import { isAttribute, NAMESPACE } from '@nodecfdi/cfdi-core'; import xpath from 'xpath'; import { namespaceXsi } from '#src/utils/constants'; /** * This provides methods used for xml namespaces handling. It´s not meant to * be used directly. */ export default class XmlNamespaceMethods { *iterateNonReservedNamespaces(document) { const namespaceNodes = xpath.evaluate("(//*|//@*)[local-name(.)='xmlns' or starts-with(name(), 'xmlns')]", // @ts-expect-error misssing Node properties are not needed document, null, 0, null); let namespaceNode = namespaceNodes.iterateNext(); while (namespaceNode) { if (!this.isNamespaceReserved(`${namespaceNode.nodeValue}`) && isAttribute(namespaceNode)) { yield namespaceNode; } namespaceNode = namespaceNodes.iterateNext(); } } removeNamespaceNodeAttribute(namespaceNode) { const { ownerElement, localName, nodeName } = namespaceNode; /* istanbul ignore else -- For usage always is has attribute ns but for default bool is posible false @preserve */ if (ownerElement.hasAttributeNS(NAMESPACE.XMLNS, `${localName}`)) { ownerElement.removeAttribute(nodeName); } } isNamespaceReserved(namespace) { const reservedNameSpaces = [NAMESPACE.XML, NAMESPACE.XMLNS, namespaceXsi]; return reservedNameSpaces.includes(namespace); } isNamespaceRelatedToSat(namespace) { return namespace.startsWith('http://www.sat.gob.mx/'); } }