|
| 1 | +'use strict'; |
| 2 | + |
| 3 | +var defaults = require('lodash.defaults'); |
1 | 4 | var map = require('map-stream');
|
2 | 5 | var path = require('path');
|
3 | 6 | var mkdirp = require('mkdirp');
|
| 7 | +var fs = require('graceful-fs'); |
4 | 8 |
|
5 | 9 | var writeContents = require('./writeContents');
|
6 | 10 |
|
7 |
| -var defaultMode = 0777 & (~process.umask()); |
| 11 | +// 511 = 0777 |
| 12 | +var processMode = 511 & (~process.umask()); |
| 13 | + |
| 14 | +function dest(outFolder, opt) { |
| 15 | + if (typeof outFolder !== 'string') { |
| 16 | + throw new Error('Invalid output folder'); |
| 17 | + } |
8 | 18 |
|
9 |
| -module.exports = function(outFolder, opt) { |
10 |
| - if (typeof outFolder !== 'string') throw new Error('Invalid output folder'); |
| 19 | + var options = defaults({}, opt, { |
| 20 | + cwd: process.cwd() |
| 21 | + }); |
11 | 22 |
|
12 |
| - if (!opt) opt = {}; |
13 |
| - if (!opt.cwd) opt.cwd = process.cwd(); |
14 |
| - if (typeof opt.mode === 'string') opt.mode = parseInt(opt.mode, 8); |
| 23 | + if (typeof options.mode === 'string') { |
| 24 | + options.mode = parseInt(options.mode, 8); |
| 25 | + } |
15 | 26 |
|
16 |
| - var cwd = path.resolve(opt.cwd); |
| 27 | + var cwd = path.resolve(options.cwd); |
17 | 28 | var basePath = path.resolve(cwd, outFolder);
|
18 |
| - var folderMode = (opt.mode || defaultMode); |
| 29 | + var defaultMode = (options.mode || processMode); |
19 | 30 |
|
20 | 31 | function saveFile (file, cb) {
|
21 | 32 | var writePath = path.resolve(basePath, file.relative);
|
22 | 33 | var writeFolder = path.dirname(writePath);
|
23 | 34 |
|
24 |
| - if (typeof opt.mode !== 'undefined') { |
25 |
| - if (!file.stat) file.stat = {}; |
26 |
| - file.stat.mode = opt.mode; |
27 |
| - } |
28 |
| - |
| 35 | + // wire up new properties |
| 36 | + file.stat = file.stat ? file.stat : new fs.Stats(); |
| 37 | + file.stat.mode = (options.mode || file.stat.mode || processMode); |
29 | 38 | file.cwd = cwd;
|
30 | 39 | file.base = basePath;
|
31 | 40 | file.path = writePath;
|
32 | 41 |
|
33 | 42 | // mkdirp the folder the file is going in
|
34 |
| - // then write to it |
35 |
| - mkdirp(writeFolder, folderMode, function(err){ |
36 |
| - if (err) return cb(err); |
| 43 | + mkdirp(writeFolder, defaultMode, function(err){ |
| 44 | + if (err) { |
| 45 | + return cb(err); |
| 46 | + } |
37 | 47 | writeContents(writePath, file, cb);
|
38 | 48 | });
|
39 | 49 | }
|
| 50 | + |
40 | 51 | var stream = map(saveFile);
|
41 | 52 | return stream;
|
42 |
| -}; |
| 53 | +} |
| 54 | + |
| 55 | +module.exports = dest; |
0 commit comments