const fs = require('fs') /** * Copy file from source to target * @param source * @param target * @param cb */ const copyFile = (source, target, cb) => { let cbCalled = false let rd = fs.createReadStream(source) rd.on('error', function(err) { done(err) }) let wr = fs.createWriteStream(target) wr.on('error', err => { done(err) }) wr.on('close', ex => { done() }) rd.pipe(wr) function done(err) { if (!cbCalled) { cb(err) cbCalled = true } } } /** * Write a file with a given content * @param target * @param content * @param cb */ const writeFile = (target, content, cb) => { let cbCalled = false let wr = fs.createWriteStream(target, { autoClose: true, flags: 'w', encoding: 'utf-8', mode: '0666' }) wr.on('error', err => { done(err) }) wr.on('finish', ex => { done() }) let newContent = JSON.stringify(content, null, 2) wr.write((newContent += '\r\n')) function done(err) { if (!cbCalled) { cb(err) cbCalled = true } } } module.exports = { copyFile: copyFile, writeFile: writeFile }