@aurahelper/xml-definitions
Version:
Powerfull Libraries to get the XML Definitions of ALL XML Salesforce Metadata Files. Support All API Versions up to API 53.0. You can get the definition of one or more XML files for a specific version of Salesforce. For Example: You can get the XML Defini
226 lines • 10.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.XMLDefinitions = void 0;
var core_1 = require("@aurahelper/core");
var ProjectUtils = core_1.CoreUtils.ProjectUtils;
/**
* Class with static methods to get the XML Definitions for one Metadata Type
* or get all XML Definitions for all types and specific Salesforce API Version.
* Also you can get a XML Raw definitions and Resolve Recursive definitions on some files.
*
* The difference between the XML definition and the raw XML definition is that the raw definition is not processed, it returns the entire XML information.
* The XML definitions return the XML definition processed for a specific API version, omitting everything that does not correspond to the indicated version
*/
var XMLDefinitions = /** @class */ (function () {
function XMLDefinitions() {
}
/**
* Method to get the Metadata Type's XML definition for an API Version.
* @param {string} type Metadata Type API Name to get the XML definition
* @param {string | number} apiVersion API Version number to get the version definition
* @returns {{ [key: string]: any } | undefined} Return the XML definition for the selected type and API version. If the type exists, but is not available in the selected API, return an empty object. If type not exists, return undefined.
*/
XMLDefinitions.getDefinition = function (type, apiVersion) {
try {
var typeDefinition = require('./definitions/' + transformTypeName(type));
if (typeDefinition) {
typeDefinition = typeDefinition[Object.keys(typeDefinition)[0]];
}
;
return processType(typeDefinition, apiVersion);
}
catch (error) {
return undefined;
}
};
/**
* Method to get the Metadata Type's XML RAW definition
* @param {string} type Metadata Type API Name to get the XML RAW definition
* @returns {{ [key: string]: any } | undefined} Return the XML raw definition for the selected type. If type not exists, return undefined.
*/
XMLDefinitions.getRawDefinition = function (type) {
try {
var typeDefinition = require('./definitions/' + transformTypeName(type));
if (typeDefinition) {
typeDefinition = typeDefinition[Object.keys(typeDefinition)[0]];
}
;
return typeDefinition;
}
catch (error) {
return undefined;
}
};
/**
* Method to get all XML Definitions for all Metadata Types for an specific API Version
* @param {string | number} apiVersion API Version number to get the XML Definitions
* @returns {{ [key: string]: { [key: string]: any } }} Return an Object with all XML definitions for the selected API version. The object has the Type as key and the XML definition as value. If not exists any definition for the selected API return an empty object
*/
XMLDefinitions.getAllDefinitions = function (apiVersion) {
var definitions = require('./definitions');
var result = {};
for (var _i = 0, _a = Object.keys(definitions); _i < _a.length; _i++) {
var key = _a[_i];
var typeProcessed = processType(definitions[key], apiVersion);
if (typeProcessed !== null && Object.keys(typeProcessed).length > 0) {
result[key] = typeProcessed;
}
}
return result;
};
/**
* Method to get all XML RAW Definitions for all Metadata Types
* @returns {{ [key: string]: { [key: string]: any } }} Return an Object with all XML raw definitions. The object has the Type as key and the XML definition as value
*/
XMLDefinitions.getAllRawDefinitions = function () {
return require('./definitions');
};
/**
* Method to resolve the recursive reference from some XML Definition files
* @param {any} typeDefinition XML file Definition
* @param {any} subFieldDefinition XML Field definition to resolve
* @returns {any} Returns the XML Definition to the selected XML field
*/
XMLDefinitions.resolveDefinitionReference = function (typeDefinition, subFieldDefinition) {
if (typeDefinition) {
var references = subFieldDefinition.definitionRef.split('>');
var parentDefinition = void 0;
if (references) {
for (var _i = 0, references_1 = references; _i < references_1.length; _i++) {
var ref = references_1[_i];
if (ref === 'this') {
parentDefinition = typeDefinition;
}
else if (parentDefinition && parentDefinition.fields && parentDefinition.fields[ref]) {
parentDefinition = parentDefinition.fields[ref];
}
else if (parentDefinition && parentDefinition[ref]) {
parentDefinition = parentDefinition[ref];
}
}
}
return parentDefinition;
}
return subFieldDefinition;
};
/**
* Method to get all Metadata Types referenced into a XML Definition
* @param {{ [key: string]: any }} XMLDefinition XML Definition to get all Metadata Types
*
* @returns {string[]} Return a List with all Metadata Object Names
*/
XMLDefinitions.getMetadataTypes = function (XMLDefinition) {
var types = [];
for (var _i = 0, _a = Object.keys(XMLDefinition); _i < _a.length; _i++) {
var fieldKey = _a[_i];
var field = XMLDefinition[fieldKey];
types = types.concat(getMetadataFromField(field));
}
return types;
};
return XMLDefinitions;
}());
exports.XMLDefinitions = XMLDefinitions;
function getMetadataFromField(fieldDefinition) {
var types = [];
if (fieldDefinition.metadataType && !types.includes(fieldDefinition.metadataType)) {
types.push(fieldDefinition.metadataType);
}
if (fieldDefinition.fields && Object.keys(fieldDefinition.fields).length > 0) {
for (var _i = 0, _a = Object.keys(fieldDefinition.fields); _i < _a.length; _i++) {
var fieldKey = _a[_i];
var field = fieldDefinition.fields[fieldKey];
types = types.concat(getMetadataFromField(field));
}
}
return types;
}
function processType(typeDefinition, apiVersion) {
apiVersion = ProjectUtils.getApiAsNumber(apiVersion);
var result = {};
for (var _i = 0, _a = Object.keys(typeDefinition); _i < _a.length; _i++) {
var key = _a[_i];
var fieldData = processEntity(typeDefinition[key], apiVersion);
if (fieldData) {
result[key] = fieldData;
}
}
return result;
}
function processEntity(entityData, apiVersion) {
var result;
if (!isReserved(entityData) && isApiAvailable(entityData, apiVersion)) {
result = entityData;
if (entityData.fieldDependencies && entityData.fieldDependencies.length > 0) {
var fieldDependencies = [];
for (var _i = 0, _a = entityData.fieldDependencies; _i < _a.length; _i++) {
var fieldDependency = _a[_i];
var entityProcessed = processEntity(fieldDependency, apiVersion);
if (entityProcessed) {
fieldDependencies.push(entityProcessed);
}
}
entityData.fieldDependencies = fieldDependencies;
}
if (entityData.controlledFields && entityData.controlledFields.length > 0) {
var controlledFields = [];
for (var _b = 0, _c = entityData.controlledFields; _b < _c.length; _b++) {
var controlledField = _c[_b];
var entityProcessed = processEntity(controlledField, apiVersion);
if (entityProcessed) {
controlledFields.push(entityProcessed);
}
}
entityData.controlledFields = controlledFields;
}
if (entityData.fields) {
for (var _d = 0, _e = Object.keys(entityData.fields); _d < _e.length; _d++) {
var key = _e[_d];
var entityProcessed = processEntity(entityData.fields[key], apiVersion);
if (entityProcessed) {
entityData.fields[key] = entityProcessed;
}
}
}
if (entityData.allowedValues && entityData.allowedValues.length > 0) {
if (entityData.datatype && entityData.datatype === core_1.Datatypes.ARRAY) {
var allowedValues = [];
for (var _f = 0, _g = entityData.allowedValues; _f < _g.length; _f++) {
var allowedValue = _g[_f];
var entityProcessed = processEntity(allowedValue, apiVersion);
if (entityProcessed) {
allowedValues.push(entityProcessed, apiVersion);
}
}
entityData.allowedValues = allowedValues;
}
}
if (entityData.values && entityData.values.length > 0) {
var values = [];
for (var _h = 0, _j = entityData.values; _h < _j.length; _h++) {
var value = _j[_h];
var entityProcessed = processEntity(value, apiVersion);
if (entityProcessed) {
values.push(entityProcessed);
}
}
entityData.values = values;
}
}
return result;
}
function isReserved(entityData) {
return entityData.reserved !== undefined && entityData.reserved;
}
function isApiAvailable(entityData, apiVersion) {
return entityData.minApi <= apiVersion && (entityData.maxApi === -1 || entityData.maxApi >= apiVersion);
}
function transformTypeName(type) {
if (type === core_1.MetadataTypes.INDEX) {
type = type + 'Xml';
}
var typeFirstChar = type.substring(0, 1);
var typeRest = type.substring(1);
return typeFirstChar.toLowerCase() + typeRest;
}
//# sourceMappingURL=index.js.map