| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | 'use strict';var defaults = require('defaults');var path = require('path');var through2 = require('through2');var mkdirp = require('mkdirp');var fs = require('graceful-fs');var writeContents = require('./writeContents');function dest(outFolder, opt) {  opt = opt || {};  if (typeof outFolder !== 'string' && typeof outFolder !== 'function') {    throw new Error('Invalid output folder');  }  var options = defaults(opt, {    cwd: process.cwd()  });  if (typeof options.mode === 'string') {    options.mode = parseInt(options.mode, 8);  }  var cwd = path.resolve(options.cwd);  function saveFile (file, enc, cb) {    var basePath;    if (typeof outFolder === 'string') {      basePath = path.resolve(cwd, outFolder);    }    if (typeof outFolder === 'function') {      basePath = path.resolve(cwd, outFolder(file));    }    var writePath = path.resolve(basePath, file.relative);    var writeFolder = path.dirname(writePath);    // wire up new properties    file.stat = file.stat ? file.stat : new fs.Stats();    file.stat.mode = (options.mode || file.stat.mode);    file.cwd = cwd;    file.base = basePath;    file.path = writePath;    // mkdirp the folder the file is going in    mkdirp(writeFolder, function(err){      if (err) {        return cb(err);      }      writeContents(writePath, file, cb);    });  }  var stream = through2.obj(saveFile);  // TODO: option for either backpressure or lossy  stream.resume();  return stream;}module.exports = dest;
 |