From abde40a3020b82ae984c88816214cdd4a64e2d40 Mon Sep 17 00:00:00 2001 From: Blaine Bublitz Date: Sat, 19 Sep 2015 19:09:35 -0700 Subject: [PATCH 01/12] remove engineStrict from the package.json - fixes #91 --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index acd54218..1d14578b 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,6 @@ "engines": { "node": ">= 0.10" }, - "engineStrict": true, "licenses": [ { "type": "MIT", From 1e026b90df987b6da0ca7da941fd61a7cd1e6d8f Mon Sep 17 00:00:00 2001 From: Blaine Bublitz Date: Mon, 21 Sep 2015 16:57:07 -0700 Subject: [PATCH 02/12] 0.3.14 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1d14578b..91a945af 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "vinyl-fs", "description": "Vinyl adapter for the file system", - "version": "0.3.13", + "version": "0.3.14", "homepage": "http://github.com/wearefractal/vinyl-fs", "repository": "git://github.com/wearefractal/vinyl-fs.git", "author": "Fractal (http://wearefractal.com/)", From 35de2245b946cae8db89856e82164735b927d110 Mon Sep 17 00:00:00 2001 From: Vineet Hawal Date: Wed, 30 Sep 2015 11:30:57 +0530 Subject: [PATCH 03/12] ablility to send options to through2 via vinyl-fs --- lib/dest/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/dest/index.js b/lib/dest/index.js index 1b94ad31..a8e3063f 100644 --- a/lib/dest/index.js +++ b/lib/dest/index.js @@ -52,7 +52,7 @@ function dest(outFolder, opt) { }); } - var stream = through2.obj(saveFile); + var stream = through2.obj(options,saveFile); // TODO: option for either backpressure or lossy stream.resume(); return stream; From a8401c650c00c26d961b855c5d1bc97a3758264c Mon Sep 17 00:00:00 2001 From: Vineet Hawal Date: Thu, 1 Oct 2015 15:26:06 +0530 Subject: [PATCH 04/12] Send options to through2 --- lib/dest/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/dest/index.js b/lib/dest/index.js index 4350c1e3..bf037b67 100644 --- a/lib/dest/index.js +++ b/lib/dest/index.js @@ -20,7 +20,7 @@ function dest(outFolder, opt) { }); } - var saveStream = through2.obj(saveFile); + var saveStream = through2.obj(opt, saveFile); if (!opt.sourcemaps) { return saveStream; } From f389eb2cf60eb0ed7eceb2545f919ff66225b56f Mon Sep 17 00:00:00 2001 From: Vineet Hawal Date: Fri, 2 Oct 2015 08:02:30 +0530 Subject: [PATCH 05/12] sending options to through2 via src(), symlink() --- lib/src/getContents/index.js | 2 +- lib/src/index.js | 4 ++-- lib/src/resolveSymlinks.js | 2 +- lib/symlink/index.js | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/src/getContents/index.js b/lib/src/getContents/index.js index 53d51302..87fa3120 100644 --- a/lib/src/getContents/index.js +++ b/lib/src/getContents/index.js @@ -7,7 +7,7 @@ var bufferFile = require('./bufferFile'); var streamFile = require('./streamFile'); function getContents(opt) { - return through2.obj(function(file, enc, cb) { + return through2.obj(opt, function(file, enc, cb) { // don't fail to read a directory if (file.isDirectory()) { return readDir(file, opt, cb); diff --git a/lib/src/index.js b/lib/src/index.js index a1341b91..94ec95f7 100644 --- a/lib/src/index.js +++ b/lib/src/index.js @@ -37,7 +37,7 @@ function src(glob, opt) { var outputStream = globStream .pipe(resolveSymlinks(options)) - .pipe(through.obj(createFile)); + .pipe(through.obj(opt, createFile)); if (options.since != null) { outputStream = outputStream @@ -50,7 +50,7 @@ function src(glob, opt) { } if (options.passthrough === true) { - inputPass = through.obj(); + inputPass = through.obj(opt); outputStream = duplexify.obj(inputPass, merge(outputStream, inputPass)); } if (options.sourcemaps === true) { diff --git a/lib/src/resolveSymlinks.js b/lib/src/resolveSymlinks.js index 450d691c..0b36c6c7 100644 --- a/lib/src/resolveSymlinks.js +++ b/lib/src/resolveSymlinks.js @@ -33,7 +33,7 @@ function resolveSymlinks(options) { }); } - return through2.obj(resolveFile); + return through2.obj(options, resolveFile); } module.exports = resolveSymlinks; diff --git a/lib/symlink/index.js b/lib/symlink/index.js index c77b363b..6c01a6b6 100644 --- a/lib/symlink/index.js +++ b/lib/symlink/index.js @@ -21,7 +21,7 @@ function symlink(outFolder, opt) { }); } - var stream = through2.obj(linkFile); + var stream = through2.obj(opt, linkFile); // TODO: option for either backpressure or lossy stream.resume(); return stream; From 60fff0ed78ac9bd5026ff455518fc10e37f72a51 Mon Sep 17 00:00:00 2001 From: Vineet Hawal Date: Fri, 2 Oct 2015 08:10:59 +0530 Subject: [PATCH 06/12] change var name to through2 for consistency --- lib/src/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/src/index.js b/lib/src/index.js index 94ec95f7..b14ba473 100644 --- a/lib/src/index.js +++ b/lib/src/index.js @@ -1,7 +1,7 @@ 'use strict'; var assign = require('object-assign'); -var through = require('through2'); +var through2 = require('through2'); var gs = require('glob-stream'); var File = require('vinyl'); var duplexify = require('duplexify'); @@ -37,7 +37,7 @@ function src(glob, opt) { var outputStream = globStream .pipe(resolveSymlinks(options)) - .pipe(through.obj(opt, createFile)); + .pipe(through2.obj(opt, createFile)); if (options.since != null) { outputStream = outputStream @@ -50,7 +50,7 @@ function src(glob, opt) { } if (options.passthrough === true) { - inputPass = through.obj(opt); + inputPass = through2.obj(opt); outputStream = duplexify.obj(inputPass, merge(outputStream, inputPass)); } if (options.sourcemaps === true) { From 5408d7cc01412e3c945b8faf0f0a212bac74c914 Mon Sep 17 00:00:00 2001 From: Vineet Hawal Date: Mon, 5 Oct 2015 11:30:30 +0530 Subject: [PATCH 07/12] through2 options documentation --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 44113d94..45009dea 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,8 @@ fs.src(['*.js', '!b*.js']) - Any glob-related options are documented in [glob-stream] and [node-glob]. + - Any through2 related options are documented in [through2] + - Returns a Readable stream by default, or a Duplex stream if the `passthrough` option is set to `true`. - This stream emits matching [vinyl] File objects. @@ -105,6 +107,8 @@ _Note:_ UTF-8 BOM will be stripped from all UTF-8 files read with `.src`. - Any other options are passed through to `gulp-sourcemaps` - fs.dest('./', {
sourcemaps: {
path: '.',
addComment: false,
includeContent: false
}
}) + - Any through2 related options are documented in [through2] + - Returns a Readable/Writable stream. - On write the stream will save the [vinyl] File to disk at the folder/cwd specified. - After writing the file to disk, it will be emitted from the stream so you can keep piping these around. @@ -128,6 +132,8 @@ _Note:_ UTF-8 BOM will be stripped from all UTF-8 files read with `.src`. - dirMode - Specify the mode the directory should be created with. - Default is the process mode. + - Any through2 related options are documented in [through2] + - Returns a Readable/Writable stream. - On write the stream will create a symbolic link (i.e. symlink) on disk at the folder/cwd specified. - After creating the symbolic link, it will be emitted from the stream so you can keep piping these around. @@ -139,6 +145,7 @@ _Note:_ UTF-8 BOM will be stripped from all UTF-8 files read with `.src`. [gaze]: https://github.com/shama/gaze [glob-watcher]: https://github.com/wearefractal/glob-watcher [vinyl]: https://github.com/wearefractal/vinyl +[through2]: https://github.com/rvagg/through2 [npm-url]: https://www.npmjs.com/package/vinyl-fs [npm-image]: https://badge.fury.io/js/vinyl-fs.svg [travis-url]: https://travis-ci.org/wearefractal/vinyl-fs From 36bf33fac5165a52beea7c9f25c3b2120951883a Mon Sep 17 00:00:00 2001 From: Vineet Hawal Date: Mon, 5 Oct 2015 11:36:30 +0530 Subject: [PATCH 08/12] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 45009dea..7471a504 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ fs.src(['*.js', '!b*.js']) - Any glob-related options are documented in [glob-stream] and [node-glob]. - - Any through2 related options are documented in [through2] + - Any through2-related options are documented in [through2] - Returns a Readable stream by default, or a Duplex stream if the `passthrough` option is set to `true`. - This stream emits matching [vinyl] File objects. @@ -107,7 +107,7 @@ _Note:_ UTF-8 BOM will be stripped from all UTF-8 files read with `.src`. - Any other options are passed through to `gulp-sourcemaps` - fs.dest('./', {
sourcemaps: {
path: '.',
addComment: false,
includeContent: false
}
}) - - Any through2 related options are documented in [through2] + - Any through2-related options are documented in [through2] - Returns a Readable/Writable stream. - On write the stream will save the [vinyl] File to disk at the folder/cwd specified. @@ -132,7 +132,7 @@ _Note:_ UTF-8 BOM will be stripped from all UTF-8 files read with `.src`. - dirMode - Specify the mode the directory should be created with. - Default is the process mode. - - Any through2 related options are documented in [through2] + - Any through2-related options are documented in [through2] - Returns a Readable/Writable stream. - On write the stream will create a symbolic link (i.e. symlink) on disk at the folder/cwd specified. From 2e8244c2aaaeaeb4eb58a1ad230be174c31a0f8a Mon Sep 17 00:00:00 2001 From: Vineet Hawal Date: Tue, 27 Oct 2015 14:16:58 +0530 Subject: [PATCH 09/12] test cases to check through2 options being passed --- test/dest.js | 21 +++++++++++++++++++++ test/symlink.js | 21 +++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/test/dest.js b/test/dest.js index da66f671..3a1a8271 100644 --- a/test/dest.js +++ b/test/dest.js @@ -1026,4 +1026,25 @@ describe('dest stream', function() { stream.write(file); stream.end(); }); + + it('should pass options to through2',function(done){ + var srcPath = path.join(__dirname, './fixtures/test.coffee'); + var content = fs.readFileSync(srcPath); + var stream = vfs.dest('./out-fixtures/', {cwd: __dirname, objectMode: false}); + + stream.on('error', function(err){ + err.should.match(/Invalid non-string\/buffer chunk/); + done() + }); + + var file = new File({ + path: srcPath, + cwd: __dirname, + contents: content + }) + + stream.write(file); + stream.end(); + }); + }); diff --git a/test/symlink.js b/test/symlink.js index 824dc97a..d65199ad 100644 --- a/test/symlink.js +++ b/test/symlink.js @@ -415,4 +415,25 @@ describe('symlink stream', function() { stream.end(); }); }); + + it('should pass options to through2',function(done){ + var srcPath = path.join(__dirname, './fixtures/test.coffee'); + var content = fs.readFileSync(srcPath); + var stream = vfs.symlink('./out-fixtures/', {cwd: __dirname, objectMode: false}); + + stream.on('error', function(err){ + err.should.match(/Invalid non-string\/buffer chunk/); + done() + }); + + var file = new File({ + path: srcPath, + cwd: __dirname, + contents: content + }) + + stream.write(file); + stream.end(); + }); + }); From 89a8b60883e3f1e81034ea5dd76d99c91c982bfe Mon Sep 17 00:00:00 2001 From: Vineet Hawal Date: Thu, 24 Dec 2015 18:12:41 +0530 Subject: [PATCH 10/12] rebase --- lib/dest/index.js | 7 ------- package.json | 8 -------- 2 files changed, 15 deletions(-) diff --git a/lib/dest/index.js b/lib/dest/index.js index d029a59f..bf037b67 100644 --- a/lib/dest/index.js +++ b/lib/dest/index.js @@ -20,12 +20,6 @@ function dest(outFolder, opt) { }); } -<<<<<<< HEAD - var stream = through2.obj(options,saveFile); - // TODO: option for either backpressure or lossy - stream.resume(); - return stream; -======= var saveStream = through2.obj(opt, saveFile); if (!opt.sourcemaps) { return saveStream; @@ -36,7 +30,6 @@ function dest(outFolder, opt) { mapStream.pipe(saveStream); return outputStream; ->>>>>>> 36bf33fac5165a52beea7c9f25c3b2120951883a } module.exports = dest; diff --git a/package.json b/package.json index aebec766..dfa70642 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,7 @@ { "name": "vinyl-fs", "description": "Vinyl adapter for the file system", -<<<<<<< HEAD - "version": "0.3.14", -======= "version": "2.1.1", ->>>>>>> 36bf33fac5165a52beea7c9f25c3b2120951883a "homepage": "http://github.com/wearefractal/vinyl-fs", "repository": "git://github.com/wearefractal/vinyl-fs.git", "author": "Fractal (http://wearefractal.com/)", @@ -47,14 +43,10 @@ "engines": { "node": ">=0.10" }, -<<<<<<< HEAD "licenses": [ { "type": "MIT", "url": "http://github.com/wearefractal/vinyl-fs/raw/master/LICENSE" } ] -======= - "license": "MIT" ->>>>>>> 36bf33fac5165a52beea7c9f25c3b2120951883a } From 2ae65b424c7adb58384a766d07a33ab01c429acc Mon Sep 17 00:00:00 2001 From: Vineet Hawal Date: Thu, 24 Dec 2015 18:29:37 +0530 Subject: [PATCH 11/12] rebase package.json --- package.json | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/package.json b/package.json index 2967de89..a6d9fa13 100644 --- a/package.json +++ b/package.json @@ -45,10 +45,5 @@ "engines": { "node": ">=0.10" }, - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/wearefractal/vinyl-fs/raw/master/LICENSE" - } - ] + "licenses": "MIT" } From 80ba8ae3d972585bc9db13ca34d9909d2d163249 Mon Sep 17 00:00:00 2001 From: Vineet Hawal Date: Thu, 24 Dec 2015 18:36:40 +0530 Subject: [PATCH 12/12] Update README.md --- README.md | Bin 13539 -> 8769 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/README.md b/README.md index 0c03733b8e4590de71b47c7819cb21f38a1d7d6a..c40f940d42db915164d86ca919eaebf430515a50 100644 GIT binary patch literal 8769 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 literal 13539 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 Bibwze