UNPKG

@interaktiv/dia-scripts

Version:

CLI toolbox with common scripts for most sort of projects at DIA

106 lines (86 loc) 3.23 kB
"use strict"; 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 }); };