import * as fs from 'graceful-fs'; import { dirname } from 'path'; import mkdirp from 'mkdirp'; import resolvePathAndOptions from '../utils/resolvePathAndOptions'; export function copyFile () { const { resolvedPath: src, options: readOptions } = resolvePathAndOptions( arguments ); return { to () { const { resolvedPath: dest, options: writeOptions } = resolvePathAndOptions( arguments ); return new Promise( ( fulfil, reject ) => { mkdirp( dirname( dest ), err => { if ( err ) { reject( err ); } else { const readStream = fs.createReadStream( src, readOptions ); const writeStream = fs.createWriteStream( dest, writeOptions ); readStream.on( 'error', reject ); writeStream.on( 'error', reject ); writeStream.on( 'close', fulfil ); readStream.pipe( writeStream ); } }); }); } }; } export function copyFileSync () { const { resolvedPath: src, options: readOptions } = resolvePathAndOptions( arguments ); return { to () { const { resolvedPath: dest, options: writeOptions } = resolvePathAndOptions( arguments ); const data = fs.readFileSync( src, readOptions ); mkdirp.sync( dirname( dest ) ); fs.writeFileSync( dest, data, writeOptions ); } }; }