UNPKG

@krlwlfrt/xsdco

Version:
116 lines 10.7 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseXML = parseXML; const tsg_1 = require("@krlwlfrt/tsg"); const process_1 = require("process"); const async_1 = require("./async"); const common_1 = require("./common"); const primitiveTypes = [ 'anyURI', 'base64Binary', 'boolean', 'date', 'dateTime', 'decimal', 'double', 'duration', 'float', 'gDay', 'gMonth', 'gMonthDay', 'gYear', 'gYearMonth', 'hexBinary', 'integer', 'NOTATION', 'QName', 'string', 'time', ]; function flattenXMLPart(xmlPart, types, rootNamespaces, root) { const type = types.find((typeInTypes) => { return typeInTypes.name === root.type.name && typeInTypes.namespace === root.type.namespace; }); if (typeof type === 'undefined') { common_1.logger.error(`Type '${root.type.name}' could not be found.`); (0, process_1.exit)(1); } if ((0, tsg_1.isEntity)(type)) { for (const key in xmlPart[root.element]) { if (!{}.hasOwnProperty.call(xmlPart[root.element], key)) { continue; } const property = type.properties.find((propertyInProperties) => { return propertyInProperties.name === key; }); if (typeof property === 'undefined') { common_1.logger.error(`Property '${key}' for '${root.type.name}' could not be found. Available properties are ${type.properties.map((propertyInProperties) => { return propertyInProperties.name; }) .join(', ')}`); (0, process_1.exit)(1); } for (let i = 0; i < xmlPart[root.element][key].length; i++) { if (primitiveTypes.indexOf(property.type.name) === -1 && typeof property.type.namespace === 'string' && rootNamespaces.indexOf(property.type.namespace) === -1) { xmlPart[root.element][key][i] = flattenXMLPart(xmlPart[root.element][key], types, rootNamespaces, { element: i, type: property.type, }); } if (property.type.name === 'boolean' && typeof property.type.namespace === 'string' && rootNamespaces.indexOf(property.type.namespace) >= 0) { xmlPart[root.element][key][i] = !!xmlPart[root.element][key][i]; } if (['decimal', 'double', 'float'].indexOf(property.type.name) >= 0 && typeof property.type.namespace === 'string' && rootNamespaces.indexOf(property.type.namespace) >= 0) { xmlPart[root.element][key][i] = parseFloat(xmlPart[root.element][key][i]); } if (property.type.name === 'integer' && typeof property.type.namespace === 'string' && rootNamespaces.indexOf(property.type.namespace) >= 0) { xmlPart[root.element][key][i] = parseInt(xmlPart[root.element][key][i], 10); } } if (property.multiple === false && Array.isArray(xmlPart[root.element][key])) { xmlPart[root.element][key] = xmlPart[root.element][key][0]; } } } return xmlPart[root.element]; } function parseXML(xml, types, rootNamespaces, intendedRoot) { return __awaiter(this, void 0, void 0, function* () { const parsedXML = yield (0, async_1.asyncParseString)(xml, { emptyTag: undefined, ignoreAttrs: true, }); let rootElement = Object.keys(parsedXML)[0]; let rootType = { name: rootElement, namespace: '', }; if (typeof intendedRoot !== 'undefined') { rootElement = intendedRoot.element; rootType = intendedRoot.type; } else { common_1.logger.info(`Assuming root element and type to be '${rootElement}' with the same type.`); } common_1.logger.info(`Using root element '${rootElement}' with type '${rootType.name}' from namespace '${rootType.namespace}'.`); return flattenXMLPart(parsedXML, types, rootNamespaces, { element: rootElement, type: rootType, }); }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGFyc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFnSkEsNEJBaUNDO0FBbEtELHVDQUF3RTtBQUN4RSxxQ0FBNkI7QUFDN0IsbUNBQXlDO0FBQ3pDLHFDQUFnQztBQU1oQyxNQUFNLGNBQWMsR0FBRztJQUNyQixRQUFRO0lBQ1IsY0FBYztJQUNkLFNBQVM7SUFDVCxNQUFNO0lBQ04sVUFBVTtJQUNWLFNBQVM7SUFDVCxRQUFRO0lBQ1IsVUFBVTtJQUNWLE9BQU87SUFDUCxNQUFNO0lBQ04sUUFBUTtJQUNSLFdBQVc7SUFDWCxPQUFPO0lBQ1AsWUFBWTtJQUNaLFdBQVc7SUFDWCxTQUFTO0lBQ1QsVUFBVTtJQUNWLE9BQU87SUFDUCxRQUFRO0lBQ1IsTUFBTTtDQUNQLENBQUM7QUFhRixTQUFTLGNBQWMsQ0FBQyxPQUFZLEVBQ2xDLEtBQWEsRUFDYixjQUF3QixFQUN4QixJQUlDO0lBRUQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO1FBQ3RDLE9BQU8sV0FBVyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxXQUFXLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzlGLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxPQUFPLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUNoQyxlQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLHVCQUF1QixDQUFDLENBQUM7UUFDN0QsSUFBQSxjQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsSUFBSSxJQUFBLGNBQVEsRUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ25CLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLElB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