gulp-srcToVariable.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. var through = require('through2');
  2. var gutil = require('gulp-util');
  3. var PluginError = gutil.PluginError;
  4. var path = require('path');
  5. var File = gutil.File;
  6. // Consts
  7. const PLUGIN_NAME = 'gulp-srcToVariable';
  8. var srcToVariable = function srcToVariable(varName, asMap, namingCallback) {
  9. var content;
  10. var firstFile;
  11. namingCallback = namingCallback || function (filename) { return filename; };
  12. function bufferContents(file, enc, cb) {
  13. // ignore empty files
  14. if (file.isNull()) {
  15. cb();
  16. return;
  17. }
  18. // no stream support, only files.
  19. if (file.isStream()) {
  20. this.emit('error', new PluginError('gulp-concat', 'Streaming not supported'));
  21. cb();
  22. return;
  23. }
  24. // set first file if not already set
  25. if (!firstFile) {
  26. firstFile = file;
  27. }
  28. // construct concat instance
  29. if (!content) {
  30. content = "";
  31. }
  32. var name = namingCallback(file.relative);
  33. content += varName + "['" + name + "'] = " + JSON.stringify(file.contents.toString()) + ";\r\n";
  34. cb();
  35. }
  36. function endStream(cb) {
  37. if (!firstFile || !content) {
  38. cb();
  39. return;
  40. }
  41. var joinedPath = path.join(firstFile.base, varName);
  42. var joinedFile = new File({
  43. cwd: firstFile.cwd,
  44. base: firstFile.base,
  45. path: joinedPath,
  46. contents: new Buffer(content)
  47. });
  48. this.push(joinedFile);
  49. cb();
  50. }
  51. return through.obj(bufferContents, endStream);
  52. }
  53. module.exports = srcToVariable;