Skip to content

Commit

Permalink
#1325: upgrade buildDefinition to accept --metadata
Browse files Browse the repository at this point in the history
  • Loading branch information
JoernBerkefeld committed May 15, 2024
1 parent 65257cb commit 92926ac
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 31 deletions.
28 changes: 8 additions & 20 deletions lib/Builder.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,23 +62,11 @@ saved
* Builds a specific metadata file by name
*
* @param {string} metadataType metadata type to build
* @param {string} name name of metadata to build
* @param {string[]} nameArr name of metadata to build
* @param {TemplateMap} templateVariables variables to be replaced in the metadata
* @returns {Promise.<MultiMetadataTypeList>} Promise
*/
async _buildDefinition(metadataType, name, templateVariables) {
let nameArr;
/* eslint-disable unicorn/prefer-ternary */
if (name.includes(',')) {
nameArr = name.split(',').map((item) =>
// allow whitespace in comma-separated lists
item.trim()
);
} else {
nameArr = [name.trim()];
}
/* eslint-enable unicorn/prefer-ternary */

async _buildDefinition(metadataType, nameArr, templateVariables) {
const type = metadataType;
try {
const result = await Promise.all(
Expand Down Expand Up @@ -179,11 +167,11 @@ saved
*
* @param {string} businessUnit references credentials from properties.json
* @param {string} selectedType supported metadata type
* @param {string} name name of the metadata
* @param {string[]} nameArr name of the metadata
* @param {string} market market localizations
* @returns {Promise.<MultiMetadataTypeList>} -
*/
static async buildDefinition(businessUnit, selectedType, name, market) {
static async buildDefinition(businessUnit, selectedType, nameArr, market) {
const properties = await config.getProperties();
if (!(await config.checkProperties(properties))) {
return null;
Expand All @@ -201,7 +189,7 @@ saved
if (buObject !== null) {
const builder = new Builder(properties, buObject);
if (Util.checkMarket(market, properties)) {
return builder._buildDefinition(selectedType, name, properties.markets[market]);
return builder._buildDefinition(selectedType, nameArr, properties.markets[market]);
}
}
}
Expand All @@ -210,10 +198,10 @@ saved
*
* @param {string} listName name of list of BU-market combos
* @param {string} type supported metadata type
* @param {string} name name of the metadata
* @param {string[]} nameArr name of the metadata
* @returns {Promise.<MultiMetadataTypeList[]>} -
*/
static async buildDefinitionBulk(listName, type, name) {
static async buildDefinitionBulk(listName, type, nameArr) {
const properties = await config.getProperties();
if (!(await config.checkProperties(properties))) {
return null;
Expand Down Expand Up @@ -248,7 +236,7 @@ saved
if (Util.checkMarket(market, properties)) {
Util.logger.info(`Executing for '${businessUnit}': '${market}'`);
// omitting "await" to speed up creation
bdPromises.push(this.buildDefinition(businessUnit, type, name, market));
bdPromises.push(this.buildDefinition(businessUnit, type, nameArr, market));
}
}
}
Expand Down
30 changes: 26 additions & 4 deletions lib/cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -370,7 +370,7 @@ yargs(hideBin(process.argv))
})
// @ts-expect-error
.command({
command: 'buildDefinition <BU> <TYPE> <FILENAME> <MARKET>',
command: 'buildDefinition <BU> [TYPE] [FILENAME] [MARKET]',
aliases: ['bd'],
desc: 'builds metadata definition based on template',
builder: (yargs) => {
Expand All @@ -389,12 +389,34 @@ yargs(hideBin(process.argv))
})
.positional('MARKET', {
type: 'string',
describe: 'the business unit to deploy to',
describe: 'market used for building deployable definition',
})
.option('metadata', {
type: 'string',
alias: 'm',
group: 'Options for buildDefinition:',
describe: 'type:key combos to build template for',
})
.option('market', {
type: 'string',
group: 'Options for buildDefinition:',
describe: 'market used for building deployable definition',
});
},
handler: (argv) => {
Mcdev.setOptions(argv);
Mcdev.buildDefinition(argv.BU, argv.TYPE, argv.FILENAME, argv.MARKET);
const typeKeyCombo = Mcdev.metadataToTypeKey(argv.metadata);
if ('undefined' === typeof typeKeyCombo) {
Mcdev.buildDefinition(
argv.BU,
argv.TYPE,
csvToArray(argv.FILENAME),
argv.MARKET || argv.market
);
} else {
Mcdev.buildDefinition(argv.BU, typeKeyCombo, null, argv.MARKET || argv.market);
}
// Mcdev.buildDefinition(argv.BU, argv.TYPE, argv.FILENAME, argv.MARKET);
},
})
// @ts-expect-error
Expand All @@ -419,7 +441,7 @@ yargs(hideBin(process.argv))
},
handler: (argv) => {
Mcdev.setOptions(argv);
Mcdev.buildDefinitionBulk(argv.LISTNAME, argv.TYPE, argv.FILENAME);
Mcdev.buildDefinitionBulk(argv.LISTNAME, argv.TYPE, csvToArray(argv.FILENAME));
},
})
// @ts-expect-error
Expand Down
41 changes: 34 additions & 7 deletions lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -794,29 +794,56 @@ class Mcdev {
* Build a specific metadata file based on a template.
*
* @param {string} businessUnit references credentials from properties.json
* @param {string} selectedType supported metadata type
* @param {string} name name of the metadata
* @param {string | TypeKeyCombo} selectedTypes limit retrieval to given metadata type
* @param {string[]} nameArr name of the metadata
* @param {string} market market localizations
* @returns {Promise.<MultiMetadataTypeList>} -
*/
static async buildDefinition(businessUnit, selectedType, name, market) {
static async buildDefinition(businessUnit, selectedTypes, nameArr, market) {
Util.startLogger();
Util.logger.info('mcdev:: Build Definition from Template');
return Builder.buildDefinition(businessUnit, selectedType, name, market);
let selectedTypesArr;
if ('string' === typeof selectedTypes) {
selectedTypesArr = [selectedTypes];
} else {
selectedTypesArr = Object.keys(selectedTypes);
// check if types are valid
for (const selectedType of selectedTypesArr) {
if (!Util._isValidType(selectedType)) {
return;
}
if (!Array.isArray(selectedTypes[selectedType])) {
// we need an array of keys here
return;
}
}
}
/** @type {MultiMetadataTypeList} */
const returnObj = {};
for (const selectedType of selectedTypesArr) {
const result = await Builder.buildDefinition(
businessUnit,
selectedType,
'string' === typeof selectedTypes ? nameArr : selectedTypes[selectedType],
market
);
returnObj[selectedType] = result[selectedType];
}
return returnObj;
}

/**
* Build a specific metadata file based on a template using a list of bu-market combos
*
* @param {string} listName name of list of BU-market combos
* @param {string} type supported metadata type
* @param {string} name name of the metadata
* @param {string[]} nameArr name of the metadata
* @returns {Promise.<MultiMetadataTypeList[]>} -
*/
static async buildDefinitionBulk(listName, type, name) {
static async buildDefinitionBulk(listName, type, nameArr) {
Util.startLogger();
Util.logger.info('mcdev:: Build Definition from Template Bulk');
return Builder.buildDefinitionBulk(listName, type, name);
return Builder.buildDefinitionBulk(listName, type, nameArr);
}
/**
*
Expand Down

0 comments on commit 92926ac

Please sign in to comment.