const debug = require("debug")("streamroller:fileNameFormatter"); const path = require("path"); const ZIP_EXT = ".gz"; const DEFAULT_FILENAME_SEP = "."; module.exports = ({ file, keepFileExt, needsIndex, alwaysIncludeDate, compress, fileNameSep }) => { let FILENAME_SEP = fileNameSep || DEFAULT_FILENAME_SEP; const dirAndName = path.join(file.dir, file.name); const ext = f => f + file.ext; const index = (f, i, d) => (needsIndex || !d) && i ? f + FILENAME_SEP + i : f; const date = (f, i, d) => { return (i > 0 || alwaysIncludeDate) && d ? f + FILENAME_SEP + d : f; }; const gzip = (f, i) => (i && compress ? f + ZIP_EXT : f); const parts = keepFileExt ? [date, index, ext, gzip] : [ext, date, index, gzip]; return ({ date, index }) => { debug(`_formatFileName: date=${date}, index=${index}`); return parts.reduce( (filename, part) => part(filename, index, date), dirAndName ); }; };