var map = require("map-stream"), Path = require("path"); module.exports = function (obj) { "use strict"; function parsePath(path) { var extname = Path.extname(path); return { dirname: Path.dirname(path), basename: Path.basename(path, extname), extname: extname }; } function rename(file, callback) { var parsedPath = parsePath(file.relative); var path; var type = typeof obj; if (type === "string" && obj !== "") { path = obj; } else if (type === "function") { var result = obj(parsedPath) || parsedPath; path = Path.join(result.dirname, result.basename + result.extname); } else if (type === "object" && obj !== undefined && obj !== null) { var dirname = 'dirname' in obj ? obj.dirname : parsedPath.dirname, prefix = obj.prefix || "", suffix = obj.suffix || "", basename = 'basename' in obj ? obj.basename : parsedPath.basename, extname = 'extname' in obj ? obj.extname : parsedPath.extname; path = Path.join(dirname, prefix + basename + suffix + extname); } else { callback(new Error("Unsupported renaming parameter type supplied"), undefined); return; } file.path = Path.join(file.base, path); callback(null, file); } return map(rename); };