@muhgholy/next-drive 4.23.1 → 4.23.2

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.
@@ -3,7 +3,7 @@
3
3
  var formidable = require('formidable');
4
4
  var path = require('path');
5
5
  var fs = require('fs');
6
- var os3 = require('os');
6
+ var os2 = require('os');
7
7
  var crypto2 = require('crypto');
8
8
  var mongoose = require('mongoose');
9
9
  var sharp2 = require('sharp');
@@ -16,7 +16,7 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
16
16
  var formidable__default = /*#__PURE__*/_interopDefault(formidable);
17
17
  var path__default = /*#__PURE__*/_interopDefault(path);
18
18
  var fs__default = /*#__PURE__*/_interopDefault(fs);
19
- var os3__default = /*#__PURE__*/_interopDefault(os3);
19
+ var os2__default = /*#__PURE__*/_interopDefault(os2);
20
20
  var crypto2__default = /*#__PURE__*/_interopDefault(crypto2);
21
21
  var mongoose__default = /*#__PURE__*/_interopDefault(mongoose);
22
22
  var sharp2__default = /*#__PURE__*/_interopDefault(sharp2);
@@ -273,7 +273,7 @@ var driveConfiguration = async (config) => {
273
273
  if (g.migrationPromise) await g.migrationPromise;
274
274
  return g.config;
275
275
  }
276
- const resolvedPath = config.storage?.path || path__default.default.join(os3__default.default.tmpdir(), "next-drive-data");
276
+ const resolvedPath = config.storage?.path || path__default.default.join(os2__default.default.tmpdir(), "next-drive-data");
277
277
  const mode = config.mode || "NORMAL";
278
278
  if (mode === "ROOT") {
279
279
  g.config = {
@@ -1607,7 +1607,7 @@ var driveUpload = async (source, key, options) => {
1607
1607
  const stats = fs__default.default.statSync(source);
1608
1608
  fileSize = stats.size;
1609
1609
  } else if (Buffer.isBuffer(source)) {
1610
- const tempDir = path__default.default.join(os3__default.default.tmpdir(), "next-drive-uploads");
1610
+ const tempDir = path__default.default.join(os2__default.default.tmpdir(), "next-drive-uploads");
1611
1611
  if (!fs__default.default.existsSync(tempDir)) {
1612
1612
  fs__default.default.mkdirSync(tempDir, { recursive: true });
1613
1613
  }
@@ -1616,7 +1616,7 @@ var driveUpload = async (source, key, options) => {
1616
1616
  sourceFilePath = tempFilePath;
1617
1617
  fileSize = source.length;
1618
1618
  } else {
1619
- const tempDir = path__default.default.join(os3__default.default.tmpdir(), "next-drive-uploads");
1619
+ const tempDir = path__default.default.join(os2__default.default.tmpdir(), "next-drive-uploads");
1620
1620
  if (!fs__default.default.existsSync(tempDir)) {
1621
1621
  fs__default.default.mkdirSync(tempDir, { recursive: true });
1622
1622
  }
@@ -1716,6 +1716,81 @@ var driveUpload = async (source, key, options) => {
1716
1716
  }
1717
1717
  }
1718
1718
  };
1719
+ var driveCleanup = async () => {
1720
+ const config = getDriveConfig();
1721
+ const fileDir = path__default.default.join(config.storage.path, "file");
1722
+ if (!fs__default.default.existsSync(fileDir)) {
1723
+ return { removed: [], totalFreedInBytes: 0 };
1724
+ }
1725
+ const folderNames = fs__default.default.readdirSync(fileDir).filter((name) => {
1726
+ const fullPath = path__default.default.join(fileDir, name);
1727
+ return fs__default.default.statSync(fullPath).isDirectory();
1728
+ });
1729
+ if (folderNames.length === 0) {
1730
+ return { removed: [], totalFreedInBytes: 0 };
1731
+ }
1732
+ const getDirSize = (dirPath) => {
1733
+ let size = 0;
1734
+ try {
1735
+ const entries = fs__default.default.readdirSync(dirPath, { withFileTypes: true });
1736
+ for (const entry of entries) {
1737
+ const entryPath = path__default.default.join(dirPath, entry.name);
1738
+ if (entry.isFile()) {
1739
+ size += fs__default.default.statSync(entryPath).size;
1740
+ } else if (entry.isDirectory()) {
1741
+ size += getDirSize(entryPath);
1742
+ }
1743
+ }
1744
+ } catch {
1745
+ }
1746
+ return size;
1747
+ };
1748
+ const BATCH_SIZE = 500;
1749
+ const existingIds = /* @__PURE__ */ new Set();
1750
+ for (let i = 0; i < folderNames.length; i += BATCH_SIZE) {
1751
+ const batch = folderNames.slice(i, i + BATCH_SIZE);
1752
+ const docs = await drive_default.find(
1753
+ { _id: { $in: batch } },
1754
+ { _id: 1 }
1755
+ ).lean();
1756
+ for (const doc of docs) {
1757
+ existingIds.add(doc._id.toString());
1758
+ }
1759
+ }
1760
+ const removed = [];
1761
+ let totalFreedInBytes = 0;
1762
+ for (const name of folderNames) {
1763
+ if (!existingIds.has(name)) {
1764
+ const dirPath = path__default.default.join(fileDir, name);
1765
+ try {
1766
+ totalFreedInBytes += getDirSize(dirPath);
1767
+ fs__default.default.rmSync(dirPath, { recursive: true, force: true });
1768
+ removed.push(name);
1769
+ } catch (e) {
1770
+ console.error(`[next-drive] Failed to remove orphaned folder ${name}:`, e);
1771
+ }
1772
+ }
1773
+ }
1774
+ const tempDir = path__default.default.join(config.storage.path, "temp");
1775
+ if (fs__default.default.existsSync(tempDir)) {
1776
+ try {
1777
+ totalFreedInBytes += getDirSize(tempDir);
1778
+ fs__default.default.rmSync(tempDir, { recursive: true, force: true });
1779
+ } catch (e) {
1780
+ console.error("[next-drive] Failed to remove temp directory:", e);
1781
+ }
1782
+ }
1783
+ const systemTmpDir = path__default.default.join(os2__default.default.tmpdir(), "next-drive-uploads");
1784
+ if (fs__default.default.existsSync(systemTmpDir)) {
1785
+ try {
1786
+ totalFreedInBytes += getDirSize(systemTmpDir);
1787
+ fs__default.default.rmSync(systemTmpDir, { recursive: true, force: true });
1788
+ } catch (e) {
1789
+ console.error("[next-drive] Failed to remove system temp directory:", e);
1790
+ }
1791
+ }
1792
+ return { removed, totalFreedInBytes };
1793
+ };
1719
1794
 
1720
1795
  // src/server/index.ts
1721
1796
  var getProvider = async (req, owner) => {
@@ -2133,7 +2208,7 @@ var driveAPIHandler = async (req, res) => {
2133
2208
  // ** 3. UPLOAD **
2134
2209
  case "upload": {
2135
2210
  if (req.method !== "POST") return res.status(405).json({ status: 405, message: "Only POST allowed" });
2136
- const systemTmpDir = path__default.default.join(os3__default.default.tmpdir(), "next-drive-uploads");
2211
+ const systemTmpDir = path__default.default.join(os2__default.default.tmpdir(), "next-drive-uploads");
2137
2212
  if (!fs__default.default.existsSync(systemTmpDir)) fs__default.default.mkdirSync(systemTmpDir, { recursive: true });
2138
2213
  const form = formidable__default.default({
2139
2214
  multiples: false,
@@ -2169,7 +2244,7 @@ var driveAPIHandler = async (req, res) => {
2169
2244
  }
2170
2245
  const { chunkIndex, totalChunks, driveId, fileName, fileSize: fileSizeInBytes, fileType, folderId } = uploadData.data;
2171
2246
  let currentUploadId = driveId;
2172
- const tempBaseDir = path__default.default.join(os3__default.default.tmpdir(), "next-drive-uploads");
2247
+ const tempBaseDir = path__default.default.join(os2__default.default.tmpdir(), "next-drive-uploads");
2173
2248
  if (!currentUploadId) {
2174
2249
  if (chunkIndex !== 0) return res.status(400).json({ message: "Missing upload ID for non-zero chunk" });
2175
2250
  if (fileType && config.security) {
@@ -2317,7 +2392,7 @@ var driveAPIHandler = async (req, res) => {
2317
2392
  const cancelData = cancelQuerySchema.safeParse(req.query);
2318
2393
  if (!cancelData.success) return res.status(400).json({ status: 400, message: "Invalid ID" });
2319
2394
  const { id } = cancelData.data;
2320
- const tempUploadDir = path__default.default.join(os3__default.default.tmpdir(), "next-drive-uploads", id);
2395
+ const tempUploadDir = path__default.default.join(os2__default.default.tmpdir(), "next-drive-uploads", id);
2321
2396
  if (fs__default.default.existsSync(tempUploadDir)) {
2322
2397
  try {
2323
2398
  fs__default.default.rmSync(tempUploadDir, { recursive: true, force: true });
@@ -2463,6 +2538,7 @@ var driveAPIHandler = async (req, res) => {
2463
2538
  };
2464
2539
 
2465
2540
  exports.driveAPIHandler = driveAPIHandler;
2541
+ exports.driveCleanup = driveCleanup;
2466
2542
  exports.driveConfiguration = driveConfiguration;
2467
2543
  exports.driveDelete = driveDelete;
2468
2544
  exports.driveFilePath = driveFilePath;
@@ -2476,5 +2552,5 @@ exports.driveUpload = driveUpload;
2476
2552
  exports.drive_default = drive_default;
2477
2553
  exports.getDriveConfig = getDriveConfig;
2478
2554
  exports.getDriveInformation = getDriveInformation;
2479
- //# sourceMappingURL=chunk-BGCV4Y2V.cjs.map
2480
- //# sourceMappingURL=chunk-BGCV4Y2V.cjs.map
2555
+ //# sourceMappingURL=chunk-RBLDH7CP.cjs.map
2556
+ //# sourceMappingURL=chunk-RBLDH7CP.cjs.map