index.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. 'use strict';
  2. var defaults = require('defaults');
  3. var through = require('through2');
  4. var gs = require('glob-stream');
  5. var File = require('vinyl');
  6. var getContents = require('./getContents');
  7. var getStats = require('./getStats');
  8. function createFile (globFile, enc, cb) {
  9. cb(null, new File(globFile));
  10. }
  11. function src(glob, opt) {
  12. opt = opt || {};
  13. var pass = through.obj();
  14. if (!isValidGlob(glob)) {
  15. throw new Error('Invalid glob argument: ' + glob);
  16. }
  17. // return dead stream if empty array
  18. if (Array.isArray(glob) && glob.length === 0) {
  19. process.nextTick(pass.end.bind(pass));
  20. return pass;
  21. }
  22. var options = defaults(opt, {
  23. read: true,
  24. buffer: true
  25. });
  26. var globStream = gs.create(glob, options);
  27. // when people write to use just pass it through
  28. var outputStream = globStream
  29. .pipe(through.obj(createFile))
  30. .pipe(getStats(options));
  31. if (options.read !== false) {
  32. outputStream = outputStream
  33. .pipe(getContents(options));
  34. }
  35. return outputStream.pipe(pass);
  36. }
  37. function isValidGlob(glob) {
  38. if (typeof glob === 'string') {
  39. return true;
  40. }
  41. if (Array.isArray(glob) && glob.length !== 0) {
  42. return glob.every(isValidGlob);
  43. }
  44. if (Array.isArray(glob) && glob.length === 0) {
  45. return true;
  46. }
  47. return false;
  48. }
  49. module.exports = src;