@viewdo/dxp-story-cli
Version:
README.md
74 lines (59 loc) • 1.82 kB
JavaScript
const fs = require('fs')
const path = require('path')
Array.prototype.diff = function(a) {
return this.filter(function(i) {return a.indexOf(i) < 0;});
}
const flattenArray = list => list.reduce(
(a, b) => a.concat(Array.isArray(b) ? flattenArray(b) : b), []
)
const distinctArray = list => [...new Set(list)]
const reconcileLists = (current, previous, protected_items) => {
let remove = previous
.filter(namespace => !current.includes(namespace) && !protected_items.includes(namespace))
let add = current
.filter(namespace => !previous.includes(namespace) && !protected_items.includes(namespace))
return { add, remove }
}
const isValidDomain = (v) => {
if (!v) return false;
var re = /^(?!:\/\/)([a-zA-Z0-9-\*]+\.){0,5}[a-zA-Z0-9-][a-zA-Z0-9-]+\.[a-zA-Z]{2,64}?$/gi;
return re.test(v);
}
const requireValue = (name) => {
throw new Error(`A value for ${name} is required`.red)
}
const logger = (msg) => {
console.log('ViewDO Pipe: '.blue + msg)
}
const execShell = (cmd, options = {}) => {
const shell = require('shelljs')
console.log(cmd.blue)
let command = shell.exec(cmd, options)
if(command.code > 0)
throw new Error(command.stdout)
return command
}
const findFiles = (dir, file_list = []) => {
return fs.readdirSync(dir)
.map(file => fs.statSync(path.join(dir, file)).isDirectory()
? findFiles(path.join(dir, file), file_list)
: file_list.concat(path.join(dir, file))[0])
}
const replaceInText = (vars, text) => {
let result = text.toString()
Object.getOwnPropertyNames(vars).forEach(p => {
result = result.replace('$' + p.toUpperCase(), vars[p].toString())
})
return result
}
module.exports = {
distinctArray,
findFiles,
isValidDomain,
flattenArray,
requireValue,
reconcileLists,
replaceInText,
execShell,
logger
}