From 44f4f4d96bbab328bea1b7d996daa2a7e5ee54ec Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Thu, 3 Oct 2024 15:07:31 -0700 Subject: [PATCH] fix(Assets): infinite loop on file delete --- server/api/projectfiles.ts | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/server/api/projectfiles.ts b/server/api/projectfiles.ts index 067f3a17..8efbce85 100644 --- a/server/api/projectfiles.ts +++ b/server/api/projectfiles.ts @@ -1084,20 +1084,23 @@ async function removeProjectFilesInternal(projectID: string, fileIDs: string[]) throw new Error("Missing Cloudflare credentials"); } + const parentFiles = await ProjectFile.find({ + projectID, + fileID: { $in: fileIDs }, + }).lean() as ProjectFileInterface[]; + async function resolveAllChildren(searchFileIDs: string[]): Promise { - const files = (await ProjectFile.find({ - fileID: { - $in: searchFileIDs - }, + const files = await ProjectFile.find({ projectID, - }).lean()) as ProjectFileInterface[]; + parent: { $in: searchFileIDs }, + }).lean() as ProjectFileInterface[]; if (!files?.length) return []; - const children = await resolveAllChildren(files.map((f) => f.fileID)); + const children = await resolveAllChildren(files.map((o) => o.fileID).filter((o) => o)); return files.concat(children); } - const objsToDelete = await resolveAllChildren(fileIDs); + const objsToDelete = (await resolveAllChildren(fileIDs)).concat(parentFiles); const allFileIds = objsToDelete.map((o => o.fileID)); const filesToDelete = objsToDelete