Skip to content

Commit

Permalink
Update: Refactor dest() & improve mode logic
Browse files Browse the repository at this point in the history
  • Loading branch information
yocontra authored and phated committed Nov 28, 2017
1 parent c6dc33b commit a722d04
Show file tree
Hide file tree
Showing 9 changed files with 88 additions and 64 deletions.
4 changes: 3 additions & 1 deletion index.js
@@ -1,5 +1,7 @@
'use strict';

module.exports = {
src: require('./lib/src'),
dest: require('./lib/dest'),
watch: require('glob-watcher')
};
};
47 changes: 30 additions & 17 deletions lib/dest/index.js
@@ -1,42 +1,55 @@
'use strict';

var defaults = require('lodash.defaults');
var map = require('map-stream');
var path = require('path');
var mkdirp = require('mkdirp');
var fs = require('graceful-fs');

var writeContents = require('./writeContents');

var defaultMode = 0777 & (~process.umask());
// 511 = 0777
var processMode = 511 & (~process.umask());

function dest(outFolder, opt) {
if (typeof outFolder !== 'string') {
throw new Error('Invalid output folder');
}

module.exports = function(outFolder, opt) {
if (typeof outFolder !== 'string') throw new Error('Invalid output folder');
var options = defaults({}, opt, {
cwd: process.cwd()
});

if (!opt) opt = {};
if (!opt.cwd) opt.cwd = process.cwd();
if (typeof opt.mode === 'string') opt.mode = parseInt(opt.mode, 8);
if (typeof options.mode === 'string') {
options.mode = parseInt(options.mode, 8);
}

var cwd = path.resolve(opt.cwd);
var cwd = path.resolve(options.cwd);
var basePath = path.resolve(cwd, outFolder);
var folderMode = (opt.mode || defaultMode);
var defaultMode = (options.mode || processMode);

function saveFile (file, cb) {
var writePath = path.resolve(basePath, file.relative);
var writeFolder = path.dirname(writePath);

if (opt.mode && !file.isNull()) {
if (!file.stat) file.stat = {};
file.stat.mode = opt.mode;
}

// wire up new properties
file.stat = file.stat ? file.stat : new fs.Stats();
file.stat.mode = (options.mode || file.stat.mode || processMode);
file.cwd = cwd;
file.base = basePath;
file.path = writePath;

// mkdirp the folder the file is going in
// then write to it
mkdirp(writeFolder, folderMode, function(err){
if (err) return cb(err);
mkdirp(writeFolder, defaultMode, function(err){
if (err) {
return cb(err);
}
writeContents(writePath, file, cb);
});
}

var stream = map(saveFile);
return stream;
};
}

module.exports = dest;
11 changes: 0 additions & 11 deletions lib/dest/writeBuffer.js

This file was deleted.

15 changes: 11 additions & 4 deletions lib/dest/writeContents.js → lib/dest/writeContents/index.js
@@ -1,9 +1,11 @@
'use strict';

var writeDir = require('./writeDir');
var writeStream = require('./writeStream');
var writeBuffer = require('./writeBuffer');

module.exports = function (writePath, file, cb) {
var done = function(err){
function writeContents(writePath, file, cb) {
var done = function(err){
cb(err, file);
};

Expand All @@ -26,5 +28,10 @@ module.exports = function (writePath, file, cb) {
}

// if no contents then do nothing
if (file.isNull()) return done();
};
if (file.isNull()) {
done();
return;
}
}

module.exports = writeContents;
13 changes: 13 additions & 0 deletions lib/dest/writeContents/writeBuffer.js
@@ -0,0 +1,13 @@
'use strict';

var fs = require('graceful-fs');

function writeBuffer(writePath, file, cb) {
var opt = {
mode: file.stat.mode
};

fs.writeFile(writePath, file.contents, opt, cb);
}

module.exports = writeBuffer;
9 changes: 9 additions & 0 deletions lib/dest/writeContents/writeDir.js
@@ -0,0 +1,9 @@
'use strict';

var mkdirp = require('mkdirp');

function writeDir (writePath, file, cb) {
mkdirp(writePath, file.stat.mode, cb);
}

module.exports = writeDir;
22 changes: 22 additions & 0 deletions lib/dest/writeContents/writeStream.js
@@ -0,0 +1,22 @@
'use strict';

var streamFile = require('../../src/getContents/streamFile');
var fs = require('graceful-fs');

function writeStream (writePath, file, cb) {
var opt = {
mode: file.stat.mode
};

var outStream = fs.createWriteStream(writePath, opt);

file.contents.once('error', cb);
outStream.once('error', cb);
outStream.once('finish', function() {
streamFile(file, cb);
});

file.contents.pipe(outStream);
}

module.exports = writeStream;
12 changes: 0 additions & 12 deletions lib/dest/writeDir.js

This file was deleted.

19 changes: 0 additions & 19 deletions lib/dest/writeStream.js

This file was deleted.

0 comments on commit a722d04

Please sign in to comment.