index.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. 'use strict';
  2. var Stream = require('stream');
  3. var Path = require('path');
  4. function gulpRename(obj) {
  5. var stream = new Stream.Transform({objectMode: true});
  6. function parsePath(path) {
  7. var extname = Path.extname(path);
  8. return {
  9. dirname: Path.dirname(path),
  10. basename: Path.basename(path, extname),
  11. extname: extname
  12. };
  13. }
  14. stream._transform = function(file, unused, callback) {
  15. var parsedPath = parsePath(file.relative);
  16. var path;
  17. var type = typeof obj;
  18. if (type === 'string' && obj !== '') {
  19. path = obj;
  20. } else if (type === 'function') {
  21. obj(parsedPath);
  22. path = Path.join(parsedPath.dirname, parsedPath.basename + parsedPath.extname);
  23. } else if (type === 'object' && obj !== undefined && obj !== null) {
  24. var dirname = 'dirname' in obj ? obj.dirname : parsedPath.dirname,
  25. prefix = obj.prefix || '',
  26. suffix = obj.suffix || '',
  27. basename = 'basename' in obj ? obj.basename : parsedPath.basename,
  28. extname = 'extname' in obj ? obj.extname : parsedPath.extname;
  29. path = Path.join(dirname, prefix + basename + suffix + extname);
  30. } else {
  31. callback(new Error('Unsupported renaming parameter type supplied'), undefined);
  32. return;
  33. }
  34. file.path = Path.join(file.base, path);
  35. // Rename sourcemap if present
  36. if (file.sourceMap) {
  37. file.sourceMap.file = file.relative;
  38. }
  39. callback(null, file);
  40. };
  41. return stream;
  42. }
  43. module.exports = gulpRename;