extract-base-iterator 2.2.6 → 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.
- package/dist/cjs/index.d.cts +1 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/shared/compat.d.cts +78 -0
- package/dist/cjs/shared/compat.d.ts +78 -0
- package/dist/cjs/shared/compat.js +177 -0
- package/dist/cjs/shared/compat.js.map +1 -0
- package/dist/cjs/shared/crc32.d.cts +45 -0
- package/dist/cjs/shared/crc32.d.ts +45 -0
- package/dist/cjs/shared/crc32.js +76 -0
- package/dist/cjs/shared/crc32.js.map +1 -0
- package/dist/cjs/shared/index.d.cts +13 -0
- package/dist/cjs/shared/index.d.ts +13 -0
- package/dist/cjs/shared/index.js +67 -0
- package/dist/cjs/shared/index.js.map +1 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/shared/compat.d.ts +78 -0
- package/dist/esm/shared/compat.js +173 -0
- package/dist/esm/shared/compat.js.map +1 -0
- package/dist/esm/shared/crc32.d.ts +45 -0
- package/dist/esm/shared/crc32.js +75 -0
- package/dist/esm/shared/crc32.js.map +1 -0
- package/dist/esm/shared/index.d.ts +13 -0
- package/dist/esm/shared/index.js +12 -0
- package/dist/esm/shared/index.js.map +1 -0
- package/package.json +2 -1
package/dist/cjs/index.d.cts
CHANGED
|
@@ -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.d.ts
CHANGED
|
@@ -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) {
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -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;;
|
|
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,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; }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/shared/crc32.ts"],"sourcesContent":["/**\n * CRC32 calculation for archive formats\n *\n * Uses IEEE polynomial 0xEDB88320 (same as ZIP, 7z, PNG, gzip, etc.)\n * All bit operations (>>>, ^, &) work correctly in Node 0.8\n *\n * This is the standard CRC-32 algorithm used by:\n * - ZIP/PKZIP\n * - 7-Zip\n * - PNG\n * - gzip\n * - Ethernet\n */\n\n// Pre-computed lookup table for performance\nvar CRC32_TABLE: number[] = [];\n\n// Initialize table at module load time\n(function initTable() {\n for (var i = 0; i < 256; i++) {\n var c = i;\n for (var j = 0; j < 8; j++) {\n if ((c & 1) !== 0) {\n c = 0xedb88320 ^ (c >>> 1);\n } else {\n c = c >>> 1;\n }\n }\n CRC32_TABLE[i] = c >>> 0; // Ensure unsigned\n }\n})();\n\n/**\n * Calculate CRC32 of a buffer\n * @param buf - Buffer to calculate CRC32 for\n * @param initial - Optional initial CRC value (for streaming calculation)\n * @returns CRC32 value as unsigned 32-bit integer\n */\nexport function crc32(buf: Buffer, initial?: number): number {\n var crc = initial === undefined ? 0xffffffff : ~initial >>> 0;\n\n for (var i = 0; i < buf.length; i++) {\n var index = (crc ^ buf[i]) & 0xff;\n crc = CRC32_TABLE[index] ^ (crc >>> 8);\n }\n\n return ~crc >>> 0; // Return unsigned\n}\n\n/**\n * Calculate CRC32 of a buffer region\n * @param buf - Buffer containing data\n * @param offset - Start offset in buffer\n * @param length - Number of bytes to process\n * @param initial - Optional initial CRC value\n * @returns CRC32 value as unsigned 32-bit integer\n */\nexport function crc32Region(buf: Buffer, offset: number, length: number, initial?: number): number {\n var crc = initial === undefined ? 0xffffffff : ~initial >>> 0;\n var end = offset + length;\n\n for (var i = offset; i < end; i++) {\n var index = (crc ^ buf[i]) & 0xff;\n crc = CRC32_TABLE[index] ^ (crc >>> 8);\n }\n\n return ~crc >>> 0; // Return unsigned\n}\n\n/**\n * Verify CRC32 matches expected value\n * @param buf - Buffer to verify\n * @param expected - Expected CRC32 value\n * @returns true if CRC matches, false otherwise\n */\nexport function verifyCrc32(buf: Buffer, expected: number): boolean {\n return crc32(buf) === expected >>> 0;\n}\n\n/**\n * Verify CRC32 of a buffer region matches expected value\n * @param buf - Buffer containing data\n * @param offset - Start offset in buffer\n * @param length - Number of bytes to verify\n * @param expected - Expected CRC32 value\n * @returns true if CRC matches, false otherwise\n */\nexport function verifyCrc32Region(buf: Buffer, offset: number, length: number, expected: number): boolean {\n return crc32Region(buf, offset, length) === expected >>> 0;\n}\n"],"names":["crc32","crc32Region","verifyCrc32","verifyCrc32Region","CRC32_TABLE","initTable","i","c","j","buf","initial","crc","undefined","length","index","offset","end","expected"],"mappings":";;;;;;;;;;;QAsCgBA;eAAAA;;QAmBAC;eAAAA;;QAkBAC;eAAAA;;QAYAC;eAAAA;;;AAvFhB;;;;;;;;;;;;CAYC,GAED,4CAA4C;AAC5C,IAAIC,cAAwB,EAAE;AAE9B,uCAAuC;AACtC,CAAA,SAASC;IACR,IAAK,IAAIC,IAAI,GAAGA,IAAI,KAAKA,IAAK;QAC5B,IAAIC,IAAID;QACR,IAAK,IAAIE,IAAI,GAAGA,IAAI,GAAGA,IAAK;YAC1B,IAAI,AAACD,CAAAA,IAAI,CAAA,MAAO,GAAG;gBACjBA,IAAI,aAAcA,MAAM;YAC1B,OAAO;gBACLA,IAAIA,MAAM;YACZ;QACF;QACAH,WAAW,CAACE,EAAE,GAAGC,MAAM,GAAG,kBAAkB;IAC9C;AACF,CAAA;AAQO,SAASP,MAAMS,GAAW,EAAEC,OAAgB;IACjD,IAAIC,MAAMD,YAAYE,YAAY,aAAa,CAACF,YAAY;IAE5D,IAAK,IAAIJ,IAAI,GAAGA,IAAIG,IAAII,MAAM,EAAEP,IAAK;QACnC,IAAIQ,QAAQ,AAACH,CAAAA,MAAMF,GAAG,CAACH,EAAE,AAAD,IAAK;QAC7BK,MAAMP,WAAW,CAACU,MAAM,GAAIH,QAAQ;IACtC;IAEA,OAAO,CAACA,QAAQ,GAAG,kBAAkB;AACvC;AAUO,SAASV,YAAYQ,GAAW,EAAEM,MAAc,EAAEF,MAAc,EAAEH,OAAgB;IACvF,IAAIC,MAAMD,YAAYE,YAAY,aAAa,CAACF,YAAY;IAC5D,IAAIM,MAAMD,SAASF;IAEnB,IAAK,IAAIP,IAAIS,QAAQT,IAAIU,KAAKV,IAAK;QACjC,IAAIQ,QAAQ,AAACH,CAAAA,MAAMF,GAAG,CAACH,EAAE,AAAD,IAAK;QAC7BK,MAAMP,WAAW,CAACU,MAAM,GAAIH,QAAQ;IACtC;IAEA,OAAO,CAACA,QAAQ,GAAG,kBAAkB;AACvC;AAQO,SAAST,YAAYO,GAAW,EAAEQ,QAAgB;IACvD,OAAOjB,MAAMS,SAASQ,aAAa;AACrC;AAUO,SAASd,kBAAkBM,GAAW,EAAEM,MAAc,EAAEF,MAAc,EAAEI,QAAgB;IAC7F,OAAOhB,YAAYQ,KAAKM,QAAQF,YAAYI,aAAa;AAC3D"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared utilities for iterator libraries
|
|
3
|
+
*
|
|
4
|
+
* These utilities are designed to be used by:
|
|
5
|
+
* - zip-iterator
|
|
6
|
+
* - 7z-iterator
|
|
7
|
+
* - tar-iterator
|
|
8
|
+
* - Any other archive iterator library
|
|
9
|
+
*
|
|
10
|
+
* All utilities support Node.js 0.8+
|
|
11
|
+
*/
|
|
12
|
+
export { allocBuffer, allocBufferUnsafe, bufferCompare, bufferConcat, bufferEquals, bufferFrom, bufferSliceCopy, isNaN, readUInt64LE, writeUInt64LE, } from './compat.js';
|
|
13
|
+
export { crc32, crc32Region, verifyCrc32, verifyCrc32Region } from './crc32.js';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared utilities for iterator libraries
|
|
3
|
+
*
|
|
4
|
+
* These utilities are designed to be used by:
|
|
5
|
+
* - zip-iterator
|
|
6
|
+
* - 7z-iterator
|
|
7
|
+
* - tar-iterator
|
|
8
|
+
* - Any other archive iterator library
|
|
9
|
+
*
|
|
10
|
+
* All utilities support Node.js 0.8+
|
|
11
|
+
*/
|
|
12
|
+
export { allocBuffer, allocBufferUnsafe, bufferCompare, bufferConcat, bufferEquals, bufferFrom, bufferSliceCopy, isNaN, readUInt64LE, writeUInt64LE, } from './compat.js';
|
|
13
|
+
export { crc32, crc32Region, verifyCrc32, verifyCrc32Region } from './crc32.js';
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared utilities for iterator libraries
|
|
3
|
+
*
|
|
4
|
+
* These utilities are designed to be used by:
|
|
5
|
+
* - zip-iterator
|
|
6
|
+
* - 7z-iterator
|
|
7
|
+
* - tar-iterator
|
|
8
|
+
* - Any other archive iterator library
|
|
9
|
+
*
|
|
10
|
+
* All utilities support Node.js 0.8+
|
|
11
|
+
*/ "use strict";
|
|
12
|
+
Object.defineProperty(exports, "__esModule", {
|
|
13
|
+
value: true
|
|
14
|
+
});
|
|
15
|
+
function _export(target, all) {
|
|
16
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
_export(exports, {
|
|
22
|
+
get allocBuffer () {
|
|
23
|
+
return _compatts.allocBuffer;
|
|
24
|
+
},
|
|
25
|
+
get allocBufferUnsafe () {
|
|
26
|
+
return _compatts.allocBufferUnsafe;
|
|
27
|
+
},
|
|
28
|
+
get bufferCompare () {
|
|
29
|
+
return _compatts.bufferCompare;
|
|
30
|
+
},
|
|
31
|
+
get bufferConcat () {
|
|
32
|
+
return _compatts.bufferConcat;
|
|
33
|
+
},
|
|
34
|
+
get bufferEquals () {
|
|
35
|
+
return _compatts.bufferEquals;
|
|
36
|
+
},
|
|
37
|
+
get bufferFrom () {
|
|
38
|
+
return _compatts.bufferFrom;
|
|
39
|
+
},
|
|
40
|
+
get bufferSliceCopy () {
|
|
41
|
+
return _compatts.bufferSliceCopy;
|
|
42
|
+
},
|
|
43
|
+
get crc32 () {
|
|
44
|
+
return _crc32ts.crc32;
|
|
45
|
+
},
|
|
46
|
+
get crc32Region () {
|
|
47
|
+
return _crc32ts.crc32Region;
|
|
48
|
+
},
|
|
49
|
+
get isNaN () {
|
|
50
|
+
return _compatts.isNaN;
|
|
51
|
+
},
|
|
52
|
+
get readUInt64LE () {
|
|
53
|
+
return _compatts.readUInt64LE;
|
|
54
|
+
},
|
|
55
|
+
get verifyCrc32 () {
|
|
56
|
+
return _crc32ts.verifyCrc32;
|
|
57
|
+
},
|
|
58
|
+
get verifyCrc32Region () {
|
|
59
|
+
return _crc32ts.verifyCrc32Region;
|
|
60
|
+
},
|
|
61
|
+
get writeUInt64LE () {
|
|
62
|
+
return _compatts.writeUInt64LE;
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
var _compatts = require("./compat.js");
|
|
66
|
+
var _crc32ts = require("./crc32.js");
|
|
67
|
+
/* 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/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 {\n allocBuffer,\n allocBufferUnsafe,\n bufferCompare,\n bufferConcat,\n bufferEquals,\n bufferFrom,\n bufferSliceCopy,\n isNaN,\n readUInt64LE,\n writeUInt64LE,\n} from './compat.ts';\n\nexport { crc32, crc32Region, verifyCrc32, verifyCrc32Region } from './crc32.ts';\n"],"names":["allocBuffer","allocBufferUnsafe","bufferCompare","bufferConcat","bufferEquals","bufferFrom","bufferSliceCopy","crc32","crc32Region","isNaN","readUInt64LE","verifyCrc32","verifyCrc32Region","writeUInt64LE"],"mappings":"AAAA;;;;;;;;;;CAUC;;;;;;;;;;;QAGCA;eAAAA,qBAAW;;QACXC;eAAAA,2BAAiB;;QACjBC;eAAAA,uBAAa;;QACbC;eAAAA,sBAAY;;QACZC;eAAAA,sBAAY;;QACZC;eAAAA,oBAAU;;QACVC;eAAAA,yBAAe;;QAMRC;eAAAA,cAAK;;QAAEC;eAAAA,oBAAW;;QALzBC;eAAAA,eAAK;;QACLC;eAAAA,sBAAY;;QAIeC;eAAAA,oBAAW;;QAAEC;eAAAA,0BAAiB;;QAHzDC;eAAAA,uBAAa;;;wBACR;uBAE4D"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -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/esm/index.js
CHANGED
|
@@ -6,5 +6,7 @@ export { default as DirectoryEntry } from './DirectoryEntry.js';
|
|
|
6
6
|
export { default as FileEntry } from './FileEntry.js';
|
|
7
7
|
export { default as LinkEntry } from './LinkEntry.js';
|
|
8
8
|
export { default as SymbolicLinkEntry } from './SymbolicLinkEntry.js';
|
|
9
|
+
// Shared utilities for iterator libraries
|
|
10
|
+
export * from './shared/index.js';
|
|
9
11
|
export * from './types.js';
|
|
10
12
|
export { default as waitForAccess } from './waitForAccess.js';
|
package/dist/esm/index.js.map
CHANGED
|
@@ -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":["StackBaseIterator","ExtractBaseIterator","default","DirectoryEntry","FileEntry","LinkEntry","SymbolicLinkEntry","waitForAccess"],"mappings":"AAAA,OAAO,iBAAiB;AACxB,OAAOA,uBAAuB,sBAAsB;AAIpD,eAAe,MAAMC,4BAA4BD;AAA0B;AAE3E,SAASE,WAAWC,cAAc,QAAQ,sBAAsB;AAChE,SAASD,WAAWE,SAAS,QAAQ,iBAAiB;AACtD,SAASF,WAAWG,SAAS,QAAQ,iBAAiB;AACtD,SAASH,WAAWI,iBAAiB,QAAQ,yBAAyB;AACtE,cAAc,aAAa;AAC3B,SAASJ,WAAWK,aAAa,QAAQ,qBAAqB"}
|
|
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":["StackBaseIterator","ExtractBaseIterator","default","DirectoryEntry","FileEntry","LinkEntry","SymbolicLinkEntry","waitForAccess"],"mappings":"AAAA,OAAO,iBAAiB;AACxB,OAAOA,uBAAuB,sBAAsB;AAIpD,eAAe,MAAMC,4BAA4BD;AAA0B;AAE3E,SAASE,WAAWC,cAAc,QAAQ,sBAAsB;AAChE,SAASD,WAAWE,SAAS,QAAQ,iBAAiB;AACtD,SAASF,WAAWG,SAAS,QAAQ,iBAAiB;AACtD,SAASH,WAAWI,iBAAiB,QAAQ,yBAAyB;AACtE,0CAA0C;AAC1C,cAAc,oBAAoB;AAClC,cAAc,aAAa;AAC3B,SAASJ,WAAWK,aAAa,QAAQ,qBAAqB"}
|
|
@@ -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,173 @@
|
|
|
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
|
+
*/ // Feature detection (runs once at module load)
|
|
14
|
+
var hasBufferAlloc = typeof Buffer.alloc === 'function';
|
|
15
|
+
var hasBufferAllocUnsafe = typeof Buffer.allocUnsafe === 'function';
|
|
16
|
+
var hasBufferFrom = typeof Buffer.from === 'function' && Buffer.from !== Uint8Array.from;
|
|
17
|
+
/**
|
|
18
|
+
* Allocate a zero-filled buffer (safe)
|
|
19
|
+
* - Uses Buffer.alloc() on Node 4.5+
|
|
20
|
+
* - Falls back to new Buffer() + fill on Node 0.8-4.4
|
|
21
|
+
*/ export function allocBuffer(size) {
|
|
22
|
+
if (hasBufferAlloc) {
|
|
23
|
+
return Buffer.alloc(size);
|
|
24
|
+
}
|
|
25
|
+
// Legacy fallback: new Buffer() is uninitialized, must zero-fill
|
|
26
|
+
var buf = new Buffer(size);
|
|
27
|
+
buf.fill(0);
|
|
28
|
+
return buf;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Allocate a buffer without initialization (unsafe but faster)
|
|
32
|
+
* - Uses Buffer.allocUnsafe() on Node 4.5+
|
|
33
|
+
* - Falls back to new Buffer() on Node 0.8-4.4
|
|
34
|
+
*
|
|
35
|
+
* WARNING: Buffer contents are uninitialized and may contain sensitive data.
|
|
36
|
+
* Only use when you will immediately overwrite all bytes.
|
|
37
|
+
*/ export function allocBufferUnsafe(size) {
|
|
38
|
+
if (hasBufferAllocUnsafe) {
|
|
39
|
+
return Buffer.allocUnsafe(size);
|
|
40
|
+
}
|
|
41
|
+
return new Buffer(size);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Create a buffer from string, array, or existing buffer
|
|
45
|
+
* - Uses Buffer.from() on Node 4.5+
|
|
46
|
+
* - Falls back to new Buffer() on Node 0.8-4.4
|
|
47
|
+
* - Handles Uint8Array conversion for Node 0.8 (crypto output compatibility)
|
|
48
|
+
*/ export function bufferFrom(data, encoding) {
|
|
49
|
+
if (hasBufferFrom) {
|
|
50
|
+
if (typeof data === 'string') {
|
|
51
|
+
return Buffer.from(data, encoding);
|
|
52
|
+
}
|
|
53
|
+
return Buffer.from(data);
|
|
54
|
+
}
|
|
55
|
+
// Node 0.8 compatibility - deprecated Buffer constructor
|
|
56
|
+
// For Uint8Array, convert to array first (needed for crypto output in Node 0.8)
|
|
57
|
+
if (data instanceof Uint8Array && !(data instanceof Buffer)) {
|
|
58
|
+
var arr = [];
|
|
59
|
+
for(var i = 0; i < data.length; i++){
|
|
60
|
+
arr.push(data[i]);
|
|
61
|
+
}
|
|
62
|
+
return new Buffer(arr);
|
|
63
|
+
}
|
|
64
|
+
return new Buffer(data, encoding);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Compare two buffers or buffer regions
|
|
68
|
+
* - Uses Buffer.compare() on Node 5.10+ (with offset support)
|
|
69
|
+
* - Falls back to manual comparison on Node 0.8-5.9
|
|
70
|
+
*/ export function bufferCompare(source, target, targetStart, targetEnd, sourceStart, sourceEnd) {
|
|
71
|
+
sourceStart = sourceStart || 0;
|
|
72
|
+
sourceEnd = sourceEnd || source.length;
|
|
73
|
+
targetStart = targetStart || 0;
|
|
74
|
+
targetEnd = targetEnd || target.length;
|
|
75
|
+
// Check if native compare with offset support exists (Node 5.10+)
|
|
76
|
+
if (source.compare && source.compare.length >= 5) {
|
|
77
|
+
return source.compare(target, targetStart, targetEnd, sourceStart, sourceEnd);
|
|
78
|
+
}
|
|
79
|
+
// Manual comparison for older Node versions
|
|
80
|
+
var sourceLen = sourceEnd - sourceStart;
|
|
81
|
+
var targetLen = targetEnd - targetStart;
|
|
82
|
+
var len = Math.min(sourceLen, targetLen);
|
|
83
|
+
for(var i = 0; i < len; i++){
|
|
84
|
+
var s = source[sourceStart + i];
|
|
85
|
+
var t = target[targetStart + i];
|
|
86
|
+
if (s !== t) return s < t ? -1 : 1;
|
|
87
|
+
}
|
|
88
|
+
return sourceLen - targetLen;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Check if buffer region equals byte array
|
|
92
|
+
* Useful for magic number detection without Buffer.from()
|
|
93
|
+
*/ export function bufferEquals(buf, offset, expected) {
|
|
94
|
+
if (offset + expected.length > buf.length) return false;
|
|
95
|
+
for(var i = 0; i < expected.length; i++){
|
|
96
|
+
if (buf[offset + i] !== expected[i]) return false;
|
|
97
|
+
}
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Copy buffer region to new buffer
|
|
102
|
+
* Works on all Node versions
|
|
103
|
+
*/ export function bufferSliceCopy(buf, start, end) {
|
|
104
|
+
var result = allocBuffer(end - start);
|
|
105
|
+
buf.copy(result, 0, start, end);
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Read 64-bit unsigned integer (little-endian)
|
|
110
|
+
* Uses two 32-bit reads since BigInt not available until Node 10.4
|
|
111
|
+
*
|
|
112
|
+
* WARNING: Only accurate for values < Number.MAX_SAFE_INTEGER (2^53 - 1)
|
|
113
|
+
* This covers files up to ~9 PB which is practical for all real use cases.
|
|
114
|
+
*/ export function readUInt64LE(buf, offset) {
|
|
115
|
+
var low = buf.readUInt32LE(offset);
|
|
116
|
+
var high = buf.readUInt32LE(offset + 4);
|
|
117
|
+
return high * 0x100000000 + low;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Write 64-bit unsigned integer (little-endian)
|
|
121
|
+
* Same precision limitation as readUInt64LE
|
|
122
|
+
*/ export function writeUInt64LE(buf, value, offset) {
|
|
123
|
+
var low = value >>> 0;
|
|
124
|
+
var high = value / 0x100000000 >>> 0;
|
|
125
|
+
buf.writeUInt32LE(low, offset);
|
|
126
|
+
buf.writeUInt32LE(high, offset + 4);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Concatenate buffers - compatible with Node 0.8
|
|
130
|
+
* Handles crypto output which may not be proper Buffer instances in old Node.
|
|
131
|
+
*
|
|
132
|
+
* NOTE: This function is primarily needed for AES decryption compatibility
|
|
133
|
+
* in Node 0.8 where crypto output may not be proper Buffer instances.
|
|
134
|
+
* Libraries not using crypto can use native Buffer.concat() directly.
|
|
135
|
+
*/ export function bufferConcat(list, totalLength) {
|
|
136
|
+
// Calculate actual total length first
|
|
137
|
+
var actualLength = 0;
|
|
138
|
+
for(var i = 0; i < list.length; i++){
|
|
139
|
+
actualLength += list[i].length;
|
|
140
|
+
}
|
|
141
|
+
// Use specified totalLength or actual length
|
|
142
|
+
var targetLength = totalLength !== undefined ? totalLength : actualLength;
|
|
143
|
+
// Check if all items are proper Buffers AND no truncation needed
|
|
144
|
+
// (Node 0.8's Buffer.concat doesn't handle truncation well)
|
|
145
|
+
var allBuffers = true;
|
|
146
|
+
for(var j = 0; j < list.length; j++){
|
|
147
|
+
if (!(list[j] instanceof Buffer)) {
|
|
148
|
+
allBuffers = false;
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (allBuffers && targetLength >= actualLength) {
|
|
153
|
+
return Buffer.concat(list, targetLength);
|
|
154
|
+
}
|
|
155
|
+
// Manual concat for mixed types or when truncation is needed
|
|
156
|
+
var result = allocBuffer(targetLength);
|
|
157
|
+
var offset = 0;
|
|
158
|
+
for(var k = 0; k < list.length && offset < targetLength; k++){
|
|
159
|
+
var buf = list[k];
|
|
160
|
+
for(var l = 0; l < buf.length && offset < targetLength; l++){
|
|
161
|
+
result[offset++] = buf[l];
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return result;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Node 0.8 compatible isNaN (Number.isNaN didn't exist until ES2015)
|
|
168
|
+
* Uses self-comparison: NaN is the only value not equal to itself
|
|
169
|
+
*/ // biome-ignore lint/suspicious/noShadowRestrictedNames: Legacy compatibility
|
|
170
|
+
export function isNaN(value) {
|
|
171
|
+
// biome-ignore lint/suspicious/noSelfCompare: NaN check pattern
|
|
172
|
+
return value !== value;
|
|
173
|
+
}
|
|
@@ -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":["hasBufferAlloc","Buffer","alloc","hasBufferAllocUnsafe","allocUnsafe","hasBufferFrom","from","Uint8Array","allocBuffer","size","buf","fill","allocBufferUnsafe","bufferFrom","data","encoding","arr","i","length","push","bufferCompare","source","target","targetStart","targetEnd","sourceStart","sourceEnd","compare","sourceLen","targetLen","len","Math","min","s","t","bufferEquals","offset","expected","bufferSliceCopy","start","end","result","copy","readUInt64LE","low","readUInt32LE","high","writeUInt64LE","value","writeUInt32LE","bufferConcat","list","totalLength","actualLength","targetLength","undefined","allBuffers","j","concat","k","l","isNaN"],"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,75 @@
|
|
|
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
|
+
*/ // Pre-computed lookup table for performance
|
|
14
|
+
var CRC32_TABLE = [];
|
|
15
|
+
// Initialize table at module load time
|
|
16
|
+
(function initTable() {
|
|
17
|
+
for(var i = 0; i < 256; i++){
|
|
18
|
+
var c = i;
|
|
19
|
+
for(var j = 0; j < 8; j++){
|
|
20
|
+
if ((c & 1) !== 0) {
|
|
21
|
+
c = 0xedb88320 ^ c >>> 1;
|
|
22
|
+
} else {
|
|
23
|
+
c = c >>> 1;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
CRC32_TABLE[i] = c >>> 0; // Ensure unsigned
|
|
27
|
+
}
|
|
28
|
+
})();
|
|
29
|
+
/**
|
|
30
|
+
* Calculate CRC32 of a buffer
|
|
31
|
+
* @param buf - Buffer to calculate CRC32 for
|
|
32
|
+
* @param initial - Optional initial CRC value (for streaming calculation)
|
|
33
|
+
* @returns CRC32 value as unsigned 32-bit integer
|
|
34
|
+
*/ export function crc32(buf, initial) {
|
|
35
|
+
var crc = initial === undefined ? 0xffffffff : ~initial >>> 0;
|
|
36
|
+
for(var i = 0; i < buf.length; i++){
|
|
37
|
+
var index = (crc ^ buf[i]) & 0xff;
|
|
38
|
+
crc = CRC32_TABLE[index] ^ crc >>> 8;
|
|
39
|
+
}
|
|
40
|
+
return ~crc >>> 0; // Return unsigned
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Calculate CRC32 of a buffer region
|
|
44
|
+
* @param buf - Buffer containing data
|
|
45
|
+
* @param offset - Start offset in buffer
|
|
46
|
+
* @param length - Number of bytes to process
|
|
47
|
+
* @param initial - Optional initial CRC value
|
|
48
|
+
* @returns CRC32 value as unsigned 32-bit integer
|
|
49
|
+
*/ export function crc32Region(buf, offset, length, initial) {
|
|
50
|
+
var crc = initial === undefined ? 0xffffffff : ~initial >>> 0;
|
|
51
|
+
var end = offset + length;
|
|
52
|
+
for(var i = offset; i < end; i++){
|
|
53
|
+
var index = (crc ^ buf[i]) & 0xff;
|
|
54
|
+
crc = CRC32_TABLE[index] ^ crc >>> 8;
|
|
55
|
+
}
|
|
56
|
+
return ~crc >>> 0; // Return unsigned
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Verify CRC32 matches expected value
|
|
60
|
+
* @param buf - Buffer to verify
|
|
61
|
+
* @param expected - Expected CRC32 value
|
|
62
|
+
* @returns true if CRC matches, false otherwise
|
|
63
|
+
*/ export function verifyCrc32(buf, expected) {
|
|
64
|
+
return crc32(buf) === expected >>> 0;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Verify CRC32 of a buffer region matches expected value
|
|
68
|
+
* @param buf - Buffer containing data
|
|
69
|
+
* @param offset - Start offset in buffer
|
|
70
|
+
* @param length - Number of bytes to verify
|
|
71
|
+
* @param expected - Expected CRC32 value
|
|
72
|
+
* @returns true if CRC matches, false otherwise
|
|
73
|
+
*/ export function verifyCrc32Region(buf, offset, length, expected) {
|
|
74
|
+
return crc32Region(buf, offset, length) === expected >>> 0;
|
|
75
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/shared/crc32.ts"],"sourcesContent":["/**\n * CRC32 calculation for archive formats\n *\n * Uses IEEE polynomial 0xEDB88320 (same as ZIP, 7z, PNG, gzip, etc.)\n * All bit operations (>>>, ^, &) work correctly in Node 0.8\n *\n * This is the standard CRC-32 algorithm used by:\n * - ZIP/PKZIP\n * - 7-Zip\n * - PNG\n * - gzip\n * - Ethernet\n */\n\n// Pre-computed lookup table for performance\nvar CRC32_TABLE: number[] = [];\n\n// Initialize table at module load time\n(function initTable() {\n for (var i = 0; i < 256; i++) {\n var c = i;\n for (var j = 0; j < 8; j++) {\n if ((c & 1) !== 0) {\n c = 0xedb88320 ^ (c >>> 1);\n } else {\n c = c >>> 1;\n }\n }\n CRC32_TABLE[i] = c >>> 0; // Ensure unsigned\n }\n})();\n\n/**\n * Calculate CRC32 of a buffer\n * @param buf - Buffer to calculate CRC32 for\n * @param initial - Optional initial CRC value (for streaming calculation)\n * @returns CRC32 value as unsigned 32-bit integer\n */\nexport function crc32(buf: Buffer, initial?: number): number {\n var crc = initial === undefined ? 0xffffffff : ~initial >>> 0;\n\n for (var i = 0; i < buf.length; i++) {\n var index = (crc ^ buf[i]) & 0xff;\n crc = CRC32_TABLE[index] ^ (crc >>> 8);\n }\n\n return ~crc >>> 0; // Return unsigned\n}\n\n/**\n * Calculate CRC32 of a buffer region\n * @param buf - Buffer containing data\n * @param offset - Start offset in buffer\n * @param length - Number of bytes to process\n * @param initial - Optional initial CRC value\n * @returns CRC32 value as unsigned 32-bit integer\n */\nexport function crc32Region(buf: Buffer, offset: number, length: number, initial?: number): number {\n var crc = initial === undefined ? 0xffffffff : ~initial >>> 0;\n var end = offset + length;\n\n for (var i = offset; i < end; i++) {\n var index = (crc ^ buf[i]) & 0xff;\n crc = CRC32_TABLE[index] ^ (crc >>> 8);\n }\n\n return ~crc >>> 0; // Return unsigned\n}\n\n/**\n * Verify CRC32 matches expected value\n * @param buf - Buffer to verify\n * @param expected - Expected CRC32 value\n * @returns true if CRC matches, false otherwise\n */\nexport function verifyCrc32(buf: Buffer, expected: number): boolean {\n return crc32(buf) === expected >>> 0;\n}\n\n/**\n * Verify CRC32 of a buffer region matches expected value\n * @param buf - Buffer containing data\n * @param offset - Start offset in buffer\n * @param length - Number of bytes to verify\n * @param expected - Expected CRC32 value\n * @returns true if CRC matches, false otherwise\n */\nexport function verifyCrc32Region(buf: Buffer, offset: number, length: number, expected: number): boolean {\n return crc32Region(buf, offset, length) === expected >>> 0;\n}\n"],"names":["CRC32_TABLE","initTable","i","c","j","crc32","buf","initial","crc","undefined","length","index","crc32Region","offset","end","verifyCrc32","expected","verifyCrc32Region"],"mappings":"AAAA;;;;;;;;;;;;CAYC,GAED,4CAA4C;AAC5C,IAAIA,cAAwB,EAAE;AAE9B,uCAAuC;AACtC,CAAA,SAASC;IACR,IAAK,IAAIC,IAAI,GAAGA,IAAI,KAAKA,IAAK;QAC5B,IAAIC,IAAID;QACR,IAAK,IAAIE,IAAI,GAAGA,IAAI,GAAGA,IAAK;YAC1B,IAAI,AAACD,CAAAA,IAAI,CAAA,MAAO,GAAG;gBACjBA,IAAI,aAAcA,MAAM;YAC1B,OAAO;gBACLA,IAAIA,MAAM;YACZ;QACF;QACAH,WAAW,CAACE,EAAE,GAAGC,MAAM,GAAG,kBAAkB;IAC9C;AACF,CAAA;AAEA;;;;;CAKC,GACD,OAAO,SAASE,MAAMC,GAAW,EAAEC,OAAgB;IACjD,IAAIC,MAAMD,YAAYE,YAAY,aAAa,CAACF,YAAY;IAE5D,IAAK,IAAIL,IAAI,GAAGA,IAAII,IAAII,MAAM,EAAER,IAAK;QACnC,IAAIS,QAAQ,AAACH,CAAAA,MAAMF,GAAG,CAACJ,EAAE,AAAD,IAAK;QAC7BM,MAAMR,WAAW,CAACW,MAAM,GAAIH,QAAQ;IACtC;IAEA,OAAO,CAACA,QAAQ,GAAG,kBAAkB;AACvC;AAEA;;;;;;;CAOC,GACD,OAAO,SAASI,YAAYN,GAAW,EAAEO,MAAc,EAAEH,MAAc,EAAEH,OAAgB;IACvF,IAAIC,MAAMD,YAAYE,YAAY,aAAa,CAACF,YAAY;IAC5D,IAAIO,MAAMD,SAASH;IAEnB,IAAK,IAAIR,IAAIW,QAAQX,IAAIY,KAAKZ,IAAK;QACjC,IAAIS,QAAQ,AAACH,CAAAA,MAAMF,GAAG,CAACJ,EAAE,AAAD,IAAK;QAC7BM,MAAMR,WAAW,CAACW,MAAM,GAAIH,QAAQ;IACtC;IAEA,OAAO,CAACA,QAAQ,GAAG,kBAAkB;AACvC;AAEA;;;;;CAKC,GACD,OAAO,SAASO,YAAYT,GAAW,EAAEU,QAAgB;IACvD,OAAOX,MAAMC,SAASU,aAAa;AACrC;AAEA;;;;;;;CAOC,GACD,OAAO,SAASC,kBAAkBX,GAAW,EAAEO,MAAc,EAAEH,MAAc,EAAEM,QAAgB;IAC7F,OAAOJ,YAAYN,KAAKO,QAAQH,YAAYM,aAAa;AAC3D"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared utilities for iterator libraries
|
|
3
|
+
*
|
|
4
|
+
* These utilities are designed to be used by:
|
|
5
|
+
* - zip-iterator
|
|
6
|
+
* - 7z-iterator
|
|
7
|
+
* - tar-iterator
|
|
8
|
+
* - Any other archive iterator library
|
|
9
|
+
*
|
|
10
|
+
* All utilities support Node.js 0.8+
|
|
11
|
+
*/
|
|
12
|
+
export { allocBuffer, allocBufferUnsafe, bufferCompare, bufferConcat, bufferEquals, bufferFrom, bufferSliceCopy, isNaN, readUInt64LE, writeUInt64LE, } from './compat.js';
|
|
13
|
+
export { crc32, crc32Region, verifyCrc32, verifyCrc32Region } from './crc32.js';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared utilities for iterator libraries
|
|
3
|
+
*
|
|
4
|
+
* These utilities are designed to be used by:
|
|
5
|
+
* - zip-iterator
|
|
6
|
+
* - 7z-iterator
|
|
7
|
+
* - tar-iterator
|
|
8
|
+
* - Any other archive iterator library
|
|
9
|
+
*
|
|
10
|
+
* All utilities support Node.js 0.8+
|
|
11
|
+
*/ export { allocBuffer, allocBufferUnsafe, bufferCompare, bufferConcat, bufferEquals, bufferFrom, bufferSliceCopy, isNaN, readUInt64LE, writeUInt64LE } from './compat.js';
|
|
12
|
+
export { crc32, crc32Region, verifyCrc32, verifyCrc32Region } from './crc32.js';
|
|
@@ -0,0 +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 {\n allocBuffer,\n allocBufferUnsafe,\n bufferCompare,\n bufferConcat,\n bufferEquals,\n bufferFrom,\n bufferSliceCopy,\n isNaN,\n readUInt64LE,\n writeUInt64LE,\n} from './compat.ts';\n\nexport { crc32, crc32Region, verifyCrc32, verifyCrc32Region } from './crc32.ts';\n"],"names":["allocBuffer","allocBufferUnsafe","bufferCompare","bufferConcat","bufferEquals","bufferFrom","bufferSliceCopy","isNaN","readUInt64LE","writeUInt64LE","crc32","crc32Region","verifyCrc32","verifyCrc32Region"],"mappings":"AAAA;;;;;;;;;;CAUC,GAED,SACEA,WAAW,EACXC,iBAAiB,EACjBC,aAAa,EACbC,YAAY,EACZC,YAAY,EACZC,UAAU,EACVC,eAAe,EACfC,KAAK,EACLC,YAAY,EACZC,aAAa,QACR,cAAc;AAErB,SAASC,KAAK,EAAEC,WAAW,EAAEC,WAAW,EAAEC,iBAAiB,QAAQ,aAAa"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "extract-base-iterator",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "Base iterator for extract iterators like tar-iterator and zip-iterator",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"extract",
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
"scripts": {
|
|
37
37
|
"build": "tsds build",
|
|
38
38
|
"format": "biome check --write --unsafe",
|
|
39
|
+
"prepublishOnly": "tsds validate",
|
|
39
40
|
"test": "mocha --no-timeouts test/**/*.test.*",
|
|
40
41
|
"test:engines": "nvu engines tsds test:node --no-timeouts",
|
|
41
42
|
"version": "tsds version"
|