@krlwlfrt/xsdco
Version:
XSD converter
116 lines • 10.7 kB
JavaScript
;
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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