import * as fs from 'graceful-fs'; | |
import { dirname } from 'path'; | |
import mkdirp from 'mkdirp'; | |
import resolvePath from '../utils/resolvePath'; | |
export const rename = asyncMethod( 'rename' ); | |
export const link = asyncMethod( 'link' ); | |
export const renameSync = syncMethod( 'renameSync' ); | |
export const linkSync = syncMethod( 'linkSync' ); | |
function asyncMethod ( methodName ) { | |
return function () { | |
const src = resolvePath( arguments ); | |
return { | |
to () { | |
const dest = resolvePath( arguments ); | |
return new Promise( ( fulfil, reject ) => { | |
mkdirp( dirname( dest ), err => { | |
if ( err ) { | |
reject( err ); | |
} else { | |
fs[ methodName ]( src, dest, err => { | |
if ( err ) { | |
reject( err ); | |
} else { | |
fulfil(); | |
} | |
}); | |
} | |
}); | |
}); | |
} | |
}; | |
}; | |
} | |
function syncMethod ( methodName ) { | |
return function () { | |
const src = resolvePath( arguments ); | |
return { | |
to () { | |
const dest = resolvePath( arguments ); | |
mkdirp.sync( dirname( dest ) ); | |
return fs[ methodName ]( src, dest ); | |
} | |
}; | |
}; | |
} |