From 62cd6e574b89a5bfa75dc52ef2383fddf5cbc87a Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Wed, 1 Mar 2023 21:11:36 -0400 Subject: display original file size in image overlay --- src/util/node-utils.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'src/util/node-utils.js') diff --git a/src/util/node-utils.js b/src/util/node-utils.js index 76684827..6c75bab6 100644 --- a/src/util/node-utils.js +++ b/src/util/node-utils.js @@ -1,5 +1,6 @@ // Utility functions which are only relevant to particular Node.js constructs. +import {readdir} from 'fs/promises'; import {fileURLToPath} from 'url'; import * as path from 'path'; @@ -54,3 +55,24 @@ export function isMain(importMetaURL) { isIndexJS && 'index.js' ].includes(relative); } + +// Like readdir... but it's recursive! +export function traverse(startDirPath, { + filterFile = () => true, + filterDir = () => true +} = {}) { + const recursive = (names, subDirPath) => + Promise.all( + names.map((name) => + readdir(path.join(startDirPath, subDirPath, name)).then( + (names) => + filterDir(name) + ? recursive(names, path.join(subDirPath, name)) + : [], + () => (filterFile(name) ? [path.join(subDirPath, name)] : []) + ) + ) + ).then((pathArrays) => pathArrays.flatMap((x) => x)); + + return readdir(startDirPath).then((names) => recursive(names, '')); +} -- cgit 1.3.0-6-gf8a5