index.js 1.7 KB

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