CoolFace
Datasetpublic

basant307/AI_Governance_Project

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes48downloads
file.js210 linesDownload Raw Back to archiver-utils
1/**2 * archiver-utils3 *4 * Copyright (c) 2012-2014 Chris Talkington, contributors.5 * Licensed under the MIT license.6 * https://github.com/archiverjs/node-archiver/blob/master/LICENSE-MIT7 */8var fs = require('graceful-fs');9var path = require('path');10 11var flatten = require('lodash/flatten');12var difference = require('lodash/difference');13var union = require('lodash/union');14var isPlainObject = require('lodash/isPlainObject');15 16var glob = require('glob');17 18var file = module.exports = {};19 20var pathSeparatorRe = /[\/\\]/g;21 22// Process specified wildcard glob patterns or filenames against a23// callback, excluding and uniquing files in the result set.24var processPatterns = function(patterns, fn) {25  // Filepaths to return.26  var result = [];27  // Iterate over flattened patterns array.28  flatten(patterns).forEach(function(pattern) {29    // If the first character is ! it should be omitted30    var exclusion = pattern.indexOf('!') === 0;31    // If the pattern is an exclusion, remove the !32    if (exclusion) { pattern = pattern.slice(1); }33    // Find all matching files for this pattern.34    var matches = fn(pattern);35    if (exclusion) {36      // If an exclusion, remove matching files.37      result = difference(result, matches);38    } else {39      // Otherwise add matching files.40      result = union(result, matches);41    }42  });43  return result;44};45 46// True if the file path exists.47file.exists = function() {48  var filepath = path.join.apply(path, arguments);49  return fs.existsSync(filepath);50};51 52// Return an array of all file paths that match the given wildcard patterns.53file.expand = function(...args) {54  // If the first argument is an options object, save those options to pass55  // into the File.prototype.glob.sync method.56  var options = isPlainObject(args[0]) ? args.shift() : {};57  // Use the first argument if it's an Array, otherwise convert the arguments58  // object to an array and use that.59  var patterns = Array.isArray(args[0]) ? args[0] : args;60  // Return empty set if there are no patterns or filepaths.61  if (patterns.length === 0) { return []; }62  // Return all matching filepaths.63  var matches = processPatterns(patterns, function(pattern) {64    // Find all matching files for this pattern.65    return glob.sync(pattern, options);66  });67  // Filter result set?68  if (options.filter) {69    matches = matches.filter(function(filepath) {70      filepath = path.join(options.cwd || '', filepath);71      try {72        if (typeof options.filter === 'function') {73          return options.filter(filepath);74        } else {75          // If the file is of the right type and exists, this should work.76          return fs.statSync(filepath)[options.filter]();77        }78      } catch(e) {79        // Otherwise, it's probably not the right type.80        return false;81      }82    });83  }84  return matches;85};86 87// Build a multi task "files" object dynamically.88file.expandMapping = function(patterns, destBase, options) {89  options = Object.assign({90    rename: function(destBase, destPath) {91      return path.join(destBase || '', destPath);92    }93  }, options);94  var files = [];95  var fileByDest = {};96  // Find all files matching pattern, using passed-in options.97  file.expand(options, patterns).forEach(function(src) {98    var destPath = src;99    // Flatten?100    if (options.flatten) {101      destPath = path.basename(destPath);102    }103    // Change the extension?104    if (options.ext) {105      destPath = destPath.replace(/(\.[^\/]*)?$/, options.ext);106    }107    // Generate destination filename.108    var dest = options.rename(destBase, destPath, options);109    // Prepend cwd to src path if necessary.110    if (options.cwd) { src = path.join(options.cwd, src); }111    // Normalize filepaths to be unix-style.112    dest = dest.replace(pathSeparatorRe, '/');113    src = src.replace(pathSeparatorRe, '/');114    // Map correct src path to dest path.115    if (fileByDest[dest]) {116      // If dest already exists, push this src onto that dest's src array.117      fileByDest[dest].src.push(src);118    } else {119      // Otherwise create a new src-dest file mapping object.120      files.push({121        src: [src],122        dest: dest,123      });124      // And store a reference for later use.125      fileByDest[dest] = files[files.length - 1];126    }127  });128  return files;129};130 131// reusing bits of grunt's multi-task source normalization132file.normalizeFilesArray = function(data) {133  var files = [];134 135  data.forEach(function(obj) {136    var prop;137    if ('src' in obj || 'dest' in obj) {138      files.push(obj);139    }140  });141 142  if (files.length === 0) {143    return [];144  }145 146  files = _(files).chain().forEach(function(obj) {147    if (!('src' in obj) || !obj.src) { return; }148    // Normalize .src properties to flattened array.149    if (Array.isArray(obj.src)) {150      obj.src = flatten(obj.src);151    } else {152      obj.src = [obj.src];153    }154  }).map(function(obj) {155    // Build options object, removing unwanted properties.156    var expandOptions = Object.assign({}, obj);157    delete expandOptions.src;158    delete expandOptions.dest;159 160    // Expand file mappings.161    if (obj.expand) {162      return file.expandMapping(obj.src, obj.dest, expandOptions).map(function(mapObj) {163        // Copy obj properties to result.164        var result = Object.assign({}, obj);165        // Make a clone of the orig obj available.166        result.orig = Object.assign({}, obj);167        // Set .src and .dest, processing both as templates.168        result.src = mapObj.src;169        result.dest = mapObj.dest;170        // Remove unwanted properties.171        ['expand', 'cwd', 'flatten', 'rename', 'ext'].forEach(function(prop) {172          delete result[prop];173        });174        return result;175      });176    }177 178    // Copy obj properties to result, adding an .orig property.179    var result = Object.assign({}, obj);180    // Make a clone of the orig obj available.181    result.orig = Object.assign({}, obj);182 183    if ('src' in result) {184      // Expose an expand-on-demand getter method as .src.185      Object.defineProperty(result, 'src', {186        enumerable: true,187        get: function fn() {188          var src;189          if (!('result' in fn)) {190            src = obj.src;191            // If src is an array, flatten it. Otherwise, make it into an array.192            src = Array.isArray(src) ? flatten(src) : [src];193            // Expand src files, memoizing result.194            fn.result = file.expand(expandOptions, src);195          }196          return fn.result;197        }198      });199    }200 201    if ('dest' in result) {202      result.dest = obj.dest;203    }204 205    return result;206  }).flatten().value();207 208  return files;209};210 
basant307/AI_Governance_Project · CoolFace