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;
|