index.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. var Stream = require("stream"),
  2. Path = require("path");
  3. function gulpRename(obj) {
  4. "use strict";
  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. var result = obj(parsedPath) || parsedPath;
  22. path = Path.join(result.dirname, result.basename + result.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. callback(null, file);
  36. }
  37. return stream;
  38. };
  39. module.exports = gulpRename;