@componentor/fs 1.2.5 → 1.2.7

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.
@@ -145,52 +145,40 @@ function segments(path) {
145
145
  // src/handle-manager.ts
146
146
  var FILE_HANDLE_POOL_SIZE = 50;
147
147
  var DIR_CACHE_MAX_SIZE = 200;
148
- var FileLockManager = class {
149
- locks = /* @__PURE__ */ new Map();
150
- lockResolvers = /* @__PURE__ */ new Map();
151
- waitQueues = /* @__PURE__ */ new Map();
152
- /**
153
- * Acquire an exclusive lock on a file path.
154
- * If the file is already locked, waits until it's released.
155
- * Returns a release function that MUST be called when done.
156
- */
148
+ var FileLock = class {
149
+ active = /* @__PURE__ */ new Set();
150
+ queues = /* @__PURE__ */ new Map();
157
151
  async acquire(path) {
158
- const normalizedPath = normalize(path);
159
- while (this.locks.has(normalizedPath)) {
160
- await this.locks.get(normalizedPath);
152
+ if (!this.active.has(path)) {
153
+ this.active.add(path);
154
+ return this.createRelease(path);
161
155
  }
162
- let resolve;
163
- const lockPromise = new Promise((r) => {
164
- resolve = r;
156
+ await new Promise((resolve) => {
157
+ let queue = this.queues.get(path);
158
+ if (!queue) {
159
+ queue = [];
160
+ this.queues.set(path, queue);
161
+ }
162
+ queue.push(resolve);
165
163
  });
166
- this.locks.set(normalizedPath, lockPromise);
167
- this.lockResolvers.set(normalizedPath, resolve);
164
+ return this.createRelease(path);
165
+ }
166
+ createRelease(path) {
168
167
  return () => {
169
- const resolver = this.lockResolvers.get(normalizedPath);
170
- this.locks.delete(normalizedPath);
171
- this.lockResolvers.delete(normalizedPath);
172
- if (resolver) resolver();
168
+ const queue = this.queues.get(path);
169
+ if (queue && queue.length > 0) {
170
+ const next = queue.shift();
171
+ if (queue.length === 0) {
172
+ this.queues.delete(path);
173
+ }
174
+ next();
175
+ } else {
176
+ this.active.delete(path);
177
+ }
173
178
  };
174
179
  }
175
- /**
176
- * Check if a file is currently locked
177
- */
178
- isLocked(path) {
179
- return this.locks.has(normalize(path));
180
- }
181
- /**
182
- * Clear all locks (use with caution, mainly for cleanup)
183
- */
184
- clearAll() {
185
- for (const resolver of this.lockResolvers.values()) {
186
- resolver();
187
- }
188
- this.locks.clear();
189
- this.lockResolvers.clear();
190
- this.waitQueues.clear();
191
- }
192
180
  };
193
- var fileLockManager = new FileLockManager();
181
+ var fileLock = new FileLock();
194
182
  var HandleManager = class {
195
183
  rootPromise;
196
184
  dirCache = /* @__PURE__ */ new Map();
@@ -448,7 +436,7 @@ var SymlinkManager = class {
448
436
  if (!fileHandle) return;
449
437
  const buffer = new TextEncoder().encode(data);
450
438
  if (this.useSync) {
451
- const releaseLock = await fileLockManager.acquire(SYMLINK_FILE);
439
+ const release = await fileLock.acquire(SYMLINK_FILE);
452
440
  try {
453
441
  const access = await fileHandle.createSyncAccessHandle();
454
442
  try {
@@ -461,7 +449,7 @@ var SymlinkManager = class {
461
449
  access.close();
462
450
  }
463
451
  } finally {
464
- releaseLock();
452
+ release();
465
453
  }
466
454
  } else {
467
455
  const writable = await fileHandle.createWritable();
@@ -744,7 +732,7 @@ var PackedStorage = class {
744
732
  return {};
745
733
  }
746
734
  if (this.useSync) {
747
- const releaseLock = await fileLockManager.acquire(PACK_FILE);
735
+ const release = await fileLock.acquire(PACK_FILE);
748
736
  try {
749
737
  const access = await fileHandle.createSyncAccessHandle();
750
738
  try {
@@ -772,7 +760,7 @@ var PackedStorage = class {
772
760
  access.close();
773
761
  }
774
762
  } finally {
775
- releaseLock();
763
+ release();
776
764
  }
777
765
  } else {
778
766
  const file = await fileHandle.getFile();
@@ -826,7 +814,7 @@ var PackedStorage = class {
826
814
  if (!fileHandle) return null;
827
815
  let buffer;
828
816
  if (this.useSync) {
829
- const releaseLock = await fileLockManager.acquire(PACK_FILE);
817
+ const release = await fileLock.acquire(PACK_FILE);
830
818
  try {
831
819
  const access = await fileHandle.createSyncAccessHandle();
832
820
  try {
@@ -836,7 +824,7 @@ var PackedStorage = class {
836
824
  access.close();
837
825
  }
838
826
  } finally {
839
- releaseLock();
827
+ release();
840
828
  }
841
829
  } else {
842
830
  const file = await fileHandle.getFile();
@@ -876,7 +864,7 @@ var PackedStorage = class {
876
864
  }
877
865
  const decompressPromises = [];
878
866
  if (this.useSync) {
879
- const releaseLock = await fileLockManager.acquire(PACK_FILE);
867
+ const release = await fileLock.acquire(PACK_FILE);
880
868
  try {
881
869
  const access = await fileHandle.createSyncAccessHandle();
882
870
  try {
@@ -893,7 +881,7 @@ var PackedStorage = class {
893
881
  access.close();
894
882
  }
895
883
  } finally {
896
- releaseLock();
884
+ release();
897
885
  }
898
886
  } else {
899
887
  const file = await fileHandle.getFile();
@@ -981,7 +969,7 @@ var PackedStorage = class {
981
969
  const { fileHandle } = await this.handleManager.getHandle(PACK_FILE, { create: true });
982
970
  if (!fileHandle) return;
983
971
  if (this.useSync) {
984
- const releaseLock = await fileLockManager.acquire(PACK_FILE);
972
+ const release = await fileLock.acquire(PACK_FILE);
985
973
  try {
986
974
  const access = await fileHandle.createSyncAccessHandle();
987
975
  try {
@@ -991,7 +979,7 @@ var PackedStorage = class {
991
979
  access.close();
992
980
  }
993
981
  } finally {
994
- releaseLock();
982
+ release();
995
983
  }
996
984
  } else {
997
985
  const writable = await fileHandle.createWritable();
@@ -1012,7 +1000,7 @@ var PackedStorage = class {
1012
1000
  const encoder = new TextEncoder();
1013
1001
  const newIndexBuf = encoder.encode(JSON.stringify(index));
1014
1002
  if (this.useSync) {
1015
- const releaseLock = await fileLockManager.acquire(PACK_FILE);
1003
+ const release = await fileLock.acquire(PACK_FILE);
1016
1004
  try {
1017
1005
  const access = await fileHandle.createSyncAccessHandle();
1018
1006
  try {
@@ -1045,7 +1033,7 @@ var PackedStorage = class {
1045
1033
  access.close();
1046
1034
  }
1047
1035
  } finally {
1048
- releaseLock();
1036
+ release();
1049
1037
  }
1050
1038
  } else {
1051
1039
  const file = await fileHandle.getFile();
@@ -1310,18 +1298,13 @@ var OPFS = class {
1310
1298
  if (fileHandle) {
1311
1299
  let buffer;
1312
1300
  if (this.useSync) {
1313
- const releaseLock = await fileLockManager.acquire(resolvedPath);
1301
+ const access = await fileHandle.createSyncAccessHandle();
1314
1302
  try {
1315
- const access = await fileHandle.createSyncAccessHandle();
1316
- try {
1317
- const size = access.getSize();
1318
- buffer = new Uint8Array(size);
1319
- access.read(buffer);
1320
- } finally {
1321
- access.close();
1322
- }
1303
+ const size = access.getSize();
1304
+ buffer = new Uint8Array(size);
1305
+ access.read(buffer);
1323
1306
  } finally {
1324
- releaseLock();
1307
+ access.close();
1325
1308
  }
1326
1309
  } else {
1327
1310
  const file = await fileHandle.getFile();
@@ -1379,18 +1362,13 @@ var OPFS = class {
1379
1362
  }
1380
1363
  let buffer;
1381
1364
  if (this.useSync) {
1382
- const releaseLock = await fileLockManager.acquire(resolvedPath);
1365
+ const access = await fileHandle.createSyncAccessHandle();
1383
1366
  try {
1384
- const access = await fileHandle.createSyncAccessHandle();
1385
- try {
1386
- const size = access.getSize();
1387
- buffer = new Uint8Array(size);
1388
- access.read(buffer);
1389
- } finally {
1390
- access.close();
1391
- }
1367
+ const size = access.getSize();
1368
+ buffer = new Uint8Array(size);
1369
+ access.read(buffer);
1392
1370
  } finally {
1393
- releaseLock();
1371
+ access.close();
1394
1372
  }
1395
1373
  } else {
1396
1374
  const file = await fileHandle.getFile();
@@ -1423,17 +1401,12 @@ var OPFS = class {
1423
1401
  const { fileHandle } = await this.handleManager.getHandle(resolvedPath, { create: true });
1424
1402
  const buffer = typeof data === "string" ? new TextEncoder().encode(data) : data;
1425
1403
  if (this.useSync) {
1426
- const releaseLock = await fileLockManager.acquire(resolvedPath);
1404
+ const access = await fileHandle.createSyncAccessHandle();
1427
1405
  try {
1428
- const access = await fileHandle.createSyncAccessHandle();
1429
- try {
1430
- access.truncate(buffer.length);
1431
- access.write(buffer, { at: 0 });
1432
- } finally {
1433
- access.close();
1434
- }
1406
+ access.truncate(buffer.length);
1407
+ access.write(buffer, { at: 0 });
1435
1408
  } finally {
1436
- releaseLock();
1409
+ access.close();
1437
1410
  }
1438
1411
  } else {
1439
1412
  const writable = await fileHandle.createWritable();
@@ -2047,16 +2020,11 @@ var OPFS = class {
2047
2020
  const { fileHandle } = await this.handleManager.getHandle(resolvedPath);
2048
2021
  if (!fileHandle) throw createENOENT(path);
2049
2022
  if (this.useSync) {
2050
- const releaseLock = await fileLockManager.acquire(resolvedPath);
2023
+ const access = await fileHandle.createSyncAccessHandle();
2051
2024
  try {
2052
- const access = await fileHandle.createSyncAccessHandle();
2053
- try {
2054
- access.truncate(len);
2055
- } finally {
2056
- access.close();
2057
- }
2025
+ access.truncate(len);
2058
2026
  } finally {
2059
- releaseLock();
2027
+ access.close();
2060
2028
  }
2061
2029
  } else {
2062
2030
  const file = await fileHandle.getFile();