diff options
Diffstat (limited to 'node_modules/fs-extra/lib/copy/copy.js')
| -rw-r--r-- | node_modules/fs-extra/lib/copy/copy.js | 54 | 
1 files changed, 54 insertions, 0 deletions
| diff --git a/node_modules/fs-extra/lib/copy/copy.js b/node_modules/fs-extra/lib/copy/copy.js new file mode 100644 index 0000000..309a93d --- /dev/null +++ b/node_modules/fs-extra/lib/copy/copy.js @@ -0,0 +1,54 @@ +'use strict' + +const fs = require('graceful-fs') +const path = require('path') +const ncp = require('./ncp') +const mkdir = require('../mkdirs') +const pathExists = require('../path-exists').pathExists + +function copy (src, dest, options, callback) { +  if (typeof options === 'function' && !callback) { +    callback = options +    options = {} +  } else if (typeof options === 'function' || options instanceof RegExp) { +    options = {filter: options} +  } +  callback = callback || function () {} +  options = options || {} + +  // Warn about using preserveTimestamps on 32-bit node: +  if (options.preserveTimestamps && process.arch === 'ia32') { +    console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n +    see https://github.com/jprichardson/node-fs-extra/issues/269`) +  } + +  // don't allow src and dest to be the same +  const basePath = process.cwd() +  const currentPath = path.resolve(basePath, src) +  const targetPath = path.resolve(basePath, dest) +  if (currentPath === targetPath) return callback(new Error('Source and destination must not be the same.')) + +  fs.lstat(src, (err, stats) => { +    if (err) return callback(err) + +    let dir = null +    if (stats.isDirectory()) { +      const parts = dest.split(path.sep) +      parts.pop() +      dir = parts.join(path.sep) +    } else { +      dir = path.dirname(dest) +    } + +    pathExists(dir, (err, dirExists) => { +      if (err) return callback(err) +      if (dirExists) return ncp(src, dest, options, callback) +      mkdir.mkdirs(dir, err => { +        if (err) return callback(err) +        ncp(src, dest, options, callback) +      }) +    }) +  }) +} + +module.exports = copy | 
