@pgsz/pg-cli
Version:
pg-cli脚手架的自我学习
52 lines (45 loc) • 1.47 kB
JavaScript
const stringifyJS = require('./stringifyJS')
const merge = require('deepmerge')
const mergeArrayWithDedupe = (a, b) => Array.from(new Set([...a, ...b]))
const mergeOptions = {
arrayMerge: mergeArrayWithDedupe,
}
const transformJS = {
read: ({ filename, context }) => {
try {
return require(`./${filename}`, context, true)
} catch (e) {
return null
}
},
// 第二个参数:过滤的方法函数
// 4: 文本缩进空格
write: ({ value }) => `module.exports = ${stringifyJS(value, null, 4)}`,
}
const transformJSON = {
read: ({ source }) => JSON.parse(source),
write: ({ value, existing }) => JSON.stringify(merge(existing, value, mergeOptions), null, 4),
}
const transformYAML = {
read: ({ source }) => require('js-yaml').safeLoad(source),
write: ({ value, existing }) => require('js-yaml').safeDump(merge(existing, value, mergeOptions), {
skipInvalid: true,
}),
}
const transformLines = {
read: ({ source }) => source.split('\n'),
write: ({ value, existing }) => {
if (existing) {
value = existing.concat(value)
// Dedupe
value = value.filter((item, index) => value.indexOf(item) === index)
}
return value.join('\n')
},
}
module.exports = {
js: transformJS,
json: transformJSON,
yaml: transformYAML,
lines: transformLines,
}