UNPKG

@nodecfdi/cfdi-cleaner

Version:

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

44 lines (43 loc) 2.58 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const cfdi_core_1 = require("@nodecfdi/cfdi-core"); const ts_mixer_1 = require("ts-mixer"); const cfdi_x_path_1 = __importDefault(require("#src/internal/cfdi_x_path")); const schema_location_1 = __importDefault(require("#src/internal/schema_location")); const xml_attribute_methods_1 = __importDefault(require("#src/mixins/xml_attribute_methods")); const xml_namespace_methods_1 = __importDefault(require("#src/mixins/xml_namespace_methods")); const constants_1 = require("#src/utils/constants"); class MoveSchemaLocationsToRoot extends (0, ts_mixer_1.Mixin)(xml_namespace_methods_1.default, xml_attribute_methods_1.default) { clean(document) { const root = document.documentElement; const xpath = cfdi_x_path_1.default.createFromDocument(document); if (!root.hasAttributeNS(constants_1.namespaceXsi, 'schemaLocation')) { const namespacesXsi = xpath.queryAttributes('//@*[name()="xmlns:xsi"]'); for (const namespaceXsiAttribute of namespacesXsi) { /* istanbul ignore else -- For @xmldom/xmldom is always xmlns:xsi but posibly in others not same @preserve */ if (namespaceXsiAttribute.nodeValue === constants_1.namespaceXsi) { this.attributeRemove(namespaceXsiAttribute); } } root.setAttributeNS(cfdi_core_1.NAMESPACE.XMLNS, 'xmlns:xsi', constants_1.namespaceXsi); root.setAttributeNS(constants_1.namespaceXsi, 'xsi:schemaLocation', ''); } const rootAttribute = root.getAttributeNodeNS(constants_1.namespaceXsi, 'schemaLocation'); const schemaLocation = schema_location_1.default.createFromValue(rootAttribute.nodeValue); const schemaLocationAttributes = xpath.querySchemaLocations(); for (const schemaLocationAttribute of schemaLocationAttributes) { if (rootAttribute === schemaLocationAttribute) { continue; } const currenSchemaLocation = schema_location_1.default.createFromValue(schemaLocationAttribute.nodeValue); schemaLocation.import(currenSchemaLocation); this.attributeRemove(schemaLocationAttribute); } rootAttribute.nodeValue = schemaLocation.asValue(); rootAttribute.value = schemaLocation.asValue(); } } exports.default = MoveSchemaLocationsToRoot;