UNPKG

@aurahelper/languages

Version:

Language Libraries to work with XML, Aura, Apex... files. tokenizers, parsers, system classes and much more

192 lines 6.75 kB
"use strict"; 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