@lacrous/omnicloud 0.2.11 → 0.2.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1998,6 +1998,23 @@ var FileService = class {
1998
1998
  }
1999
1999
  };
2000
2000
 
2001
+ // ../core/src/utils/folder-order.ts
2002
+ function deepestFirst(folderIds, folders) {
2003
+ const byId = new Map(folders.map((folder) => [folder.id, folder]));
2004
+ const depthOf = (id) => {
2005
+ let depth = 0;
2006
+ const seen = /* @__PURE__ */ new Set();
2007
+ let cursor = byId.get(id)?.parentId ?? null;
2008
+ while (cursor !== null && !seen.has(cursor)) {
2009
+ seen.add(cursor);
2010
+ depth += 1;
2011
+ cursor = byId.get(cursor)?.parentId ?? null;
2012
+ }
2013
+ return depth;
2014
+ };
2015
+ return [...folderIds].sort((a, b) => depthOf(b) - depthOf(a));
2016
+ }
2017
+
2001
2018
  // ../core/src/services/folder-service.ts
2002
2019
  var FolderService = class {
2003
2020
  constructor(folders, files, engineFor, activity = noopActivityRecorder) {
@@ -2204,7 +2221,10 @@ var FolderService = class {
2204
2221
  const remainingFolderIds = new Set(
2205
2222
  affected.filter((file) => !removedFileIds.includes(file.id)).map((file) => file.folderId)
2206
2223
  );
2207
- const deletable = folderIds.filter((folderId) => !remainingFolderIds.has(folderId));
2224
+ const deletable = deepestFirst(
2225
+ folderIds.filter((folderId) => !remainingFolderIds.has(folderId)),
2226
+ subtree
2227
+ );
2208
2228
  if (deletable.length > 0) {
2209
2229
  await this.folders.deleteMany(deletable);
2210
2230
  }
@@ -2385,22 +2405,13 @@ var TrashService = class {
2385
2405
  }
2386
2406
  const allFolders = await this.folders.listByUser(userId);
2387
2407
  const trashedFolders = allFolders.filter((folder) => folder.deletedAt !== null);
2388
- const depth = (folder) => {
2389
- let level = 0;
2390
- let cursor = folder.parentId;
2391
- const seen = /* @__PURE__ */ new Set();
2392
- while (cursor !== null && !seen.has(cursor)) {
2393
- seen.add(cursor);
2394
- const parent = allFolders.find((candidate) => candidate.id === cursor);
2395
- if (!parent) break;
2396
- level += 1;
2397
- cursor = parent.parentId;
2398
- }
2399
- return level;
2400
- };
2401
- trashedFolders.sort((a, b) => depth(a) - depth(b));
2408
+ const orderedIds = deepestFirst(
2409
+ trashedFolders.map((folder) => folder.id),
2410
+ allFolders
2411
+ );
2402
2412
  let deletedFolders = 0;
2403
- for (const folder of trashedFolders) {
2413
+ for (const folderId of orderedIds) {
2414
+ const folder = trashedFolders.find((candidate) => candidate.id === folderId);
2404
2415
  const stillHasFiles = await this.files.query(
2405
2416
  userId,
2406
2417
  { folderId: folder.id, trashed: true },