extract-base-iterator 2.2.5 → 2.3.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 (43) hide show
  1. package/dist/cjs/DirectoryEntry.d.cts +12 -0
  2. package/dist/cjs/FileEntry.d.cts +12 -0
  3. package/dist/cjs/LinkEntry.d.cts +13 -0
  4. package/dist/cjs/SymbolicLinkEntry.d.cts +13 -0
  5. package/dist/cjs/fs/chmod.d.cts +3 -0
  6. package/dist/cjs/fs/chown.d.cts +3 -0
  7. package/dist/cjs/fs/lstatReal.d.cts +3 -0
  8. package/dist/cjs/fs/symlinkWin32.d.cts +2 -0
  9. package/dist/cjs/fs/utimes.d.cts +3 -0
  10. package/dist/cjs/index.d.cts +12 -0
  11. package/dist/cjs/index.d.ts +1 -0
  12. package/dist/cjs/index.js +1 -0
  13. package/dist/cjs/index.js.map +1 -1
  14. package/dist/cjs/polyfills.d.cts +1 -0
  15. package/dist/cjs/shared/compat.d.cts +78 -0
  16. package/dist/cjs/shared/compat.d.ts +78 -0
  17. package/dist/cjs/shared/compat.js +177 -0
  18. package/dist/cjs/shared/compat.js.map +1 -0
  19. package/dist/cjs/shared/crc32.d.cts +45 -0
  20. package/dist/cjs/shared/crc32.d.ts +45 -0
  21. package/dist/cjs/shared/crc32.js +76 -0
  22. package/dist/cjs/shared/crc32.js.map +1 -0
  23. package/dist/cjs/shared/index.d.cts +13 -0
  24. package/dist/cjs/shared/index.d.ts +13 -0
  25. package/dist/cjs/shared/index.js +67 -0
  26. package/dist/cjs/shared/index.js.map +1 -0
  27. package/dist/cjs/stripPath.d.cts +2 -0
  28. package/dist/cjs/types.d.cts +40 -0
  29. package/dist/cjs/validateAttributes.d.cts +1 -0
  30. package/dist/cjs/waitForAccess.d.cts +2 -0
  31. package/dist/esm/index.d.ts +1 -0
  32. package/dist/esm/index.js +2 -0
  33. package/dist/esm/index.js.map +1 -1
  34. package/dist/esm/shared/compat.d.ts +78 -0
  35. package/dist/esm/shared/compat.js +173 -0
  36. package/dist/esm/shared/compat.js.map +1 -0
  37. package/dist/esm/shared/crc32.d.ts +45 -0
  38. package/dist/esm/shared/crc32.js +75 -0
  39. package/dist/esm/shared/crc32.js.map +1 -0
  40. package/dist/esm/shared/index.d.ts +13 -0
  41. package/dist/esm/shared/index.js +12 -0
  42. package/dist/esm/shared/index.js.map +1 -0
  43. package/package.json +2 -1
@@ -0,0 +1,12 @@
1
+ import type { Mode } from 'fs';
2
+ import type { DirectoryAttributes, ExtractOptions, NoParamCallback } from './types.js';
3
+ export default class DirectoryEntry {
4
+ mode: Mode;
5
+ mtime: number;
6
+ path: string;
7
+ basename: string;
8
+ type: string;
9
+ constructor(attributes: DirectoryAttributes);
10
+ create(dest: string, options: ExtractOptions | NoParamCallback, callback?: NoParamCallback): undefined | Promise<boolean>;
11
+ destroy(): void;
12
+ }
@@ -0,0 +1,12 @@
1
+ import type { Mode } from 'fs';
2
+ import type { ExtractOptions, FileAttributes, NoParamCallback } from './types.js';
3
+ export default class FileEntry {
4
+ mode: Mode;
5
+ mtime: number;
6
+ path: string;
7
+ basename: string;
8
+ type: string;
9
+ constructor(attributes: FileAttributes);
10
+ create(dest: string, options: ExtractOptions | NoParamCallback, callback?: NoParamCallback): undefined | Promise<boolean>;
11
+ destroy(): void;
12
+ }
@@ -0,0 +1,13 @@
1
+ import type { Mode } from 'fs';
2
+ import type { ExtractOptions, LinkAttributes, NoParamCallback } from './types.js';
3
+ export default class LinkEntry {
4
+ mode: Mode;
5
+ mtime: number;
6
+ path: string;
7
+ linkpath: string;
8
+ basename: string;
9
+ type: string;
10
+ constructor(attributes: LinkAttributes);
11
+ create(dest: string, options: ExtractOptions | NoParamCallback, callback?: NoParamCallback): undefined | Promise<boolean>;
12
+ destroy(): void;
13
+ }
@@ -0,0 +1,13 @@
1
+ import type { Mode } from 'fs';
2
+ import type { ExtractOptions, LinkAttributes, NoParamCallback } from './types.js';
3
+ export default class SymbolicLinkEntry {
4
+ mode: Mode;
5
+ mtime: number;
6
+ path: string;
7
+ linkpath: string;
8
+ basename: string;
9
+ type: string;
10
+ constructor(attributes: LinkAttributes);
11
+ create(dest: string, options: ExtractOptions | NoParamCallback, callback?: NoParamCallback): undefined | Promise<boolean>;
12
+ destroy(): void;
13
+ }
@@ -0,0 +1,3 @@
1
+ import type { NoParamCallback } from 'fs';
2
+ import type { AbstractEntry, ExtractOptions } from '../types.js';
3
+ export default function chmodFn(fullPath: string, entry: AbstractEntry, _options: ExtractOptions, callback: NoParamCallback): void;
@@ -0,0 +1,3 @@
1
+ import type { NoParamCallback } from 'fs';
2
+ import type { AbstractEntry, ExtractOptions } from '../types.js';
3
+ export default function chownFn(fullPath: string, entry: AbstractEntry, _options: ExtractOptions, callback: NoParamCallback): void;
@@ -0,0 +1,3 @@
1
+ import { type BigIntStats, type Stats } from 'fs';
2
+ export type Callback = (err: NodeJS.ErrnoException | null, stats?: Stats | BigIntStats) => void;
3
+ export default function lstatReal(path: string, callback: Callback): undefined;
@@ -0,0 +1,2 @@
1
+ import type { NoParamCallback } from 'fs';
2
+ export default function symlinkWin32(linkFullPath: string, linkpath: string, fullPath: string, callback: NoParamCallback): void;
@@ -0,0 +1,3 @@
1
+ import type { NoParamCallback } from 'fs';
2
+ import type { AbstractEntry, ExtractOptions } from '../types.js';
3
+ export default function utimes(fullPath: string, entry: AbstractEntry, options: ExtractOptions, callback: NoParamCallback): undefined;
@@ -0,0 +1,12 @@
1
+ import './polyfills.js';
2
+ import StackBaseIterator from 'stack-base-iterator';
3
+ import type { Entry } from './types.js';
4
+ export default class ExtractBaseIterator extends StackBaseIterator<Entry> {
5
+ }
6
+ export { default as DirectoryEntry } from './DirectoryEntry.js';
7
+ export { default as FileEntry } from './FileEntry.js';
8
+ export { default as LinkEntry } from './LinkEntry.js';
9
+ export { default as SymbolicLinkEntry } from './SymbolicLinkEntry.js';
10
+ export * from './shared/index.js';
11
+ export * from './types.js';
12
+ export { default as waitForAccess } from './waitForAccess.js';
@@ -7,5 +7,6 @@ export { default as DirectoryEntry } from './DirectoryEntry.js';
7
7
  export { default as FileEntry } from './FileEntry.js';
8
8
  export { default as LinkEntry } from './LinkEntry.js';
9
9
  export { default as SymbolicLinkEntry } from './SymbolicLinkEntry.js';
10
+ export * from './shared/index.js';
10
11
  export * from './types.js';
11
12
  export { default as waitForAccess } from './waitForAccess.js';
package/dist/cjs/index.js CHANGED
@@ -34,6 +34,7 @@ var _DirectoryEntryts = /*#__PURE__*/ _interop_require_default(require("./Direct
34
34
  var _FileEntryts = /*#__PURE__*/ _interop_require_default(require("./FileEntry.js"));
35
35
  var _LinkEntryts = /*#__PURE__*/ _interop_require_default(require("./LinkEntry.js"));
36
36
  var _SymbolicLinkEntryts = /*#__PURE__*/ _interop_require_default(require("./SymbolicLinkEntry.js"));
37
+ _export_star(require("./shared/index.js"), exports);
37
38
  _export_star(require("./types.js"), exports);
38
39
  var _waitForAccessts = /*#__PURE__*/ _interop_require_default(require("./waitForAccess.js"));
39
40
  function _assert_this_initialized(self) {
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/index.ts"],"sourcesContent":["import './polyfills.ts';\nimport StackBaseIterator from 'stack-base-iterator';\n\nimport type { Entry } from './types.ts';\n\nexport default class ExtractBaseIterator extends StackBaseIterator<Entry> {}\n\nexport { default as DirectoryEntry } from './DirectoryEntry.ts';\nexport { default as FileEntry } from './FileEntry.ts';\nexport { default as LinkEntry } from './LinkEntry.ts';\nexport { default as SymbolicLinkEntry } from './SymbolicLinkEntry.ts';\nexport * from './types.ts';\nexport { default as waitForAccess } from './waitForAccess.ts';\n"],"names":["DirectoryEntry","FileEntry","LinkEntry","SymbolicLinkEntry","ExtractBaseIterator","waitForAccess","StackBaseIterator"],"mappings":";;;;;;;;;;;QAOoBA;eAAAA,yBAAc;;QACdC;eAAAA,oBAAS;;QACTC;eAAAA,oBAAS;;QACTC;eAAAA,4BAAiB;;;eALhBC;;QAODC;eAAAA,wBAAa;;;QAZ1B;wEACuB;uEAMY;kEACL;kEACA;0EACQ;qBAC/B;sEAC2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAP1B,IAAA,AAAMD,oCAAN;;cAAMA;aAAAA;gCAAAA;QAAN,OAAA,kBAAMA;;WAAAA;EAA4BE,0BAAiB"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/index.ts"],"sourcesContent":["import './polyfills.ts';\nimport StackBaseIterator from 'stack-base-iterator';\n\nimport type { Entry } from './types.ts';\n\nexport default class ExtractBaseIterator extends StackBaseIterator<Entry> {}\n\nexport { default as DirectoryEntry } from './DirectoryEntry.ts';\nexport { default as FileEntry } from './FileEntry.ts';\nexport { default as LinkEntry } from './LinkEntry.ts';\nexport { default as SymbolicLinkEntry } from './SymbolicLinkEntry.ts';\n// Shared utilities for iterator libraries\nexport * from './shared/index.ts';\nexport * from './types.ts';\nexport { default as waitForAccess } from './waitForAccess.ts';\n"],"names":["DirectoryEntry","FileEntry","LinkEntry","SymbolicLinkEntry","ExtractBaseIterator","waitForAccess","StackBaseIterator"],"mappings":";;;;;;;;;;;QAOoBA;eAAAA,yBAAc;;QACdC;eAAAA,oBAAS;;QACTC;eAAAA,oBAAS;;QACTC;eAAAA,4BAAiB;;;eALhBC;;QASDC;eAAAA,wBAAa;;;QAd1B;wEACuB;uEAMY;kEACL;kEACA;0EACQ;qBAE/B;qBACA;sEAC2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAT1B,IAAA,AAAMD,oCAAN;;cAAMA;aAAAA;gCAAAA;QAAN,OAAA,kBAAMA;;WAAAA;EAA4BE,0BAAiB"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Buffer Compatibility Layer for Node.js 0.8+
3
+ *
4
+ * Provides buffer utilities that work across all Node.js versions
5
+ * WITHOUT modifying global Buffer object.
6
+ *
7
+ * Version history:
8
+ * - Node 0.8-4.4: Only has `new Buffer()`, no `Buffer.alloc/from`
9
+ * - Node 4.5+: Has `Buffer.alloc/from`, deprecates `new Buffer()`
10
+ * - Node 10+: Warns or errors on `new Buffer()`
11
+ *
12
+ * Solution: Feature detection with graceful fallback in both directions.
13
+ */
14
+ /**
15
+ * Allocate a zero-filled buffer (safe)
16
+ * - Uses Buffer.alloc() on Node 4.5+
17
+ * - Falls back to new Buffer() + fill on Node 0.8-4.4
18
+ */
19
+ export declare function allocBuffer(size: number): Buffer;
20
+ /**
21
+ * Allocate a buffer without initialization (unsafe but faster)
22
+ * - Uses Buffer.allocUnsafe() on Node 4.5+
23
+ * - Falls back to new Buffer() on Node 0.8-4.4
24
+ *
25
+ * WARNING: Buffer contents are uninitialized and may contain sensitive data.
26
+ * Only use when you will immediately overwrite all bytes.
27
+ */
28
+ export declare function allocBufferUnsafe(size: number): Buffer;
29
+ /**
30
+ * Create a buffer from string, array, or existing buffer
31
+ * - Uses Buffer.from() on Node 4.5+
32
+ * - Falls back to new Buffer() on Node 0.8-4.4
33
+ * - Handles Uint8Array conversion for Node 0.8 (crypto output compatibility)
34
+ */
35
+ export declare function bufferFrom(data: string | number[] | Buffer | Uint8Array, encoding?: BufferEncoding): Buffer;
36
+ /**
37
+ * Compare two buffers or buffer regions
38
+ * - Uses Buffer.compare() on Node 5.10+ (with offset support)
39
+ * - Falls back to manual comparison on Node 0.8-5.9
40
+ */
41
+ export declare function bufferCompare(source: Buffer, target: Buffer, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number): number;
42
+ /**
43
+ * Check if buffer region equals byte array
44
+ * Useful for magic number detection without Buffer.from()
45
+ */
46
+ export declare function bufferEquals(buf: Buffer, offset: number, expected: number[]): boolean;
47
+ /**
48
+ * Copy buffer region to new buffer
49
+ * Works on all Node versions
50
+ */
51
+ export declare function bufferSliceCopy(buf: Buffer, start: number, end: number): Buffer;
52
+ /**
53
+ * Read 64-bit unsigned integer (little-endian)
54
+ * Uses two 32-bit reads since BigInt not available until Node 10.4
55
+ *
56
+ * WARNING: Only accurate for values < Number.MAX_SAFE_INTEGER (2^53 - 1)
57
+ * This covers files up to ~9 PB which is practical for all real use cases.
58
+ */
59
+ export declare function readUInt64LE(buf: Buffer, offset: number): number;
60
+ /**
61
+ * Write 64-bit unsigned integer (little-endian)
62
+ * Same precision limitation as readUInt64LE
63
+ */
64
+ export declare function writeUInt64LE(buf: Buffer, value: number, offset: number): void;
65
+ /**
66
+ * Concatenate buffers - compatible with Node 0.8
67
+ * Handles crypto output which may not be proper Buffer instances in old Node.
68
+ *
69
+ * NOTE: This function is primarily needed for AES decryption compatibility
70
+ * in Node 0.8 where crypto output may not be proper Buffer instances.
71
+ * Libraries not using crypto can use native Buffer.concat() directly.
72
+ */
73
+ export declare function bufferConcat(list: (Buffer | Uint8Array)[], totalLength?: number): Buffer;
74
+ /**
75
+ * Node 0.8 compatible isNaN (Number.isNaN didn't exist until ES2015)
76
+ * Uses self-comparison: NaN is the only value not equal to itself
77
+ */
78
+ export declare function isNaN(value: number): boolean;
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Buffer Compatibility Layer for Node.js 0.8+
3
+ *
4
+ * Provides buffer utilities that work across all Node.js versions
5
+ * WITHOUT modifying global Buffer object.
6
+ *
7
+ * Version history:
8
+ * - Node 0.8-4.4: Only has `new Buffer()`, no `Buffer.alloc/from`
9
+ * - Node 4.5+: Has `Buffer.alloc/from`, deprecates `new Buffer()`
10
+ * - Node 10+: Warns or errors on `new Buffer()`
11
+ *
12
+ * Solution: Feature detection with graceful fallback in both directions.
13
+ */
14
+ /**
15
+ * Allocate a zero-filled buffer (safe)
16
+ * - Uses Buffer.alloc() on Node 4.5+
17
+ * - Falls back to new Buffer() + fill on Node 0.8-4.4
18
+ */
19
+ export declare function allocBuffer(size: number): Buffer;
20
+ /**
21
+ * Allocate a buffer without initialization (unsafe but faster)
22
+ * - Uses Buffer.allocUnsafe() on Node 4.5+
23
+ * - Falls back to new Buffer() on Node 0.8-4.4
24
+ *
25
+ * WARNING: Buffer contents are uninitialized and may contain sensitive data.
26
+ * Only use when you will immediately overwrite all bytes.
27
+ */
28
+ export declare function allocBufferUnsafe(size: number): Buffer;
29
+ /**
30
+ * Create a buffer from string, array, or existing buffer
31
+ * - Uses Buffer.from() on Node 4.5+
32
+ * - Falls back to new Buffer() on Node 0.8-4.4
33
+ * - Handles Uint8Array conversion for Node 0.8 (crypto output compatibility)
34
+ */
35
+ export declare function bufferFrom(data: string | number[] | Buffer | Uint8Array, encoding?: BufferEncoding): Buffer;
36
+ /**
37
+ * Compare two buffers or buffer regions
38
+ * - Uses Buffer.compare() on Node 5.10+ (with offset support)
39
+ * - Falls back to manual comparison on Node 0.8-5.9
40
+ */
41
+ export declare function bufferCompare(source: Buffer, target: Buffer, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number): number;
42
+ /**
43
+ * Check if buffer region equals byte array
44
+ * Useful for magic number detection without Buffer.from()
45
+ */
46
+ export declare function bufferEquals(buf: Buffer, offset: number, expected: number[]): boolean;
47
+ /**
48
+ * Copy buffer region to new buffer
49
+ * Works on all Node versions
50
+ */
51
+ export declare function bufferSliceCopy(buf: Buffer, start: number, end: number): Buffer;
52
+ /**
53
+ * Read 64-bit unsigned integer (little-endian)
54
+ * Uses two 32-bit reads since BigInt not available until Node 10.4
55
+ *
56
+ * WARNING: Only accurate for values < Number.MAX_SAFE_INTEGER (2^53 - 1)
57
+ * This covers files up to ~9 PB which is practical for all real use cases.
58
+ */
59
+ export declare function readUInt64LE(buf: Buffer, offset: number): number;
60
+ /**
61
+ * Write 64-bit unsigned integer (little-endian)
62
+ * Same precision limitation as readUInt64LE
63
+ */
64
+ export declare function writeUInt64LE(buf: Buffer, value: number, offset: number): void;
65
+ /**
66
+ * Concatenate buffers - compatible with Node 0.8
67
+ * Handles crypto output which may not be proper Buffer instances in old Node.
68
+ *
69
+ * NOTE: This function is primarily needed for AES decryption compatibility
70
+ * in Node 0.8 where crypto output may not be proper Buffer instances.
71
+ * Libraries not using crypto can use native Buffer.concat() directly.
72
+ */
73
+ export declare function bufferConcat(list: (Buffer | Uint8Array)[], totalLength?: number): Buffer;
74
+ /**
75
+ * Node 0.8 compatible isNaN (Number.isNaN didn't exist until ES2015)
76
+ * Uses self-comparison: NaN is the only value not equal to itself
77
+ */
78
+ export declare function isNaN(value: number): boolean;
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get allocBuffer () {
13
+ return allocBuffer;
14
+ },
15
+ get allocBufferUnsafe () {
16
+ return allocBufferUnsafe;
17
+ },
18
+ get bufferCompare () {
19
+ return bufferCompare;
20
+ },
21
+ get bufferConcat () {
22
+ return bufferConcat;
23
+ },
24
+ get bufferEquals () {
25
+ return bufferEquals;
26
+ },
27
+ get bufferFrom () {
28
+ return bufferFrom;
29
+ },
30
+ get bufferSliceCopy () {
31
+ return bufferSliceCopy;
32
+ },
33
+ get isNaN () {
34
+ return isNaN;
35
+ },
36
+ get readUInt64LE () {
37
+ return readUInt64LE;
38
+ },
39
+ get writeUInt64LE () {
40
+ return writeUInt64LE;
41
+ }
42
+ });
43
+ function _instanceof(left, right) {
44
+ if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
45
+ return !!right[Symbol.hasInstance](left);
46
+ } else {
47
+ return left instanceof right;
48
+ }
49
+ }
50
+ /**
51
+ * Buffer Compatibility Layer for Node.js 0.8+
52
+ *
53
+ * Provides buffer utilities that work across all Node.js versions
54
+ * WITHOUT modifying global Buffer object.
55
+ *
56
+ * Version history:
57
+ * - Node 0.8-4.4: Only has `new Buffer()`, no `Buffer.alloc/from`
58
+ * - Node 4.5+: Has `Buffer.alloc/from`, deprecates `new Buffer()`
59
+ * - Node 10+: Warns or errors on `new Buffer()`
60
+ *
61
+ * Solution: Feature detection with graceful fallback in both directions.
62
+ */ // Feature detection (runs once at module load)
63
+ var hasBufferAlloc = typeof Buffer.alloc === 'function';
64
+ var hasBufferAllocUnsafe = typeof Buffer.allocUnsafe === 'function';
65
+ var hasBufferFrom = typeof Buffer.from === 'function' && Buffer.from !== Uint8Array.from;
66
+ function allocBuffer(size) {
67
+ if (hasBufferAlloc) {
68
+ return Buffer.alloc(size);
69
+ }
70
+ // Legacy fallback: new Buffer() is uninitialized, must zero-fill
71
+ var buf = new Buffer(size);
72
+ buf.fill(0);
73
+ return buf;
74
+ }
75
+ function allocBufferUnsafe(size) {
76
+ if (hasBufferAllocUnsafe) {
77
+ return Buffer.allocUnsafe(size);
78
+ }
79
+ return new Buffer(size);
80
+ }
81
+ function bufferFrom(data, encoding) {
82
+ if (hasBufferFrom) {
83
+ if (typeof data === 'string') {
84
+ return Buffer.from(data, encoding);
85
+ }
86
+ return Buffer.from(data);
87
+ }
88
+ // Node 0.8 compatibility - deprecated Buffer constructor
89
+ // For Uint8Array, convert to array first (needed for crypto output in Node 0.8)
90
+ if (_instanceof(data, Uint8Array) && !_instanceof(data, Buffer)) {
91
+ var arr = [];
92
+ for(var i = 0; i < data.length; i++){
93
+ arr.push(data[i]);
94
+ }
95
+ return new Buffer(arr);
96
+ }
97
+ return new Buffer(data, encoding);
98
+ }
99
+ function bufferCompare(source, target, targetStart, targetEnd, sourceStart, sourceEnd) {
100
+ sourceStart = sourceStart || 0;
101
+ sourceEnd = sourceEnd || source.length;
102
+ targetStart = targetStart || 0;
103
+ targetEnd = targetEnd || target.length;
104
+ // Check if native compare with offset support exists (Node 5.10+)
105
+ if (source.compare && source.compare.length >= 5) {
106
+ return source.compare(target, targetStart, targetEnd, sourceStart, sourceEnd);
107
+ }
108
+ // Manual comparison for older Node versions
109
+ var sourceLen = sourceEnd - sourceStart;
110
+ var targetLen = targetEnd - targetStart;
111
+ var len = Math.min(sourceLen, targetLen);
112
+ for(var i = 0; i < len; i++){
113
+ var s = source[sourceStart + i];
114
+ var t = target[targetStart + i];
115
+ if (s !== t) return s < t ? -1 : 1;
116
+ }
117
+ return sourceLen - targetLen;
118
+ }
119
+ function bufferEquals(buf, offset, expected) {
120
+ if (offset + expected.length > buf.length) return false;
121
+ for(var i = 0; i < expected.length; i++){
122
+ if (buf[offset + i] !== expected[i]) return false;
123
+ }
124
+ return true;
125
+ }
126
+ function bufferSliceCopy(buf, start, end) {
127
+ var result = allocBuffer(end - start);
128
+ buf.copy(result, 0, start, end);
129
+ return result;
130
+ }
131
+ function readUInt64LE(buf, offset) {
132
+ var low = buf.readUInt32LE(offset);
133
+ var high = buf.readUInt32LE(offset + 4);
134
+ return high * 0x100000000 + low;
135
+ }
136
+ function writeUInt64LE(buf, value, offset) {
137
+ var low = value >>> 0;
138
+ var high = value / 0x100000000 >>> 0;
139
+ buf.writeUInt32LE(low, offset);
140
+ buf.writeUInt32LE(high, offset + 4);
141
+ }
142
+ function bufferConcat(list, totalLength) {
143
+ // Calculate actual total length first
144
+ var actualLength = 0;
145
+ for(var i = 0; i < list.length; i++){
146
+ actualLength += list[i].length;
147
+ }
148
+ // Use specified totalLength or actual length
149
+ var targetLength = totalLength !== undefined ? totalLength : actualLength;
150
+ // Check if all items are proper Buffers AND no truncation needed
151
+ // (Node 0.8's Buffer.concat doesn't handle truncation well)
152
+ var allBuffers = true;
153
+ for(var j = 0; j < list.length; j++){
154
+ if (!_instanceof(list[j], Buffer)) {
155
+ allBuffers = false;
156
+ break;
157
+ }
158
+ }
159
+ if (allBuffers && targetLength >= actualLength) {
160
+ return Buffer.concat(list, targetLength);
161
+ }
162
+ // Manual concat for mixed types or when truncation is needed
163
+ var result = allocBuffer(targetLength);
164
+ var offset = 0;
165
+ for(var k = 0; k < list.length && offset < targetLength; k++){
166
+ var buf = list[k];
167
+ for(var l = 0; l < buf.length && offset < targetLength; l++){
168
+ result[offset++] = buf[l];
169
+ }
170
+ }
171
+ return result;
172
+ }
173
+ function isNaN(value) {
174
+ // biome-ignore lint/suspicious/noSelfCompare: NaN check pattern
175
+ return value !== value;
176
+ }
177
+ /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/shared/compat.ts"],"sourcesContent":["/**\n * Buffer Compatibility Layer for Node.js 0.8+\n *\n * Provides buffer utilities that work across all Node.js versions\n * WITHOUT modifying global Buffer object.\n *\n * Version history:\n * - Node 0.8-4.4: Only has `new Buffer()`, no `Buffer.alloc/from`\n * - Node 4.5+: Has `Buffer.alloc/from`, deprecates `new Buffer()`\n * - Node 10+: Warns or errors on `new Buffer()`\n *\n * Solution: Feature detection with graceful fallback in both directions.\n */\n\n// Feature detection (runs once at module load)\nvar hasBufferAlloc = typeof Buffer.alloc === 'function';\nvar hasBufferAllocUnsafe = typeof Buffer.allocUnsafe === 'function';\nvar hasBufferFrom = typeof Buffer.from === 'function' && Buffer.from !== Uint8Array.from;\n\n/**\n * Allocate a zero-filled buffer (safe)\n * - Uses Buffer.alloc() on Node 4.5+\n * - Falls back to new Buffer() + fill on Node 0.8-4.4\n */\nexport function allocBuffer(size: number): Buffer {\n if (hasBufferAlloc) {\n return Buffer.alloc(size);\n }\n // Legacy fallback: new Buffer() is uninitialized, must zero-fill\n var buf = new Buffer(size);\n buf.fill(0);\n return buf;\n}\n\n/**\n * Allocate a buffer without initialization (unsafe but faster)\n * - Uses Buffer.allocUnsafe() on Node 4.5+\n * - Falls back to new Buffer() on Node 0.8-4.4\n *\n * WARNING: Buffer contents are uninitialized and may contain sensitive data.\n * Only use when you will immediately overwrite all bytes.\n */\nexport function allocBufferUnsafe(size: number): Buffer {\n if (hasBufferAllocUnsafe) {\n return Buffer.allocUnsafe(size);\n }\n return new Buffer(size);\n}\n\n/**\n * Create a buffer from string, array, or existing buffer\n * - Uses Buffer.from() on Node 4.5+\n * - Falls back to new Buffer() on Node 0.8-4.4\n * - Handles Uint8Array conversion for Node 0.8 (crypto output compatibility)\n */\nexport function bufferFrom(data: string | number[] | Buffer | Uint8Array, encoding?: BufferEncoding): Buffer {\n if (hasBufferFrom) {\n if (typeof data === 'string') {\n return Buffer.from(data, encoding);\n }\n return Buffer.from(data as number[] | Buffer);\n }\n // Node 0.8 compatibility - deprecated Buffer constructor\n // For Uint8Array, convert to array first (needed for crypto output in Node 0.8)\n if (data instanceof Uint8Array && !(data instanceof Buffer)) {\n var arr: number[] = [];\n for (var i = 0; i < data.length; i++) {\n arr.push(data[i]);\n }\n return new Buffer(arr);\n }\n return new Buffer(data as string & number[], encoding);\n}\n\n/**\n * Compare two buffers or buffer regions\n * - Uses Buffer.compare() on Node 5.10+ (with offset support)\n * - Falls back to manual comparison on Node 0.8-5.9\n */\nexport function bufferCompare(source: Buffer, target: Buffer, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number): number {\n sourceStart = sourceStart || 0;\n sourceEnd = sourceEnd || source.length;\n targetStart = targetStart || 0;\n targetEnd = targetEnd || target.length;\n\n // Check if native compare with offset support exists (Node 5.10+)\n if (source.compare && source.compare.length >= 5) {\n return source.compare(target, targetStart, targetEnd, sourceStart, sourceEnd);\n }\n\n // Manual comparison for older Node versions\n var sourceLen = sourceEnd - sourceStart;\n var targetLen = targetEnd - targetStart;\n var len = Math.min(sourceLen, targetLen);\n\n for (var i = 0; i < len; i++) {\n var s = source[sourceStart + i];\n var t = target[targetStart + i];\n if (s !== t) return s < t ? -1 : 1;\n }\n\n return sourceLen - targetLen;\n}\n\n/**\n * Check if buffer region equals byte array\n * Useful for magic number detection without Buffer.from()\n */\nexport function bufferEquals(buf: Buffer, offset: number, expected: number[]): boolean {\n if (offset + expected.length > buf.length) return false;\n for (var i = 0; i < expected.length; i++) {\n if (buf[offset + i] !== expected[i]) return false;\n }\n return true;\n}\n\n/**\n * Copy buffer region to new buffer\n * Works on all Node versions\n */\nexport function bufferSliceCopy(buf: Buffer, start: number, end: number): Buffer {\n var result = allocBuffer(end - start);\n buf.copy(result, 0, start, end);\n return result;\n}\n\n/**\n * Read 64-bit unsigned integer (little-endian)\n * Uses two 32-bit reads since BigInt not available until Node 10.4\n *\n * WARNING: Only accurate for values < Number.MAX_SAFE_INTEGER (2^53 - 1)\n * This covers files up to ~9 PB which is practical for all real use cases.\n */\nexport function readUInt64LE(buf: Buffer, offset: number): number {\n var low = buf.readUInt32LE(offset);\n var high = buf.readUInt32LE(offset + 4);\n return high * 0x100000000 + low;\n}\n\n/**\n * Write 64-bit unsigned integer (little-endian)\n * Same precision limitation as readUInt64LE\n */\nexport function writeUInt64LE(buf: Buffer, value: number, offset: number): void {\n var low = value >>> 0;\n var high = (value / 0x100000000) >>> 0;\n buf.writeUInt32LE(low, offset);\n buf.writeUInt32LE(high, offset + 4);\n}\n\n/**\n * Concatenate buffers - compatible with Node 0.8\n * Handles crypto output which may not be proper Buffer instances in old Node.\n *\n * NOTE: This function is primarily needed for AES decryption compatibility\n * in Node 0.8 where crypto output may not be proper Buffer instances.\n * Libraries not using crypto can use native Buffer.concat() directly.\n */\nexport function bufferConcat(list: (Buffer | Uint8Array)[], totalLength?: number): Buffer {\n // Calculate actual total length first\n var actualLength = 0;\n for (var i = 0; i < list.length; i++) {\n actualLength += list[i].length;\n }\n\n // Use specified totalLength or actual length\n var targetLength = totalLength !== undefined ? totalLength : actualLength;\n\n // Check if all items are proper Buffers AND no truncation needed\n // (Node 0.8's Buffer.concat doesn't handle truncation well)\n var allBuffers = true;\n for (var j = 0; j < list.length; j++) {\n if (!(list[j] instanceof Buffer)) {\n allBuffers = false;\n break;\n }\n }\n if (allBuffers && targetLength >= actualLength) {\n return Buffer.concat(list as Buffer[], targetLength);\n }\n\n // Manual concat for mixed types or when truncation is needed\n var result = allocBuffer(targetLength);\n var offset = 0;\n for (var k = 0; k < list.length && offset < targetLength; k++) {\n var buf = list[k];\n for (var l = 0; l < buf.length && offset < targetLength; l++) {\n result[offset++] = buf[l];\n }\n }\n return result;\n}\n\n/**\n * Node 0.8 compatible isNaN (Number.isNaN didn't exist until ES2015)\n * Uses self-comparison: NaN is the only value not equal to itself\n */\n// biome-ignore lint/suspicious/noShadowRestrictedNames: Legacy compatibility\nexport function isNaN(value: number): boolean {\n // biome-ignore lint/suspicious/noSelfCompare: NaN check pattern\n return value !== value;\n}\n"],"names":["allocBuffer","allocBufferUnsafe","bufferCompare","bufferConcat","bufferEquals","bufferFrom","bufferSliceCopy","isNaN","readUInt64LE","writeUInt64LE","hasBufferAlloc","Buffer","alloc","hasBufferAllocUnsafe","allocUnsafe","hasBufferFrom","from","Uint8Array","size","buf","fill","data","encoding","arr","i","length","push","source","target","targetStart","targetEnd","sourceStart","sourceEnd","compare","sourceLen","targetLen","len","Math","min","s","t","offset","expected","start","end","result","copy","low","readUInt32LE","high","value","writeUInt32LE","list","totalLength","actualLength","targetLength","undefined","allBuffers","j","concat","k","l"],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * CRC32 calculation for archive formats
3
+ *
4
+ * Uses IEEE polynomial 0xEDB88320 (same as ZIP, 7z, PNG, gzip, etc.)
5
+ * All bit operations (>>>, ^, &) work correctly in Node 0.8
6
+ *
7
+ * This is the standard CRC-32 algorithm used by:
8
+ * - ZIP/PKZIP
9
+ * - 7-Zip
10
+ * - PNG
11
+ * - gzip
12
+ * - Ethernet
13
+ */
14
+ /**
15
+ * Calculate CRC32 of a buffer
16
+ * @param buf - Buffer to calculate CRC32 for
17
+ * @param initial - Optional initial CRC value (for streaming calculation)
18
+ * @returns CRC32 value as unsigned 32-bit integer
19
+ */
20
+ export declare function crc32(buf: Buffer, initial?: number): number;
21
+ /**
22
+ * Calculate CRC32 of a buffer region
23
+ * @param buf - Buffer containing data
24
+ * @param offset - Start offset in buffer
25
+ * @param length - Number of bytes to process
26
+ * @param initial - Optional initial CRC value
27
+ * @returns CRC32 value as unsigned 32-bit integer
28
+ */
29
+ export declare function crc32Region(buf: Buffer, offset: number, length: number, initial?: number): number;
30
+ /**
31
+ * Verify CRC32 matches expected value
32
+ * @param buf - Buffer to verify
33
+ * @param expected - Expected CRC32 value
34
+ * @returns true if CRC matches, false otherwise
35
+ */
36
+ export declare function verifyCrc32(buf: Buffer, expected: number): boolean;
37
+ /**
38
+ * Verify CRC32 of a buffer region matches expected value
39
+ * @param buf - Buffer containing data
40
+ * @param offset - Start offset in buffer
41
+ * @param length - Number of bytes to verify
42
+ * @param expected - Expected CRC32 value
43
+ * @returns true if CRC matches, false otherwise
44
+ */
45
+ export declare function verifyCrc32Region(buf: Buffer, offset: number, length: number, expected: number): boolean;
@@ -0,0 +1,45 @@
1
+ /**
2
+ * CRC32 calculation for archive formats
3
+ *
4
+ * Uses IEEE polynomial 0xEDB88320 (same as ZIP, 7z, PNG, gzip, etc.)
5
+ * All bit operations (>>>, ^, &) work correctly in Node 0.8
6
+ *
7
+ * This is the standard CRC-32 algorithm used by:
8
+ * - ZIP/PKZIP
9
+ * - 7-Zip
10
+ * - PNG
11
+ * - gzip
12
+ * - Ethernet
13
+ */
14
+ /**
15
+ * Calculate CRC32 of a buffer
16
+ * @param buf - Buffer to calculate CRC32 for
17
+ * @param initial - Optional initial CRC value (for streaming calculation)
18
+ * @returns CRC32 value as unsigned 32-bit integer
19
+ */
20
+ export declare function crc32(buf: Buffer, initial?: number): number;
21
+ /**
22
+ * Calculate CRC32 of a buffer region
23
+ * @param buf - Buffer containing data
24
+ * @param offset - Start offset in buffer
25
+ * @param length - Number of bytes to process
26
+ * @param initial - Optional initial CRC value
27
+ * @returns CRC32 value as unsigned 32-bit integer
28
+ */
29
+ export declare function crc32Region(buf: Buffer, offset: number, length: number, initial?: number): number;
30
+ /**
31
+ * Verify CRC32 matches expected value
32
+ * @param buf - Buffer to verify
33
+ * @param expected - Expected CRC32 value
34
+ * @returns true if CRC matches, false otherwise
35
+ */
36
+ export declare function verifyCrc32(buf: Buffer, expected: number): boolean;
37
+ /**
38
+ * Verify CRC32 of a buffer region matches expected value
39
+ * @param buf - Buffer containing data
40
+ * @param offset - Start offset in buffer
41
+ * @param length - Number of bytes to verify
42
+ * @param expected - Expected CRC32 value
43
+ * @returns true if CRC matches, false otherwise
44
+ */
45
+ export declare function verifyCrc32Region(buf: Buffer, offset: number, length: number, expected: number): boolean;
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get crc32 () {
13
+ return crc32;
14
+ },
15
+ get crc32Region () {
16
+ return crc32Region;
17
+ },
18
+ get verifyCrc32 () {
19
+ return verifyCrc32;
20
+ },
21
+ get verifyCrc32Region () {
22
+ return verifyCrc32Region;
23
+ }
24
+ });
25
+ /**
26
+ * CRC32 calculation for archive formats
27
+ *
28
+ * Uses IEEE polynomial 0xEDB88320 (same as ZIP, 7z, PNG, gzip, etc.)
29
+ * All bit operations (>>>, ^, &) work correctly in Node 0.8
30
+ *
31
+ * This is the standard CRC-32 algorithm used by:
32
+ * - ZIP/PKZIP
33
+ * - 7-Zip
34
+ * - PNG
35
+ * - gzip
36
+ * - Ethernet
37
+ */ // Pre-computed lookup table for performance
38
+ var CRC32_TABLE = [];
39
+ // Initialize table at module load time
40
+ (function initTable() {
41
+ for(var i = 0; i < 256; i++){
42
+ var c = i;
43
+ for(var j = 0; j < 8; j++){
44
+ if ((c & 1) !== 0) {
45
+ c = 0xedb88320 ^ c >>> 1;
46
+ } else {
47
+ c = c >>> 1;
48
+ }
49
+ }
50
+ CRC32_TABLE[i] = c >>> 0; // Ensure unsigned
51
+ }
52
+ })();
53
+ function crc32(buf, initial) {
54
+ var crc = initial === undefined ? 0xffffffff : ~initial >>> 0;
55
+ for(var i = 0; i < buf.length; i++){
56
+ var index = (crc ^ buf[i]) & 0xff;
57
+ crc = CRC32_TABLE[index] ^ crc >>> 8;
58
+ }
59
+ return ~crc >>> 0; // Return unsigned
60
+ }
61
+ function crc32Region(buf, offset, length, initial) {
62
+ var crc = initial === undefined ? 0xffffffff : ~initial >>> 0;
63
+ var end = offset + length;
64
+ for(var i = offset; i < end; i++){
65
+ var index = (crc ^ buf[i]) & 0xff;
66
+ crc = CRC32_TABLE[index] ^ crc >>> 8;
67
+ }
68
+ return ~crc >>> 0; // Return unsigned
69
+ }
70
+ function verifyCrc32(buf, expected) {
71
+ return crc32(buf) === expected >>> 0;
72
+ }
73
+ function verifyCrc32Region(buf, offset, length, expected) {
74
+ return crc32Region(buf, offset, length) === expected >>> 0;
75
+ }
76
+ /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }