From c26a057522d4d3eca3dc4c5ea20e3c5c0812869d Mon Sep 17 00:00:00 2001 From: Eric Mc Sween Date: Wed, 18 May 2022 08:41:39 -0400 Subject: [PATCH] Merge pull request #7932 from overleaf/em-find-bad-filenames Script for finding bad doc and file names in projects GitOrigin-RevId: 21035b9ce847d2c2a3183942458e2b30cc6c3fae --- .../web/scripts/find_malformed_filetrees.js | 58 +++++++++++++++---- 1 file changed, 48 insertions(+), 10 deletions(-) diff --git a/services/web/scripts/find_malformed_filetrees.js b/services/web/scripts/find_malformed_filetrees.js index 16c9758107..203d79fc47 100644 --- a/services/web/scripts/find_malformed_filetrees.js +++ b/services/web/scripts/find_malformed_filetrees.js @@ -34,20 +34,58 @@ function processProject(project) { function findBadPaths(folder) { const result = [] - for (const attr of ['docs', 'fileRefs', 'folders']) { - if (folder[attr] && !Array.isArray(folder[attr])) { - result.push(attr) + + if (typeof folder.name !== 'string' || !folder.name) { + result.push('name') + } + + if (folder.folders) { + if (Array.isArray(folder.folders)) { + for (const [i, subfolder] of folder.folders.entries()) { + if (!subfolder || typeof subfolder !== 'object') { + result.push(`folders.${i}`) + continue + } + for (const badPath of findBadPaths(subfolder)) { + result.push(`folders.${i}.${badPath}`) + } + } + } else { + result.push('folders') } } - if (folder.folders && Array.isArray(folder.folders)) { - for (const [i, subfolder] of folder.folders.entries()) { - if (!subfolder) { - result.push(`folders.${i}`) - continue + + if (folder.docs) { + if (Array.isArray(folder.docs)) { + for (const [i, doc] of folder.docs.entries()) { + if (!doc || typeof doc !== 'object') { + result.push(`docs.${i}`) + continue + } + if (typeof doc.name !== 'string' || !doc.name) { + result.push(`docs.${i}.name`) + continue + } } - for (const badPath of findBadPaths(subfolder)) { - result.push(`folders.${i}.${badPath}`) + } else { + result.push('docs') + } + } + + if (folder.fileRefs) { + if (Array.isArray(folder.fileRefs)) { + for (const [i, file] of folder.fileRefs.entries()) { + if (!file || typeof file !== 'object') { + result.push(`fileRefs.${i}`) + continue + } + if (typeof file.name !== 'string' || !file.name) { + result.push(`fileRefs.${i}.name`) + continue + } } + } else { + result.push('fileRefs') } } return result