Newer
Older
CVSS_3.0_GUI / node_modules / nwjs-builder-phoenix / node_modules / fs-extra / lib / copy-sync / copy-sync.js
root on 7 May 2019 2 KB Initial commit
  1. 'use strict'
  2.  
  3. const fs = require('graceful-fs')
  4. const path = require('path')
  5. const copyFileSync = require('./copy-file-sync')
  6. const mkdir = require('../mkdirs')
  7.  
  8. function copySync (src, dest, options) {
  9. if (typeof options === 'function' || options instanceof RegExp) {
  10. options = {filter: options}
  11. }
  12.  
  13. options = options || {}
  14. options.recursive = !!options.recursive
  15.  
  16. // default to true for now
  17. options.clobber = 'clobber' in options ? !!options.clobber : true
  18. // overwrite falls back to clobber
  19. options.overwrite = 'overwrite' in options ? !!options.overwrite : options.clobber
  20. options.dereference = 'dereference' in options ? !!options.dereference : false
  21. options.preserveTimestamps = 'preserveTimestamps' in options ? !!options.preserveTimestamps : false
  22.  
  23. options.filter = options.filter || function () { return true }
  24.  
  25. // Warn about using preserveTimestamps on 32-bit node:
  26. if (options.preserveTimestamps && process.arch === 'ia32') {
  27. console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n
  28. see https://github.com/jprichardson/node-fs-extra/issues/269`)
  29. }
  30.  
  31. const stats = (options.recursive && !options.dereference) ? fs.lstatSync(src) : fs.statSync(src)
  32. const destFolder = path.dirname(dest)
  33. const destFolderExists = fs.existsSync(destFolder)
  34. let performCopy = false
  35.  
  36. if (options.filter instanceof RegExp) {
  37. console.warn('Warning: fs-extra: Passing a RegExp filter is deprecated, use a function')
  38. performCopy = options.filter.test(src)
  39. } else if (typeof options.filter === 'function') performCopy = options.filter(src, dest)
  40.  
  41. if (stats.isFile() && performCopy) {
  42. if (!destFolderExists) mkdir.mkdirsSync(destFolder)
  43. copyFileSync(src, dest, {
  44. overwrite: options.overwrite,
  45. errorOnExist: options.errorOnExist,
  46. preserveTimestamps: options.preserveTimestamps
  47. })
  48. } else if (stats.isDirectory() && performCopy) {
  49. if (!fs.existsSync(dest)) mkdir.mkdirsSync(dest)
  50. const contents = fs.readdirSync(src)
  51. contents.forEach(content => {
  52. const opts = options
  53. opts.recursive = true
  54. copySync(path.join(src, content), path.join(dest, content), opts)
  55. })
  56. } else if (options.recursive && stats.isSymbolicLink() && performCopy) {
  57. const srcPath = fs.readlinkSync(src)
  58. fs.symlinkSync(srcPath, dest)
  59. }
  60. }
  61.  
  62. module.exports = copySync
Buy Me A Coffee