From 5c78d8b1b3208016b9511bfca95896c1f1e306a6 Mon Sep 17 00:00:00 2001 From: contra Date: Wed, 15 Jan 2014 15:50:06 -0700 Subject: [PATCH] New: Support `cwd` option in `dest()` --- .gitignore | 3 ++- .npmignore | 3 ++- lib/dest/index.js | 12 ++++------- lib/src/bufferFile.js | 7 ++++--- lib/src/getStats.js | 7 ++++--- package.json | 2 +- test/dest.js | 47 +++++++++++++++++++++++++++++++++++++++++++ test/src.js | 3 ++- 8 files changed, 66 insertions(+), 18 deletions(-) create mode 100644 test/dest.js diff --git a/.gitignore b/.gitignore index b5ef13a3..fcacbcd6 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ node_modules build *.node -components \ No newline at end of file +components +coverage \ No newline at end of file diff --git a/.npmignore b/.npmignore index b5ef13a3..fcacbcd6 100644 --- a/.npmignore +++ b/.npmignore @@ -3,4 +3,5 @@ node_modules build *.node -components \ No newline at end of file +components +coverage \ No newline at end of file diff --git a/lib/dest/index.js b/lib/dest/index.js index 6af1d288..7f6196bf 100644 --- a/lib/dest/index.js +++ b/lib/dest/index.js @@ -1,23 +1,19 @@ var map = require('map-stream'); var path = require('path'); var mkdirp = require('mkdirp'); -var writeFile = require('./writeContents'); -var writeDir = require('./writeDir'); +var writeContents = require('./writeContents'); module.exports = function(folder, opt) { if (!opt) opt = {}; - // TODO: support opt.cwd + if (!opt.cwd) opt.cwd = process.cwd(); - // TODO: clean this crap up - // createOutputStream should be a mirror of createInputStream file-wise function saveFile (file, cb) { - var writePath = path.join(folder, file.relative); + var writePath = path.resolve(opt.cwd, folder, file.relative); var writeFolder = path.dirname(writePath); - console.log(writePath, writeFolder); mkdirp(writeFolder, function(err){ if (err) return cb(err); - writeFile(writePath, file, cb); + writeContents(writePath, file, cb); }); } var stream = map(saveFile); diff --git a/lib/src/bufferFile.js b/lib/src/bufferFile.js index fa457b2c..045621e6 100644 --- a/lib/src/bufferFile.js +++ b/lib/src/bufferFile.js @@ -2,8 +2,9 @@ var fs = require('graceful-fs'); module.exports = function (file, cb) { fs.readFile(file.path, function (err, data) { - if (err) return cb(err); - file.contents = data; - cb(null, file); + if (data) { + file.contents = data; + } + cb(err, file); }); }; \ No newline at end of file diff --git a/lib/src/getStats.js b/lib/src/getStats.js index d1f429d4..305ed2b1 100644 --- a/lib/src/getStats.js +++ b/lib/src/getStats.js @@ -4,9 +4,10 @@ var fs = require('graceful-fs'); module.exports = function(opt) { return map(function (file, cb) { fs.stat(file.path, function (err, stat) { - if (err) return cb(err); - file.stat = stat; - cb(null, file); + if (stat) { + file.stat = stat; + } + cb(err, file); }); }); }; \ No newline at end of file diff --git a/package.json b/package.json index a7c27216..bac47451 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ }, "scripts": { "test": "mocha --reporter spec && jshint", - "coveralls": "istanbul cover _mocha --report lcovonly -- -R spec && cat ./coverage/lcov.info | coveralls && rm -rf ./coverage" + "coveralls": "istanbul cover _mocha -- -R spec && cat ./coverage/lcov.info | coveralls && rm -rf ./coverage" }, "engines": { "node": ">= 0.9" diff --git a/test/dest.js b/test/dest.js new file mode 100644 index 00000000..995db383 --- /dev/null +++ b/test/dest.js @@ -0,0 +1,47 @@ +var vfs = require('../'); + +var path = require('path'); +var fs = require('graceful-fs'); +var rimraf = require('rimraf'); + +var bufEqual = require('buffer-equal'); +var es = require('event-stream'); +var File = require('vinyl'); + +var should = require('should'); +require('mocha'); + +var wipeOut = function(cb) { + rimraf(path.join(__dirname, "./out-fixtures/"), cb); +}; + +describe('dest stream', function() { + beforeEach(wipeOut); + afterEach(wipeOut); + + it('should pass through writes', function(done) { + var expectedPath = path.join(__dirname, "./out-fixtures/test.coffee"); + + var expectedFile = new File({ + base: __dirname, + cwd: __dirname, + path: expectedPath, + contents: null + }); + + var onEnd = function(){ + buffered.length.should.equal(1); + buffered[0].should.equal(expectedFile); + done(); + }; + + var stream = vfs.dest("./out-fixtures/", {cwd: __dirname}); + + var buffered = []; + bufferStream = es.through(buffered.push.bind(buffered), onEnd); + stream.pipe(bufferStream); + stream.write(expectedFile); + stream.end(); + }); + +}); diff --git a/test/src.js b/test/src.js index 765d8dfd..aa26e56e 100644 --- a/test/src.js +++ b/test/src.js @@ -30,12 +30,13 @@ describe('source stream', function() { done(); }; - var stream = vfs.src("./fixtures/nothing.coffee", {cwd: __dirname}); + var stream = vfs.src("./fixtures/nothing.coffee"); var buffered = []; bufferStream = es.through(buffered.push.bind(buffered), onEnd); stream.pipe(bufferStream); stream.write(expectedFile); + stream.end(); }); it('should glob a file with default settings', function(done) {