@lacrous/omnicloud 0.2.11 → 0.2.13
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 +28 -17
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +28 -17
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/server/index.js +29 -18
package/dist/index.js
CHANGED
|
@@ -1409,7 +1409,7 @@ var noopActivityRecorder = {
|
|
|
1409
1409
|
// ../core/src/utils/filename.ts
|
|
1410
1410
|
function sanitizeFileName(name) {
|
|
1411
1411
|
const base = name.split(/[/\\]/).pop() ?? name;
|
|
1412
|
-
const cleaned = base.replace(/[\u0000-\u001f\u007f]/g, "").replace(/[<>:"|?*]/g, "_").trim();
|
|
1412
|
+
const cleaned = base.replace(/[\u0000-\u001f\u007f-\u009f]/g, "").replace(/[\u200B-\u200F\u202A-\u202E\u2066-\u2069\uFEFF]/g, "").replace(/[<>:"|?*]/g, "_").trim();
|
|
1413
1413
|
if (!cleaned || cleaned === "." || cleaned === "..") return "";
|
|
1414
1414
|
return cleaned.slice(0, 255);
|
|
1415
1415
|
}
|
|
@@ -1935,6 +1935,23 @@ var FileService = class {
|
|
|
1935
1935
|
}
|
|
1936
1936
|
};
|
|
1937
1937
|
|
|
1938
|
+
// ../core/src/utils/folder-order.ts
|
|
1939
|
+
function deepestFirst(folderIds, folders) {
|
|
1940
|
+
const byId = new Map(folders.map((folder) => [folder.id, folder]));
|
|
1941
|
+
const depthOf = (id) => {
|
|
1942
|
+
let depth = 0;
|
|
1943
|
+
const seen = /* @__PURE__ */ new Set();
|
|
1944
|
+
let cursor = byId.get(id)?.parentId ?? null;
|
|
1945
|
+
while (cursor !== null && !seen.has(cursor)) {
|
|
1946
|
+
seen.add(cursor);
|
|
1947
|
+
depth += 1;
|
|
1948
|
+
cursor = byId.get(cursor)?.parentId ?? null;
|
|
1949
|
+
}
|
|
1950
|
+
return depth;
|
|
1951
|
+
};
|
|
1952
|
+
return [...folderIds].sort((a, b) => depthOf(b) - depthOf(a));
|
|
1953
|
+
}
|
|
1954
|
+
|
|
1938
1955
|
// ../core/src/services/folder-service.ts
|
|
1939
1956
|
var FolderService = class {
|
|
1940
1957
|
constructor(folders, files, engineFor, activity = noopActivityRecorder) {
|
|
@@ -2141,7 +2158,10 @@ var FolderService = class {
|
|
|
2141
2158
|
const remainingFolderIds = new Set(
|
|
2142
2159
|
affected.filter((file) => !removedFileIds.includes(file.id)).map((file) => file.folderId)
|
|
2143
2160
|
);
|
|
2144
|
-
const deletable =
|
|
2161
|
+
const deletable = deepestFirst(
|
|
2162
|
+
folderIds.filter((folderId) => !remainingFolderIds.has(folderId)),
|
|
2163
|
+
subtree
|
|
2164
|
+
);
|
|
2145
2165
|
if (deletable.length > 0) {
|
|
2146
2166
|
await this.folders.deleteMany(deletable);
|
|
2147
2167
|
}
|
|
@@ -2322,22 +2342,13 @@ var TrashService = class {
|
|
|
2322
2342
|
}
|
|
2323
2343
|
const allFolders = await this.folders.listByUser(userId);
|
|
2324
2344
|
const trashedFolders = allFolders.filter((folder) => folder.deletedAt !== null);
|
|
2325
|
-
const
|
|
2326
|
-
|
|
2327
|
-
|
|
2328
|
-
|
|
2329
|
-
while (cursor !== null && !seen.has(cursor)) {
|
|
2330
|
-
seen.add(cursor);
|
|
2331
|
-
const parent = allFolders.find((candidate) => candidate.id === cursor);
|
|
2332
|
-
if (!parent) break;
|
|
2333
|
-
level += 1;
|
|
2334
|
-
cursor = parent.parentId;
|
|
2335
|
-
}
|
|
2336
|
-
return level;
|
|
2337
|
-
};
|
|
2338
|
-
trashedFolders.sort((a, b) => depth(a) - depth(b));
|
|
2345
|
+
const orderedIds = deepestFirst(
|
|
2346
|
+
trashedFolders.map((folder) => folder.id),
|
|
2347
|
+
allFolders
|
|
2348
|
+
);
|
|
2339
2349
|
let deletedFolders = 0;
|
|
2340
|
-
for (const
|
|
2350
|
+
for (const folderId of orderedIds) {
|
|
2351
|
+
const folder = trashedFolders.find((candidate) => candidate.id === folderId);
|
|
2341
2352
|
const stillHasFiles = await this.files.query(
|
|
2342
2353
|
userId,
|
|
2343
2354
|
{ folderId: folder.id, trashed: true },
|