@aurahelper/languages
Version:
Language Libraries to work with XML, Aura, Apex... files. tokenizers, parsers, system classes and much more
192 lines • 6.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.XMLUtils = void 0;
var core_1 = require("@aurahelper/core");
var Utils = core_1.CoreUtils.Utils;
/**
* Class with utils methos to use when analize XML Files
*/
var XMLUtils = /** @class */ (function () {
function XMLUtils() {
}
/**
* Method to Clean an XML file
* @param {any} xmlDefinition XML File Definition
* @param {any} [xmlData] XML File parsed data
* @returns {any} Return the content file cleaned
*/
XMLUtils.cleanXMLFile = function (xmlDefinition, xmlData) {
var result;
if (xmlDefinition) {
result = {};
if (xmlData) {
result = XMLUtils.createXMLFile(xmlDefinition);
result = prepareXML(xmlData, result, xmlDefinition);
}
else {
result = XMLUtils.createXMLFile(xmlDefinition);
}
}
return result;
};
/**
* Method to create an XML file using XML definition
* @param {any} xmlMetadata XML file definition
* @returns {any} Return the XML created file (as JSON object)
*/
XMLUtils.createXMLFile = function (xmlMetadata) {
var result = {};
Object.keys(xmlMetadata).forEach(function (xmlField) {
var elementData = xmlMetadata[xmlField];
if (elementData.datatype === core_1.Datatypes.ARRAY) {
result[xmlField] = [];
}
else if (elementData.datatype === core_1.Datatypes.OBJECT) {
result[xmlField] = {};
}
else {
result[xmlField] = undefined;
}
});
return result;
};
/**
* Method to force xml element to be an array
* @param {any} element XML element
* @returns {any} Return the element on array
*/
XMLUtils.forceArray = function (element) {
var result = [];
if (element !== undefined) {
if (Array.isArray(element)) {
result = element;
}
else {
result.push(element);
}
}
return result;
};
/**
* Method to sort XML files
* @param {any[]} elements elements to sort
* @param {string[]} fields fields to use to sort data
* @returns {any[]} Return the elements sorted
*/
XMLUtils.sort = function (elements, fields) {
if (Array.isArray(elements)) {
elements.sort(function (a, b) {
if (fields && fields.length > 0) {
var nameA = '';
var nameB = '';
var counter = 0;
for (var _i = 0, fields_1 = fields; _i < fields_1.length; _i++) {
var field = fields_1[_i];
var valA = (a[field] !== undefined) ? a[field] : "";
var valB = (b[field] !== undefined) ? b[field] : "";
if (counter === 0) {
nameA = valA;
nameB = valB;
}
else {
nameA += '_' + valA;
nameB += '_' + valB;
}
counter++;
}
if (Utils.isNumber(nameA) && Utils.isNumber(nameB)) {
if (nameA > nameB) {
return 1;
}
else if (nameA < nameB) {
return -1;
}
else {
return 0;
}
}
else {
nameA = '' + nameA;
nameB = '' + nameB;
return nameA.toLowerCase().localeCompare(nameB.toLowerCase());
}
}
else {
a = '' + a;
b = '' + b;
return a.toLowerCase().localeCompare(b.toLowerCase());
}
});
}
return elements;
};
/**
* Method to get XML field attributes
* @param {any} data XMLField data
* @returns {string[]} Return the attribute list as XML format
*/
XMLUtils.getAttributes = function (data) {
var attributes = [];
if (data['@attrs'] !== undefined) {
Object.keys(data['@attrs']).forEach(function (key) {
attributes.push(key + '="' + data['@attrs'][key] + '"');
});
}
return attributes;
};
/**
* Method to get tag text
* @param {any} data XML Tag data
* @returns {string | undefined} Return text data
*/
XMLUtils.getText = function (data) {
var text = undefined;
if (data['#text'] !== undefined) {
text = data['#text'];
}
return text;
};
/**
* Method to get N tabs
* @param {number} nTabs Tabs number
* @returns {string} Retunr a text with N tabs symbols (\t)
*/
XMLUtils.getTabs = function (nTabs) {
var tabs = '';
for (var i = 0; i < nTabs; i++) {
tabs += '\t';
}
return tabs;
};
return XMLUtils;
}());
exports.XMLUtils = XMLUtils;
function prepareXML(source, target, definition) {
Object.keys(target).forEach(function (key) {
if (source[key] !== undefined) {
if (Array.isArray(target[key]) && source[key].length > 0) {
target[key] = XMLUtils.forceArray(source[key]);
}
else if (typeof source[key] === 'object' && Object.keys(source[key])) {
target[key] = source[key];
}
else if (source[key] !== undefined) {
target[key] = source[key];
}
if (definition[key].datatype === core_1.Datatypes.OBJECT && !Utils.isObject(target[key])) {
target[key] = {};
}
else if (definition[key].datatype === core_1.Datatypes.ARRAY && !Utils.isArray(target[key]) && target[key]) {
target[key] = Utils.forceArray(target[key]);
}
}
if (target[key] === undefined) {
delete target[key];
}
});
if (source['@attrs']) {
target['@attrs'] = source['@attrs'];
}
return target;
}
//# sourceMappingURL=utils.js.map