Add filter argument to getNewestFile

Add filter predicate to allow filtering out files that are not desired
from getNewestFile.  This is useful for filtering out .tmp.zip files.
This commit is contained in:
Hornwitser committed 2019-12-13 21:39:54 +01:00
1 parent 62afcaadab
commit b24778dce6
2 files changed
+10 -3

No files matched your search

+6 -3
View File
@@ -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;
}
+4
View File
@@ -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);