UNPKG

read-modify-write

Version:

Node module for reading, modifying and writing files recursively

43 lines (41 loc) 1.44 kB
const fs = require('fs'); const path = require('path'); const walkSync = (ref, filter) => { const list = item => walkSync(path.join(ref, item), filter); if(fs.statSync(ref).isDirectory()) { return fs.readdirSync(ref).flatMap(list); } if(typeof filter !== 'function' || filter(ref)) { return [ref]; } return []; }; const copy = function(ref) { const { src, move, modify } = this; const read = () => fs.readFileSync(ref, 'utf8'); if(!move) { return { content: modify ? modify(read()) : read() }; } const target = move(ref); const writeContent = content => { fs.writeFileSync(target, content, 'utf8'); return { target, content }; }; fs.mkdirSync(path.dirname(target), { recursive: true }); if (modify) { const content = modify(read()); if (content instanceof Promise) { return content.then(writeContent); } fs.writeFileSync(target, content, 'utf8'); return writeContent(content); } fs.copyFileSync(ref, target); return { target }; }; module.exports = (src, move, filter, modify) => { const keys = walkSync(path.join(__dirname.split('node_modules')[0], src), filter); const values = keys.map(copy, { modify, src, move }); const assign = (key, idx) => [key, values[idx]]; return Object.fromEntries(keys.map(assign)); };