fix: list-directory returns flat array, drop defensive fallback

The list-directory handler returned { path, entries } while the
renderer typed result.data as FileEntry[]; the file-store had to fall
back to raw.entries via Array.isArray. Extract the entries builder into
src/main/files/list-directory.js so it can be unit-tested, return a
plain array, and skip entries that can't be stat'd (broken symlinks,
permission errors) instead of throwing.

Also tighten jest config so dist/*.snap electron-builder artifacts are
not matched as test suites.
This commit is contained in:
2026-07-23 09:34:57 +05:30
parent 772a791d9a
commit f1f8a16a79
5 changed files with 128 additions and 23 deletions
+2 -16
View File
@@ -13,6 +13,7 @@ const WordTemplateExporter = require('./word-template');
const PDFOperations = require('./PDFOperations');
const { validatePath, resolveWritablePath, isPathAccessible } = require('./utils/paths');
const fileOps = require('./files');
const { listDirectoryEntries } = require('./files/list-directory');
const menu = require('./menu');
const { createMainWindow } = require('./window');
const MonospaceFontConfig = require('./MonospaceFontConfig');
@@ -3522,22 +3523,7 @@ ipcMain.handle('list-directory', async (event, dirPath) => {
return null;
}
const entries = fs
.readdirSync(validation.resolved, { withFileTypes: true })
.filter((e) => !e.name.startsWith('.'))
.sort((a, b) => {
if (a.isDirectory() && !b.isDirectory()) return -1;
if (!a.isDirectory() && b.isDirectory()) return 1;
return a.name.localeCompare(b.name);
})
.map((e) => ({
name: e.name,
isDirectory: e.isDirectory(),
size: e.isDirectory() ? 0 : fs.statSync(path.join(validation.resolved, e.name)).size,
modified: fs.statSync(path.join(validation.resolved, e.name)).mtimeMs,
path: path.join(validation.resolved, e.name),
}));
return { path: validation.resolved, entries };
return listDirectoryEntries(validation.resolved);
} catch (err) {
console.error('list-directory error:', err);
return null;