@interaktiv/dia-scripts
Version:
CLI toolbox with common scripts for most sort of projects at DIA
106 lines (86 loc) • 3.23 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
const chalk = require('chalk');
const execa = require('execa');
const {
resolveBin,
omit
} = require('../../utils');
const processResult = (result, {
onComplete
}) => {
// Support `cross-spawn` interface having `status` prop
const processedResult = (0, _extends2.default)({}, result, {
status: result.exitCode
});
return typeof onComplete === 'function' ? onComplete(processedResult) : processedResult;
};
const hasProp = (obj = {}) => (prop = '') => obj && Object.prototype.hasOwnProperty.call(obj, prop);
const ALLOWED_PARAMS = ['checkOnly', 'ignorewarnings', 'testlevel', 'metadata', 'ignoreerrors', 'sourcepath', 'validateddeployrequestid', 'runtests', 'targetusername', 'wait', 'manifest', 'apiversion', 'json', 'loglevel', 'verbose'];
exports.ALLOWED_PARAMS = ALLOWED_PARAMS;
exports.runDeploy = async function ({
argv,
onComplete
}) {
const META_DATA_PARAM = {
apex: ['--metadata', 'ApexClass'],
aura: ['--metadata', 'AuraDefinitionBundle'],
static: ['--metadata', 'StaticResource'],
lwc: ['--metadata', 'LightningComponentBundle']
};
let args = omit(argv, ['_', '--']);
const allowedMetaDataParamRegex = Object.keys(META_DATA_PARAM);
const loglevel = args.loglevel ? [] : ['--loglevel', 'fatal'];
const metaDataType = Object.keys(args).filter(a => allowedMetaDataParamRegex.includes(a)).pop();
let metaData = [];
if (metaDataType) {
metaData = META_DATA_PARAM[metaDataType];
args = omit(args, [metaDataType]);
}
let manifest = [];
const hasArg = hasProp(args);
if (hasArg('package') && hasArg('manifest') === false) {
manifest = ['--manifest', 'manifest/package.xml'];
args = omit(args, ['package']);
}
const filesGiven = argv._.length > 0;
const filesToApply = filesGiven ? ['-p', argv._.join(',')] : [];
if (filesGiven) args = omit(args, argv._);
const params = Object.keys(args).filter(a => ALLOWED_PARAMS.includes(a)).map(a => {
const value = args[a];
const option = [`--${a}`];
if (value === true || value === false) return option;
return [...option, value];
}).reduce((options, opt) => [...options, ...opt], []).filter(Boolean);
if (filesToApply) {
console.info(`\n${chalk.cyan('Deploying:')} ${filesToApply.slice(1)}`);
} else if (metaData) {
console.info(`\n${chalk.cyan('Deploying:')} ${metaData[1]}`);
} else {
console.info(`\n${chalk.cyan('Deploying...')}`);
}
let result = {};
try {
result = await execa(resolveBin('sfdx'), ['force:source:deploy', ...loglevel, ...metaData, ...manifest, ...params, ...filesToApply], {
stdio: ['inherit', 'pipe', 'pipe']
});
} catch (err) {
if (Object.prototype.hasOwnProperty.call(err, 'command')) result = err;else throw err;
}
const {
stdout,
stderr
} = result;
if (stdout) {
console.log();
stdout.split('\n').forEach(msg => console.info(msg));
}
if (stderr) {
console.log();
stderr.split('\n').forEach(msg => console.error(msg));
}
return processResult(result, {
onComplete
});
};