|
import { stat, statSync } from '../sander'; |
|
import { copydir, copydirSync } from './copydir'; |
|
import { copyFile, copyFileSync } from './copyFile'; |
|
import { symlink, symlinkSync } from '../specialMethods/symlink'; |
|
import resolvePathAndOptions from '../utils/resolvePathAndOptions'; |
|
|
|
const isWindows = process.platform === 'win32'; |
|
|
|
export function symlinkOrCopy () { |
|
if ( isWindows ) { |
|
const { resolvedPath: src, options: readOptions } = resolvePathAndOptions( arguments ); |
|
|
|
let copyDirOrFileTo = stat( src ) |
|
.then( stats => { |
|
return ( stats.isDirectory() ? copydir : copyFile ) |
|
.apply( null, arguments ) |
|
.to; |
|
}); |
|
|
|
return { |
|
to () { |
|
return copyDirOrFileTo |
|
.then(fn => { |
|
return fn.apply(null, arguments); |
|
}); |
|
} |
|
}; |
|
} |
|
|
|
return symlink.apply( null, arguments ); |
|
} |
|
|
|
export function symlinkOrCopySync () { |
|
if ( isWindows ) { |
|
const { resolvedPath: src, options: readOptions } = resolvePathAndOptions( arguments ); |
|
return ( statSync( src ).isDirectory() ? copydirSync : copyFileSync ).apply( null, arguments ); |
|
} |
|
|
|
return symlinkSync.apply( null, arguments ); |
|
} |