nav-connect
Version:
Nav Online Invoice client
71 lines • 2.17 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.xmlParser = xmlParser;
const fast_xml_parser_1 = require("fast-xml-parser");
function normalizeNumbersAsText(obj) {
if (!obj || typeof obj !== "object")
return obj;
// always string keys not number
const taxKeys = [
"supplierTaxNumber",
"customerTaxNumber",
"supplierGroupMemberTaxNumber",
"customerGroupMemberTaxNumber",
"taxNumber",
"vatGroupMembership",
"groupMemberTaxNumber",
"invoiceNumber"
];
for (const key of Object.keys(obj)) {
if (taxKeys.includes(key) && obj[key] !== undefined && obj[key] !== null) {
obj[key] = String(obj[key]);
}
else if (typeof obj[key] === "object") {
// Rekurzívan mélyebbre megy, pl. tömbök, beágyazott objektumok
obj[key] = normalizeNumbersAsText(obj[key]);
}
}
return obj;
}
function normalizeArrays(obj) {
const keys = [
"invoiceDigest",
];
if (!obj || typeof obj !== "object")
return obj;
for (const key of Object.keys(obj)) {
if (keys.includes(key)) {
if (obj[key] === undefined) {
obj[key] = [];
}
else if (!Array.isArray(obj[key])) {
obj[key] = [obj[key]];
}
}
if (typeof obj[key] === "object") {
obj[key] = normalizeArrays(obj[key]);
}
}
return obj;
}
async function xmlParser(xmlData) {
const parser = new fast_xml_parser_1.XMLParser({
attributeNamePrefix: "@_",
textNodeName: "#text",
ignoreAttributes: false,
parseAttributeValue: true,
trimValues: true,
parseTagValue: true,
ignoreDeclaration: true,
removeNSPrefix: true,
});
try {
const result = parser.parse(xmlData);
return normalizeArrays(normalizeNumbersAsText(result)); // taxNumbers always string
}
catch (err) {
console.error("XML response processing error:", err);
throw err;
}
}
//# sourceMappingURL=xmlParser.js.map