UNPKG

@atomist/automation-client

Version:

Atomist API for software low-level client

87 lines 3.18 kB
"use strict"; 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