aboutsummaryrefslogtreecommitdiff
path: root/node_modules/vinyl-fs
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/vinyl-fs')
-rw-r--r--node_modules/vinyl-fs/CHANGELOG.md369
-rwxr-xr-xnode_modules/vinyl-fs/LICENSE20
-rw-r--r--node_modules/vinyl-fs/README.md293
-rw-r--r--node_modules/vinyl-fs/index.js7
-rw-r--r--node_modules/vinyl-fs/lib/dest/index.js54
-rw-r--r--node_modules/vinyl-fs/lib/dest/writeContents/index.js59
-rw-r--r--node_modules/vinyl-fs/lib/dest/writeContents/writeBuffer.js26
-rw-r--r--node_modules/vinyl-fs/lib/dest/writeContents/writeDir.js53
-rw-r--r--node_modules/vinyl-fs/lib/dest/writeContents/writeStream.js57
-rw-r--r--node_modules/vinyl-fs/lib/dest/writeContents/writeSymbolicLink.js20
-rw-r--r--node_modules/vinyl-fs/lib/fileOperations.js206
-rw-r--r--node_modules/vinyl-fs/lib/filterSince.js16
-rw-r--r--node_modules/vinyl-fs/lib/prepareWrite.js69
-rw-r--r--node_modules/vinyl-fs/lib/sink.js53
-rw-r--r--node_modules/vinyl-fs/lib/src/getContents/bufferFile.js22
-rw-r--r--node_modules/vinyl-fs/lib/src/getContents/index.js31
-rw-r--r--node_modules/vinyl-fs/lib/src/getContents/readDir.js8
-rw-r--r--node_modules/vinyl-fs/lib/src/getContents/readSymbolicLink.js18
-rw-r--r--node_modules/vinyl-fs/lib/src/getContents/streamFile.js26
-rw-r--r--node_modules/vinyl-fs/lib/src/index.js62
-rw-r--r--node_modules/vinyl-fs/lib/src/wrapWithVinylFile.js51
-rw-r--r--node_modules/vinyl-fs/lib/symlink/index.js30
l---------node_modules/vinyl-fs/node_modules/.bin/mkdirp1
-rw-r--r--node_modules/vinyl-fs/node_modules/clone-stats/LICENSE.md21
-rw-r--r--node_modules/vinyl-fs/node_modules/clone-stats/README.md17
-rw-r--r--node_modules/vinyl-fs/node_modules/clone-stats/index.js13
-rw-r--r--node_modules/vinyl-fs/node_modules/clone-stats/package.json31
-rw-r--r--node_modules/vinyl-fs/node_modules/clone-stats/test.js36
-rw-r--r--node_modules/vinyl-fs/node_modules/replace-ext/.npmignore6
-rw-r--r--node_modules/vinyl-fs/node_modules/replace-ext/.travis.yml8
-rwxr-xr-xnode_modules/vinyl-fs/node_modules/replace-ext/LICENSE20
-rw-r--r--node_modules/vinyl-fs/node_modules/replace-ext/README.md44
-rw-r--r--node_modules/vinyl-fs/node_modules/replace-ext/index.js9
-rw-r--r--node_modules/vinyl-fs/node_modules/replace-ext/package.json35
-rw-r--r--node_modules/vinyl-fs/node_modules/replace-ext/test/main.js51
-rw-r--r--node_modules/vinyl-fs/node_modules/vinyl/CHANGELOG.md163
-rw-r--r--node_modules/vinyl-fs/node_modules/vinyl/LICENSE20
-rw-r--r--node_modules/vinyl-fs/node_modules/vinyl/README.md265
-rw-r--r--node_modules/vinyl-fs/node_modules/vinyl/index.js270
-rw-r--r--node_modules/vinyl-fs/node_modules/vinyl/lib/cloneBuffer.js7
-rw-r--r--node_modules/vinyl-fs/node_modules/vinyl/lib/inspectStream.js15
-rw-r--r--node_modules/vinyl-fs/node_modules/vinyl/lib/isBuffer.js1
-rw-r--r--node_modules/vinyl-fs/node_modules/vinyl/lib/isNull.js3
-rw-r--r--node_modules/vinyl-fs/node_modules/vinyl/lib/isStream.js5
-rw-r--r--node_modules/vinyl-fs/node_modules/vinyl/package.json44
-rw-r--r--node_modules/vinyl-fs/package.json61
46 files changed, 2696 insertions, 0 deletions
diff --git a/node_modules/vinyl-fs/CHANGELOG.md b/node_modules/vinyl-fs/CHANGELOG.md
new file mode 100644
index 000000000..43b775373
--- /dev/null
+++ b/node_modules/vinyl-fs/CHANGELOG.md
@@ -0,0 +1,369 @@
+## Change Log
+
+### v2.4.2 (2016/03/03 19:59 +00:00)
+- [5edb75a](https://github.com/gulpjs/vinyl-fs/commit/5edb75a10935fdc89e29d5e2413694aca77a3e85) 2.4.2 (@phated)
+- [f445987](https://github.com/gulpjs/vinyl-fs/commit/f445987ce905659e62dcb27a8ad69f4ed2fb8198) upgrade glob-stream and remove path.normalize workaround (@phated)
+
+### v2.4.1 (2016/03/02 20:53 +00:00)
+- [caac041](https://github.com/gulpjs/vinyl-fs/commit/caac041836436577d52468d32b9844c00d666265) 2.4.1 (@phated)
+- [#154](https://github.com/gulpjs/vinyl-fs/pull/154) Don't pass `read` option from `src` to `through2` (@erikkemperman)
+
+### v2.4.0 (2016/03/01 22:40 +00:00)
+- [926a9ad](https://github.com/gulpjs/vinyl-fs/commit/926a9ad3cf40d133120eb6f90d26234dc9f00138) 2.4.0 (@phated)
+- [#160](https://github.com/gulpjs/vinyl-fs/pull/160) Allow specify dest sourcemaps option as string (@TrySound)
+- [ebaffbe](https://github.com/gulpjs/vinyl-fs/commit/ebaffbecd642d3f8dd7d6edd6a19a1e768e7d2d1) Upgrade documentation (@TrySound)
+- [7a0c94a](https://github.com/gulpjs/vinyl-fs/commit/7a0c94ae97de5e46392efe9a08ee3c68885dd7ba) Allow specify dest sourcemaps option as string (@TrySound)
+
+### v2.3.4 (2016/02/26 21:48 +00:00)
+- [cd8a992](https://github.com/gulpjs/vinyl-fs/commit/cd8a992294228eea1d08957efc823794baa48fba) 2.3.4 (@phated)
+- [8b50f49](https://github.com/gulpjs/vinyl-fs/commit/8b50f495c9b782d2afc64b38c0b7181a21c20b62) revert string handling from previous release, add support for SlowBuffer support (@phated)
+
+### v2.3.3 (2016/02/26 20:08 +00:00)
+- [a75feda](https://github.com/gulpjs/vinyl-fs/commit/a75feda20131177a8f5a5008483f24169d0b3df3) 2.3.3 (@phated)
+- [165149c](https://github.com/gulpjs/vinyl-fs/commit/165149c6a676ac867933173db28300cf3bab2a5f) support strings in writeFile (@phated)
+- [3b67921](https://github.com/gulpjs/vinyl-fs/commit/3b67921fe5ddd925fc12acef2bd03777b0081dc3) Don't pass `read` option from `src` to `through2` (@erikkemperman)
+- [5918841](https://github.com/gulpjs/vinyl-fs/commit/5918841bbd2c5256413b86c000e28ac3fff516e7) update changelog (@phated)
+
+### v2.3.2 (2016/02/26 01:17 +00:00)
+- [6ed1793](https://github.com/gulpjs/vinyl-fs/commit/6ed179380da7caa4e3506f78b8864ea59164992e) 2.3.2 (@phated)
+- [#151](https://github.com/gulpjs/vinyl-fs/pull/151) Feature metadata refactor (@gulpjs)
+- [0cd8f22](https://github.com/gulpjs/vinyl-fs/commit/0cd8f2229d7788477a3fa2613dbf93e019503198) add docs for changes (@phated)
+- [8d55978](https://github.com/gulpjs/vinyl-fs/commit/8d55978c3640ac25db8331ac4d7314579eb04da9) skip broken tests that were not testing the right thing (@phated)
+- [550edd5](https://github.com/gulpjs/vinyl-fs/commit/550edd56f555240c36068ad060b2136213b135f6) test on latest node 4 instead of old ones (@phated)
+- [6f4c2eb](https://github.com/gulpjs/vinyl-fs/commit/6f4c2eb396b78a91dcf41f5063eee27b66b35fe0) `sourcemaps` is not a valid option to gulp-sourcemaps (@phated)
+- [011320b](https://github.com/gulpjs/vinyl-fs/commit/011320b1f988ecd7846ef04f7a597ee4b25d7285) add appveyor to test on windows & get tests to actually pass (@phated)
+- [84cf3c2](https://github.com/gulpjs/vinyl-fs/commit/84cf3c2e1901bd700c089edac06ce0c75f8e701d) refactor and lots of tests for updating of metadata (@phated)
+- [90a1189](https://github.com/gulpjs/vinyl-fs/commit/90a11894472d29abe9e34b80df0dfab9907f11e7) Make the tests pass again, some more refactoring of metadata handling (@erikkemperman)
+- [35e9b3a](https://github.com/gulpjs/vinyl-fs/commit/35e9b3a68907167b51fa31edd0701ae24915fd84) Use filedescriptors where possible, refactor handling of stats metadata in dest (@piranna)
+- [#150](https://github.com/gulpjs/vinyl-fs/pull/150) Update license year from initial date of release to current (@pra85)
+- [ec48559](https://github.com/gulpjs/vinyl-fs/commit/ec485592d7a96562acc97ccd8b39a12cf17ed319) Update license year from initial date of release to current (@pra85)
+- [#149](https://github.com/gulpjs/vinyl-fs/pull/149) chore: add NPM script for changelog (@T1st3)
+- [0010bd3](https://github.com/gulpjs/vinyl-fs/commit/0010bd3b3c49e7b60e0d69dacdd8fd1b87a6c3dd) chore: add NPM script for changelog (@t1st3)
+- [#148](https://github.com/gulpjs/vinyl-fs/pull/148) docs: add CHANGELOG.md (@T1st3)
+- [da4cd0b](https://github.com/gulpjs/vinyl-fs/commit/da4cd0b449f8e9bd4bd0842fe2eb2b4eceea6c0b) docs: add changelog (@t1st3)
+
+### v2.3.1 (2016/01/14 09:13 +00:00)
+- [7d2fcba](https://github.com/gulpjs/vinyl-fs/commit/7d2fcbaa49c78087fa975a4183fee38d422b9d4a) 2.3.1
+- [#145](https://github.com/gulpjs/vinyl-fs/pull/145) Allow things to listen for data or readable events and avoid sinking in those cases (@gulpjs)
+- [a7fae5a](https://github.com/gulpjs/vinyl-fs/commit/a7fae5a2e2f349237614fc3cb3f371b6f10f5df3) keep style consistent
+- [1b02a46](https://github.com/gulpjs/vinyl-fs/commit/1b02a46aff9650afbfdf36aea386d177508d45fa) more updates, nextTick the removable of listeners in tests
+- [3a0cf5b](https://github.com/gulpjs/vinyl-fs/commit/3a0cf5b098d4a4f2f407f7622cbccc4b29ddbf0e) DRY up listenerCount check
+- [dcfc8b8](https://github.com/gulpjs/vinyl-fs/commit/dcfc8b8b2e93486703449960a69fef87b495a7e9) new sink removal impl
+- [8cec809](https://github.com/gulpjs/vinyl-fs/commit/8cec80998516b20a6fc43c3e865b588a34236899) more tests, better tests
+- [5167080](https://github.com/gulpjs/vinyl-fs/commit/5167080b13bfecd307da3b04be3b1892a9e8996c) harden event handling
+- [ef0b8e0](https://github.com/gulpjs/vinyl-fs/commit/ef0b8e043eb3c3ff72f09d7597b4ae9ed105ba6d) Fix sink from preventing the readable event to fire on the underlying stream (@benurb)
+
+### v2.3.0 (2016/01/12 01:46 +00:00)
+- [941b040](https://github.com/gulpjs/vinyl-fs/commit/941b040905616eb0408a44213d5efe010388cb9d) 2.3.0
+- [#121](https://github.com/gulpjs/vinyl-fs/pull/121) Fix file descriptor exhaustion when streaming many files (@Klowner)
+- [1f3af33](https://github.com/gulpjs/vinyl-fs/commit/1f3af33b1693b07fa2af5ed325ba8f0c0380b5f0) Add test for unbuffered file descriptor exhaustion issue (@Klowner)
+- [38b032c](https://github.com/gulpjs/vinyl-fs/commit/38b032cd9b481a1c16d88f1b7968dd51c6a5ed15) Add 20 second timeout to dest's afterEach wipeOut task (@Klowner)
+- [c63a797](https://github.com/gulpjs/vinyl-fs/commit/c63a79749a4b2ea500c519e1be5e073a87e4b940) Use lazystream for streamFile to avoid fd exhaustion (@Klowner)
+- [00ece7e](https://github.com/gulpjs/vinyl-fs/commit/00ece7ef6b794fd1999695fde2d88bba8d69f5d0) avoid else-if and isFatal variable
+- [6b9912e](https://github.com/gulpjs/vinyl-fs/commit/6b9912e14a3a7504bbba9d176c04b35e69208b64) get max statements warning for future cleanup
+- [a2be0d6](https://github.com/gulpjs/vinyl-fs/commit/a2be0d69de86af9e09ab1193b740d1a0736009fc) ESLint and JSCS plus fixup (@pdehaan)
+- [24119a8](https://github.com/gulpjs/vinyl-fs/commit/24119a862ad062f39ed15db767feff459843c2d8) Rework writeStream to prevent issue with futimes (@Klowner)
+- [17ef52e](https://github.com/gulpjs/vinyl-fs/commit/17ef52ec014ea6a72abda35d104e92786904f92b) Add test for streaming with buffering disabled (@Klowner)
+- [6934485](https://github.com/gulpjs/vinyl-fs/commit/69344858edb85e7c904621fa5d45782aa9825878) drastically improve docs
+- [80add99](https://github.com/gulpjs/vinyl-fs/commit/80add99101bd41f5161ff90c8b4a9b3ba496c73d) big timeout for slow node
+- [d553e74](https://github.com/gulpjs/vinyl-fs/commit/d553e7474ebb65b89e496dfc3916292b59eec4c2) Send options to through2 (@vineethawal)
+- [#134](https://github.com/gulpjs/vinyl-fs/pull/134) Make tests ignore gid (@gulpjs)
+- [e33b632](https://github.com/gulpjs/vinyl-fs/commit/e33b632ffb139599922bc414f76e4c5b81c82f70) adjust realMode method to avoid gid in the parse - fixes #103
+- [4adb4d9](https://github.com/gulpjs/vinyl-fs/commit/4adb4d9d35a148d0c2507a5f06946951b54d443e) setgid on test directory - make travis fail as per #103
+- [#130](https://github.com/gulpjs/vinyl-fs/pull/130) #129 - Update documentation to more clearly explain what happens for default base option values. (@treshugart)
+- [#126](https://github.com/gulpjs/vinyl-fs/pull/126) read from the stream once we finish processing a file, this avoids highWaterMark being hit - add test (@gulpjs)
+- [df97b14](https://github.com/gulpjs/vinyl-fs/commit/df97b1482200e7bc5dd01a49f0bdedeed2b6bd08) sink the saveStream on nextTick to start flowing and avoid highWaterMark - add tests
+- [#133](https://github.com/gulpjs/vinyl-fs/pull/133) fix TypeError when the dest sourcemaps option is a boolean (@chocolateboy)
+- [df874af](https://github.com/gulpjs/vinyl-fs/commit/df874af6c3dce1b8f008230b06f3ef9ef0e30d1a) add test for the boolean (true) source-map option (@chocolateboy)
+- [6ab48dd](https://github.com/gulpjs/vinyl-fs/commit/6ab48dd66899141d1c8e7f14e1ccb1ccc62c261e) fix TypeError when the dest sourcemaps option is a boolean (@chocolateboy)
+- [edb9caa](https://github.com/gulpjs/vinyl-fs/commit/edb9caa91e57690ddaace09aafb863f5bbac3ed8) #129 - Update documentation to more clearly explain what happens for default base option values. (@treshugart)
+- [#125](https://github.com/gulpjs/vinyl-fs/pull/125) Use `fs.futimes` to retain sub-second precision in `atime` and `mtime` (@erikkemperman)
+- [e3849f2](https://github.com/gulpjs/vinyl-fs/commit/e3849f2a19fa967842506fe4d34eeb8f6565464b) Use `fs.futimes` to retain sub-second precision in `atime` and `mtime` (@erikkemperman)
+- [be8d1fd](https://github.com/gulpjs/vinyl-fs/commit/be8d1fd878ae2c6332851aa15a669a1cd128c6cb) guarantee 5.2.0 glob-stream and update test
+- [#119](https://github.com/gulpjs/vinyl-fs/pull/119) Check if `atime` Date object is invalid and set a new one explicitly (@NodeOS)
+- [#122](https://github.com/gulpjs/vinyl-fs/pull/122) Change writeStream callbacks from cb to complete (@Klowner)
+- [8f93a48](https://github.com/gulpjs/vinyl-fs/commit/8f93a48c98ff75bab09bed47b989c9c1dbb5aaa0) Change writeStream callbacks from cb to complete (@Klowner)
+- [f575377](https://github.com/gulpjs/vinyl-fs/commit/f5753770962df157023e37dfadca2dcce6aa18b5) Check if `atime` Date object is invalid and set a new one explicitly (@piranna)
+
+### v2.2.1 (2015/10/20 01:06 +00:00)
+- [a28ba42](https://github.com/gulpjs/vinyl-fs/commit/a28ba42d87eeaecc2ae3de9174270019fab76fe3) 2.2.1
+- [7f539dd](https://github.com/gulpjs/vinyl-fs/commit/7f539dd562e501e904ab6401892f6f4c68a4da25) simplify utimes helper
+- [c2beec8](https://github.com/gulpjs/vinyl-fs/commit/c2beec86ddab2ef51a3a6fa7077907c74d1eadd7) fix tests for invalid dates
+- [97ff9ce](https://github.com/gulpjs/vinyl-fs/commit/97ff9ce60efba49a3d6cafcece3c9dce95aa670a) Test for invalid atime and mtime (@piranna)
+- [624d7f5](https://github.com/gulpjs/vinyl-fs/commit/624d7f59090a4ae8e7e5c83178b199e13973c635) [Fix] Ignore atime and mtime if they are invalid (@piranna)
+
+### v2.2.0 (2015/10/16 02:02 +00:00)
+- [bf7edd3](https://github.com/gulpjs/vinyl-fs/commit/bf7edd37cb0207951b75879d4e07402c51ac8770) 2.2.0
+- [039d689](https://github.com/gulpjs/vinyl-fs/commit/039d68920cc5bde6f0f12375daee2713260a1ecf) make tests pass
+- [6f36372](https://github.com/gulpjs/vinyl-fs/commit/6f36372b9d0b0bf10087b3ac863f858b15e54bb9) Test for vynil stat not modified (FAIL) (@piranna)
+- [dbc606b](https://github.com/gulpjs/vinyl-fs/commit/dbc606bb091008215fd586e4a1eee6ec8bdb22d3) Don't modify vynil stat when atime is not defined (@piranna)
+- [573b8b6](https://github.com/gulpjs/vinyl-fs/commit/573b8b656032e1b486f7e4bca9f5916ceb6def54) Tests for atime and mtime (@piranna)
+- [d7a53d5](https://github.com/gulpjs/vinyl-fs/commit/d7a53d5f557c23aa26d9d5d179645288204a6faa) Style improvements (@piranna)
+- [9237100](https://github.com/gulpjs/vinyl-fs/commit/92371008a2bafa74ba87450b57578d0ace17b194) Fix mtime test to 1 second resolution as Node.js does (@piranna)
+- [801da1c](https://github.com/gulpjs/vinyl-fs/commit/801da1c04696736df9c9c2ad47645faadab970d2) Test for mtime (fail on second decimals) (@piranna)
+- [def6815](https://github.com/gulpjs/vinyl-fs/commit/def68150d0e42ad870afe314cd3b7cea760e9c48) Updated style & made utility function (@piranna)
+- [d55fd11](https://github.com/gulpjs/vinyl-fs/commit/d55fd119718a3166cf3f76362a896bfa8e91427d) Made atime optional ("cpio" don't have it, and sometimes "tar" too) (@piranna)
+- [9a10c15](https://github.com/gulpjs/vinyl-fs/commit/9a10c15aeb1ef3f0b3c1e39c7c7c94f5295449d2) Set utimes of files if they are provided (@piranna)
+- [#108](https://github.com/gulpjs/vinyl-fs/pull/108) Fix links, spacing in README (@moshen)
+- [c603138](https://github.com/gulpjs/vinyl-fs/commit/c603138077df416cf7892f82a2e3a91daa3456fd) Fix links, spacing in README (@moshen)
+- [#105](https://github.com/gulpjs/vinyl-fs/pull/105) updated to test on nodejs 4 (@ckross01)
+- [3148943](https://github.com/gulpjs/vinyl-fs/commit/3148943032a834ad1c82c951576e735d4824d6f0) updated to test on nodejs 4 (@ckross01)
+- [#102](https://github.com/gulpjs/vinyl-fs/pull/102) Update tests to 'strict mode' (@OnkelTem)
+- [85c1286](https://github.com/gulpjs/vinyl-fs/commit/85c128604b521d2e465f1e78548d128c95f4719c) Update tests to 'strict mode' (@OnkelTem)
+
+### v2.1.1 (2015/09/28 09:55 +00:00)
+- [812c696](https://github.com/gulpjs/vinyl-fs/commit/812c696709a16f0de2e06e03b5fe41a45fbfe4f2) 2.1.1 (@contra)
+- [0a4caf6](https://github.com/gulpjs/vinyl-fs/commit/0a4caf61f5745e3a0f368be9d285d006fd7cbf4c) more elegant sourcemap handling, more docs (@contra)
+- [0ac5a2c](https://github.com/gulpjs/vinyl-fs/commit/0ac5a2cb072111917e561c655441aa10a8ee1718) only pass buffer files to sourcemaps (@contra)
+
+### v2.1.0 (2015/09/27 22:01 +00:00)
+- [dbf2a25](https://github.com/gulpjs/vinyl-fs/commit/dbf2a25dc9273e1d5bfa592e6b8564d245294e55) 2.1.0 (@contra)
+- [#100](https://github.com/gulpjs/vinyl-fs/pull/100) allow a function to be used as value for the overwrite option - closes #68 (@gulpjs)
+- [#99](https://github.com/gulpjs/vinyl-fs/pull/99) add option to strip BOM, default to true - closes #83 (@gulpjs)
+- [b966d51](https://github.com/gulpjs/vinyl-fs/commit/b966d517906116021b5cec4ab7d41bbe8dd23168) update docs
+- [13c853a](https://github.com/gulpjs/vinyl-fs/commit/13c853a1ae0a829f0fd33347ed791f9b92593d18) allow a function to be used as value for the overwrite option - closes #68
+- [870551c](https://github.com/gulpjs/vinyl-fs/commit/870551c43d69547accd4b4918142b06926f20e99) add option to strip BOM, default to true - closes #83
+- [50c9e33](https://github.com/gulpjs/vinyl-fs/commit/50c9e33149a7f365d039cd0115526c79145a5534) more sourcemaps docs (@contra)
+
+### v2.0.0 (2015/09/25 22:43 +00:00)
+- [de7bf7b](https://github.com/gulpjs/vinyl-fs/commit/de7bf7ba79acf33610d8d8e58626dc39d8ed2611) 2.0.0 (@contra)
+- [59620dc](https://github.com/gulpjs/vinyl-fs/commit/59620dce078d0a458d96ba0c82416f24b82cb95f) update vinyl (@contra)
+
+### v1.0.0 (2015/03/01 23:10 +00:00)
+- [db025fe](https://github.com/gulpjs/vinyl-fs/commit/db025fe85b190414b28512c1f5ef08662564d4eb) 1.0.0 (@contra)
+- [c7195ed](https://github.com/gulpjs/vinyl-fs/commit/c7195ed3a7c93b5206ba9a1035e84da479888f4e) 1.0.0 (@contra)
+- [4a70dd6](https://github.com/gulpjs/vinyl-fs/commit/4a70dd63386db8abfeeb985630406e1a39f776a5) update dep, remove engineStrict (@contra)
+- [#59](https://github.com/gulpjs/vinyl-fs/pull/59) Implemented `overwrite` option in `dest()` (@derekslife)
+- [c4750b2](https://github.com/gulpjs/vinyl-fs/commit/c4750b2efccd840e4ae840dc55b01cb7051f2f48) Encapsulated error filtering logic into `isErrorFatal` func (@derekslife)
+- [32fc5c8](https://github.com/gulpjs/vinyl-fs/commit/32fc5c805ec6209c3d2145036ff2eabff79845be) Updated docs for `overwrite` option (@derekslife)
+- [5572793](https://github.com/gulpjs/vinyl-fs/commit/5572793954b63e1ec00983bad716af01e02476ef) Implemented `overwrite` option in `dest()` (@derekslife)
+- [2dfe290](https://github.com/gulpjs/vinyl-fs/commit/2dfe2901cc329f5db86d0f2272d4292a2078d5a3) update watch to fix a bug with .remove (@contra)
+- [#57](https://github.com/gulpjs/vinyl-fs/pull/57) Follow symlinks (@valeriangalliat)
+- [a4ea945](https://github.com/gulpjs/vinyl-fs/commit/a4ea945cf04660fc007266c87caa43d345a5b1bc) Follow symlinks (@valeriangalliat)
+- [041de1b](https://github.com/gulpjs/vinyl-fs/commit/041de1b6f20434a7bd6146fdf0a3425dfe301f96) update should (@contra)
+- [#55](https://github.com/gulpjs/vinyl-fs/pull/55) Add `passthrough` option, fixes #25, fixes gulpjs/gulp#840 (@UltCombo)
+- [972c8ad](https://github.com/gulpjs/vinyl-fs/commit/972c8ad3ac377ff7b4a03edeb04f52409d383dd4) Code style (@UltCombo)
+- [b9629ea](https://github.com/gulpjs/vinyl-fs/commit/b9629ea6e9b9b797b518ab8192f4a2ec446ea325) Add `passthrough` option, fixes #25, fixes gulpjs/gulp#840 (@UltCombo)
+- [318a983](https://github.com/gulpjs/vinyl-fs/commit/318a983832408ddc5500b27cfcb8c5cb07c8af11) new glob-watcher (@contra)
+- [#53](https://github.com/gulpjs/vinyl-fs/pull/53) Remove unnecessary `coveralls` from devDependencies (@shinnn)
+- [1ccdc53](https://github.com/gulpjs/vinyl-fs/commit/1ccdc53e22e2449a8b1f9fdc9dfbe7cd526f1dec) remove unnecessary `coveralls` from devDeps (@shinnn)
+- [#52](https://github.com/gulpjs/vinyl-fs/pull/52) Update dotfiles and readme (@shinnn)
+- [87c36ed](https://github.com/gulpjs/vinyl-fs/commit/87c36ede9da5e1508e62a984da4ebc9c8412f6d2) introduce istanbul-coveralls (@shinnn)
+- [fb1a0fa](https://github.com/gulpjs/vinyl-fs/commit/fb1a0fa6bf4028f54629014f89fee0dd148945b6) use sag badges instead of png badges (@shinnn)
+- [5e1b24b](https://github.com/gulpjs/vinyl-fs/commit/5e1b24b4d2a811a02ae7b6449d4f0de778bbe4ef) update dotfiles (@shinnn)
+- [96c721f](https://github.com/gulpjs/vinyl-fs/commit/96c721f07b59964849b15d737ab8abaf52377312) clean up empty object allocation (@contra)
+- [6e97447](https://github.com/gulpjs/vinyl-fs/commit/6e97447dab806b1da7df52d9d4da337d49fe71cb) logic consolidation (@contra)
+- [6f8f045](https://github.com/gulpjs/vinyl-fs/commit/6f8f0459e51fe4c1065a0e693fbcdc26776b6e78) more style normalization (@contra)
+- [141ff43](https://github.com/gulpjs/vinyl-fs/commit/141ff43302dec6535d086cf27d538530161952c5) style normalization (@contra)
+- [500f5cf](https://github.com/gulpjs/vinyl-fs/commit/500f5cf9100256db5ea2d180773385bacaca251e) logic cleanups (@contra)
+- [f081c21](https://github.com/gulpjs/vinyl-fs/commit/f081c21cb264164fee8896056bd0337f734c1904) code cleanups in dest logic (@contra)
+- [2692230](https://github.com/gulpjs/vinyl-fs/commit/269223036d24fe700dba8b5b9f04ad4023eadb2a) fix dest memory leak when writing streams (@contra)
+- [3d2c6c0](https://github.com/gulpjs/vinyl-fs/commit/3d2c6c0350407b3b98c7d2e7950f999f3832b2de) report errors preparing write on symlinks (@contra)
+- [4481668](https://github.com/gulpjs/vinyl-fs/commit/448166864ba6c973055eb205575c3e392cf0f39a) add dirMode param to dest and symlink, closes #36 (@contra)
+- [#49](https://github.com/gulpjs/vinyl-fs/pull/49) Add symlink support (Fixes #42) (@JonAbrams)
+- [558f374](https://github.com/gulpjs/vinyl-fs/commit/558f3744489d5e671f4172453b24ba62bfd9b102) new glob ordering (@contra)
+- [5876564](https://github.com/gulpjs/vinyl-fs/commit/587656487d7cd8a56cadd57d311d28af820377a0) Match function to prepareWrite.js filename (@JonAbrams)
+- [21d7528](https://github.com/gulpjs/vinyl-fs/commit/21d7528f04afbc88529a69e81e4c64823edbbfe9) Move and rename to prepareWrite.js (@JonAbrams)
+- [b447d5e](https://github.com/gulpjs/vinyl-fs/commit/b447d5ea22bbd9a54bcdceccac8e94c0bd0e18e7) Fix jshint warnings (@JonAbrams)
+- [15af3e5](https://github.com/gulpjs/vinyl-fs/commit/15af3e58512c2cdfb00fcc6f8850cfffa69ef431) De-dup common code between dest + symlink (#42) (@JonAbrams)
+- [4392605](https://github.com/gulpjs/vinyl-fs/commit/439260503481296ac8f3482ee901434fd7e3969e) Add symlink support (Fixes #42) (@JonAbrams)
+- [#47](https://github.com/gulpjs/vinyl-fs/pull/47) option.since implementation (@doowb)
+- [8cca620](https://github.com/gulpjs/vinyl-fs/commit/8cca62066c07ce4cc75f390aeb523c228cd887c3) updates per @contra (@doowb)
+- [cec31c6](https://github.com/gulpjs/vinyl-fs/commit/cec31c66d03c0e9c57b6e7223ea2e1029b0b5110) docs (@doowb)
+- [3d440b3](https://github.com/gulpjs/vinyl-fs/commit/3d440b3dfe745261239071335b3839a8a12460b7) check for instance of Date (@doowb)
+- [44cc193](https://github.com/gulpjs/vinyl-fs/commit/44cc193a9984a012f93082fa940516ad6249023f) since implementation (@doowb)
+- [#44](https://github.com/gulpjs/vinyl-fs/pull/44) Swap defaults dependency with object-assign. (@ben-eb)
+- [c07074c](https://github.com/gulpjs/vinyl-fs/commit/c07074c835cae9361973c1046a3f0522565a919d) Swap defaults dep with object-assign. (@ben-eb)
+
+### v0.3.14 (2015/09/21 23:57 +00:00)
+- [5b056f6](https://github.com/gulpjs/vinyl-fs/commit/5b056f66c476ff32687c172d5fe79eaf47b2e80e) update object-assign dep (@contra)
+- [27983ef](https://github.com/gulpjs/vinyl-fs/commit/27983ef0114ceb16abd82a5c47557cb0be95ae62) merge (@contra)
+- [7ca959e](https://github.com/gulpjs/vinyl-fs/commit/7ca959e8ac89034e0e09714da76eb06b7b55d61c) remove watch #92 (@contra)
+- [#90](https://github.com/gulpjs/vinyl-fs/pull/90) Updated merge-stream version to 1.0.0 (@davidbarrows)
+- [22e5e13](https://github.com/gulpjs/vinyl-fs/commit/22e5e13f8edf399cf286f5d908a1bd6766308408) Updated merge-stream version to 1.0.0 (@davidbarrows)
+- [#88](https://github.com/gulpjs/vinyl-fs/pull/88) fix wrong event name in README.md (@kketch)
+- [65445ec](https://github.com/gulpjs/vinyl-fs/commit/65445ec16f1546b268c6a66c2ee798baa94883c8) fix wrong event name in README.md (@kketch)
+- [#85](https://github.com/gulpjs/vinyl-fs/pull/85) Add symlink passthrough with `followSymlinks` (@Klowner)
+- [9f5f6e8](https://github.com/gulpjs/vinyl-fs/commit/9f5f6e8770b4e1364381bfdc832a1c4aacd68274) Add symlink copy with `followSymlinks` option (@Klowner)
+- [#82](https://github.com/gulpjs/vinyl-fs/pull/82) symlink opt.base should be the same as dest (@stevemao)
+- [0b3eed2](https://github.com/gulpjs/vinyl-fs/commit/0b3eed2d84a7b8c134b990a2234916b24e54906b) symlink opt.base should be the same as dest (@stevemao)
+- [3e2a5ef](https://github.com/gulpjs/vinyl-fs/commit/3e2a5ef63c98b9ef44b3d05cdc6c03bdb9c2392b) base can be a function now, also add better error messaging. closes #78 (@contra)
+- [#81](https://github.com/gulpjs/vinyl-fs/pull/81) use valid semver range for `engine` (@silverwind)
+- [69090c4](https://github.com/gulpjs/vinyl-fs/commit/69090c41d79bcb7c492fab6c4ac1a7788a0e8dc7) use valid semver range for `engine` (@silverwind)
+- [65090b8](https://github.com/gulpjs/vinyl-fs/commit/65090b81b98c8ed80fda247495d8015701d62813) Merge branch 'master' of https://github.com/wearefractal/vinyl-fs (@contra)
+- [b481130](https://github.com/gulpjs/vinyl-fs/commit/b48113066f04fa5a240770132fbf1e57af12687c) fix filter-since (@contra)
+- [#79](https://github.com/gulpjs/vinyl-fs/pull/79) add missing test for f7516ebac102104ad0f39437f7739bf5aedec165 (@stevemao)
+- [8e8135c](https://github.com/gulpjs/vinyl-fs/commit/8e8135c3f99c4669129295e65b54581c45535191) update vinyl-filter-since (@contra)
+- [cb86d86](https://github.com/gulpjs/vinyl-fs/commit/cb86d86deefa593f3099d2494e06cbc59b69e9bc) add missing test for f7516ebac102104ad0f39437f7739bf5aedec165 (@stevemao)
+- [a8161c8](https://github.com/gulpjs/vinyl-fs/commit/a8161c87f38d465497c63ec3158f0f033868b60b) update vinyl filter since (@contra)
+- [99db7de](https://github.com/gulpjs/vinyl-fs/commit/99db7de8f0485c5ca158c79126b53b8fdab9d821) add sourcemaps to dest, clear up some dead src code now that empty arrays arent valid globs, dep updates (@contra)
+- [d32876f](https://github.com/gulpjs/vinyl-fs/commit/d32876f8df5a8a28f71b476ae907644ab5d35c07) update deps (@contra)
+- [#77](https://github.com/gulpjs/vinyl-fs/pull/77) Improvements (@stevemao)
+- [f7516eb](https://github.com/gulpjs/vinyl-fs/commit/f7516ebac102104ad0f39437f7739bf5aedec165) Expose `options.base` for `dest` (@stevemao)
+- [435c401](https://github.com/gulpjs/vinyl-fs/commit/435c40193acebdaca62a9d688ceec5875b1ece15) test on iojs and 0.12 (@stevemao)
+- [a3b1aa6](https://github.com/gulpjs/vinyl-fs/commit/a3b1aa6d5446760bf18de77ebf2aa199bef9f9b0) Make readme more consistent (@stevemao)
+- [#75](https://github.com/gulpjs/vinyl-fs/pull/75) Fix default option in README (@stevemao)
+- [a0820f4](https://github.com/gulpjs/vinyl-fs/commit/a0820f4ec4737ab826999cde2dda6ee0dae2db03) Fix default option in README (@stevemao)
+- [812d0e6](https://github.com/gulpjs/vinyl-fs/commit/812d0e6ef55ac7ecd6e7dc83ef6f58e324837354) add new glob tests, empty string is a failing glob now. https://github.com/google/material-design-lite/issues/790 (@contra)
+- [1b7322d](https://github.com/gulpjs/vinyl-fs/commit/1b7322d800008095596da9472801a2ddabcdf938) Merge branch 'master' of https://github.com/wearefractal/vinyl-fs (@contra)
+- [5af3ed8](https://github.com/gulpjs/vinyl-fs/commit/5af3ed844d4dac6a84cf836aa09373ad2d3193dd) fix dir symlinks on windows, closes #74 (@contra)
+- [#73](https://github.com/gulpjs/vinyl-fs/pull/73) using is-valid-glob module to handle nested arrays properly (@doowb)
+- [0a6bcb1](https://github.com/gulpjs/vinyl-fs/commit/0a6bcb15067f2ac0b534d17c0f66aa9616c2bd54) using is-valid-glob module to handle nested arrays properly (@doowb)
+- [baf97e1](https://github.com/gulpjs/vinyl-fs/commit/baf97e1f66caa4f1a9f9630620233c8c927f7509) passing options through to readers is still a good idea, so not a full revert. #72 (@contra)
+- [f6ead3c](https://github.com/gulpjs/vinyl-fs/commit/f6ead3cec64c27a86f2a2e497d75e8a4f235339c) remove stripBOM flag, document BOM stripping. #72 (@contra)
+- [#71](https://github.com/gulpjs/vinyl-fs/pull/71) Update vinyl to 0.5.x (@lijunle)
+- [3a44b5d](https://github.com/gulpjs/vinyl-fs/commit/3a44b5da290c1d0279381a4d13f8816bc2ebb014) Update vinyl to 0.5.x (@lijunle)
+- [#69](https://github.com/gulpjs/vinyl-fs/pull/69) update license attribute (@pgilad)
+- [23640fd](https://github.com/gulpjs/vinyl-fs/commit/23640fde7378465625b2e0579bb661c7501b0e04) update license attribute (@pgilad)
+- [60685eb](https://github.com/gulpjs/vinyl-fs/commit/60685eb89e57f61c4462855532f43d75f0a616db) fix problem where you couldnt catch singular glob errors. add sourcemaps into src (@contra)
+- [12dec99](https://github.com/gulpjs/vinyl-fs/commit/12dec99a99af362ddfa2a0f7af7a39063803f182) dep updates (@contra)
+- [#63](https://github.com/gulpjs/vinyl-fs/pull/63) export `filterSince` to `vinyl-filter-since` (@tunnckoCore)
+- [9bbf989](https://github.com/gulpjs/vinyl-fs/commit/9bbf989151a912307686d36dc6ee4ef01cdbd38f) bump to `vinyl-filter-since@v2` (@tunnckoCore)
+- [1a788e8](https://github.com/gulpjs/vinyl-fs/commit/1a788e826951939e81ab1a2505f2aaf2a9cde264) Merge github.com:wearefractal/vinyl-fs (@tunnckoCore)
+- [#65](https://github.com/gulpjs/vinyl-fs/pull/65) Remove realMode equality test on special bit test (@Meroje)
+- [627ace7](https://github.com/gulpjs/vinyl-fs/commit/627ace7702895c35f313d439c357e6387961d05a) Remove realMode equality test on special bit test (@Meroje)
+- [fd9388d](https://github.com/gulpjs/vinyl-fs/commit/fd9388db1a15afe1e3c748d3859ab969c34ba1db) merge in blaines changes (@contra)
+- [fda2a71](https://github.com/gulpjs/vinyl-fs/commit/fda2a71b8d26580f8dc564636005f78514e2b791) fix some tests, update deps (@contra)
+- [#64](https://github.com/gulpjs/vinyl-fs/pull/64) switch to glob-watcher 2.0 (@phated)
+- [6524088](https://github.com/gulpjs/vinyl-fs/commit/65240883f15b9f0aa792735a2f358c3ee5761c51) switch to glob-watcher 2.0
+- [5d9f058](https://github.com/gulpjs/vinyl-fs/commit/5d9f0581b0d3985d135b507086dbd464e4aaafb9) export `filterSince` to `vinyl-filter-since` (@tunnckoCore)
+- [#62](https://github.com/gulpjs/vinyl-fs/pull/62) Fix mode comparison (@Meroje)
+- [ba57ce7](https://github.com/gulpjs/vinyl-fs/commit/ba57ce76e978850f79f78bba9b8aa1a73ac5fb2f) Test for chmod with additional bits (@Meroje)
+- [0c3516b](https://github.com/gulpjs/vinyl-fs/commit/0c3516bd67ca56810f3e587cda12584caced223e) Fix mode comparison (@Meroje)
+
+### v0.3.13 (2014/11/13 23:18 +00:00)
+- [315e76a](https://github.com/gulpjs/vinyl-fs/commit/315e76a248e9d150f228e4ef50b61de15dc55123) 0.3.13 (@contra)
+- [ac5b449](https://github.com/gulpjs/vinyl-fs/commit/ac5b449ec49b4de5f10313d31fd8e8effed0421b) switch off lodash to reduce size (@contra)
+
+### v0.3.12 (2014/11/13 23:01 +00:00)
+- [84a3fe9](https://github.com/gulpjs/vinyl-fs/commit/84a3fe96dd162041eac9c9d4465cc1369659027a) 0.3.12 (@contra)
+- [b963614](https://github.com/gulpjs/vinyl-fs/commit/b963614bf206862f9bed60bab16ed7038f554c42) exclude files to save space (@contra)
+
+### v0.3.11 (2014/11/04 18:56 +00:00)
+- [5ee1404](https://github.com/gulpjs/vinyl-fs/commit/5ee1404cc25b54fc338e6f84909e87be2eb09e84) 0.3.11 (@contra)
+- [#41](https://github.com/gulpjs/vinyl-fs/pull/41) use default mode for new files and directories (@joachimgit)
+- [99661c5](https://github.com/gulpjs/vinyl-fs/commit/99661c5881cf2b22545be688c68318c6b7541df1) use default mode for new files and directories (@joachimgit)
+- [c0cf9d0](https://github.com/gulpjs/vinyl-fs/commit/c0cf9d0663460881f9ee97310f44e382d9a09fbe) small style fix (@contra)
+
+### v0.3.10 (2014/10/22 06:48 +00:00)
+- [c6e7433](https://github.com/gulpjs/vinyl-fs/commit/c6e7433a93d052905611680dc3f6f87c8e629376) 0.3.10 (@contra)
+- [793f538](https://github.com/gulpjs/vinyl-fs/commit/793f538beaa275a6d31f67e5499cb96949654699) remove duplexer2 which was broken (@contra)
+- [1e3b338](https://github.com/gulpjs/vinyl-fs/commit/1e3b33883c5a9efbb28ec9141564bdfe6292c716) end false (@contra)
+
+### v0.3.9 (2014/10/09 18:34 +00:00)
+- [37c648d](https://github.com/gulpjs/vinyl-fs/commit/37c648da6826b36600f48c3002a03b1248d4f58e) 0.3.9 (@contra)
+- [6bba193](https://github.com/gulpjs/vinyl-fs/commit/6bba193c8395d2e32ccfa332684bec1bdd52d4ad) empty arrays = dead stream, closes #40 (@contra)
+- [3e3d371](https://github.com/gulpjs/vinyl-fs/commit/3e3d371c41a9e3e50a9af9ad5f5c8634744dcd6d) fix that potentially closes #25 (@contra)
+
+### v0.3.8 (2014/09/29 22:16 +00:00)
+- [0507aed](https://github.com/gulpjs/vinyl-fs/commit/0507aed94a1902ee61a45f77caf059669fb7ea76) 0.3.8 (@contra)
+- [4d95e2e](https://github.com/gulpjs/vinyl-fs/commit/4d95e2e19f35045ca5ec66d697167078696bfc86) lstat (@contra)
+- [#37](https://github.com/gulpjs/vinyl-fs/pull/37) Docs link fix (@yuvilio)
+- [b9f3053](https://github.com/gulpjs/vinyl-fs/commit/b9f3053a8640839c2098f43066d06cc11d2e6196) Docs link fix (@yuvilio)
+
+### v0.3.7 (2014/08/29 07:10 +00:00)
+- [1a5efe8](https://github.com/gulpjs/vinyl-fs/commit/1a5efe8d1f7d698691103f2fdc21e07dc1bd5634) 0.3.7 (@contra)
+- [97d3195](https://github.com/gulpjs/vinyl-fs/commit/97d3195464893ad526f40a6355c792d35ab562e6) update deps (@contra)
+- [#34](https://github.com/gulpjs/vinyl-fs/pull/34) Chmod mode to match the vinyl object (@oconnore)
+- [a73458e](https://github.com/gulpjs/vinyl-fs/commit/a73458e33aba6de1ee2852a1374da7e8c8225e22) reduce nesting per review
+- [cf8e5fd](https://github.com/gulpjs/vinyl-fs/commit/cf8e5fd59070beedf88936527935168d18afbbfc) Code review changes
+- [e5684ac](https://github.com/gulpjs/vinyl-fs/commit/e5684ace84d0d226c382a77d505e1517c6f4c7a3) Check final mode in no-chmod test
+- [dc8e769](https://github.com/gulpjs/vinyl-fs/commit/dc8e7691430555c4fe419825306426062c3e03e8) Fix a fall through error
+- [b20d11b](https://github.com/gulpjs/vinyl-fs/commit/b20d11bbbaf9e244e16af7eabb7c98af213e7a89) Test stat/chmod approach with sinon stubs
+- [126164a](https://github.com/gulpjs/vinyl-fs/commit/126164a4f2056d3cb1996c39562a2a008153975d) Test if the file should be chmod'ed
+
+### v0.3.6 (2014/08/02 04:56 +00:00)
+- [7256498](https://github.com/gulpjs/vinyl-fs/commit/72564989a5dc17468e645f00ae811f8614dec17b) 0.3.6 (@contra)
+- [dc9d723](https://github.com/gulpjs/vinyl-fs/commit/dc9d7230a4173792b0296e54a9560b44103d50c2) update vinyl dep (@contra)
+- [387c47b](https://github.com/gulpjs/vinyl-fs/commit/387c47b6fda5f0af8f95b93e513bc130bee3cdd3) Satisfy the bot.
+- [5887067](https://github.com/gulpjs/vinyl-fs/commit/58870677ff458a3e855ac87f2d165f43c4aafd2e) Chmod mode to match the vinyl object
+
+### v0.3.5 (2014/07/30 23:04 +00:00)
+- [22edfd2](https://github.com/gulpjs/vinyl-fs/commit/22edfd20dc2fbad888fedd022d02fdf933bf30b6) 0.3.5 (@contra)
+- [20a7a05](https://github.com/gulpjs/vinyl-fs/commit/20a7a0525b80cf0884cf73bee9690e1dab17a2bb) fix dep tree (@contra)
+- [#33](https://github.com/gulpjs/vinyl-fs/pull/33) Display the invalid glob in error message (@kevinwestern)
+- [726b3a1](https://github.com/gulpjs/vinyl-fs/commit/726b3a1ac771c90a8186828e3eb37ad9f4832df8) Display the invalid glob in error message (@kevinwestern)
+
+### v0.3.4 (2014/06/27 06:07 +00:00)
+- [a83eb9a](https://github.com/gulpjs/vinyl-fs/commit/a83eb9a53aa0c4e50306a20845111ccda276146d) 0.3.4 (@contra)
+- [4f4a3f3](https://github.com/gulpjs/vinyl-fs/commit/4f4a3f363cf491de80afdcf58f9926d2bfeb408e) resume stream (@contra)
+
+### v0.3.3 (2014/06/26 16:35 +00:00)
+- [52ce21b](https://github.com/gulpjs/vinyl-fs/commit/52ce21ba241f73f0348d7683306c1175ce6c88b3) 0.3.3 (@contra)
+- [#29](https://github.com/gulpjs/vinyl-fs/pull/29) Quick fix for using through2 to create dest stream (@tomchentw)
+- [c678bd4](https://github.com/gulpjs/vinyl-fs/commit/c678bd469e11e768713219b774fa82aa781e4fef) test(dest): also added finish event check for #26 (@tomchentw)
+- [595e96e](https://github.com/gulpjs/vinyl-fs/commit/595e96e45f12fc868f9ce256d0421da7f4932843) test(dest): added test case for #26 (@tomchentw)
+- [8bf8612](https://github.com/gulpjs/vinyl-fs/commit/8bf8612702e228fcc0c678acafe7634f2c6b269b) fix(vfs.dest): attatched an noop data listener (@tomchentw)
+
+### v0.3.2 (2014/06/25 18:34 +00:00)
+- [8fef1ed](https://github.com/gulpjs/vinyl-fs/commit/8fef1ed6d65a2532271983360d8700ec8dd03023) 0.3.2 (@contra)
+- [#27](https://github.com/gulpjs/vinyl-fs/pull/27) Removed through2-map dependency (@tomchentw)
+- [ede010b](https://github.com/gulpjs/vinyl-fs/commit/ede010be5aa110f55f2fc9daa34c1643e377e11c) feat(index.js): removed through2-map dependency (@tomchentw)
+- [d1433cb](https://github.com/gulpjs/vinyl-fs/commit/d1433cb41ed3e0bf78bc2ea3a52e0599cccc45c2) .npmignore (@contra)
+- [74347cc](https://github.com/gulpjs/vinyl-fs/commit/74347ccc71e5189e5d8809919fb145cfa9657481) .npmignore (@contra)
+- [7c66ea2](https://github.com/gulpjs/vinyl-fs/commit/7c66ea2f09acb2dba51b192ccc8a8f09ef01489f) .npmignore (@contra)
+- [cece0dc](https://github.com/gulpjs/vinyl-fs/commit/cece0dc68dfc1ebd3b344e367a4a269c43f15a0e) .npmignore (@contra)
+- [33ac098](https://github.com/gulpjs/vinyl-fs/commit/33ac098ca8ff2e3216399784cd58b775d764ccab) .npmignore (@contra)
+- [831044b](https://github.com/gulpjs/vinyl-fs/commit/831044b683c65eb9858323dc2744fd3ec33d82e1) .npmignore (@contra)
+- [ff582cc](https://github.com/gulpjs/vinyl-fs/commit/ff582ccd55e6481134f6c44d1d2cb1dfc338818c) .npmignore (@contra)
+- [fe75d6a](https://github.com/gulpjs/vinyl-fs/commit/fe75d6af6703bf2b6711ca1abfe9832d1d836375) .npmignore (@contra)
+- [0c1da37](https://github.com/gulpjs/vinyl-fs/commit/0c1da37d252d16a171f30dfea42714bb208d1b3d) .npmignore (@contra)
+- [10e6b53](https://github.com/gulpjs/vinyl-fs/commit/10e6b53bd9f8683408f6394c04142ac55ab9f493) .gitignore (@contra)
+- [97296ef](https://github.com/gulpjs/vinyl-fs/commit/97296ef8e724953570ab989b043692cea5ba9062) .npmignore (@contra)
+- [a12356c](https://github.com/gulpjs/vinyl-fs/commit/a12356c36cfd24e19d0c88225d364368ae7dac36) .gitignore (@contra)
+- [7a7f2e5](https://github.com/gulpjs/vinyl-fs/commit/7a7f2e544b5eacf595bcc1fd9cac34de880ec071) .jshintrc (@contra)
+
+### v0.3.1 (2014/06/25 14:28 +00:00)
+- [6004e32](https://github.com/gulpjs/vinyl-fs/commit/6004e32a6c5dca3f9361695d1b9797bbc4529337) 0.3.1 (@contra)
+- [#26](https://github.com/gulpjs/vinyl-fs/pull/26) feat(lib/*.js): change map-stream to through2 (@tomchentw)
+- [b181693](https://github.com/gulpjs/vinyl-fs/commit/b181693e7c2dd1b3992be02af899b8024669771c) styles(lib): changed done back to cb (@tomchentw)
+- [c5d76e5](https://github.com/gulpjs/vinyl-fs/commit/c5d76e51157a7ae7788d7dd762145ca48a701dfb) feat(lib/*.js): change map-stream to through2@0.5.1 (@tomchentw)
+- [583d30e](https://github.com/gulpjs/vinyl-fs/commit/583d30efd72267b59752f98a920541b1cfadb31c) function for dest, closes #15 (@contra)
+- [d0ba8bb](https://github.com/gulpjs/vinyl-fs/commit/d0ba8bba4519df2b6bb41f0f07cfaf1d7a5fbf7d) make src a passthrough, clean up mode logic in dest, jshint, stylize (@contra)
+- [c9b2c07](https://github.com/gulpjs/vinyl-fs/commit/c9b2c075dbb55ee97cd6ab9909bd1e1f87bf77e0) update graceful-fs dep (@contra)
+- [7af93d0](https://github.com/gulpjs/vinyl-fs/commit/7af93d0c63822f17183b89ec591622d14f9f17ca) update travis yml (@contra)
+- [49fb44d](https://github.com/gulpjs/vinyl-fs/commit/49fb44d44d6891f450c4c7cef9bda3caa4035107) 0.2.0 - BOM stripping and dep updates (@contra)
+- [#21](https://github.com/gulpjs/vinyl-fs/pull/21) Strip BOM when reading UTF-8 files (@mathiasbynens)
+- [4c1fc02](https://github.com/gulpjs/vinyl-fs/commit/4c1fc02bab8c2ca8fcefe0bff80347cc0b17712b) Strip BOM when reading UTF-8-encoded files (@mathiasbynens)
+- [abd2fe4](https://github.com/gulpjs/vinyl-fs/commit/abd2fe4e1e32ef46d7544ce90fe941ece3a49a55) rollback gaze update (@contra)
+- [103bb8c](https://github.com/gulpjs/vinyl-fs/commit/103bb8ca0b16e888ee44146603d5591220e228f4) update glob-watcher (@contra)
+- [a319889](https://github.com/gulpjs/vinyl-fs/commit/a319889b9cbad1db0097d041ad02e0e2f76640bf) check src and dest args, closes #8 (@contra)
+- [671197a](https://github.com/gulpjs/vinyl-fs/commit/671197a54ddda0277abdc0c1c9fce27cc8ab9b86) drop support for 0.9 (@contra)
+- [f89e03e](https://github.com/gulpjs/vinyl-fs/commit/f89e03e62cb62dc6c28d0ebe6f146123be2232a7) 0.1.0 (@contra)
+- [bb34369](https://github.com/gulpjs/vinyl-fs/commit/bb343692f3bbeab08b40b4bb1ee20af7205f2837) comment (@contra)
+- [c1c866a](https://github.com/gulpjs/vinyl-fs/commit/c1c866a5277038056d52fb106b2bca8cea430e59) mergit (@contra)
+- [cc81580](https://github.com/gulpjs/vinyl-fs/commit/cc81580a4818e2260a367c54bdcc42b0b4d0a5cc) respect file modes in dest, add mode option to dest (@contra)
+- [#10](https://github.com/gulpjs/vinyl-fs/pull/10) Allow piping streaming vinyls through multiple .dest()'s (@hughsk)
+- [d5566b2](https://github.com/gulpjs/vinyl-fs/commit/d5566b213b7e90a94b20aad35d4c08b2861c8247) Use ./src/streamFile for re-streaming .dest() streams (@hughsk)
+- [868a3ec](https://github.com/gulpjs/vinyl-fs/commit/868a3ecc7945e798ee702cc30c5bcfff2af3ecd5) Allow piping streaming vinyls through multiple .dest()'s (@hughsk)
+- [191d4ae](https://github.com/gulpjs/vinyl-fs/commit/191d4ae3672c76eb0cf0d46a2404c8e60e587d85) update file paths as they cruise through .dest (@contra)
+- [cb69aa6](https://github.com/gulpjs/vinyl-fs/commit/cb69aa6c7ead7a435067fdfc89f89cd8af1215d4) cleanup (@contra)
+- [f50d669](https://github.com/gulpjs/vinyl-fs/commit/f50d669a968f6f69ef07a0cc34b11704829c9c9f) add tests for relative cwd (@contra)
+- [39dfc18](https://github.com/gulpjs/vinyl-fs/commit/39dfc189367154136718fa0958712b1b14ea5e5a) fix tests (@contra)
+- [60dac5f](https://github.com/gulpjs/vinyl-fs/commit/60dac5fa38c3470556d987b01405d3ccca6af9ec) remove async dep (@contra)
+- [1178422](https://github.com/gulpjs/vinyl-fs/commit/11784223e5a38795715c759333b352d40e83c76a) more tests (@contra)
+- [ed50c02](https://github.com/gulpjs/vinyl-fs/commit/ed50c02ba3487e8f4212792a0db2aa39dbc060a6) directory test (@contra)
+- [ee32c0a](https://github.com/gulpjs/vinyl-fs/commit/ee32c0a3a5f7aa30fc62a8481dd2f38aa410fa1a) more simplifying (@contra)
+- [fb481f0](https://github.com/gulpjs/vinyl-fs/commit/fb481f0c6baedf89635faa1eb278cafb4b72c5bb) more simplifying (@contra)
+- [a415173](https://github.com/gulpjs/vinyl-fs/commit/a4151738c740a760fa8b577a4f633ea6aad4055c) yep (@contra)
+- [753add9](https://github.com/gulpjs/vinyl-fs/commit/753add9acc8cc0b3ff883f5228c972731a5fde74) simplify dest (@contra)
+- [5325dcf](https://github.com/gulpjs/vinyl-fs/commit/5325dcf796e1e6db86a3c9abd58484f552c299f8) cwd in dest (@contra)
+- [1b975fd](https://github.com/gulpjs/vinyl-fs/commit/1b975fdbf6c005674e86454b1a780b1fbf72f605) test cleaning (@contra)
+- [abdcbb7](https://github.com/gulpjs/vinyl-fs/commit/abdcbb7fcd8b78469eaf784675df2d7c7a15c766) coveralls (@contra)
+- [b7a8ebc](https://github.com/gulpjs/vinyl-fs/commit/b7a8ebcfa07865a283b5efe69303b795a2dcdd83) license update (@contra)
+- [bac7381](https://github.com/gulpjs/vinyl-fs/commit/bac7381e31b7c30aed8ae925d12821cf65f9337e) more dep updates (@contra)
+- [14f0a1e](https://github.com/gulpjs/vinyl-fs/commit/14f0a1eeaab5ca6a52042aae489a2da5ef78c318) badges and refactor (@contra)
+- [8ac77fc](https://github.com/gulpjs/vinyl-fs/commit/8ac77fc245b8b3938c74748900358e9ad540e4bd) wait for file close in writeStream (@contra)
+- [002273c](https://github.com/gulpjs/vinyl-fs/commit/002273cfae226d562a8b22173c3a718614444c7a) writeStream fix (@contra)
+- [af64059](https://github.com/gulpjs/vinyl-fs/commit/af640595b1325385ce650b410f9091531447b35a) Merge branch 'master' of https://github.com/wearefractal/vinyl-fs (@contra)
+- [5c36fbc](https://github.com/gulpjs/vinyl-fs/commit/5c36fbcaa7d7eca58fb5f035bf15492f4a3b737a) trim fat - graceful-fs, map-stream, etc. (@contra)
+- [#3](https://github.com/gulpjs/vinyl-fs/pull/3) Fix broken refactor changes (@yyx990803)
+- [c610342](https://github.com/gulpjs/vinyl-fs/commit/c610342755156dc9c059f21ac31a679623cef227) fix writePath
+- [b09678b](https://github.com/gulpjs/vinyl-fs/commit/b09678b05069852d713a263e8526f30f83ecae23) require deps in writecontent.js
+- [a30a0ea](https://github.com/gulpjs/vinyl-fs/commit/a30a0ea5ba65aa32b8a3a7a72fe6ddcbb20fe3fa) watch added (@contra)
+- [209d4f2](https://github.com/gulpjs/vinyl-fs/commit/209d4f235fcd4419318527a96f6bc8757a4b87a7) flesh out more (@contra)
+- [5958e7e](https://github.com/gulpjs/vinyl-fs/commit/5958e7e7b55bed41ae0972d721eae91ea9d21cbf) new vinyl file isDirectory changes (@contra)
+- [7f8684b](https://github.com/gulpjs/vinyl-fs/commit/7f8684b87d93ee66fdbefe5397c8b7e365727d3d) more tests (@contra)
+- [bf1f18c](https://github.com/gulpjs/vinyl-fs/commit/bf1f18cef59dff9ad01658b5e11968f2a3b11ff5) start tests (@contra)
+- [23a1cff](https://github.com/gulpjs/vinyl-fs/commit/23a1cff61b8fcc07d543c1757a415591277a5425) fix deps (@contra)
+- [35f230b](https://github.com/gulpjs/vinyl-fs/commit/35f230b2abe22e5fa0cc710a9bbbfb8dd3cfe3fa) start impl (@contra) \ No newline at end of file
diff --git a/node_modules/vinyl-fs/LICENSE b/node_modules/vinyl-fs/LICENSE
new file mode 100755
index 000000000..3ebc30895
--- /dev/null
+++ b/node_modules/vinyl-fs/LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2013-2016 Fractal <contact@wearefractal.com>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/vinyl-fs/README.md b/node_modules/vinyl-fs/README.md
new file mode 100644
index 000000000..f449c6b56
--- /dev/null
+++ b/node_modules/vinyl-fs/README.md
@@ -0,0 +1,293 @@
+<p align="center">
+ <a href="http://gulpjs.com">
+ <img height="257" width="114" src="https://raw.githubusercontent.com/gulpjs/artwork/master/gulp-2x.png">
+ </a>
+</p>
+
+# vinyl-fs
+
+[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Gitter chat][gitter-image]][gitter-url]
+
+[Vinyl][vinyl] adapter for the file system.
+
+## What is Vinyl?
+
+[Vinyl][vinyl] is a very simple metadata object that describes a file. When you think of a file, two attributes come to mind: `path` and `contents`. These are the main attributes on a [Vinyl][vinyl] object. A file does not necessarily represent something on your computer’s file system. You have files on S3, FTP, Dropbox, Box, CloudThingly.io and other services. [Vinyl][vinyl] can be used to describe files from all of these sources.
+
+## What is a Vinyl Adapter?
+
+While Vinyl provides a clean way to describe a file, we now need a way to access these files. Each file source needs what I call a "Vinyl adapter". A Vinyl adapter simply exposes a `src(globs)` and a `dest(folder)` method. Each return a stream. The `src` stream produces Vinyl objects, and the `dest` stream consumes Vinyl objects. Vinyl adapters can expose extra methods that might be specific to their input/output medium, such as the `symlink` method `vinyl-fs` provides.
+
+## Usage
+
+```javascript
+var map = require('map-stream');
+var vfs = require('vinyl-fs');
+
+var log = function(file, cb) {
+ console.log(file.path);
+ cb(null, file);
+};
+
+vfs.src(['./js/**/*.js', '!./js/vendor/*.js'])
+ .pipe(map(log))
+ .pipe(vfs.dest('./output'));
+```
+
+## API
+
+### `src(globs[, options])`
+
+Takes a glob string or an array of glob strings as the first argument and an options object as the second.
+Returns a stream of [vinyl] `File` objects.
+
+__Note: UTF-8 BOM will be stripped from all UTF-8 files read with `.src` unless disabled in the options.__
+
+#### Globs
+
+Globs are executed in order, so negations should follow positive globs.
+
+For example:
+
+```js
+fs.src(['!b*.js', '*.js'])
+```
+
+would not exclude any files, but the following would:
+
+```js
+fs.src(['*.js', '!b*.js'])
+```
+
+#### Options
+
+##### `options.cwd`
+
+The working directory the folder is relative to.
+
+Type: `String`
+
+Default: `process.cwd()`
+
+##### `options.base`
+
+The folder relative to the cwd. This is used to determine the file names when saving in `.dest()`.
+
+Type: `String`
+
+Default: The part of the path before the glob (if any) begins. For example, `path/to/**/*.js` would resolve to `path/to`. If there is no glob (i.e. a file path with no pattern), then the dirname of the path is used. For example, `path/to/some/file.js` would resolve to `path/to/some`.
+
+##### `options.buffer`
+
+Whether or not you want to buffer the file contents into memory. Setting to `false` will make `file.contents` a paused Stream.
+
+Type: `Boolean`
+
+Default: `true`
+
+##### `options.read`
+
+Whether or not you want the file to be read at all. Useful for stuff like removing files. Setting to `false` will make `file.contents` `null` and will disable writing the file to disk via `.dest()`.
+
+Type: `Boolean`
+
+Default: `true`
+
+##### `options.since`
+
+Only streams files that have been modified since the time specified.
+
+Type: `Date` or `Number`
+
+Default: `undefined`
+
+##### `options.stripBOM`
+
+Causes the BOM to be stripped on UTF-8 encoded files. Set to `false` if you need the BOM for some reason.
+
+Type: `Boolean`
+
+Default: `true`
+
+##### `options.passthrough`
+
+Allows `.src` to be used in the middle of a pipeline (using a duplex stream) which passes through all objects received and adds all files globbed to the stream.
+
+Type: `Boolean`
+
+Default: `false`
+
+##### `options.sourcemaps`
+
+Enables sourcemap support on files passed through the stream. Will load inline sourcemaps and resolve sourcemap links from files. Uses [gulp-sourcemaps] under the hood.
+
+Type: `Boolean`
+
+Default: `false`
+
+##### `options.followSymlinks` - `true` if you want
+
+Whether or not to recursively resolve symlinks to their targets. Setting to `false` to preserve them as symlinks and make `file.symlink` equal the original symlink's target path.
+
+Type: `Boolean`
+
+Default: `true`
+
+##### other
+
+Any glob-related options are documented in [glob-stream] and [node-glob].
+Any through2-related options are documented in [through2].
+
+### `dest(folder[, options])`
+
+Takes a folder path string or a function as the first argument and an options object as the second. If given a function, it will be called with each [vinyl] `File` object and must return a folder path.
+Returns a stream that accepts [vinyl] `File` objects, writes them to disk at the folder/cwd specified, and passes them downstream so you can keep piping these around.
+
+Once the file is written to disk, an attempt is made to determine if the `stat.mode`, `stat.mtime` and `stat.atime` of the [vinyl] `File` object differ from the file on the filesystem.
+If they differ and the running process owns the file, the corresponding filesystem metadata is updated.
+If they don't differ or the process doesn't own the file, the attempt is skipped silently.
+__This functionality is disabled on Windows operating systems or any other OS that doesn't support `process.getuid` or `process.geteuid` in node. This is due to Windows having very unexpected results through usage of `fs.fchmod` and `fs.futimes`.__
+
+If the file has a `symlink` attribute specifying a target path, then a symlink will be created.
+
+__Note: The file will be modified after being written to this stream.__
+ - `cwd`, `base`, and `path` will be overwritten to match the folder.
+ - `stat` will be updated to match the file on the filesystem.
+ - `contents` will have it's position reset to the beginning if it is a stream.
+
+#### Options
+
+##### `options.cwd`
+
+The working directory the folder is relative to.
+
+Type: `String`
+
+Default: `process.cwd()`
+
+##### `options.base`
+
+The folder relative to the cwd. This is used to determine the file names when saving in `.dest()`. Can also be a function that takes in a file and returns a folder path.
+
+Type: `String` or `Function`
+
+Default: The `cwd` resolved to the folder path.
+
+##### `options.mode`
+
+The mode the files should be created with.
+
+Type: `Number`
+
+Default: The `mode` of the input file (`file.stat.mode`) if any, or the process mode if the input file has no `mode` property.
+
+##### `options.dirMode`
+
+The mode the directory should be created with.
+
+Type: `Number`
+
+Default: The process `mode`.
+
+##### `options.overwrite`
+
+Whether or not existing files with the same path should be overwritten. Can also be a function that takes in a file and returns `true` or `false`.
+
+Type: `Boolean` or `Function`
+
+Default: `true` (always overwrite existing files)
+
+##### `options.sourcemaps`
+
+Enables sourcemap support on files passed through the stream. Will write inline soucemaps if specified as `true`.
+Specifying a `string` is shorthand for the path option. Uses [gulp-sourcemaps] under the hood.
+
+Examples:
+
+```js
+// Write as inline comments
+vfs.dest('./', {
+ sourcemaps: true
+});
+
+// Write as files in the same folder
+vfs.dest('./', {
+ sourcemaps: '.'
+});
+
+// Any other options are passed through to [gulp-sourcemaps]
+vfs.dest('./', {
+ sourcemaps: {
+ path: '.',
+ addComment: false,
+ includeContent: false
+ }
+});
+```
+
+Type: `Boolean`, `String` or `Object`
+
+Default: `undefined` (do not write sourcemaps)
+
+##### other
+
+Any through2-related options are documented in [through2].
+
+### `symlink(folder[, options])`
+
+Takes a folder path string or a function as the first argument and an options object as the second. If given a function, it will be called with each [vinyl] `File` object and must return a folder path.
+Returns a stream that accepts [vinyl] `File` objects, create a symbolic link (i.e. symlink) at the folder/cwd specified, and passes them downstream so you can keep piping these around.
+
+__Note: The file will be modified after being written to this stream.__
+ - `cwd`, `base`, and `path` will be overwritten to match the folder.
+
+#### Options
+
+##### `options.cwd`
+
+The working directory the folder is relative to.
+
+Type: `String`
+
+Default: `process.cwd()`
+
+##### `options.base`
+
+The folder relative to the cwd. This is used to determine the file names when saving in `.symlink()`. Can also be a function that takes in a file and returns a folder path.
+
+Type: `String` or `Function`
+
+Default: The `cwd` resolved to the folder path.
+
+##### `options.dirMode`
+
+The mode the directory should be created with.
+
+Type: `Number`
+
+Default: The process mode.
+
+##### other
+
+Any through2-related options are documented in [through2].
+
+[glob-stream]: https://github.com/gulpjs/glob-stream
+[gulp-sourcemaps]: https://github.com/floridoo/gulp-sourcemaps
+[node-glob]: https://github.com/isaacs/node-glob
+[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
+
+[downloads-image]: http://img.shields.io/npm/dm/vinyl-fs.svg
+[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/gulpjs/vinyl-fs
+[travis-image]: https://travis-ci.org/gulpjs/vinyl-fs.svg?branch=master
+
+[coveralls-url]: https://coveralls.io/r/gulpjs/vinyl-fs
+[coveralls-image]: https://coveralls.io/repos/gulpjs/vinyl-fs/badge.svg
+
+[gitter-url]: https://gitter.im/gulpjs/gulp
+[gitter-image]: https://badges.gitter.im/gulpjs/gulp.png
diff --git a/node_modules/vinyl-fs/index.js b/node_modules/vinyl-fs/index.js
new file mode 100644
index 000000000..acdeac2b1
--- /dev/null
+++ b/node_modules/vinyl-fs/index.js
@@ -0,0 +1,7 @@
+'use strict';
+
+module.exports = {
+ src: require('./lib/src'),
+ dest: require('./lib/dest'),
+ symlink: require('./lib/symlink'),
+};
diff --git a/node_modules/vinyl-fs/lib/dest/index.js b/node_modules/vinyl-fs/lib/dest/index.js
new file mode 100644
index 000000000..049ac9690
--- /dev/null
+++ b/node_modules/vinyl-fs/lib/dest/index.js
@@ -0,0 +1,54 @@
+'use strict';
+
+var through2 = require('through2');
+var sourcemaps = require('gulp-sourcemaps');
+var duplexify = require('duplexify');
+var sink = require('../sink');
+var prepareWrite = require('../prepareWrite');
+var writeContents = require('./writeContents');
+
+function dest(outFolder, opt) {
+ if (!opt) {
+ opt = {};
+ }
+
+ function saveFile(file, enc, cb) {
+ prepareWrite(outFolder, file, opt, function(err, writePath) {
+ if (err) {
+ return cb(err);
+ }
+ writeContents(writePath, file, cb);
+ });
+ }
+
+ var saveStream = through2.obj(opt, saveFile);
+ if (!opt.sourcemaps) {
+ // Sink the save stream to start flowing
+ // Do this on nextTick, it will flow at slowest speed of piped streams
+ process.nextTick(sink(saveStream));
+
+ return saveStream;
+ }
+
+ var sourcemapOpt = opt.sourcemaps;
+ if (typeof sourcemapOpt === 'boolean') {
+ sourcemapOpt = {};
+ }
+ if (typeof sourcemapOpt === 'string') {
+ sourcemapOpt = {
+ path: sourcemapOpt,
+ };
+ }
+
+ var mapStream = sourcemaps.write(sourcemapOpt.path, sourcemapOpt);
+ var outputStream = duplexify.obj(mapStream, saveStream);
+ mapStream.pipe(saveStream);
+
+ // Sink the output stream to start flowing
+ // Do this on nextTick, it will flow at slowest speed of piped streams
+ process.nextTick(sink(outputStream));
+
+ return outputStream;
+}
+
+module.exports = dest;
diff --git a/node_modules/vinyl-fs/lib/dest/writeContents/index.js b/node_modules/vinyl-fs/lib/dest/writeContents/index.js
new file mode 100644
index 000000000..1382d9567
--- /dev/null
+++ b/node_modules/vinyl-fs/lib/dest/writeContents/index.js
@@ -0,0 +1,59 @@
+'use strict';
+
+var writeDir = require('./writeDir');
+var writeStream = require('./writeStream');
+var writeBuffer = require('./writeBuffer');
+var writeSymbolicLink = require('./writeSymbolicLink');
+
+function writeContents(writePath, file, callback) {
+ // If directory then mkdirp it
+ if (file.isDirectory()) {
+ return writeDir(writePath, file, written);
+ }
+
+ // Stream it to disk yo
+ if (file.isStream()) {
+ return writeStream(writePath, file, written);
+ }
+
+ // Write it as a symlink
+ if (file.symlink) {
+ return writeSymbolicLink(writePath, file, written);
+ }
+
+ // Write it like normal
+ if (file.isBuffer()) {
+ return writeBuffer(writePath, file, written);
+ }
+
+ // If no contents then do nothing
+ if (file.isNull()) {
+ return written();
+ }
+
+ // This is invoked by the various writeXxx modules when they've finished
+ // writing the contents.
+ function written(err) {
+ if (isErrorFatal(err)) {
+ return callback(err);
+ }
+
+ callback(null, file);
+ }
+
+ function isErrorFatal(err) {
+ if (!err) {
+ return false;
+ }
+
+ if (err.code === 'EEXIST' && file.flag === 'wx') {
+ // Handle scenario for file overwrite failures.
+ return false; // "These aren't the droids you're looking for"
+ }
+
+ // Otherwise, this is a fatal error
+ return true;
+ }
+}
+
+module.exports = writeContents;
diff --git a/node_modules/vinyl-fs/lib/dest/writeContents/writeBuffer.js b/node_modules/vinyl-fs/lib/dest/writeContents/writeBuffer.js
new file mode 100644
index 000000000..f23a4aa05
--- /dev/null
+++ b/node_modules/vinyl-fs/lib/dest/writeContents/writeBuffer.js
@@ -0,0 +1,26 @@
+'use strict';
+
+var fo = require('../../fileOperations');
+
+function writeBuffer(writePath, file, written) {
+ var opt = {
+ mode: file.stat.mode,
+ flag: file.flag,
+ };
+
+ fo.writeFile(writePath, file.contents, opt, onWriteFile);
+
+ function onWriteFile(writeErr, fd) {
+ if (writeErr) {
+ return fo.closeFd(writeErr, fd, written);
+ }
+
+ fo.updateMetadata(fd, file, onUpdate);
+ }
+
+ function onUpdate(statErr, fd) {
+ fo.closeFd(statErr, fd, written);
+ }
+}
+
+module.exports = writeBuffer;
diff --git a/node_modules/vinyl-fs/lib/dest/writeContents/writeDir.js b/node_modules/vinyl-fs/lib/dest/writeContents/writeDir.js
new file mode 100644
index 000000000..ef7622c9c
--- /dev/null
+++ b/node_modules/vinyl-fs/lib/dest/writeContents/writeDir.js
@@ -0,0 +1,53 @@
+'use strict';
+
+var fs = require('graceful-fs');
+var mkdirp = require('mkdirp');
+
+var fo = require('../../fileOperations');
+
+function writeDir(writePath, file, written) {
+ var mkdirpOpts = {
+ mode: file.stat.mode,
+ fs: fs,
+ };
+ mkdirp(writePath, mkdirpOpts, onMkdirp);
+
+ function onMkdirp(mkdirpErr) {
+ if (mkdirpErr) {
+ return written(mkdirpErr);
+ }
+
+ fs.open(writePath, 'r', onOpen);
+ }
+
+ function onOpen(openErr, fd) {
+ // If we don't have access, just move along
+ if (isInaccessible(openErr)) {
+ return fo.closeFd(null, fd, written);
+ }
+
+ if (openErr) {
+ return fo.closeFd(openErr, fd, written);
+ }
+
+ fo.updateMetadata(fd, file, onUpdate);
+ }
+
+ function onUpdate(statErr, fd) {
+ fo.closeFd(statErr, fd, written);
+ }
+}
+
+function isInaccessible(err) {
+ if (!err) {
+ return false;
+ }
+
+ if (err.code === 'EACCES') {
+ return true;
+ }
+
+ return false;
+ }
+
+module.exports = writeDir;
diff --git a/node_modules/vinyl-fs/lib/dest/writeContents/writeStream.js b/node_modules/vinyl-fs/lib/dest/writeContents/writeStream.js
new file mode 100644
index 000000000..e9af5f1d9
--- /dev/null
+++ b/node_modules/vinyl-fs/lib/dest/writeContents/writeStream.js
@@ -0,0 +1,57 @@
+'use strict';
+
+var fs = require('graceful-fs');
+
+var fo = require('../../fileOperations');
+var streamFile = require('../../src/getContents/streamFile');
+
+function writeStream(writePath, file, written) {
+ var opt = {
+ mode: file.stat.mode,
+ flag: file.flag,
+ };
+
+ var outStream = fs.createWriteStream(writePath, opt);
+
+ file.contents.once('error', complete);
+ file.contents.once('end', readStreamEnd);
+ outStream.once('error', complete);
+ outStream.once('finish', complete);
+
+ // Streams are piped with end disabled, this prevents the
+ // WriteStream from closing the file descriptor after all
+ // data is written.
+ file.contents.pipe(outStream, { end: false });
+
+ function readStreamEnd() {
+ streamFile(file, complete);
+ }
+
+ function end(propagatedErr) {
+ outStream.end(onEnd);
+
+ function onEnd(endErr) {
+ written(propagatedErr || endErr);
+ }
+ }
+
+ // Cleanup
+ function complete(streamErr) {
+ file.contents.removeListener('error', complete);
+ file.contents.removeListener('end', readStreamEnd);
+ outStream.removeListener('error', complete);
+ outStream.removeListener('finish', complete);
+
+ if (streamErr) {
+ return end(streamErr);
+ }
+
+ if (typeof outStream.fd !== 'number') {
+ return end();
+ }
+
+ fo.updateMetadata(outStream.fd, file, end);
+ }
+}
+
+module.exports = writeStream;
diff --git a/node_modules/vinyl-fs/lib/dest/writeContents/writeSymbolicLink.js b/node_modules/vinyl-fs/lib/dest/writeContents/writeSymbolicLink.js
new file mode 100644
index 000000000..b09696926
--- /dev/null
+++ b/node_modules/vinyl-fs/lib/dest/writeContents/writeSymbolicLink.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var fs = require('graceful-fs');
+
+function writeSymbolicLink(writePath, file, written) {
+ // TODO handle symlinks properly
+ fs.symlink(file.symlink, writePath, function(err) {
+ if (isFatalError(err)) {
+ return written(err);
+ }
+
+ written();
+ });
+}
+
+function isFatalError(err) {
+ return (err && err.code !== 'EEXIST');
+}
+
+module.exports = writeSymbolicLink;
diff --git a/node_modules/vinyl-fs/lib/fileOperations.js b/node_modules/vinyl-fs/lib/fileOperations.js
new file mode 100644
index 000000000..e323fb70e
--- /dev/null
+++ b/node_modules/vinyl-fs/lib/fileOperations.js
@@ -0,0 +1,206 @@
+'use strict';
+
+var fs = require('graceful-fs');
+var assign = require('object-assign');
+var isEqual = require('lodash.isequal');
+var isValidDate = require('vali-date');
+
+// TODO shared module
+// TODO include sticky/setuid/setgid, i.e. 7777?
+var MASK_MODE = parseInt('0777', 8);
+var DEFAULT_FILE_MODE = parseInt('0666', 8);
+var APPEND_MODE_REGEXP = /a/;
+
+function closeFd(propagatedErr, fd, callback) {
+ if (typeof fd !== 'number') {
+ return callback(propagatedErr);
+ }
+
+ fs.close(fd, onClosed);
+
+ function onClosed(closeErr) {
+ if (propagatedErr || closeErr) {
+ return callback(propagatedErr || closeErr);
+ }
+
+ callback();
+ }
+}
+
+function getModeDiff(fsMode, vinylMode) {
+ var modeDiff = 0;
+
+ if (typeof vinylMode === 'number') {
+ modeDiff = (vinylMode ^ fsMode) & MASK_MODE;
+ }
+
+ return modeDiff;
+}
+
+function getTimesDiff(fsStat, vinylStat) {
+
+ if (!isValidDate(vinylStat.mtime)) {
+ return;
+ }
+
+ if (isEqual(vinylStat.mtime, fsStat.mtime) &&
+ isEqual(vinylStat.atime, fsStat.atime)) {
+ return;
+ }
+
+ var atime;
+ if (isValidDate(vinylStat.atime)) {
+ atime = vinylStat.atime;
+ } else {
+ atime = fsStat.atime;
+ }
+
+ if (!isValidDate(atime)) {
+ atime = undefined;
+ }
+
+ var timesDiff = {
+ mtime: vinylStat.mtime,
+ atime: atime,
+ };
+
+ return timesDiff;
+}
+
+function isOwner(fsStat) {
+ var hasGetuid = (typeof process.getuid === 'function');
+ var hasGeteuid = (typeof process.geteuid === 'function');
+
+ // If we don't have either, assume we don't have permissions.
+ // This should only happen on Windows.
+ // Windows basically noops fchmod and errors on futimes called on directories.
+ if (!hasGeteuid && !hasGetuid) {
+ return false;
+ }
+
+ var uid;
+ if (hasGeteuid) {
+ uid = process.geteuid();
+ } else {
+ uid = process.getuid();
+ }
+
+ if (fsStat.uid !== uid && uid !== 0) {
+ return false;
+ }
+
+ return true;
+}
+
+function updateMetadata(fd, file, callback) {
+
+ fs.fstat(fd, onStat);
+
+ function onStat(err, stat) {
+ if (err) {
+ return callback(err, fd);
+ }
+
+ // Check if mode needs to be updated
+ var modeDiff = getModeDiff(stat.mode, file.stat.mode);
+
+ // Check if atime/mtime need to be updated
+ var timesDiff = getTimesDiff(stat, file.stat);
+
+ // Set file.stat to the reflect current state on disk
+ assign(file.stat, stat);
+
+ // Nothing to do
+ if (!modeDiff && !timesDiff) {
+ return callback(null, fd);
+ }
+
+ // Check access, `futimes` and `fchmod` only work if we own the file,
+ // or if we are effectively root.
+ if (!isOwner(stat)) {
+ return callback(null, fd);
+ }
+
+ if (modeDiff) {
+ return mode();
+ }
+ times();
+
+ function mode() {
+ var mode = stat.mode ^ modeDiff;
+
+ fs.fchmod(fd, mode, onFchmod);
+
+ function onFchmod(fchmodErr) {
+ if (!fchmodErr) {
+ file.stat.mode = mode;
+ }
+ if (timesDiff) {
+ return times(fchmodErr);
+ }
+ callback(fchmodErr, fd);
+ }
+ }
+
+ function times(fchmodErr) {
+ fs.futimes(fd, timesDiff.atime, timesDiff.mtime, onFutimes);
+
+ function onFutimes(futimesErr) {
+ if (!futimesErr) {
+ file.stat.atime = timesDiff.atime;
+ file.stat.mtime = timesDiff.mtime;
+ }
+ callback(fchmodErr || futimesErr, fd);
+ }
+ }
+ }
+}
+
+/*
+ Custom writeFile implementation because we need access to the
+ file descriptor after the write is complete.
+ Most of the implementation taken from node core.
+ */
+function writeFile(path, data, options, callback) {
+ if (typeof options === 'function') {
+ callback = options;
+ options = {};
+ }
+
+ if (!Buffer.isBuffer(data)) {
+ callback(new TypeError('Data must be a Buffer'));
+ return;
+ }
+
+ if (!options) {
+ options = {};
+ }
+
+ // Default the same as node
+ var mode = options.mode || DEFAULT_FILE_MODE;
+ var flag = options.flag || 'w';
+ var position = APPEND_MODE_REGEXP.test(flag) ? null : 0;
+
+ fs.open(path, flag, mode, onOpen);
+
+ function onOpen(err, fd) {
+ if (err) {
+ return onComplete(err);
+ }
+
+ fs.write(fd, data, 0, data.length, position, onComplete);
+
+ function onComplete(err) {
+ callback(err, fd);
+ }
+ }
+}
+
+module.exports = {
+ closeFd: closeFd,
+ getModeDiff: getModeDiff,
+ getTimesDiff: getTimesDiff,
+ isOwner: isOwner,
+ updateMetadata: updateMetadata,
+ writeFile: writeFile,
+};
diff --git a/node_modules/vinyl-fs/lib/filterSince.js b/node_modules/vinyl-fs/lib/filterSince.js
new file mode 100644
index 000000000..234b58987
--- /dev/null
+++ b/node_modules/vinyl-fs/lib/filterSince.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var filter = require('through2-filter');
+
+module.exports = function(d) {
+ var isValid = typeof d === 'number' ||
+ d instanceof Number ||
+ d instanceof Date;
+
+ if (!isValid) {
+ throw new Error('expected since option to be a date or a number');
+ }
+ return filter.obj(function(file) {
+ return file.stat && file.stat.mtime > d;
+ });
+};
diff --git a/node_modules/vinyl-fs/lib/prepareWrite.js b/node_modules/vinyl-fs/lib/prepareWrite.js
new file mode 100644
index 000000000..50d86cd12
--- /dev/null
+++ b/node_modules/vinyl-fs/lib/prepareWrite.js
@@ -0,0 +1,69 @@
+'use strict';
+
+var assign = require('object-assign');
+var path = require('path');
+var mkdirp = require('mkdirp');
+var fs = require('graceful-fs');
+
+function booleanOrFunc(v, file) {
+ if (typeof v !== 'boolean' && typeof v !== 'function') {
+ return null;
+ }
+
+ return typeof v === 'boolean' ? v : v(file);
+}
+
+function stringOrFunc(v, file) {
+ if (typeof v !== 'string' && typeof v !== 'function') {
+ return null;
+ }
+
+ return typeof v === 'string' ? v : v(file);
+}
+
+function prepareWrite(outFolder, file, opt, cb) {
+ var options = assign({
+ cwd: process.cwd(),
+ mode: (file.stat ? file.stat.mode : null),
+ dirMode: null,
+ overwrite: true,
+ }, opt);
+ var overwrite = booleanOrFunc(options.overwrite, file);
+ options.flag = (overwrite ? 'w' : 'wx');
+
+ var cwd = path.resolve(options.cwd);
+ var outFolderPath = stringOrFunc(outFolder, file);
+ if (!outFolderPath) {
+ throw new Error('Invalid output folder');
+ }
+ var basePath = options.base ?
+ stringOrFunc(options.base, file) : path.resolve(cwd, outFolderPath);
+ if (!basePath) {
+ throw new Error('Invalid base option');
+ }
+
+ var writePath = path.resolve(basePath, file.relative);
+ var writeFolder = path.dirname(writePath);
+
+ // Wire up new properties
+ file.stat = (file.stat || new fs.Stats());
+ file.stat.mode = options.mode;
+ file.flag = options.flag;
+ file.cwd = cwd;
+ file.base = basePath;
+ file.path = writePath;
+
+ // Mkdirp the folder the file is going in
+ var mkdirpOpts = {
+ mode: options.dirMode,
+ fs: fs,
+ };
+ mkdirp(writeFolder, mkdirpOpts, function(err) {
+ if (err) {
+ return cb(err);
+ }
+ cb(null, writePath);
+ });
+}
+
+module.exports = prepareWrite;
diff --git a/node_modules/vinyl-fs/lib/sink.js b/node_modules/vinyl-fs/lib/sink.js
new file mode 100644
index 000000000..cfab46980
--- /dev/null
+++ b/node_modules/vinyl-fs/lib/sink.js
@@ -0,0 +1,53 @@
+'use strict';
+
+var Writable = require('readable-stream/writable');
+
+function listenerCount(stream, evt) {
+ return stream.listeners(evt).length;
+}
+
+function hasListeners(stream) {
+ return !!(listenerCount(stream, 'readable') || listenerCount(stream, 'data'));
+}
+
+function sink(stream) {
+ var sinkAdded = false;
+ var sinkStream = new Writable({
+ objectMode: true,
+ write: function(file, enc, cb) {
+ cb();
+ },
+ });
+
+ function addSink() {
+ if (sinkAdded) {
+ return;
+ }
+
+ if (hasListeners(stream)) {
+ return;
+ }
+
+ sinkAdded = true;
+ stream.pipe(sinkStream);
+ }
+
+ function removeSink(evt) {
+ if (evt !== 'readable' && evt !== 'data') {
+ return;
+ }
+
+ if (hasListeners(stream)) {
+ sinkAdded = false;
+ stream.unpipe(sinkStream);
+ }
+ }
+
+ stream.on('newListener', removeSink);
+ stream.on('removeListener', removeSink);
+ stream.on('removeListener', addSink);
+
+ return addSink;
+}
+
+module.exports = sink;
diff --git a/node_modules/vinyl-fs/lib/src/getContents/bufferFile.js b/node_modules/vinyl-fs/lib/src/getContents/bufferFile.js
new file mode 100644
index 000000000..894dd9cea
--- /dev/null
+++ b/node_modules/vinyl-fs/lib/src/getContents/bufferFile.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var fs = require('graceful-fs');
+var stripBom = require('strip-bom');
+
+function bufferFile(file, opt, cb) {
+ fs.readFile(file.path, function(err, data) {
+ if (err) {
+ return cb(err);
+ }
+
+ if (opt.stripBOM) {
+ file.contents = stripBom(data);
+ } else {
+ file.contents = data;
+ }
+
+ cb(null, file);
+ });
+}
+
+module.exports = bufferFile;
diff --git a/node_modules/vinyl-fs/lib/src/getContents/index.js b/node_modules/vinyl-fs/lib/src/getContents/index.js
new file mode 100644
index 000000000..c1c8c159d
--- /dev/null
+++ b/node_modules/vinyl-fs/lib/src/getContents/index.js
@@ -0,0 +1,31 @@
+'use strict';
+
+var through2 = require('through2');
+var readDir = require('./readDir');
+var readSymbolicLink = require('./readSymbolicLink');
+var bufferFile = require('./bufferFile');
+var streamFile = require('./streamFile');
+
+function getContents(opt) {
+ return through2.obj(opt, function(file, enc, cb) {
+ // Don't fail to read a directory
+ if (file.isDirectory()) {
+ return readDir(file, opt, cb);
+ }
+
+ // Process symbolic links included with `followSymlinks` option
+ if (file.stat && file.stat.isSymbolicLink()) {
+ return readSymbolicLink(file, opt, cb);
+ }
+
+ // Read and pass full contents
+ if (opt.buffer !== false) {
+ return bufferFile(file, opt, cb);
+ }
+
+ // Don't buffer anything - just pass streams
+ return streamFile(file, opt, cb);
+ });
+}
+
+module.exports = getContents;
diff --git a/node_modules/vinyl-fs/lib/src/getContents/readDir.js b/node_modules/vinyl-fs/lib/src/getContents/readDir.js
new file mode 100644
index 000000000..a800d4738
--- /dev/null
+++ b/node_modules/vinyl-fs/lib/src/getContents/readDir.js
@@ -0,0 +1,8 @@
+'use strict';
+
+function readDir(file, opt, cb) {
+ // Do nothing for now
+ cb(null, file);
+}
+
+module.exports = readDir;
diff --git a/node_modules/vinyl-fs/lib/src/getContents/readSymbolicLink.js b/node_modules/vinyl-fs/lib/src/getContents/readSymbolicLink.js
new file mode 100644
index 000000000..794077a62
--- /dev/null
+++ b/node_modules/vinyl-fs/lib/src/getContents/readSymbolicLink.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var fs = require('graceful-fs');
+
+function readLink(file, opt, cb) {
+ fs.readlink(file.path, function(err, target) {
+ if (err) {
+ return cb(err);
+ }
+
+ // Store the link target path
+ file.symlink = target;
+
+ return cb(null, file);
+ });
+}
+
+module.exports = readLink;
diff --git a/node_modules/vinyl-fs/lib/src/getContents/streamFile.js b/node_modules/vinyl-fs/lib/src/getContents/streamFile.js
new file mode 100644
index 000000000..43dc12635
--- /dev/null
+++ b/node_modules/vinyl-fs/lib/src/getContents/streamFile.js
@@ -0,0 +1,26 @@
+'use strict';
+
+var fs = require('graceful-fs');
+var stripBom = require('strip-bom-stream');
+var lazystream = require('lazystream');
+
+function streamFile(file, opt, cb) {
+ if (typeof opt === 'function') {
+ cb = opt;
+ opt = {};
+ }
+
+ var filePath = file.path;
+
+ file.contents = new lazystream.Readable(function() {
+ return fs.createReadStream(filePath);
+ });
+
+ if (opt.stripBOM) {
+ file.contents = file.contents.pipe(stripBom());
+ }
+
+ cb(null, file);
+}
+
+module.exports = streamFile;
diff --git a/node_modules/vinyl-fs/lib/src/index.js b/node_modules/vinyl-fs/lib/src/index.js
new file mode 100644
index 000000000..06cbe754d
--- /dev/null
+++ b/node_modules/vinyl-fs/lib/src/index.js
@@ -0,0 +1,62 @@
+'use strict';
+
+var assign = require('object-assign');
+var through2 = require('through2');
+var gs = require('glob-stream');
+var duplexify = require('duplexify');
+var merge = require('merge-stream');
+var sourcemaps = require('gulp-sourcemaps');
+var filterSince = require('../filterSince');
+var isValidGlob = require('is-valid-glob');
+
+var getContents = require('./getContents');
+var wrapWithVinylFile = require('./wrapWithVinylFile');
+
+function src(glob, opt) {
+ var options = assign({
+ read: true,
+ buffer: true,
+ stripBOM: true,
+ sourcemaps: false,
+ passthrough: false,
+ followSymlinks: true,
+ }, opt);
+
+ // Don't pass `read` option on to through2
+ var read = options.read !== false;
+ options.read = undefined;
+
+ var inputPass;
+
+ if (!isValidGlob(glob)) {
+ throw new Error('Invalid glob argument: ' + glob);
+ }
+
+ var globStream = gs.create(glob, options);
+
+ var outputStream = globStream
+ .pipe(wrapWithVinylFile(options));
+
+ if (options.since != null) {
+ outputStream = outputStream
+ .pipe(filterSince(options.since));
+ }
+
+ if (read) {
+ outputStream = outputStream
+ .pipe(getContents(options));
+ }
+
+ if (options.passthrough === true) {
+ inputPass = through2.obj(options);
+ outputStream = duplexify.obj(inputPass, merge(outputStream, inputPass));
+ }
+ if (options.sourcemaps === true) {
+ outputStream = outputStream
+ .pipe(sourcemaps.init({ loadMaps: true }));
+ }
+ globStream.on('error', outputStream.emit.bind(outputStream, 'error'));
+ return outputStream;
+}
+
+module.exports = src;
diff --git a/node_modules/vinyl-fs/lib/src/wrapWithVinylFile.js b/node_modules/vinyl-fs/lib/src/wrapWithVinylFile.js
new file mode 100644
index 000000000..5e6290e59
--- /dev/null
+++ b/node_modules/vinyl-fs/lib/src/wrapWithVinylFile.js
@@ -0,0 +1,51 @@
+'use strict';
+
+var through2 = require('through2');
+var fs = require('graceful-fs');
+var File = require('vinyl');
+
+function wrapWithVinylFile(options) {
+
+ // A stat property is exposed on file objects as a (wanted) side effect
+ function resolveFile(globFile, enc, cb) {
+ fs.lstat(globFile.path, function(err, stat) {
+ if (err) {
+ return cb(err);
+ }
+
+ globFile.stat = stat;
+
+ if (!stat.isSymbolicLink() || !options.followSymlinks) {
+ var vinylFile = new File(globFile);
+ if (globFile.originalSymlinkPath) {
+ // If we reach here, it means there is at least one
+ // symlink on the path and we need to rewrite the path
+ // to its original value.
+ // Updated file stats will tell getContents() to actually read it.
+ vinylFile.path = globFile.originalSymlinkPath;
+ }
+ return cb(null, vinylFile);
+ }
+
+ fs.realpath(globFile.path, function(err, filePath) {
+ if (err) {
+ return cb(err);
+ }
+
+ if (!globFile.originalSymlinkPath) {
+ // Store the original symlink path before the recursive call
+ // to later rewrite it back.
+ globFile.originalSymlinkPath = globFile.path;
+ }
+ globFile.path = filePath;
+
+ // Recurse to get real file stat
+ resolveFile(globFile, enc, cb);
+ });
+ });
+ }
+
+ return through2.obj(options, resolveFile);
+}
+
+module.exports = wrapWithVinylFile;
diff --git a/node_modules/vinyl-fs/lib/symlink/index.js b/node_modules/vinyl-fs/lib/symlink/index.js
new file mode 100644
index 000000000..6c01a6b67
--- /dev/null
+++ b/node_modules/vinyl-fs/lib/symlink/index.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var through2 = require('through2');
+var fs = require('graceful-fs');
+var prepareWrite = require('../prepareWrite');
+
+function symlink(outFolder, opt) {
+ function linkFile(file, enc, cb) {
+ var srcPath = file.path;
+ var symType = (file.isDirectory() ? 'dir' : 'file');
+ prepareWrite(outFolder, file, opt, function(err, writePath) {
+ if (err) {
+ return cb(err);
+ }
+ fs.symlink(srcPath, writePath, symType, function(err) {
+ if (err && err.code !== 'EEXIST') {
+ return cb(err);
+ }
+ cb(null, file);
+ });
+ });
+ }
+
+ var stream = through2.obj(opt, linkFile);
+ // TODO: option for either backpressure or lossy
+ stream.resume();
+ return stream;
+}
+
+module.exports = symlink;
diff --git a/node_modules/vinyl-fs/node_modules/.bin/mkdirp b/node_modules/vinyl-fs/node_modules/.bin/mkdirp
new file mode 120000
index 000000000..91a5f623f
--- /dev/null
+++ b/node_modules/vinyl-fs/node_modules/.bin/mkdirp
@@ -0,0 +1 @@
+../../../mkdirp/bin/cmd.js \ No newline at end of file
diff --git a/node_modules/vinyl-fs/node_modules/clone-stats/LICENSE.md b/node_modules/vinyl-fs/node_modules/clone-stats/LICENSE.md
new file mode 100644
index 000000000..146cb32a7
--- /dev/null
+++ b/node_modules/vinyl-fs/node_modules/clone-stats/LICENSE.md
@@ -0,0 +1,21 @@
+## The MIT License (MIT) ##
+
+Copyright (c) 2014 Hugh Kennedy
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/vinyl-fs/node_modules/clone-stats/README.md b/node_modules/vinyl-fs/node_modules/clone-stats/README.md
new file mode 100644
index 000000000..8b12b6fa5
--- /dev/null
+++ b/node_modules/vinyl-fs/node_modules/clone-stats/README.md
@@ -0,0 +1,17 @@
+# clone-stats [![Flattr this!](https://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/submit/auto?user_id=hughskennedy&url=http://github.com/hughsk/clone-stats&title=clone-stats&description=hughsk/clone-stats%20on%20GitHub&language=en_GB&tags=flattr,github,javascript&category=software)[![experimental](http://hughsk.github.io/stability-badges/dist/experimental.svg)](http://github.com/hughsk/stability-badges) #
+
+Safely clone node's
+[`fs.Stats`](http://nodejs.org/api/fs.html#fs_class_fs_stats) instances without
+losing their class methods, i.e. `stat.isDirectory()` and co.
+
+## Usage ##
+
+[![clone-stats](https://nodei.co/npm/clone-stats.png?mini=true)](https://nodei.co/npm/clone-stats)
+
+### `copy = require('clone-stats')(stat)` ###
+
+Returns a clone of the original `fs.Stats` instance (`stat`).
+
+## License ##
+
+MIT. See [LICENSE.md](http://github.com/hughsk/clone-stats/blob/master/LICENSE.md) for details.
diff --git a/node_modules/vinyl-fs/node_modules/clone-stats/index.js b/node_modules/vinyl-fs/node_modules/clone-stats/index.js
new file mode 100644
index 000000000..e797cfe6e
--- /dev/null
+++ b/node_modules/vinyl-fs/node_modules/clone-stats/index.js
@@ -0,0 +1,13 @@
+var Stat = require('fs').Stats
+
+module.exports = cloneStats
+
+function cloneStats(stats) {
+ var replacement = new Stat
+
+ Object.keys(stats).forEach(function(key) {
+ replacement[key] = stats[key]
+ })
+
+ return replacement
+}
diff --git a/node_modules/vinyl-fs/node_modules/clone-stats/package.json b/node_modules/vinyl-fs/node_modules/clone-stats/package.json
new file mode 100644
index 000000000..2880625c1
--- /dev/null
+++ b/node_modules/vinyl-fs/node_modules/clone-stats/package.json
@@ -0,0 +1,31 @@
+{
+ "name": "clone-stats",
+ "description": "Safely clone node's fs.Stats instances without losing their class methods",
+ "version": "0.0.1",
+ "main": "index.js",
+ "browser": "index.js",
+ "dependencies": {},
+ "devDependencies": {
+ "tape": "~2.3.2"
+ },
+ "scripts": {
+ "test": "node test"
+ },
+ "author": "Hugh Kennedy <hughskennedy@gmail.com> (http://hughsk.io/)",
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/hughsk/clone-stats"
+ },
+ "bugs": {
+ "url": "https://github.com/hughsk/clone-stats/issues"
+ },
+ "homepage": "https://github.com/hughsk/clone-stats",
+ "keywords": [
+ "stats",
+ "fs",
+ "clone",
+ "copy",
+ "prototype"
+ ]
+}
diff --git a/node_modules/vinyl-fs/node_modules/clone-stats/test.js b/node_modules/vinyl-fs/node_modules/clone-stats/test.js
new file mode 100644
index 000000000..e4bb2814d
--- /dev/null
+++ b/node_modules/vinyl-fs/node_modules/clone-stats/test.js
@@ -0,0 +1,36 @@
+var test = require('tape')
+var clone = require('./')
+var fs = require('fs')
+
+test('file', function(t) {
+ compare(t, fs.statSync(__filename))
+ t.end()
+})
+
+test('directory', function(t) {
+ compare(t, fs.statSync(__dirname))
+ t.end()
+})
+
+function compare(t, stat) {
+ var copy = clone(stat)
+
+ t.deepEqual(stat, copy, 'clone has equal properties')
+ t.ok(stat instanceof fs.Stats, 'original is an fs.Stat')
+ t.ok(copy instanceof fs.Stats, 'copy is an fs.Stat')
+
+ ;['isDirectory'
+ , 'isFile'
+ , 'isBlockDevice'
+ , 'isCharacterDevice'
+ , 'isSymbolicLink'
+ , 'isFIFO'
+ , 'isSocket'
+ ].forEach(function(method) {
+ t.equal(
+ stat[method].call(stat)
+ , copy[method].call(copy)
+ , 'equal value for stat.' + method + '()'
+ )
+ })
+}
diff --git a/node_modules/vinyl-fs/node_modules/replace-ext/.npmignore b/node_modules/vinyl-fs/node_modules/replace-ext/.npmignore
new file mode 100644
index 000000000..b5ef13a3c
--- /dev/null
+++ b/node_modules/vinyl-fs/node_modules/replace-ext/.npmignore
@@ -0,0 +1,6 @@
+.DS_Store
+*.log
+node_modules
+build
+*.node
+components \ No newline at end of file
diff --git a/node_modules/vinyl-fs/node_modules/replace-ext/.travis.yml b/node_modules/vinyl-fs/node_modules/replace-ext/.travis.yml
new file mode 100644
index 000000000..8101b9fe7
--- /dev/null
+++ b/node_modules/vinyl-fs/node_modules/replace-ext/.travis.yml
@@ -0,0 +1,8 @@
+language: node_js
+node_js:
+ - "0.7"
+ - "0.8"
+ - "0.9"
+ - "0.10"
+after_script:
+ - npm run coveralls \ No newline at end of file
diff --git a/node_modules/vinyl-fs/node_modules/replace-ext/LICENSE b/node_modules/vinyl-fs/node_modules/replace-ext/LICENSE
new file mode 100755
index 000000000..7cbe012c6
--- /dev/null
+++ b/node_modules/vinyl-fs/node_modules/replace-ext/LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2014 Fractal <contact@wearefractal.com>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/vinyl-fs/node_modules/replace-ext/README.md b/node_modules/vinyl-fs/node_modules/replace-ext/README.md
new file mode 100644
index 000000000..05b5d21fd
--- /dev/null
+++ b/node_modules/vinyl-fs/node_modules/replace-ext/README.md
@@ -0,0 +1,44 @@
+# replace-ext [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Dependency Status][david-image]][david-url]
+
+
+## Information
+
+<table>
+<tr>
+<td>Package</td><td>replace-ext</td>
+</tr>
+<tr>
+<td>Description</td>
+<td>Replaces a file extension with another one</td>
+</tr>
+<tr>
+<td>Node Version</td>
+<td>>= 0.4</td>
+</tr>
+</table>
+
+## Usage
+
+```javascript
+var replaceExt = require('replace-ext');
+
+var path = '/some/dir/file.js';
+var npath = replaceExt(path, '.coffee');
+
+console.log(npath); // /some/dir/file.coffee
+```
+
+[npm-url]: https://npmjs.org/package/replace-ext
+[npm-image]: https://badge.fury.io/js/replace-ext.png
+
+[travis-url]: https://travis-ci.org/wearefractal/replace-ext
+[travis-image]: https://travis-ci.org/wearefractal/replace-ext.png?branch=master
+
+[coveralls-url]: https://coveralls.io/r/wearefractal/replace-ext
+[coveralls-image]: https://coveralls.io/repos/wearefractal/replace-ext/badge.png
+
+[depstat-url]: https://david-dm.org/wearefractal/replace-ext
+[depstat-image]: https://david-dm.org/wearefractal/replace-ext.png
+
+[david-url]: https://david-dm.org/wearefractal/replace-ext
+[david-image]: https://david-dm.org/wearefractal/replace-ext.png?theme=shields.io \ No newline at end of file
diff --git a/node_modules/vinyl-fs/node_modules/replace-ext/index.js b/node_modules/vinyl-fs/node_modules/replace-ext/index.js
new file mode 100644
index 000000000..3f76938e4
--- /dev/null
+++ b/node_modules/vinyl-fs/node_modules/replace-ext/index.js
@@ -0,0 +1,9 @@
+var path = require('path');
+
+module.exports = function(npath, ext) {
+ if (typeof npath !== 'string') return npath;
+ if (npath.length === 0) return npath;
+
+ var nFileName = path.basename(npath, path.extname(npath))+ext;
+ return path.join(path.dirname(npath), nFileName);
+}; \ No newline at end of file
diff --git a/node_modules/vinyl-fs/node_modules/replace-ext/package.json b/node_modules/vinyl-fs/node_modules/replace-ext/package.json
new file mode 100644
index 000000000..307d99b78
--- /dev/null
+++ b/node_modules/vinyl-fs/node_modules/replace-ext/package.json
@@ -0,0 +1,35 @@
+{
+ "name":"replace-ext",
+ "description":"Replaces a file extension with another one",
+ "version":"0.0.1",
+ "homepage":"http://github.com/wearefractal/replace-ext",
+ "repository":"git://github.com/wearefractal/replace-ext.git",
+ "author":"Fractal <contact@wearefractal.com> (http://wearefractal.com/)",
+ "main":"./index.js",
+
+ "dependencies":{
+
+ },
+ "devDependencies": {
+ "mocha": "~1.17.0",
+ "should": "~3.1.0",
+ "mocha-lcov-reporter": "~0.0.1",
+ "coveralls": "~2.6.1",
+ "istanbul": "~0.2.3",
+ "rimraf": "~2.2.5",
+ "jshint": "~2.4.1"
+ },
+ "scripts": {
+ "test": "mocha --reporter spec && jshint",
+ "coveralls": "istanbul cover _mocha --report lcovonly -- -R spec && cat ./coverage/lcov.info | coveralls && rm -rf ./coverage"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "licenses":[
+ {
+ "type":"MIT",
+ "url":"http://github.com/wearefractal/replace-ext/raw/master/LICENSE"
+ }
+ ]
+}
diff --git a/node_modules/vinyl-fs/node_modules/replace-ext/test/main.js b/node_modules/vinyl-fs/node_modules/replace-ext/test/main.js
new file mode 100644
index 000000000..51377021b
--- /dev/null
+++ b/node_modules/vinyl-fs/node_modules/replace-ext/test/main.js
@@ -0,0 +1,51 @@
+var replaceExt = require('../');
+var path = require('path');
+var should = require('should');
+require('mocha');
+
+describe('replace-ext', function() {
+ it('should return a valid replaced extension on nested', function(done) {
+ var fname = path.join(__dirname, './fixtures/test.coffee');
+ var expected = path.join(__dirname, './fixtures/test.js');
+ var nu = replaceExt(fname, '.js');
+ should.exist(nu);
+ nu.should.equal(expected);
+ done();
+ });
+
+ it('should return a valid replaced extension on flat', function(done) {
+ var fname = 'test.coffee';
+ var expected = 'test.js';
+ var nu = replaceExt(fname, '.js');
+ should.exist(nu);
+ nu.should.equal(expected);
+ done();
+ });
+
+ it('should not return a valid replaced extension on empty string', function(done) {
+ var fname = '';
+ var expected = '';
+ var nu = replaceExt(fname, '.js');
+ should.exist(nu);
+ nu.should.equal(expected);
+ done();
+ });
+
+ it('should return a valid removed extension on nested', function(done) {
+ var fname = path.join(__dirname, './fixtures/test.coffee');
+ var expected = path.join(__dirname, './fixtures/test');
+ var nu = replaceExt(fname, '');
+ should.exist(nu);
+ nu.should.equal(expected);
+ done();
+ });
+
+ it('should return a valid added extension on nested', function(done) {
+ var fname = path.join(__dirname, './fixtures/test');
+ var expected = path.join(__dirname, './fixtures/test.js');
+ var nu = replaceExt(fname, '.js');
+ should.exist(nu);
+ nu.should.equal(expected);
+ done();
+ });
+});
diff --git a/node_modules/vinyl-fs/node_modules/vinyl/CHANGELOG.md b/node_modules/vinyl-fs/node_modules/vinyl/CHANGELOG.md
new file mode 100644
index 000000000..9bf67df45
--- /dev/null
+++ b/node_modules/vinyl-fs/node_modules/vinyl/CHANGELOG.md
@@ -0,0 +1,163 @@
+## Change Log
+
+### v1.1.1 (2016/01/18 23:23 +00:00)
+- [3990e00](https://github.com/gulpjs/vinyl/commit/3990e007b004c809a53670c00566afb157fa56b6) 1.1.1
+- [2d3e984](https://github.com/gulpjs/vinyl/commit/2d3e98447a42285b593e1b261984b87b171e7313) chore: add NPM script for changelog (@T1st3)
+- [f70c395](https://github.com/gulpjs/vinyl/commit/f70c395085fc3952cf72c061c851f5b0d4676030) docs: add CHANGELOG.md (@T1st3)
+- [#74](https://github.com/gulpjs/vinyl/pull/74) Fix isVinyl for falsy values (@erikkemperman)
+- [3e8b132](https://github.com/gulpjs/vinyl/commit/3e8b132cd87bf5ab536ff7a4c6d660e33f5990b4) Fix isVinyl for falsy values (@erikkemperman)
+- [#73](https://github.com/gulpjs/vinyl/pull/73) Readme: use SVG images. (@d10)
+- [193e3d2](https://github.com/gulpjs/vinyl/commit/193e3d25f68c97593e011981e49db2c3e7a47d91) Readme: use SVG images. (@d10)
+- [#67](https://github.com/gulpjs/vinyl/pull/67) Set Travis to sudo:false and add node 0.12/4.x (@pdehaan)
+- [c33d85a](https://github.com/gulpjs/vinyl/commit/c33d85ab1d63fbcd272f7fb91d666006dab76d99) Set Travis to sudo:false and add node 0.12/4.x (@pdehaan)
+
+### v1.1.0 (2015/10/23 06:33 +00:00)
+- [51052ad](https://github.com/gulpjs/vinyl/commit/51052add24bb1c771bf5912809b47d4d53288c48) 1.1.0
+- [#64](https://github.com/gulpjs/vinyl/pull/64) File.stem for basename without suffix (@soslan)
+- [e505375](https://github.com/gulpjs/vinyl/commit/e5053756a49ea8800cd5da12fc0eefce859ccf61) Following JSCS rules in File.stem (@soslan)
+- [d45f478](https://github.com/gulpjs/vinyl/commit/d45f478c7af3f2e956e57ce6d7550d64e3b7dbfb) Following JSCS rules (@soslan)
+- [#66](https://github.com/gulpjs/vinyl/pull/66) Replace JSHint with ESLint (@pdehaan)
+- [c5549f7](https://github.com/gulpjs/vinyl/commit/c5549f7002ae580fa9a7f7df490d6e3911af2285) Bump to eslint-config-gulp@2 (@pdehaan)
+- [f6a5512](https://github.com/gulpjs/vinyl/commit/f6a55125e7230621ecae1f395da202140baaee1d) Replace JSHint with ESLint (@pdehaan)
+- [#65](https://github.com/gulpjs/vinyl/pull/65) Add JSCS to repo (@pdehaan)
+- [f9a0101](https://github.com/gulpjs/vinyl/commit/f9a0101d013356056293d21356d4cb443613b0be) Comments should start with uppercase letters (per JSCS) (@pdehaan)
+- [6506478](https://github.com/gulpjs/vinyl/commit/650647833e3cea8d005a3ab1810ecd285418fa1e) Add JSCS to repo (@pdehaan)
+- [ae3778c](https://github.com/gulpjs/vinyl/commit/ae3778c536a898fe47bbb37e5932b300123b28b8) Documentation for File.stem (@soslan)
+- [e2246af](https://github.com/gulpjs/vinyl/commit/e2246af8aad6df348557f9d1df5001c30ff83774) add stem property to File (@soslan)
+- [#63](https://github.com/gulpjs/vinyl/pull/63) Fix broken badge URLs in README.md (@tatsuyafw)
+- [032ae7c](https://github.com/gulpjs/vinyl/commit/032ae7c5c59b72dc58041a14449d8d66af053023) Use reference links (@tatsuyafw)
+- [652bc3b](https://github.com/gulpjs/vinyl/commit/652bc3bd3cc7a6af5d21d8d759a01cee3ce46acf) Fix some broken links in README.md (@tatsuyafw)
+
+### v1.0.0 (2015/09/25 22:40 +00:00)
+- [dbe943d](https://github.com/gulpjs/vinyl/commit/dbe943dad575b04995f38a35bd27962f54dc8217) 1.0.0 (@contra)
+- [0b64336](https://github.com/gulpjs/vinyl/commit/0b643367289db0cfefc6c628eff2be4ee019405c) correct url (@contra)
+- [#60](https://github.com/gulpjs/vinyl/pull/60) remove <br> from README.md (@bobintornado)
+- [d9ae5ea](https://github.com/gulpjs/vinyl/commit/d9ae5eab010fd15094c8a0260a25d1244f17df79) remove <br> from README.md (@bobintornado)
+
+### v0.5.3 (2015/09/03 00:20 +00:00)
+- [6f19648](https://github.com/gulpjs/vinyl/commit/6f19648bd67040bfd0dc755ad031e1e5e0b58429) 0.5.3 (@contra)
+- [0fe8da7](https://github.com/gulpjs/vinyl/commit/0fe8da757a862bb956d88dec03ab6f99ca895f7f) add isVinyl function (@contra)
+
+### v0.5.1 (2015/08/04 21:26 +00:00)
+- [81692ec](https://github.com/gulpjs/vinyl/commit/81692ece22eb3b927dba74fedb54a2acb65a36eb) 0.5.1 (@contra)
+- [#58](https://github.com/gulpjs/vinyl/pull/58) use Buffer.isBuffer instead of instanceof (@whyrusleeping)
+- [7293a71](https://github.com/gulpjs/vinyl/commit/7293a71b9daf177d9b9f600f3acf00a73b95107c) condense isBuffer module to a one liner (@whyrusleeping)
+- [e7208e2](https://github.com/gulpjs/vinyl/commit/e7208e2c27029405c7c9cf9c9a3263cdf1e0dfb8) also remove old comment (@whyrusleeping)
+- [b4ac64b](https://github.com/gulpjs/vinyl/commit/b4ac64b85ce28093f576db4f006264438f546cb8) use Buffer.isBuffer instead of instanceof (@whyrusleeping)
+- [#54](https://github.com/gulpjs/vinyl/pull/54) Fix file clone options (@danielhusar)
+- [4b42095](https://github.com/gulpjs/vinyl/commit/4b42095d8e0cb4351a503da67752da15e6b59570) Fix file clone options (@danielhusar)
+- [04f681e](https://github.com/gulpjs/vinyl/commit/04f681e4af8ffb99ea3a0a3eab1cc79793887560) closes #50 and #51 (@contra)
+
+### v0.5.0 (2015/06/03 23:44 +00:00)
+- [8fea984](https://github.com/gulpjs/vinyl/commit/8fea9843e6b2aca820ccfee394927ca073f88a05) 0.5.0 (@contra)
+- [#52](https://github.com/gulpjs/vinyl/pull/52) Add explicit newlines to readme (@jeremyruppel)
+- [027142c](https://github.com/gulpjs/vinyl/commit/027142cf62a3f0a68f4659a612ee782b24c00198) Add explicit newlines to readme (@jeremyruppel)
+- [#46](https://github.com/gulpjs/vinyl/pull/46) Add dirname, basename and extname getters (@jeremyruppel)
+- [e09817f](https://github.com/gulpjs/vinyl/commit/e09817f15e4ddfc28e1b3452bbca5e2ba1fc2f19) Add dirname, basename and extname accessors (@jeremyruppel)
+- [#49](https://github.com/gulpjs/vinyl/pull/49) update license attribute (@pgilad)
+- [e5b2670](https://github.com/gulpjs/vinyl/commit/e5b2670af205ca0fb6f589a396b89ab2845a91ac) update license attribut (@pgilad)
+- [55f90e3](https://github.com/gulpjs/vinyl/commit/55f90e3763af84c7eb599bd6403dbe14f63d5513) dep updates (@contra)
+- [#48](https://github.com/gulpjs/vinyl/pull/48) Update docs for `path` and `history` (@jmm)
+- [231f32a](https://github.com/gulpjs/vinyl/commit/231f32a375aa9147d0a41ffd1ace773c45e66ee5) Document `path`. (@jmm)
+- [93df183](https://github.com/gulpjs/vinyl/commit/93df18374b62de32c76862baf73e92f33b04882a) Document `options.history`. (@jmm)
+- [2ed6a01](https://github.com/gulpjs/vinyl/commit/2ed6a012c03a78b46f9d41034969898a15fdfe15) Correct `options.path` default value docs. (@jmm)
+- [edf1ecb](https://github.com/gulpjs/vinyl/commit/edf1ecb0698f355e137f9361a9a9a2581ca485e5) Document `history`. (@jmm)
+- [#45](https://github.com/gulpjs/vinyl/pull/45) Update dependencies and devDependencies (@shinnn)
+- [f1f9dfb](https://github.com/gulpjs/vinyl/commit/f1f9dfbb1346b608226e5847161bf48e0caa2c1e) update test script (@shinnn)
+- [0737ef4](https://github.com/gulpjs/vinyl/commit/0737ef489f9cfffa2494b06edaab9a032f00eb7e) update dependencies and devDependencies (@shinnn)
+- [#43](https://github.com/gulpjs/vinyl/pull/43) Document `file.clone()` arguments (@pascalduez)
+- [3c5e95d](https://github.com/gulpjs/vinyl/commit/3c5e95d5f482ea9f28dd2d78b83166723cd121bb) Document `file.clone()` arguments (@pascalduez)
+
+### v0.4.6 (2014/12/03 06:15 +00:00)
+- [8255a5f](https://github.com/gulpjs/vinyl/commit/8255a5f1de7fecb1cd5e7ba7ac1ec997395f6be1) 0.4.6 (@contra)
+- [37dafeb](https://github.com/gulpjs/vinyl/commit/37dafeb8cb0b33424e77fe67a094517925be2bef) dep update (@contra)
+
+### v0.4.5 (2014/11/13 23:23 +00:00)
+- [a7a8c68](https://github.com/gulpjs/vinyl/commit/a7a8c68a1df914b1f486a54a97b68e9186699d33) 0.4.5 (@contra)
+- [ec094b4](https://github.com/gulpjs/vinyl/commit/ec094b43e36512894142baacef26dfffc5827114) reduce size by switching off lodash (@contra)
+
+### v0.4.4 (2014/11/13 22:59 +00:00)
+- [61834c9](https://github.com/gulpjs/vinyl/commit/61834c9429f2e6883a18f377bc5893031ea1c94f) 0.4.4 (@contra)
+- [fd887b3](https://github.com/gulpjs/vinyl/commit/fd887b3d21ed47c2b4cf40b0c0ed7b2df9048b09) ignore some files for size reasons (@contra)
+- [#37](https://github.com/gulpjs/vinyl/pull/37) Don't package coverage into NPM (@Dapperbot)
+- [9b811b8](https://github.com/gulpjs/vinyl/commit/9b811b86529e2b4b0cc20936a6697b3d9df503a2) Don't package coverage into NPM (@lotyrin)
+
+### v0.4.3 (2014/09/01 18:17 +00:00)
+- [6eae432](https://github.com/gulpjs/vinyl/commit/6eae432519b007c313a8df83b093adfb97a2944c) 0.4.3 (@contra)
+- [d220c85](https://github.com/gulpjs/vinyl/commit/d220c857259f0070ab38c7b50d90f184a919e472) fix funky history passing, closes #35 (@contra)
+
+### v0.4.2 (2014/08/29 15:58 +00:00)
+- [f33d6d5](https://github.com/gulpjs/vinyl/commit/f33d6d5c1b9d1f83e238521651114beb90a01019) 0.4.2 (@contra)
+- [cd0d042](https://github.com/gulpjs/vinyl/commit/cd0d04272297363f27f8456818dbf675618939c3) remove native clone (@contra)
+- [e4d8b99](https://github.com/gulpjs/vinyl/commit/e4d8b99c21a50700afd17173e1f3a2076e6fe860) minor speed enhancements (@contra)
+- [2353e39](https://github.com/gulpjs/vinyl/commit/2353e3996ac67629da92c2af906bdfdbc6978065) minor speed ups (@contra)
+
+### v0.4.1 (2014/08/29 14:34 +00:00)
+- [0014b9b](https://github.com/gulpjs/vinyl/commit/0014b9bf4166fb5cbe94c439201752cda7991a70) 0.4.1 (@contra)
+- [0142513](https://github.com/gulpjs/vinyl/commit/0142513b0727ad6a018b0944fea2bb4966d8bbfa) fix history cloning bug (@contra)
+
+### v0.4.0 (2014/08/29 07:07 +00:00)
+- [80d3f61](https://github.com/gulpjs/vinyl/commit/80d3f61445b347fc1c34f462f0ab800644e90e04) 0.4.0 (@contra)
+- [#33](https://github.com/gulpjs/vinyl/pull/33) Clone stream (@popomore)
+- [d37b57b](https://github.com/gulpjs/vinyl/commit/d37b57bba0aa1fba18d9fecec3513ac4e61b27cd) coverage 100% :sparkles: (@popomore)
+- [b5a62f0](https://github.com/gulpjs/vinyl/commit/b5a62f0ede71bdeae957e8653e6ccbdca998879c) fix testcase and delete duplicate testcase (@popomore)
+- [fb1b15d](https://github.com/gulpjs/vinyl/commit/fb1b15da472647743eb4e829b99f64d6d9f751fa) Adding more test (@nfroidure)
+- [acea889](https://github.com/gulpjs/vinyl/commit/acea8894e9d983d8037641b4ff6f08b666056979) Fixing the clone method (@nfroidure)
+- [#32](https://github.com/gulpjs/vinyl/pull/32) improve clone (@popomore)
+- [037e830](https://github.com/gulpjs/vinyl/commit/037e8300b75fdddf9c3e003fd205da7ec13b9157) object should multiline (@popomore)
+- [7724121](https://github.com/gulpjs/vinyl/commit/7724121194a4ac94fb23a0048ff926d00a784ecc) pass jshint (@popomore)
+- [f76a921](https://github.com/gulpjs/vinyl/commit/f76a9211b8b495d81074884d8ea6454a20bba349) use node-v8-clone for performance, fallback to lodash #29 (@popomore)
+- [7638f07](https://github.com/gulpjs/vinyl/commit/7638f072bf33a427ec8324a0fb463f73cb9fc8f2) option to not clone buffer #16 (@popomore)
+- [6bfd73c](https://github.com/gulpjs/vinyl/commit/6bfd73cc459907a06ce9affc373599ffb8130c08) copy all attributes deeply #29 (@popomore)
+- [b34f813](https://github.com/gulpjs/vinyl/commit/b34f8135d47e0a2ba3be6f769729ba66931b3234) add testcase for clone history (@popomore)
+- [a913edf](https://github.com/gulpjs/vinyl/commit/a913edf1dd91c5bdcfc9ff3149a94eae131006aa) fix mixed quote and unused variable (@popomore)
+
+### v0.3.3 (2014/08/28 13:50 +00:00)
+- [c801d3d](https://github.com/gulpjs/vinyl/commit/c801d3dc354383cf2656338d63908ec2983e3612) 0.3.3 (@contra)
+- [f13970e](https://github.com/gulpjs/vinyl/commit/f13970e3cc5d1d730f94316daeee5b5c0e6c00f3) fix jshint on tests (@contra)
+- [6186101](https://github.com/gulpjs/vinyl/commit/61861017bc22a786a026730cf5c55d23c657abea) closes #31 (@contra)
+- [#24](https://github.com/gulpjs/vinyl/pull/24) path get/set for recording path change (@popomore)
+- [6eab1c4](https://github.com/gulpjs/vinyl/commit/6eab1c4f1376aec901d8869d3d410953f1c93e9f) done (@contra)
+
+### v0.3.2 (2014/07/30 23:22 +00:00)
+- [44ef836](https://github.com/gulpjs/vinyl/commit/44ef8369e1a0a7ba01da4608d01166c5a5d8cbe1) 0.3.2 (@contra)
+- [ae28ff2](https://github.com/gulpjs/vinyl/commit/ae28ff200c034e9a40babb38886cdc7ef97a0f25) oops, thats what i get for coding from a car (@contra)
+
+### v0.3.1 (2014/07/30 22:35 +00:00)
+- [03b7578](https://github.com/gulpjs/vinyl/commit/03b75789e58b43bdaef9ca166e4062b8ccfdefb9) 0.3.1 (@contra)
+- [64850ff](https://github.com/gulpjs/vinyl/commit/64850ffdf4d31b35ac1160d0d495644cadd52914) fix deep deps, closes #28 (@contra)
+
+### v0.3.0 (2014/07/19 04:57 +00:00)
+- [dcb77f3](https://github.com/gulpjs/vinyl/commit/dcb77f3246d1011a430c20f883eb89c520206ca6) 0.3.0 (@contra)
+- [#27](https://github.com/gulpjs/vinyl/pull/27) Clone custom properties (@vweevers)
+- [95710de](https://github.com/gulpjs/vinyl/commit/95710de62f4c1234a244a6818b5e39d92ea7b9a8) fix relative path test for windows (@vweevers)
+- [e493187](https://github.com/gulpjs/vinyl/commit/e493187b3f2fd1485077f09e73e669407ac077d3) clone custom properties (@laurelnaiad)
+- [e50ceac](https://github.com/gulpjs/vinyl/commit/e50ceacfc3daa825e111976ba4192cb93c80bfe2) throw when set path is null (@popomore)
+- [7c71bf3](https://github.com/gulpjs/vinyl/commit/7c71bf3d806a98730a0ce5edd56c0b8f1f42e8f0) remove initialize of this.path (@popomore)
+- [d95023f](https://github.com/gulpjs/vinyl/commit/d95023f6604a990d38e4f5b332c7916ceb012366) delete this._path :tongue: (@popomore)
+- [f3f9be0](https://github.com/gulpjs/vinyl/commit/f3f9be0f3d76b4125353cd936731f70015d44284) path get/set for recording path change #19 (@popomore)
+- [#21](https://github.com/gulpjs/vinyl/pull/21) LICENSE: Remove executable mode (@felixrabe)
+- [#22](https://github.com/gulpjs/vinyl/pull/22) Travis: Dump node 0.9 - travis-ci/travis-ci#2251 (@felixrabe)
+- [70a2193](https://github.com/gulpjs/vinyl/commit/70a219346c00e0db6be1a0aa55c183e7d5b80ad1) Travis: Dump node 0.9 - travis-ci/travis-ci#2251 (@felixrabe)
+- [460eed5](https://github.com/gulpjs/vinyl/commit/460eed58de9cb04d44e35b6bebbfbaea9146015f) LICENSE: Remove executable mode (@felixrabe)
+- [#18](https://github.com/gulpjs/vinyl/pull/18) fix typo (@vvakame)
+- [1783e7f](https://github.com/gulpjs/vinyl/commit/1783e7f031ecfb118ee9b43971a72be264caa144) fix typo (@vvakame)
+- [#11](https://github.com/gulpjs/vinyl/pull/11) Correct README about pipe's end option. (@shuhei)
+- [1824ec9](https://github.com/gulpjs/vinyl/commit/1824ec9cefd276557b7338dfdbd54922599f020a) Correct README about pipe's end option. (@shuhei)
+- [f49b9c3](https://github.com/gulpjs/vinyl/commit/f49b9c325229754229726ed530c579e4ac23252b) remove dead line (@contra)
+- [1ca8e46](https://github.com/gulpjs/vinyl/commit/1ca8e463259c2a395d5d41b528b04a89a953f6b7) dep update, new coveralls stuff (@contra)
+- [f00767b](https://github.com/gulpjs/vinyl/commit/f00767bf8b61ca8a7b25f3ebd3dde297fa2dafd7) bump (@contra)
+- [#8](https://github.com/gulpjs/vinyl/pull/8) Correct File.clone() treatment of File.stats (@hughsk)
+- [bc3acf7](https://github.com/gulpjs/vinyl/commit/bc3acf7b1ed712d70e7d8cb4f6e5248124743ec7) Add test for new File.clone() functionality (@hughsk)
+- [dd668fb](https://github.com/gulpjs/vinyl/commit/dd668fb5aaed02cfb0f63a58f027c937dd7e0467) Use clone-stats module to clone fs.Stats instances. (@hughsk)
+- [b6244c5](https://github.com/gulpjs/vinyl/commit/b6244c52d3bf9bd87bd6b926f0486f407627f7e0) Correct File.clone() treatment of File.stats (@hughsk)
+- [796ba8b](https://github.com/gulpjs/vinyl/commit/796ba8b5ddd658fed3393c7d0a0d7bea7befa1b1) 0.2.1 - fixes #2 (@contra)
+- [bffa6a4](https://github.com/gulpjs/vinyl/commit/bffa6a4e323e18e084b5b1444b4537aa3fb3e109) vinyl-fs movement? (@contra)
+- [cfaa0a0](https://github.com/gulpjs/vinyl/commit/cfaa0a02b7794e493f600d1d36b288294a278e6c) fix isDirectory tests (@contra)
+- [05d1f1b](https://github.com/gulpjs/vinyl/commit/05d1f1b741960cce8e8d2702d326ebb0187935ad) add isDirectory (@contra)
+- [76580e5](https://github.com/gulpjs/vinyl/commit/76580e573870885580ac00dd9175e562d008cb81) bump to 0.1.0 (@contra)
+- [f7a15c4](https://github.com/gulpjs/vinyl/commit/f7a15c41ac5e82de930e161f6b109ae3336d337b) readme 0.9+ (@contra)
+- [fc7f192](https://github.com/gulpjs/vinyl/commit/fc7f1925b2a18466f19db062ad28df02f1db823b) drop 0.8 support (@contra)
+- [c004b6c](https://github.com/gulpjs/vinyl/commit/c004b6c857d03a292e8ecd5020ad0420d82dbf1e) target 0.8+ (@contra)
+- [edf20bd](https://github.com/gulpjs/vinyl/commit/edf20bd8563fca6e8a568b9d08fb728f6705573c) add small example (@contra)
+- [d8c63fe](https://github.com/gulpjs/vinyl/commit/d8c63fe0fd16cf13db2d9a6452c979ec12779428) 0.0.1 (@contra) \ No newline at end of file
diff --git a/node_modules/vinyl-fs/node_modules/vinyl/LICENSE b/node_modules/vinyl-fs/node_modules/vinyl/LICENSE
new file mode 100644
index 000000000..4f482f9ba
--- /dev/null
+++ b/node_modules/vinyl-fs/node_modules/vinyl/LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2013 Fractal <contact@wearefractal.com>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/vinyl-fs/node_modules/vinyl/README.md b/node_modules/vinyl-fs/node_modules/vinyl/README.md
new file mode 100644
index 000000000..d4d2c6136
--- /dev/null
+++ b/node_modules/vinyl-fs/node_modules/vinyl/README.md
@@ -0,0 +1,265 @@
+# vinyl [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Dependency Status][depstat-image]][depstat-url]
+
+## Information
+<table><tr><td>Package</td><td>vinyl</td></tr><tr><td>Description</td><td>A virtual file format</td></tr><tr><td>Node Version</td><td>>= 0.9</td></tr></table>
+
+## What is this?
+Read this for more info about how this plays into the grand scheme of things [https://medium.com/@eschoff/3828e8126466](https://medium.com/@eschoff/3828e8126466)
+
+## File
+
+```javascript
+var File = require('vinyl');
+
+var coffeeFile = new File({
+ cwd: "/",
+ base: "/test/",
+ path: "/test/file.coffee",
+ contents: new Buffer("test = 123")
+});
+```
+
+### isVinyl
+When checking if an object is a vinyl file, you should not use instanceof. Use the isVinyl function instead.
+
+```js
+var File = require('vinyl');
+
+var dummy = new File({stuff});
+var notAFile = {};
+
+File.isVinyl(dummy); // true
+File.isVinyl(notAFile); // false
+```
+
+### isCustomProp
+Vinyl checks if a property is not managed internally, such as `sourceMap`. This is than used in `constructor(options)` when setting, and `clone()` when copying properties.
+
+```js
+var File = require('vinyl');
+
+File.isCustomProp('sourceMap'); // true
+File.isCustomProp('path'); // false -> internal getter/setter
+```
+
+Read more in [Extending Vinyl](#extending-vinyl).
+
+### constructor(options)
+#### options.cwd
+Type: `String`<br><br>Default: `process.cwd()`
+
+#### options.base
+Used for relative pathing. Typically where a glob starts.
+
+Type: `String`<br><br>Default: `options.cwd`
+
+#### options.path
+Full path to the file.
+
+Type: `String`<br><br>Default: `undefined`
+
+#### options.history
+Path history. Has no effect if `options.path` is passed.
+
+Type: `Array`<br><br>Default: `options.path ? [options.path] : []`
+
+#### options.stat
+The result of an fs.stat call. See [fs.Stats](http://nodejs.org/api/fs.html#fs_class_fs_stats) for more information.
+
+Type: `fs.Stats`<br><br>Default: `null`
+
+#### options.contents
+File contents.
+
+Type: `Buffer, Stream, or null`<br><br>Default: `null`
+
+#### options.{custom}
+Any other option properties will just be assigned to the new File object.
+
+```js
+var File = require('vinyl');
+
+var file = new File({foo: 'bar'});
+file.foo === 'bar'; // true
+```
+
+### isBuffer()
+Returns true if file.contents is a Buffer.
+
+### isStream()
+Returns true if file.contents is a Stream.
+
+### isNull()
+Returns true if file.contents is null.
+
+### clone([opt])
+Returns a new File object with all attributes cloned.<br>By default custom attributes are deep-cloned.
+
+If opt or opt.deep is false, custom attributes will not be deep-cloned.
+
+If opt.contents is false, it will copy file.contents Buffer's reference.
+
+### pipe(stream[, opt])
+If file.contents is a Buffer, it will write it to the stream.
+
+If file.contents is a Stream, it will pipe it to the stream.
+
+If file.contents is null, it will do nothing.
+
+If opt.end is false, the destination stream will not be ended (same as node core).
+
+Returns the stream.
+
+### inspect()
+Returns a pretty String interpretation of the File. Useful for console.log.
+
+### contents
+The [Stream](https://nodejs.org/api/stream.html#stream_stream) or [Buffer](https://nodejs.org/api/buffer.html#buffer_class_buffer) of the file as it was passed in via options, or as the result of modification.
+
+For example:
+
+```js
+if (file.isBuffer()) {
+ console.log(file.contents.toString()); // logs out the string of contents
+}
+```
+
+### path
+Absolute pathname string or `undefined`. Setting to a different value pushes the old value to `history`.
+
+### history
+Array of `path` values the file object has had, from `history[0]` (original) through `history[history.length - 1]` (current). `history` and its elements should normally be treated as read-only and only altered indirectly by setting `path`.
+
+### relative
+Returns path.relative for the file base and file path.
+
+Example:
+
+```javascript
+var file = new File({
+ cwd: "/",
+ base: "/test/",
+ path: "/test/file.coffee"
+});
+
+console.log(file.relative); // file.coffee
+```
+
+### dirname
+Gets and sets path.dirname for the file path.
+
+Example:
+
+```javascript
+var file = new File({
+ cwd: "/",
+ base: "/test/",
+ path: "/test/file.coffee"
+});
+
+console.log(file.dirname); // /test
+
+file.dirname = '/specs';
+
+console.log(file.dirname); // /specs
+console.log(file.path); // /specs/file.coffee
+```
+
+### basename
+Gets and sets path.basename for the file path.
+
+Example:
+
+```javascript
+var file = new File({
+ cwd: "/",
+ base: "/test/",
+ path: "/test/file.coffee"
+});
+
+console.log(file.basename); // file.coffee
+
+file.basename = 'file.js';
+
+console.log(file.basename); // file.js
+console.log(file.path); // /test/file.js
+```
+
+### stem
+Gets and sets stem (filename without suffix) for the file path.
+
+Example:
+
+```javascript
+var file = new File({
+ cwd: "/",
+ base: "/test/",
+ path: "/test/file.coffee"
+});
+
+console.log(file.stem); // file
+
+file.stem = 'foo';
+
+console.log(file.stem); // foo
+console.log(file.path); // /test/foo.coffee
+```
+
+### extname
+Gets and sets path.extname for the file path.
+
+Example:
+
+```javascript
+var file = new File({
+ cwd: "/",
+ base: "/test/",
+ path: "/test/file.coffee"
+});
+
+console.log(file.extname); // .coffee
+
+file.extname = '.js';
+
+console.log(file.extname); // .js
+console.log(file.path); // /test/file.js
+```
+
+## Extending Vinyl
+When extending Vinyl into your own class with extra features, you need to think about a few things.
+
+When you have your own properties that are managed internally, you need to extend the static `isCustomProp` method to return `false` when one of these properties is queried.
+
+```js
+const File = require('vinyl');
+
+const builtInProps = ['foo', '_foo'];
+
+class SuperFile extends File {
+ constructor(options) {
+ super(options);
+ this._foo = 'example internal read-only value';
+ }
+
+ get foo() {
+ return this._foo;
+ }
+
+ static isCustomProp(name) {
+ return super.isCustomProp(name) && builtInProps.indexOf(name) === -1;
+ }
+}
+```
+
+This makes properties `foo` and `_foo` ignored when cloning, and when passed in options to `constructor(options)` so they don't get assigned to the new object.
+
+Same goes for `clone()`. If you have your own internal stuff that needs special handling during cloning, you should extend it to do so.
+
+[npm-url]: https://npmjs.org/package/vinyl
+[npm-image]: https://badge.fury.io/js/vinyl.svg
+[travis-url]: https://travis-ci.org/gulpjs/vinyl
+[travis-image]: https://travis-ci.org/gulpjs/vinyl.svg?branch=master
+[coveralls-url]: https://coveralls.io/github/gulpjs/vinyl
+[coveralls-image]: https://coveralls.io/repos/github/gulpjs/vinyl/badge.svg
+[depstat-url]: https://david-dm.org/gulpjs/vinyl
+[depstat-image]: https://david-dm.org/gulpjs/vinyl.svg
diff --git a/node_modules/vinyl-fs/node_modules/vinyl/index.js b/node_modules/vinyl-fs/node_modules/vinyl/index.js
new file mode 100644
index 000000000..5a1fe551d
--- /dev/null
+++ b/node_modules/vinyl-fs/node_modules/vinyl/index.js
@@ -0,0 +1,270 @@
+var path = require('path');
+var clone = require('clone');
+var cloneStats = require('clone-stats');
+var cloneBuffer = require('./lib/cloneBuffer');
+var isBuffer = require('./lib/isBuffer');
+var isStream = require('./lib/isStream');
+var isNull = require('./lib/isNull');
+var inspectStream = require('./lib/inspectStream');
+var Stream = require('stream');
+var replaceExt = require('replace-ext');
+
+var builtInFields = [
+ '_contents', 'contents', 'stat', 'history', 'path', 'base', 'cwd',
+];
+
+function File(file) {
+ var self = this;
+
+ if (!file) {
+ file = {};
+ }
+
+ // Record path change
+ var history = file.path ? [file.path] : file.history;
+ this.history = history || [];
+
+ this.cwd = file.cwd || process.cwd();
+ this.base = file.base || this.cwd;
+
+ // Stat = files stats object
+ this.stat = file.stat || null;
+
+ // Contents = stream, buffer, or null if not read
+ this.contents = file.contents || null;
+
+ this._isVinyl = true;
+
+ // Set custom properties
+ Object.keys(file).forEach(function(key) {
+ if (self.constructor.isCustomProp(key)) {
+ self[key] = file[key];
+ }
+ });
+}
+
+File.prototype.isBuffer = function() {
+ return isBuffer(this.contents);
+};
+
+File.prototype.isStream = function() {
+ return isStream(this.contents);
+};
+
+File.prototype.isNull = function() {
+ return isNull(this.contents);
+};
+
+// TODO: Should this be moved to vinyl-fs?
+File.prototype.isDirectory = function() {
+ return this.isNull() && this.stat && this.stat.isDirectory();
+};
+
+File.prototype.clone = function(opt) {
+ var self = this;
+
+ if (typeof opt === 'boolean') {
+ opt = {
+ deep: opt,
+ contents: true,
+ };
+ } else if (!opt) {
+ opt = {
+ deep: true,
+ contents: true,
+ };
+ } else {
+ opt.deep = opt.deep === true;
+ opt.contents = opt.contents !== false;
+ }
+
+ // Clone our file contents
+ var contents;
+ if (this.isStream()) {
+ contents = this.contents.pipe(new Stream.PassThrough());
+ this.contents = this.contents.pipe(new Stream.PassThrough());
+ } else if (this.isBuffer()) {
+ contents = opt.contents ? cloneBuffer(this.contents) : this.contents;
+ }
+
+ var file = new this.constructor({
+ cwd: this.cwd,
+ base: this.base,
+ stat: (this.stat ? cloneStats(this.stat) : null),
+ history: this.history.slice(),
+ contents: contents,
+ });
+
+ // Clone our custom properties
+ Object.keys(this).forEach(function(key) {
+ if (self.constructor.isCustomProp(key)) {
+ file[key] = opt.deep ? clone(self[key], true) : self[key];
+ }
+ });
+ return file;
+};
+
+File.prototype.pipe = function(stream, opt) {
+ if (!opt) {
+ opt = {};
+ }
+ if (typeof opt.end === 'undefined') {
+ opt.end = true;
+ }
+
+ if (this.isStream()) {
+ return this.contents.pipe(stream, opt);
+ }
+ if (this.isBuffer()) {
+ if (opt.end) {
+ stream.end(this.contents);
+ } else {
+ stream.write(this.contents);
+ }
+ return stream;
+ }
+
+ // Check if isNull
+ if (opt.end) {
+ stream.end();
+ }
+ return stream;
+};
+
+File.prototype.inspect = function() {
+ var inspect = [];
+
+ // Use relative path if possible
+ var filePath = (this.base && this.path) ? this.relative : this.path;
+
+ if (filePath) {
+ inspect.push('"' + filePath + '"');
+ }
+
+ if (this.isBuffer()) {
+ inspect.push(this.contents.inspect());
+ }
+
+ if (this.isStream()) {
+ inspect.push(inspectStream(this.contents));
+ }
+
+ return '<File ' + inspect.join(' ') + '>';
+};
+
+File.isCustomProp = function(key) {
+ return builtInFields.indexOf(key) === -1;
+};
+
+File.isVinyl = function(file) {
+ return (file && file._isVinyl === true) || false;
+};
+
+// Virtual attributes
+// Or stuff with extra logic
+Object.defineProperty(File.prototype, 'contents', {
+ get: function() {
+ return this._contents;
+ },
+ set: function(val) {
+ if (!isBuffer(val) && !isStream(val) && !isNull(val)) {
+ throw new Error('File.contents can only be a Buffer, a Stream, or null.');
+ }
+ this._contents = val;
+ },
+});
+
+// TODO: Should this be moved to vinyl-fs?
+Object.defineProperty(File.prototype, 'relative', {
+ get: function() {
+ if (!this.base) {
+ throw new Error('No base specified! Can not get relative.');
+ }
+ if (!this.path) {
+ throw new Error('No path specified! Can not get relative.');
+ }
+ return path.relative(this.base, this.path);
+ },
+ set: function() {
+ throw new Error('File.relative is generated from the base and path attributes. Do not modify it.');
+ },
+});
+
+Object.defineProperty(File.prototype, 'dirname', {
+ get: function() {
+ if (!this.path) {
+ throw new Error('No path specified! Can not get dirname.');
+ }
+ return path.dirname(this.path);
+ },
+ set: function(dirname) {
+ if (!this.path) {
+ throw new Error('No path specified! Can not set dirname.');
+ }
+ this.path = path.join(dirname, path.basename(this.path));
+ },
+});
+
+Object.defineProperty(File.prototype, 'basename', {
+ get: function() {
+ if (!this.path) {
+ throw new Error('No path specified! Can not get basename.');
+ }
+ return path.basename(this.path);
+ },
+ set: function(basename) {
+ if (!this.path) {
+ throw new Error('No path specified! Can not set basename.');
+ }
+ this.path = path.join(path.dirname(this.path), basename);
+ },
+});
+
+// Property for getting/setting stem of the filename.
+Object.defineProperty(File.prototype, 'stem', {
+ get: function() {
+ if (!this.path) {
+ throw new Error('No path specified! Can not get stem.');
+ }
+ return path.basename(this.path, this.extname);
+ },
+ set: function(stem) {
+ if (!this.path) {
+ throw new Error('No path specified! Can not set stem.');
+ }
+ this.path = path.join(path.dirname(this.path), stem + this.extname);
+ },
+});
+
+Object.defineProperty(File.prototype, 'extname', {
+ get: function() {
+ if (!this.path) {
+ throw new Error('No path specified! Can not get extname.');
+ }
+ return path.extname(this.path);
+ },
+ set: function(extname) {
+ if (!this.path) {
+ throw new Error('No path specified! Can not set extname.');
+ }
+ this.path = replaceExt(this.path, extname);
+ },
+});
+
+Object.defineProperty(File.prototype, 'path', {
+ get: function() {
+ return this.history[this.history.length - 1];
+ },
+ set: function(path) {
+ if (typeof path !== 'string') {
+ throw new Error('path should be string');
+ }
+
+ // Record history only when path changed
+ if (path && path !== this.path) {
+ this.history.push(path);
+ }
+ },
+});
+
+module.exports = File;
diff --git a/node_modules/vinyl-fs/node_modules/vinyl/lib/cloneBuffer.js b/node_modules/vinyl-fs/node_modules/vinyl/lib/cloneBuffer.js
new file mode 100644
index 000000000..89f09eda1
--- /dev/null
+++ b/node_modules/vinyl-fs/node_modules/vinyl/lib/cloneBuffer.js
@@ -0,0 +1,7 @@
+var Buffer = require('buffer').Buffer;
+
+module.exports = function(buf) {
+ var out = new Buffer(buf.length);
+ buf.copy(out);
+ return out;
+};
diff --git a/node_modules/vinyl-fs/node_modules/vinyl/lib/inspectStream.js b/node_modules/vinyl-fs/node_modules/vinyl/lib/inspectStream.js
new file mode 100644
index 000000000..942f23d8c
--- /dev/null
+++ b/node_modules/vinyl-fs/node_modules/vinyl/lib/inspectStream.js
@@ -0,0 +1,15 @@
+var isStream = require('./isStream');
+
+module.exports = function(stream) {
+ if (!isStream(stream)) {
+ return;
+ }
+
+ var streamType = stream.constructor.name;
+ // Avoid StreamStream
+ if (streamType === 'Stream') {
+ streamType = '';
+ }
+
+ return '<' + streamType + 'Stream>';
+};
diff --git a/node_modules/vinyl-fs/node_modules/vinyl/lib/isBuffer.js b/node_modules/vinyl-fs/node_modules/vinyl/lib/isBuffer.js
new file mode 100644
index 000000000..8a767d174
--- /dev/null
+++ b/node_modules/vinyl-fs/node_modules/vinyl/lib/isBuffer.js
@@ -0,0 +1 @@
+module.exports = require('buffer').Buffer.isBuffer;
diff --git a/node_modules/vinyl-fs/node_modules/vinyl/lib/isNull.js b/node_modules/vinyl-fs/node_modules/vinyl/lib/isNull.js
new file mode 100644
index 000000000..7f22c63ae
--- /dev/null
+++ b/node_modules/vinyl-fs/node_modules/vinyl/lib/isNull.js
@@ -0,0 +1,3 @@
+module.exports = function(v) {
+ return v === null;
+};
diff --git a/node_modules/vinyl-fs/node_modules/vinyl/lib/isStream.js b/node_modules/vinyl-fs/node_modules/vinyl/lib/isStream.js
new file mode 100644
index 000000000..6b54e123b
--- /dev/null
+++ b/node_modules/vinyl-fs/node_modules/vinyl/lib/isStream.js
@@ -0,0 +1,5 @@
+var Stream = require('stream').Stream;
+
+module.exports = function(o) {
+ return !!o && o instanceof Stream;
+};
diff --git a/node_modules/vinyl-fs/node_modules/vinyl/package.json b/node_modules/vinyl-fs/node_modules/vinyl/package.json
new file mode 100644
index 000000000..b4c815761
--- /dev/null
+++ b/node_modules/vinyl-fs/node_modules/vinyl/package.json
@@ -0,0 +1,44 @@
+{
+ "name": "vinyl",
+ "description": "A virtual file format",
+ "version": "1.2.0",
+ "homepage": "http://github.com/gulpjs/vinyl",
+ "repository": "git://github.com/gulpjs/vinyl.git",
+ "author": "Fractal <contact@wearefractal.com> (http://wearefractal.com/)",
+ "main": "./index.js",
+ "files": [
+ "index.js",
+ "lib"
+ ],
+ "dependencies": {
+ "clone": "^1.0.0",
+ "clone-stats": "^0.0.1",
+ "replace-ext": "0.0.1"
+ },
+ "devDependencies": {
+ "buffer-equal": "0.0.1",
+ "eslint": "^1.7.3",
+ "eslint-config-gulp": "^2.0.0",
+ "event-stream": "^3.1.0",
+ "github-changes": "^1.0.1",
+ "istanbul": "^0.3.0",
+ "istanbul-coveralls": "^1.0.1",
+ "jscs": "^2.3.5",
+ "jscs-preset-gulp": "^1.0.0",
+ "lodash.templatesettings": "^3.1.0",
+ "mocha": "^2.0.0",
+ "rimraf": "^2.2.5",
+ "should": "^7.0.0"
+ },
+ "scripts": {
+ "lint": "eslint . && jscs *.js lib/ test/",
+ "pretest": "npm run lint",
+ "test": "mocha",
+ "coveralls": "istanbul cover _mocha && istanbul-coveralls",
+ "changelog": "github-changes -o gulpjs -r vinyl -b master -f ./CHANGELOG.md --order-semver --use-commit-body"
+ },
+ "engines": {
+ "node": ">= 0.9"
+ },
+ "license": "MIT"
+}
diff --git a/node_modules/vinyl-fs/package.json b/node_modules/vinyl-fs/package.json
new file mode 100644
index 000000000..d1c513dbe
--- /dev/null
+++ b/node_modules/vinyl-fs/package.json
@@ -0,0 +1,61 @@
+{
+ "name": "vinyl-fs",
+ "description": "Vinyl adapter for the file system",
+ "version": "2.4.4",
+ "homepage": "http://github.com/wearefractal/vinyl-fs",
+ "repository": "git://github.com/wearefractal/vinyl-fs.git",
+ "author": "Fractal <contact@wearefractal.com> (http://wearefractal.com/)",
+ "main": "./index.js",
+ "files": [
+ "index.js",
+ "lib"
+ ],
+ "dependencies": {
+ "duplexify": "^3.2.0",
+ "glob-stream": "^5.3.2",
+ "graceful-fs": "^4.0.0",
+ "gulp-sourcemaps": "1.6.0",
+ "is-valid-glob": "^0.3.0",
+ "lazystream": "^1.0.0",
+ "lodash.isequal": "^4.0.0",
+ "merge-stream": "^1.0.0",
+ "mkdirp": "^0.5.0",
+ "object-assign": "^4.0.0",
+ "readable-stream": "^2.0.4",
+ "strip-bom": "^2.0.0",
+ "strip-bom-stream": "^1.0.0",
+ "through2": "^2.0.0",
+ "through2-filter": "^2.0.0",
+ "vali-date": "^1.0.0",
+ "vinyl": "^1.0.0"
+ },
+ "devDependencies": {
+ "buffer-equal": "^0.0.1",
+ "default-resolution": "^1.0.1",
+ "del": "^2.2.0",
+ "eslint": "^1.10.3",
+ "eslint-config-gulp": "^2.0.0",
+ "expect": "^1.14.0",
+ "github-changes": "^1.0.1",
+ "istanbul": "^0.3.0",
+ "istanbul-coveralls": "^1.0.1",
+ "jscs": "^2.4.0",
+ "jscs-preset-gulp": "^1.0.0",
+ "mocha": "^2.0.0",
+ "mocha-lcov-reporter": "^1.0.0",
+ "rimraf": "^2.2.5",
+ "should": "^7.0.0",
+ "sinon": "^1.10.3"
+ },
+ "scripts": {
+ "lint": "eslint . && jscs index.js lib/ test/",
+ "test": "npm run lint && mocha",
+ "cover": "istanbul cover _mocha",
+ "coveralls": "npm run cover && istanbul-coveralls",
+ "changelog": "github-changes -o gulpjs -r vinyl-fs -b master -f ./CHANGELOG.md --order-semver --use-commit-body"
+ },
+ "engines": {
+ "node": ">=0.10"
+ },
+ "license": "MIT"
+}