diff --git a/lib/fileOps/fileOps.js b/lib/fileOps/fileOps.js index 556220bf..251991a3 100644 --- a/lib/fileOps/fileOps.js +++ b/lib/fileOps/fileOps.js @@ -5,17 +5,20 @@ const path = require("path"); * Returns the newest file in a directory * * @param {string} directory - The directory to look for the newest file in. - * @returns {string|null} + * @param {function(string): boolean} filter - + * Optional function to filter out files to ignore. Should return true + * if the file is to be considered. + * @returns {?string} * Name of the file with the newest timestamp or null if the * directory contains no files. */ -async function getNewestFile(directory) { +async function getNewestFile(directory, filter = (name) => true) { let newestTime = new Date(0); let newestFile = null; for (let entry of await fs.readdir(directory, { withFileTypes: true })) { if (entry.isFile()) { let stat = await fs.stat(path.join(directory, entry.name)); - if (stat.mtime > newestTime) { + if (filter(entry.name) && stat.mtime > newestTime) { newestTime = stat.mtime; newestFile = entry.name; } diff --git a/test/lib/fileOps/fileOps.js b/test/lib/fileOps/fileOps.js index 1ed8608c..a97ef57b 100644 --- a/test/lib/fileOps/fileOps.js +++ b/test/lib/fileOps/fileOps.js @@ -21,6 +21,10 @@ describe("fileOps.js", function(){ let newest = await fileOps.getNewestFile(path.join(baseDir, "test")); assert.equal(typeof newest, "string"); }); + it("returns null if all entries were filtered out", async function() { + let newest = await fileOps.getNewestFile(path.join(baseDir, "test"), (name) => !name.endsWith(".txt")); + assert.equal(newest, null); + }); it("returns null if directory is empty", async function() { let newest = await fileOps.getNewestFile(path.join(baseDir, "test", "folder")); assert.equal(newest, null);