@viewdo/dxp-story-cli
Version:
README.md
78 lines (69 loc) • 2.1 kB
JavaScript
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: () => {}
}
}
}