@atomist/automation-client
Version:
Atomist API for software low-level client
87 lines • 3.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const _ = require("lodash");
const automationMetadata_1 = require("../metadata/automationMetadata");
/**
* Populate the parameters of the command handler instance,
* performing type coercion if necessary
* @param instanceToPopulate parameters instance (may be handler instance itself)
* @param hm handler metadata
* @param args string args
*/
function populateParameters(instanceToPopulate, hm, args) {
(args || []).forEach(arg => {
if (arg.value !== undefined) {
const parameter = hm.parameters.find(p => p.name === arg.name);
if (parameter) {
_.update(instanceToPopulate, parameter.name, () => computeValue(parameter, arg.value));
}
}
});
}
exports.populateParameters = populateParameters;
function populateValues(instanceToPopulate, am, configuration) {
(am.values || []).forEach(v => {
let configValue;
if (!v.path || v.path.length === 0) {
configValue = configuration;
}
else {
configValue = _.get(configuration, v.path);
}
if (!configValue && v.required) {
throw new Error(`Required @Value '${v.path}' in '${instanceToPopulate.constructor.name}' is not available in configuration`);
}
else {
_.update(instanceToPopulate, v.name, () => computeValue({ name: v.name, type: v.type }, configValue));
}
});
}
exports.populateValues = populateValues;
function computeValue(parameter, value) {
let newValue = value;
// Convert type if necessary
switch (parameter.type) {
case "string":
case undefined:
// It's a string. Keep the value the same
break;
case automationMetadata_1.FreeChoices:
// It's a string array. Keep the value the same
break;
case "boolean":
if (typeof value !== "boolean") {
newValue = value === "true" || value === "yes" || value === "1";
}
break;
case "number":
if (typeof value === "string") {
newValue = parseInt(value, 10);
}
else if (typeof value === "number") {
break;
}
else {
throw new Error(`Parameter '${parameter.name}' has invalid value, but is numeric`);
}
break;
default:
/* tslint:disable:deprecation */
// It's a Chooser
const chooser = parameter.type;
if (chooser.pickOne) {
if (typeof value !== "string") {
throw new Error(`Parameter '${parameter.name}' has invalid value, but should be string`);
}
}
else {
if (typeof value.value === "string") {
throw new Error(`Parameter '${parameter.name}' has string value, but should be array`);
}
}
/* tslint:enable:deprecation */
break;
}
return newValue;
}
//# sourceMappingURL=parameterPopulation.js.map