UNPKG

@viewdo/dxp-story-cli

Version:
78 lines (69 loc) 2.1 kB
const Listr = require('listr') const _mapFileTypes = (asset_config) => { let file_types = asset_config.getFileTypeDefinitions() return Object.keys(file_types) .map(file_type => file_types[file_type]) } const _getTasksPerTypeFilePath = (file_type, typeTitle, actionFunc) => { let tasks = file_type.paths.map(file => { return { title: `${file.local_path}`, task: (ctx, task) => { return actionFunc({ctx, task, file}) } } }) return (tasks.length) ? { title: typeTitle, task: () => new Listr(tasks, { concurrent: false }) } : { title: typeTitle, skip: () => `No ${file_type.name} files on DXP`, task: () => {} } } module.exports = { runTasks: (tasks) => { return new Listr(tasks, { collapse: false, renderer: process.env.VERBOSE ? require('listr-verbose-renderer') : null }).run() }, getModelTask: (model_name, getFunc, model_key, typeTaskMapFun) => { return { title: `Get ${model_name} ${model_key} from DXP:${process.env.NAMESPACE}`, task: (ctx, task) => getFunc() .then(model => { if(model) { let subTask = typeTaskMapFun({ctx, task, model}) return new Listr([subTask]) } task.skip(`${model_name} ${model_key} not available.`) }) } }, getAssetTasksPerType: (model_name, model, asset_config, action, fileTaskMap) => { if(model && model.key) { // TODO: For now, we are using the API-model as the source of truth. // once we switch to the config, we no longer need to pass this in. let values = _mapFileTypes(asset_config) let tasks = values.map(file_type => { return _getTasksPerTypeFilePath( file_type, ` ${file_type.name}`, fileTaskMap) }) return { title: `${model_name} ${action} ${model.name} Assets`, task: () => new Listr(tasks) } } return { title: `${model_name} ${action} Assets`, skip: () => `${model_name} unavailable`, task: () => {} } } }