@nodecfdi/cfdi-cleaner
Version:
Librería para limpiar comprobantes fiscales digitales v3.3 y v4.0
44 lines (43 loc) • 2.58 kB
JavaScript
;
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;