@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();
@@ -1716,18 +1704,13 @@ var OPFS = class {
1716
1704
  if (fileHandle) {
1717
1705
  let buffer;
1718
1706
  if (this.useSync) {
1719
- const releaseLock = await fileLockManager.acquire(resolvedPath);
1707
+ const access = await fileHandle.createSyncAccessHandle();
1720
1708
  try {
1721
- const access = await fileHandle.createSyncAccessHandle();
1722
- try {
1723
- const size = access.getSize();
1724
- buffer = new Uint8Array(size);
1725
- access.read(buffer);
1726
- } finally {
1727
- access.close();
1728
- }
1709
+ const size = access.getSize();
1710
+ buffer = new Uint8Array(size);
1711
+ access.read(buffer);
1729
1712
  } finally {
1730
- releaseLock();
1713
+ access.close();
1731
1714
  }
1732
1715
  } else {
1733
1716
  const file = await fileHandle.getFile();
@@ -1785,18 +1768,13 @@ var OPFS = class {
1785
1768
  }
1786
1769
  let buffer;
1787
1770
  if (this.useSync) {
1788
- const releaseLock = await fileLockManager.acquire(resolvedPath);
1771
+ const access = await fileHandle.createSyncAccessHandle();
1789
1772
  try {
1790
- const access = await fileHandle.createSyncAccessHandle();
1791
- try {
1792
- const size = access.getSize();
1793
- buffer = new Uint8Array(size);
1794
- access.read(buffer);
1795
- } finally {
1796
- access.close();
1797
- }
1773
+ const size = access.getSize();
1774
+ buffer = new Uint8Array(size);
1775
+ access.read(buffer);
1798
1776
  } finally {
1799
- releaseLock();
1777
+ access.close();
1800
1778
  }
1801
1779
  } else {
1802
1780
  const file = await fileHandle.getFile();
@@ -1829,17 +1807,12 @@ var OPFS = class {
1829
1807
  const { fileHandle } = await this.handleManager.getHandle(resolvedPath, { create: true });
1830
1808
  const buffer = typeof data === "string" ? new TextEncoder().encode(data) : data;
1831
1809
  if (this.useSync) {
1832
- const releaseLock = await fileLockManager.acquire(resolvedPath);
1810
+ const access = await fileHandle.createSyncAccessHandle();
1833
1811
  try {
1834
- const access = await fileHandle.createSyncAccessHandle();
1835
- try {
1836
- access.truncate(buffer.length);
1837
- access.write(buffer, { at: 0 });
1838
- } finally {
1839
- access.close();
1840
- }
1812
+ access.truncate(buffer.length);
1813
+ access.write(buffer, { at: 0 });
1841
1814
  } finally {
1842
- releaseLock();
1815
+ access.close();
1843
1816
  }
1844
1817
  } else {
1845
1818
  const writable = await fileHandle.createWritable();
@@ -2453,16 +2426,11 @@ var OPFS = class {
2453
2426
  const { fileHandle } = await this.handleManager.getHandle(resolvedPath);
2454
2427
  if (!fileHandle) throw createENOENT(path);
2455
2428
  if (this.useSync) {
2456
- const releaseLock = await fileLockManager.acquire(resolvedPath);
2429
+ const access = await fileHandle.createSyncAccessHandle();
2457
2430
  try {
2458
- const access = await fileHandle.createSyncAccessHandle();
2459
- try {
2460
- access.truncate(len);
2461
- } finally {
2462
- access.close();
2463
- }
2431
+ access.truncate(len);
2464
2432
  } finally {
2465
- releaseLock();
2433
+ access.close();
2466
2434
  }
2467
2435
  } else {
2468
2436
  const file = await fileHandle.getFile();