extract-base-iterator 2.6.1 → 3.0.0

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.
Files changed (81) hide show
  1. package/dist/cjs/DirectoryEntry.d.cts +3 -1
  2. package/dist/cjs/DirectoryEntry.d.ts +3 -1
  3. package/dist/cjs/DirectoryEntry.js +2 -0
  4. package/dist/cjs/DirectoryEntry.js.map +1 -1
  5. package/dist/cjs/FileEntry.d.cts +3 -1
  6. package/dist/cjs/FileEntry.d.ts +3 -1
  7. package/dist/cjs/FileEntry.js.map +1 -1
  8. package/dist/cjs/LinkEntry.d.cts +3 -1
  9. package/dist/cjs/LinkEntry.d.ts +3 -1
  10. package/dist/cjs/LinkEntry.js +2 -0
  11. package/dist/cjs/LinkEntry.js.map +1 -1
  12. package/dist/cjs/SymbolicLinkEntry.d.cts +3 -1
  13. package/dist/cjs/SymbolicLinkEntry.d.ts +3 -1
  14. package/dist/cjs/SymbolicLinkEntry.js +2 -0
  15. package/dist/cjs/SymbolicLinkEntry.js.map +1 -1
  16. package/dist/cjs/fs/chmod.js +1 -4
  17. package/dist/cjs/fs/chmod.js.map +1 -1
  18. package/dist/cjs/fs/chown.js +1 -4
  19. package/dist/cjs/fs/chown.js.map +1 -1
  20. package/dist/cjs/fs/lstatReal.d.cts +1 -1
  21. package/dist/cjs/fs/lstatReal.d.ts +1 -1
  22. package/dist/cjs/fs/lstatReal.js.map +1 -1
  23. package/dist/cjs/fs/lutimes.d.cts +1 -1
  24. package/dist/cjs/fs/lutimes.d.ts +1 -1
  25. package/dist/cjs/fs/lutimes.js.map +1 -1
  26. package/dist/cjs/fs/utimes.d.cts +1 -1
  27. package/dist/cjs/fs/utimes.d.ts +1 -1
  28. package/dist/cjs/fs/utimes.js.map +1 -1
  29. package/dist/cjs/shared/compat.d.cts +0 -1
  30. package/dist/cjs/shared/compat.d.ts +0 -1
  31. package/dist/cjs/shared/compat.js +0 -12
  32. package/dist/cjs/shared/compat.js.map +1 -1
  33. package/dist/cjs/shared/index.d.cts +1 -1
  34. package/dist/cjs/shared/index.d.ts +1 -1
  35. package/dist/cjs/shared/index.js +0 -3
  36. package/dist/cjs/shared/index.js.map +1 -1
  37. package/dist/cjs/shared/streamToString.d.cts +1 -1
  38. package/dist/cjs/shared/streamToString.d.ts +1 -1
  39. package/dist/cjs/shared/streamToString.js.map +1 -1
  40. package/dist/cjs/validateAttributes.d.cts +1 -1
  41. package/dist/cjs/validateAttributes.d.ts +1 -1
  42. package/dist/cjs/validateAttributes.js.map +1 -1
  43. package/dist/cjs/waitForAccess.d.cts +1 -1
  44. package/dist/cjs/waitForAccess.d.ts +1 -1
  45. package/dist/cjs/waitForAccess.js +53 -8
  46. package/dist/cjs/waitForAccess.js.map +1 -1
  47. package/dist/esm/DirectoryEntry.d.ts +3 -1
  48. package/dist/esm/DirectoryEntry.js +2 -0
  49. package/dist/esm/DirectoryEntry.js.map +1 -1
  50. package/dist/esm/FileEntry.d.ts +3 -1
  51. package/dist/esm/FileEntry.js.map +1 -1
  52. package/dist/esm/LinkEntry.d.ts +3 -1
  53. package/dist/esm/LinkEntry.js +2 -0
  54. package/dist/esm/LinkEntry.js.map +1 -1
  55. package/dist/esm/SymbolicLinkEntry.d.ts +3 -1
  56. package/dist/esm/SymbolicLinkEntry.js +2 -0
  57. package/dist/esm/SymbolicLinkEntry.js.map +1 -1
  58. package/dist/esm/fs/chmod.js +1 -4
  59. package/dist/esm/fs/chmod.js.map +1 -1
  60. package/dist/esm/fs/chown.js +1 -4
  61. package/dist/esm/fs/chown.js.map +1 -1
  62. package/dist/esm/fs/lstatReal.d.ts +1 -1
  63. package/dist/esm/fs/lstatReal.js.map +1 -1
  64. package/dist/esm/fs/lutimes.d.ts +1 -1
  65. package/dist/esm/fs/lutimes.js.map +1 -1
  66. package/dist/esm/fs/utimes.d.ts +1 -1
  67. package/dist/esm/fs/utimes.js.map +1 -1
  68. package/dist/esm/shared/compat.d.ts +0 -1
  69. package/dist/esm/shared/compat.js +0 -9
  70. package/dist/esm/shared/compat.js.map +1 -1
  71. package/dist/esm/shared/index.d.ts +1 -1
  72. package/dist/esm/shared/index.js +1 -1
  73. package/dist/esm/shared/index.js.map +1 -1
  74. package/dist/esm/shared/streamToString.d.ts +1 -1
  75. package/dist/esm/shared/streamToString.js.map +1 -1
  76. package/dist/esm/validateAttributes.d.ts +1 -1
  77. package/dist/esm/validateAttributes.js.map +1 -1
  78. package/dist/esm/waitForAccess.d.ts +1 -1
  79. package/dist/esm/waitForAccess.js +46 -6
  80. package/dist/esm/waitForAccess.js.map +1 -1
  81. package/package.json +5 -5
@@ -10,7 +10,7 @@
10
10
  * All utilities support Node.js 0.8+
11
11
  */
12
12
  export { default as BufferList } from './BufferList.js';
13
- export { allocBuffer, allocBufferUnsafe, bufferCompare, bufferConcat, bufferEquals, bufferFrom, bufferSliceCopy, createInflateRawStream, inflateRaw, isNaN, objectAssign, readUInt64LE, setImmediateFn, writeUInt64LE, } from './compat.js';
13
+ export { allocBuffer, allocBufferUnsafe, bufferCompare, bufferConcat, bufferEquals, bufferFrom, bufferSliceCopy, createInflateRawStream, inflateRaw, isNaN, objectAssign, readUInt64LE, writeUInt64LE, } from './compat.js';
14
14
  export { crc32, crc32Region, verifyCrc32, verifyCrc32Region } from './crc32.js';
15
15
  export { default as EntryStream } from './EntryStream.js';
16
16
  export { type CleanupFn, default as Lock } from './Lock.js';
@@ -9,7 +9,7 @@
9
9
  *
10
10
  * All utilities support Node.js 0.8+
11
11
  */ export { default as BufferList } from './BufferList.js';
12
- export { allocBuffer, allocBufferUnsafe, bufferCompare, bufferConcat, bufferEquals, bufferFrom, bufferSliceCopy, createInflateRawStream, inflateRaw, isNaN, objectAssign, readUInt64LE, setImmediateFn, writeUInt64LE } from './compat.js';
12
+ export { allocBuffer, allocBufferUnsafe, bufferCompare, bufferConcat, bufferEquals, bufferFrom, bufferSliceCopy, createInflateRawStream, inflateRaw, isNaN, objectAssign, readUInt64LE, writeUInt64LE } from './compat.js';
13
13
  export { crc32, crc32Region, verifyCrc32, verifyCrc32Region } from './crc32.js';
14
14
  export { default as EntryStream } from './EntryStream.js';
15
15
  export { default as Lock } from './Lock.js';
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/shared/index.ts"],"sourcesContent":["/**\n * Shared utilities for iterator libraries\n *\n * These utilities are designed to be used by:\n * - zip-iterator\n * - 7z-iterator\n * - tar-iterator\n * - Any other archive iterator library\n *\n * All utilities support Node.js 0.8+\n */\n\nexport { default as BufferList } from './BufferList.ts';\nexport {\n allocBuffer,\n allocBufferUnsafe,\n bufferCompare,\n bufferConcat,\n bufferEquals,\n bufferFrom,\n bufferSliceCopy,\n createInflateRawStream,\n inflateRaw,\n isNaN,\n objectAssign,\n readUInt64LE,\n setImmediateFn,\n writeUInt64LE,\n} from './compat.ts';\nexport { crc32, crc32Region, verifyCrc32, verifyCrc32Region } from './crc32.ts';\nexport { default as EntryStream } from './EntryStream.ts';\nexport { type CleanupFn, default as Lock } from './Lock.ts';\nexport { default as normalizePath } from './normalizePath.ts';\nexport { default as streamToString, type StreamToStringCallback } from './streamToString.ts';\n"],"names":["default","BufferList","allocBuffer","allocBufferUnsafe","bufferCompare","bufferConcat","bufferEquals","bufferFrom","bufferSliceCopy","createInflateRawStream","inflateRaw","isNaN","objectAssign","readUInt64LE","setImmediateFn","writeUInt64LE","crc32","crc32Region","verifyCrc32","verifyCrc32Region","EntryStream","Lock","normalizePath","streamToString"],"mappings":"AAAA;;;;;;;;;;CAUC,GAED,SAASA,WAAWC,UAAU,QAAQ,kBAAkB;AACxD,SACEC,WAAW,EACXC,iBAAiB,EACjBC,aAAa,EACbC,YAAY,EACZC,YAAY,EACZC,UAAU,EACVC,eAAe,EACfC,sBAAsB,EACtBC,UAAU,EACVC,KAAK,EACLC,YAAY,EACZC,YAAY,EACZC,cAAc,EACdC,aAAa,QACR,cAAc;AACrB,SAASC,KAAK,EAAEC,WAAW,EAAEC,WAAW,EAAEC,iBAAiB,QAAQ,aAAa;AAChF,SAASnB,WAAWoB,WAAW,QAAQ,mBAAmB;AAC1D,SAAyBpB,WAAWqB,IAAI,QAAQ,YAAY;AAC5D,SAASrB,WAAWsB,aAAa,QAAQ,qBAAqB;AAC9D,SAAStB,WAAWuB,cAAc,QAAqC,sBAAsB"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/shared/index.ts"],"sourcesContent":["/**\n * Shared utilities for iterator libraries\n *\n * These utilities are designed to be used by:\n * - zip-iterator\n * - 7z-iterator\n * - tar-iterator\n * - Any other archive iterator library\n *\n * All utilities support Node.js 0.8+\n */\n\nexport { default as BufferList } from './BufferList.ts';\nexport {\n allocBuffer,\n allocBufferUnsafe,\n bufferCompare,\n bufferConcat,\n bufferEquals,\n bufferFrom,\n bufferSliceCopy,\n createInflateRawStream,\n inflateRaw,\n isNaN,\n objectAssign,\n readUInt64LE,\n writeUInt64LE,\n} from './compat.ts';\nexport { crc32, crc32Region, verifyCrc32, verifyCrc32Region } from './crc32.ts';\nexport { default as EntryStream } from './EntryStream.ts';\nexport { type CleanupFn, default as Lock } from './Lock.ts';\nexport { default as normalizePath } from './normalizePath.ts';\nexport { default as streamToString, type StreamToStringCallback } from './streamToString.ts';\n"],"names":["default","BufferList","allocBuffer","allocBufferUnsafe","bufferCompare","bufferConcat","bufferEquals","bufferFrom","bufferSliceCopy","createInflateRawStream","inflateRaw","isNaN","objectAssign","readUInt64LE","writeUInt64LE","crc32","crc32Region","verifyCrc32","verifyCrc32Region","EntryStream","Lock","normalizePath","streamToString"],"mappings":"AAAA;;;;;;;;;;CAUC,GAED,SAASA,WAAWC,UAAU,QAAQ,kBAAkB;AACxD,SACEC,WAAW,EACXC,iBAAiB,EACjBC,aAAa,EACbC,YAAY,EACZC,YAAY,EACZC,UAAU,EACVC,eAAe,EACfC,sBAAsB,EACtBC,UAAU,EACVC,KAAK,EACLC,YAAY,EACZC,YAAY,EACZC,aAAa,QACR,cAAc;AACrB,SAASC,KAAK,EAAEC,WAAW,EAAEC,WAAW,EAAEC,iBAAiB,QAAQ,aAAa;AAChF,SAASlB,WAAWmB,WAAW,QAAQ,mBAAmB;AAC1D,SAAyBnB,WAAWoB,IAAI,QAAQ,YAAY;AAC5D,SAASpB,WAAWqB,aAAa,QAAQ,qBAAqB;AAC9D,SAASrB,WAAWsB,cAAc,QAAqC,sBAAsB"}
@@ -6,5 +6,5 @@
6
6
  *
7
7
  * Node 0.8+ compatible.
8
8
  */
9
- export type StreamToStringCallback = (error?: Error, result?: string) => undefined;
9
+ export type StreamToStringCallback = (error?: Error, result?: string) => void;
10
10
  export default function streamToString(stream: NodeJS.ReadableStream, callback: StreamToStringCallback): void;
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/shared/streamToString.ts"],"sourcesContent":["/**\n * Read entire stream content as string\n *\n * Handles both flowing streams and streams that have already\n * buffered data (using readable stream semantics).\n *\n * Node 0.8+ compatible.\n */\n\nimport oo from 'on-one';\nimport { bufferFrom } from './compat.ts';\n\nexport type StreamToStringCallback = (error?: Error, result?: string) => undefined;\n\nexport default function streamToString(stream: NodeJS.ReadableStream, callback: StreamToStringCallback): void {\n const chunks: Buffer[] = [];\n\n // Handle data from the stream\n stream.on('data', (chunk: Buffer | string) => {\n if (typeof chunk === 'string') {\n chunks.push(bufferFrom(chunk, 'utf8'));\n } else {\n chunks.push(chunk);\n }\n });\n\n // Handle stream end events using on-one for Node 0.8 compatibility\n oo(stream, ['error', 'end', 'close'], (err?: Error) => {\n if (err) {\n callback(err);\n } else {\n const content = Buffer.concat(chunks).toString('utf8');\n callback(null, content);\n }\n });\n\n // Ensure stream is flowing (in case it's paused)\n if (typeof (stream as NodeJS.ReadStream).resume === 'function') {\n (stream as NodeJS.ReadStream).resume();\n }\n}\n"],"names":["oo","bufferFrom","streamToString","stream","callback","chunks","on","chunk","push","err","content","Buffer","concat","toString","resume"],"mappings":"AAAA;;;;;;;CAOC,GAED,OAAOA,QAAQ,SAAS;AACxB,SAASC,UAAU,QAAQ,cAAc;AAIzC,eAAe,SAASC,eAAeC,MAA6B,EAAEC,QAAgC;IACpG,MAAMC,SAAmB,EAAE;IAE3B,8BAA8B;IAC9BF,OAAOG,EAAE,CAAC,QAAQ,CAACC;QACjB,IAAI,OAAOA,UAAU,UAAU;YAC7BF,OAAOG,IAAI,CAACP,WAAWM,OAAO;QAChC,OAAO;YACLF,OAAOG,IAAI,CAACD;QACd;IACF;IAEA,mEAAmE;IACnEP,GAAGG,QAAQ;QAAC;QAAS;QAAO;KAAQ,EAAE,CAACM;QACrC,IAAIA,KAAK;YACPL,SAASK;QACX,OAAO;YACL,MAAMC,UAAUC,OAAOC,MAAM,CAACP,QAAQQ,QAAQ,CAAC;YAC/CT,SAAS,MAAMM;QACjB;IACF;IAEA,iDAAiD;IACjD,IAAI,OAAO,AAACP,OAA6BW,MAAM,KAAK,YAAY;QAC7DX,OAA6BW,MAAM;IACtC;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/shared/streamToString.ts"],"sourcesContent":["/**\n * Read entire stream content as string\n *\n * Handles both flowing streams and streams that have already\n * buffered data (using readable stream semantics).\n *\n * Node 0.8+ compatible.\n */\n\nimport oo from 'on-one';\nimport { bufferFrom } from './compat.ts';\n\nexport type StreamToStringCallback = (error?: Error, result?: string) => void;\n\nexport default function streamToString(stream: NodeJS.ReadableStream, callback: StreamToStringCallback): void {\n const chunks: Buffer[] = [];\n\n // Handle data from the stream\n stream.on('data', (chunk: Buffer | string) => {\n if (typeof chunk === 'string') {\n chunks.push(bufferFrom(chunk, 'utf8'));\n } else {\n chunks.push(chunk);\n }\n });\n\n // Handle stream end events using on-one for Node 0.8 compatibility\n oo(stream, ['error', 'end', 'close'], (err?: Error) => {\n if (err) {\n callback(err);\n } else {\n const content = Buffer.concat(chunks).toString('utf8');\n callback(null, content);\n }\n });\n\n // Ensure stream is flowing (in case it's paused)\n if (typeof (stream as NodeJS.ReadStream).resume === 'function') {\n (stream as NodeJS.ReadStream).resume();\n }\n}\n"],"names":["oo","bufferFrom","streamToString","stream","callback","chunks","on","chunk","push","err","content","Buffer","concat","toString","resume"],"mappings":"AAAA;;;;;;;CAOC,GAED,OAAOA,QAAQ,SAAS;AACxB,SAASC,UAAU,QAAQ,cAAc;AAIzC,eAAe,SAASC,eAAeC,MAA6B,EAAEC,QAAgC;IACpG,MAAMC,SAAmB,EAAE;IAE3B,8BAA8B;IAC9BF,OAAOG,EAAE,CAAC,QAAQ,CAACC;QACjB,IAAI,OAAOA,UAAU,UAAU;YAC7BF,OAAOG,IAAI,CAACP,WAAWM,OAAO;QAChC,OAAO;YACLF,OAAOG,IAAI,CAACD;QACd;IACF;IAEA,mEAAmE;IACnEP,GAAGG,QAAQ;QAAC;QAAS;QAAO;KAAQ,EAAE,CAACM;QACrC,IAAIA,KAAK;YACPL,SAASK;QACX,OAAO;YACL,MAAMC,UAAUC,OAAOC,MAAM,CAACP,QAAQQ,QAAQ,CAAC;YAC/CT,SAAS,MAAMM;QACjB;IACF;IAEA,iDAAiD;IACjD,IAAI,OAAO,AAACP,OAA6BW,MAAM,KAAK,YAAY;QAC7DX,OAA6BW,MAAM;IACtC;AACF"}
@@ -1 +1 @@
1
- export default function validateAttributes(attributes: object, keys: string[]): undefined;
1
+ export default function validateAttributes(attributes: object, keys: string[]): void;
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/validateAttributes.ts"],"sourcesContent":["export default function validateAttributes(attributes: object, keys: string[]): undefined {\n for (let index = 0; index < keys.length; index++) {\n const key = keys[index];\n if (attributes[key] === undefined) throw new Error(`Missing attribute ${key}.Attributes ${JSON.stringify(attributes)}`);\n }\n}\n"],"names":["validateAttributes","attributes","keys","index","length","key","undefined","Error","JSON","stringify"],"mappings":"AAAA,eAAe,SAASA,mBAAmBC,UAAkB,EAAEC,IAAc;IAC3E,IAAK,IAAIC,QAAQ,GAAGA,QAAQD,KAAKE,MAAM,EAAED,QAAS;QAChD,MAAME,MAAMH,IAAI,CAACC,MAAM;QACvB,IAAIF,UAAU,CAACI,IAAI,KAAKC,WAAW,MAAM,IAAIC,MAAM,CAAC,kBAAkB,EAAEF,IAAI,YAAY,EAAEG,KAAKC,SAAS,CAACR,aAAa;IACxH;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/validateAttributes.ts"],"sourcesContent":["export default function validateAttributes(attributes: object, keys: string[]): void {\n for (let index = 0; index < keys.length; index++) {\n const key = keys[index];\n if (attributes[key] === undefined) throw new Error(`Missing attribute ${key}.Attributes ${JSON.stringify(attributes)}`);\n }\n}\n"],"names":["validateAttributes","attributes","keys","index","length","key","undefined","Error","JSON","stringify"],"mappings":"AAAA,eAAe,SAASA,mBAAmBC,UAAkB,EAAEC,IAAc;IAC3E,IAAK,IAAIC,QAAQ,GAAGA,QAAQD,KAAKE,MAAM,EAAED,QAAS;QAChD,MAAME,MAAMH,IAAI,CAACC,MAAM;QACvB,IAAIF,UAAU,CAACI,IAAI,KAAKC,WAAW,MAAM,IAAIC,MAAM,CAAC,kBAAkB,EAAEF,IAAI,YAAY,EAAEG,KAAKC,SAAS,CAACR,aAAa;IACxH;AACF"}
@@ -1,2 +1,2 @@
1
1
  import type { NoParamCallback } from './types.js';
2
- export default function waitForAccess(fullPath: string, callback: NoParamCallback): undefined;
2
+ export default function waitForAccess(fullPath: string, noFollowOrCallback: boolean | NoParamCallback, callbackOrAttempts?: NoParamCallback | number, attempts?: number): void;
@@ -1,8 +1,48 @@
1
1
  import fs from 'fs';
2
- import { setImmediateFn } from './shared/index.js';
3
- export default function waitForAccess(fullPath, callback) {
4
- fs.stat(fullPath, (err)=>{
5
- if (err) return setImmediateFn(()=>waitForAccess(fullPath, callback));
6
- callback();
7
- });
2
+ const isWindows = process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE);
3
+ // Backward compatible: waitForAccess(path, callback) or waitForAccess(path, noFollow, callback)
4
+ export default function waitForAccess(fullPath, noFollowOrCallback, callbackOrAttempts, attempts = 0) {
5
+ // Parse arguments for backward compatibility
6
+ let noFollow;
7
+ let callback;
8
+ if (typeof noFollowOrCallback === 'function') {
9
+ // Old signature: waitForAccess(path, callback, attempts?)
10
+ noFollow = false;
11
+ callback = noFollowOrCallback;
12
+ attempts = callbackOrAttempts || 0;
13
+ } else {
14
+ // New signature: waitForAccess(path, noFollow, callback, attempts?)
15
+ noFollow = noFollowOrCallback;
16
+ callback = callbackOrAttempts;
17
+ }
18
+ // POSIX: finish event is reliable after decompression stream fixes
19
+ if (!isWindows) return callback();
20
+ // Windows: NTFS metadata may not be committed yet, verify accessibility
21
+ // For symlinks (noFollow=true), use lstat to check the link itself exists
22
+ // For files/dirs/hardlinks, use open to verify the file is accessible
23
+ if (noFollow) {
24
+ fs.lstat(fullPath, (err)=>{
25
+ if (err) {
26
+ if (err.code === 'ENOENT' && attempts < 10) {
27
+ const delay = Math.min(5 * 2 ** attempts, 2560);
28
+ return setTimeout(()=>waitForAccess(fullPath, noFollow, callback, attempts + 1), delay);
29
+ }
30
+ return callback(err);
31
+ }
32
+ callback();
33
+ });
34
+ } else {
35
+ fs.open(fullPath, 'r', (err, fd)=>{
36
+ if (err) {
37
+ if (err.code === 'ENOENT' && attempts < 10) {
38
+ // Exponential backoff: 5, 10, 20, 40, 80, 160, 320, 640, 1280, 2560ms
39
+ // Total max wait: ~5 seconds
40
+ const delay = Math.min(5 * 2 ** attempts, 2560);
41
+ return setTimeout(()=>waitForAccess(fullPath, noFollow, callback, attempts + 1), delay);
42
+ }
43
+ return callback(err);
44
+ }
45
+ fs.close(fd, ()=>callback());
46
+ });
47
+ }
8
48
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/waitForAccess.ts"],"sourcesContent":["import fs from 'fs';\n\nimport { setImmediateFn } from './shared/index.ts';\nimport type { NoParamCallback } from './types.ts';\n\nexport default function waitForAccess(fullPath: string, callback: NoParamCallback): undefined {\n fs.stat(fullPath, (err) => {\n if (err) return setImmediateFn(() => waitForAccess(fullPath, callback));\n callback();\n });\n}\n"],"names":["fs","setImmediateFn","waitForAccess","fullPath","callback","stat","err"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AAEpB,SAASC,cAAc,QAAQ,oBAAoB;AAGnD,eAAe,SAASC,cAAcC,QAAgB,EAAEC,QAAyB;IAC/EJ,GAAGK,IAAI,CAACF,UAAU,CAACG;QACjB,IAAIA,KAAK,OAAOL,eAAe,IAAMC,cAAcC,UAAUC;QAC7DA;IACF;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/waitForAccess.ts"],"sourcesContent":["import fs from 'fs';\n\nimport type { NoParamCallback } from './types.ts';\n\nconst isWindows = process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE);\n\n// Backward compatible: waitForAccess(path, callback) or waitForAccess(path, noFollow, callback)\nexport default function waitForAccess(fullPath: string, noFollowOrCallback: boolean | NoParamCallback, callbackOrAttempts?: NoParamCallback | number, attempts = 0) {\n // Parse arguments for backward compatibility\n let noFollow: boolean;\n let callback: NoParamCallback;\n if (typeof noFollowOrCallback === 'function') {\n // Old signature: waitForAccess(path, callback, attempts?)\n noFollow = false;\n callback = noFollowOrCallback;\n attempts = (callbackOrAttempts as number) || 0;\n } else {\n // New signature: waitForAccess(path, noFollow, callback, attempts?)\n noFollow = noFollowOrCallback;\n callback = callbackOrAttempts as NoParamCallback;\n }\n\n // POSIX: finish event is reliable after decompression stream fixes\n if (!isWindows) return callback();\n\n // Windows: NTFS metadata may not be committed yet, verify accessibility\n // For symlinks (noFollow=true), use lstat to check the link itself exists\n // For files/dirs/hardlinks, use open to verify the file is accessible\n if (noFollow) {\n fs.lstat(fullPath, (err) => {\n if (err) {\n if (err.code === 'ENOENT' && attempts < 10) {\n const delay = Math.min(5 * 2 ** attempts, 2560);\n return setTimeout(() => waitForAccess(fullPath, noFollow, callback, attempts + 1), delay);\n }\n return callback(err);\n }\n callback();\n });\n } else {\n fs.open(fullPath, 'r', (err, fd) => {\n if (err) {\n if (err.code === 'ENOENT' && attempts < 10) {\n // Exponential backoff: 5, 10, 20, 40, 80, 160, 320, 640, 1280, 2560ms\n // Total max wait: ~5 seconds\n const delay = Math.min(5 * 2 ** attempts, 2560);\n return setTimeout(() => waitForAccess(fullPath, noFollow, callback, attempts + 1), delay);\n }\n return callback(err);\n }\n fs.close(fd, () => callback());\n });\n }\n}\n"],"names":["fs","isWindows","process","platform","test","env","OSTYPE","waitForAccess","fullPath","noFollowOrCallback","callbackOrAttempts","attempts","noFollow","callback","lstat","err","code","delay","Math","min","setTimeout","open","fd","close"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AAIpB,MAAMC,YAAYC,QAAQC,QAAQ,KAAK,WAAW,kBAAkBC,IAAI,CAACF,QAAQG,GAAG,CAACC,MAAM;AAE3F,gGAAgG;AAChG,eAAe,SAASC,cAAcC,QAAgB,EAAEC,kBAA6C,EAAEC,kBAA6C,EAAEC,WAAW,CAAC;IAChK,6CAA6C;IAC7C,IAAIC;IACJ,IAAIC;IACJ,IAAI,OAAOJ,uBAAuB,YAAY;QAC5C,0DAA0D;QAC1DG,WAAW;QACXC,WAAWJ;QACXE,WAAW,AAACD,sBAAiC;IAC/C,OAAO;QACL,oEAAoE;QACpEE,WAAWH;QACXI,WAAWH;IACb;IAEA,mEAAmE;IACnE,IAAI,CAACT,WAAW,OAAOY;IAEvB,wEAAwE;IACxE,0EAA0E;IAC1E,sEAAsE;IACtE,IAAID,UAAU;QACZZ,GAAGc,KAAK,CAACN,UAAU,CAACO;YAClB,IAAIA,KAAK;gBACP,IAAIA,IAAIC,IAAI,KAAK,YAAYL,WAAW,IAAI;oBAC1C,MAAMM,QAAQC,KAAKC,GAAG,CAAC,IAAI,KAAKR,UAAU;oBAC1C,OAAOS,WAAW,IAAMb,cAAcC,UAAUI,UAAUC,UAAUF,WAAW,IAAIM;gBACrF;gBACA,OAAOJ,SAASE;YAClB;YACAF;QACF;IACF,OAAO;QACLb,GAAGqB,IAAI,CAACb,UAAU,KAAK,CAACO,KAAKO;YAC3B,IAAIP,KAAK;gBACP,IAAIA,IAAIC,IAAI,KAAK,YAAYL,WAAW,IAAI;oBAC1C,sEAAsE;oBACtE,6BAA6B;oBAC7B,MAAMM,QAAQC,KAAKC,GAAG,CAAC,IAAI,KAAKR,UAAU;oBAC1C,OAAOS,WAAW,IAAMb,cAAcC,UAAUI,UAAUC,UAAUF,WAAW,IAAIM;gBACrF;gBACA,OAAOJ,SAASE;YAClB;YACAf,GAAGuB,KAAK,CAACD,IAAI,IAAMT;QACrB;IACF;AACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "extract-base-iterator",
3
- "version": "2.6.1",
3
+ "version": "3.0.0",
4
4
  "description": "Base iterator for extract iterators like tar-iterator and zip-iterator",
5
5
  "keywords": [
6
6
  "extract",
@@ -47,19 +47,19 @@
47
47
  "graceful-fs": "^4.2.11",
48
48
  "is-absolute": "^1.0.0",
49
49
  "lodash.compact": "^3.0.1",
50
- "mkdirp-classic": "^0.5.3",
50
+ "mkdirp-classic": "^0.5.2",
51
51
  "next-tick": "^1.1.0",
52
52
  "on-one": "^1.0.0",
53
53
  "pako": "~1.0.11",
54
- "queue-cb": "^1.6.3",
54
+ "queue-cb": "^1.0.0",
55
55
  "readable-stream": "^2.3.8",
56
- "stack-base-iterator": "^2.1.15"
56
+ "stack-base-iterator": "^3.0.0"
57
57
  },
58
58
  "devDependencies": {
59
59
  "@types/mocha": "*",
60
60
  "@types/node": "*",
61
61
  "cr": "^0.1.0",
62
- "fs-iterator": "^6.1.12",
62
+ "fs-iterator": "^7.0.0",
63
63
  "fs-stats-spys": "^1.0.0",
64
64
  "node-version-use": "*",
65
65
  "pinkie-promise": "*",