extract-base-iterator 2.3.3 → 2.4.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/shared/BufferList.d.cts +60 -0
- package/dist/cjs/shared/BufferList.d.ts +60 -0
- package/dist/cjs/shared/BufferList.js +207 -0
- package/dist/cjs/shared/BufferList.js.map +1 -0
- package/dist/cjs/shared/EntryStream.d.cts +0 -1
- package/dist/cjs/shared/EntryStream.d.ts +0 -1
- package/dist/cjs/shared/EntryStream.js +1 -7
- package/dist/cjs/shared/EntryStream.js.map +1 -1
- package/dist/cjs/shared/compat.d.cts +1 -0
- package/dist/cjs/shared/compat.d.ts +1 -0
- package/dist/cjs/shared/compat.js +48 -13
- package/dist/cjs/shared/compat.js.map +1 -1
- package/dist/cjs/shared/index.d.cts +2 -1
- package/dist/cjs/shared/index.d.ts +2 -1
- package/dist/cjs/shared/index.js +7 -0
- package/dist/cjs/shared/index.js.map +1 -1
- package/dist/esm/shared/BufferList.d.ts +60 -0
- package/dist/esm/shared/BufferList.js +187 -0
- package/dist/esm/shared/BufferList.js.map +1 -0
- package/dist/esm/shared/EntryStream.d.ts +0 -1
- package/dist/esm/shared/EntryStream.js +2 -6
- package/dist/esm/shared/EntryStream.js.map +1 -1
- package/dist/esm/shared/compat.d.ts +1 -0
- package/dist/esm/shared/compat.js +28 -1
- package/dist/esm/shared/compat.js.map +1 -1
- package/dist/esm/shared/index.d.ts +2 -1
- package/dist/esm/shared/index.js +2 -1
- package/dist/esm/shared/index.js.map +1 -1
- package/package.json +7 -3
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Buffer List for Streaming
|
|
3
|
+
*
|
|
4
|
+
* Simple linked list for accumulating buffer chunks during streaming.
|
|
5
|
+
* Provides efficient append, consume, and slice operations.
|
|
6
|
+
*/
|
|
7
|
+
export default class BufferList {
|
|
8
|
+
private head;
|
|
9
|
+
private tail;
|
|
10
|
+
/** Total bytes in the buffer list */
|
|
11
|
+
length: number;
|
|
12
|
+
/**
|
|
13
|
+
* Append a buffer to the end of the list
|
|
14
|
+
*/
|
|
15
|
+
append(buf: Buffer): void;
|
|
16
|
+
/**
|
|
17
|
+
* Prepend a buffer to the front of the list
|
|
18
|
+
*/
|
|
19
|
+
prepend(buf: Buffer): void;
|
|
20
|
+
/**
|
|
21
|
+
* Consume n bytes from the front of the list
|
|
22
|
+
* Returns a new buffer containing the consumed bytes
|
|
23
|
+
*/
|
|
24
|
+
consume(n: number): Buffer;
|
|
25
|
+
/**
|
|
26
|
+
* Get a slice of the buffer without consuming
|
|
27
|
+
* Returns a new buffer containing the bytes
|
|
28
|
+
*/
|
|
29
|
+
slice(start: number, end: number): Buffer;
|
|
30
|
+
/**
|
|
31
|
+
* Read a single byte at offset without consuming
|
|
32
|
+
*/
|
|
33
|
+
readByte(offset: number): number;
|
|
34
|
+
/**
|
|
35
|
+
* Search for a byte sequence in the buffer
|
|
36
|
+
* Returns offset of first match, or -1 if not found
|
|
37
|
+
*/
|
|
38
|
+
indexOf(signature: number[], startOffset?: number): number;
|
|
39
|
+
/**
|
|
40
|
+
* Skip (consume) n bytes without returning them
|
|
41
|
+
*/
|
|
42
|
+
skip(n: number): void;
|
|
43
|
+
/**
|
|
44
|
+
* Clear all buffers
|
|
45
|
+
*/
|
|
46
|
+
clear(): void;
|
|
47
|
+
/**
|
|
48
|
+
* Check if buffer has at least n bytes available
|
|
49
|
+
*/
|
|
50
|
+
has(n: number): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Check if the buffer starts with a signature at offset 0
|
|
53
|
+
*/
|
|
54
|
+
startsWith(signature: number[]): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Get a consolidated buffer of the entire contents
|
|
57
|
+
* Note: This creates a copy, so use sparingly for large buffers
|
|
58
|
+
*/
|
|
59
|
+
toBuffer(): Buffer;
|
|
60
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Buffer List for Streaming
|
|
3
|
+
*
|
|
4
|
+
* Simple linked list for accumulating buffer chunks during streaming.
|
|
5
|
+
* Provides efficient append, consume, and slice operations.
|
|
6
|
+
*/
|
|
7
|
+
export default class BufferList {
|
|
8
|
+
private head;
|
|
9
|
+
private tail;
|
|
10
|
+
/** Total bytes in the buffer list */
|
|
11
|
+
length: number;
|
|
12
|
+
/**
|
|
13
|
+
* Append a buffer to the end of the list
|
|
14
|
+
*/
|
|
15
|
+
append(buf: Buffer): void;
|
|
16
|
+
/**
|
|
17
|
+
* Prepend a buffer to the front of the list
|
|
18
|
+
*/
|
|
19
|
+
prepend(buf: Buffer): void;
|
|
20
|
+
/**
|
|
21
|
+
* Consume n bytes from the front of the list
|
|
22
|
+
* Returns a new buffer containing the consumed bytes
|
|
23
|
+
*/
|
|
24
|
+
consume(n: number): Buffer;
|
|
25
|
+
/**
|
|
26
|
+
* Get a slice of the buffer without consuming
|
|
27
|
+
* Returns a new buffer containing the bytes
|
|
28
|
+
*/
|
|
29
|
+
slice(start: number, end: number): Buffer;
|
|
30
|
+
/**
|
|
31
|
+
* Read a single byte at offset without consuming
|
|
32
|
+
*/
|
|
33
|
+
readByte(offset: number): number;
|
|
34
|
+
/**
|
|
35
|
+
* Search for a byte sequence in the buffer
|
|
36
|
+
* Returns offset of first match, or -1 if not found
|
|
37
|
+
*/
|
|
38
|
+
indexOf(signature: number[], startOffset?: number): number;
|
|
39
|
+
/**
|
|
40
|
+
* Skip (consume) n bytes without returning them
|
|
41
|
+
*/
|
|
42
|
+
skip(n: number): void;
|
|
43
|
+
/**
|
|
44
|
+
* Clear all buffers
|
|
45
|
+
*/
|
|
46
|
+
clear(): void;
|
|
47
|
+
/**
|
|
48
|
+
* Check if buffer has at least n bytes available
|
|
49
|
+
*/
|
|
50
|
+
has(n: number): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Check if the buffer starts with a signature at offset 0
|
|
53
|
+
*/
|
|
54
|
+
startsWith(signature: number[]): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Get a consolidated buffer of the entire contents
|
|
57
|
+
* Note: This creates a copy, so use sparingly for large buffers
|
|
58
|
+
*/
|
|
59
|
+
toBuffer(): Buffer;
|
|
60
|
+
}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Buffer List for Streaming
|
|
3
|
+
*
|
|
4
|
+
* Simple linked list for accumulating buffer chunks during streaming.
|
|
5
|
+
* Provides efficient append, consume, and slice operations.
|
|
6
|
+
*/ "use strict";
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
Object.defineProperty(exports, "default", {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function() {
|
|
13
|
+
return BufferList;
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
var _extractbaseiterator = require("extract-base-iterator");
|
|
17
|
+
function _class_call_check(instance, Constructor) {
|
|
18
|
+
if (!(instance instanceof Constructor)) {
|
|
19
|
+
throw new TypeError("Cannot call a class as a function");
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
var BufferList = /*#__PURE__*/ function() {
|
|
23
|
+
"use strict";
|
|
24
|
+
function BufferList() {
|
|
25
|
+
_class_call_check(this, BufferList);
|
|
26
|
+
this.head = null;
|
|
27
|
+
this.tail = null;
|
|
28
|
+
/** Total bytes in the buffer list */ this.length = 0;
|
|
29
|
+
}
|
|
30
|
+
var _proto = BufferList.prototype;
|
|
31
|
+
/**
|
|
32
|
+
* Append a buffer to the end of the list
|
|
33
|
+
*/ _proto.append = function append(buf) {
|
|
34
|
+
if (buf.length === 0) return;
|
|
35
|
+
var node = {
|
|
36
|
+
data: buf,
|
|
37
|
+
next: null
|
|
38
|
+
};
|
|
39
|
+
if (this.tail) {
|
|
40
|
+
this.tail.next = node;
|
|
41
|
+
this.tail = node;
|
|
42
|
+
} else {
|
|
43
|
+
this.head = this.tail = node;
|
|
44
|
+
}
|
|
45
|
+
this.length += buf.length;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Prepend a buffer to the front of the list
|
|
49
|
+
*/ _proto.prepend = function prepend(buf) {
|
|
50
|
+
if (buf.length === 0) return;
|
|
51
|
+
var node = {
|
|
52
|
+
data: buf,
|
|
53
|
+
next: this.head
|
|
54
|
+
};
|
|
55
|
+
if (!this.tail) {
|
|
56
|
+
this.tail = node;
|
|
57
|
+
}
|
|
58
|
+
this.head = node;
|
|
59
|
+
this.length += buf.length;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Consume n bytes from the front of the list
|
|
63
|
+
* Returns a new buffer containing the consumed bytes
|
|
64
|
+
*/ _proto.consume = function consume(n) {
|
|
65
|
+
if (n <= 0) return (0, _extractbaseiterator.allocBuffer)(0);
|
|
66
|
+
if (n > this.length) n = this.length;
|
|
67
|
+
var result = (0, _extractbaseiterator.allocBuffer)(n);
|
|
68
|
+
var offset = 0;
|
|
69
|
+
while(offset < n && this.head){
|
|
70
|
+
var chunk = this.head.data;
|
|
71
|
+
var needed = n - offset;
|
|
72
|
+
if (chunk.length <= needed) {
|
|
73
|
+
// Use entire chunk
|
|
74
|
+
chunk.copy(result, offset);
|
|
75
|
+
offset += chunk.length;
|
|
76
|
+
this.head = this.head.next;
|
|
77
|
+
if (!this.head) this.tail = null;
|
|
78
|
+
} else {
|
|
79
|
+
// Use partial chunk
|
|
80
|
+
chunk.copy(result, offset, 0, needed);
|
|
81
|
+
this.head.data = chunk.slice(needed);
|
|
82
|
+
offset = n;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
this.length -= n;
|
|
86
|
+
return result;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Get a slice of the buffer without consuming
|
|
90
|
+
* Returns a new buffer containing the bytes
|
|
91
|
+
*/ _proto.slice = function slice(start, end) {
|
|
92
|
+
var len = end - start;
|
|
93
|
+
if (len <= 0) return (0, _extractbaseiterator.allocBuffer)(0);
|
|
94
|
+
if (start >= this.length) return (0, _extractbaseiterator.allocBuffer)(0);
|
|
95
|
+
var result = (0, _extractbaseiterator.allocBuffer)(Math.min(len, this.length - start));
|
|
96
|
+
var resultOffset = 0;
|
|
97
|
+
var bufOffset = 0;
|
|
98
|
+
var node = this.head;
|
|
99
|
+
// Skip to start position
|
|
100
|
+
while(node && bufOffset + node.data.length <= start){
|
|
101
|
+
bufOffset += node.data.length;
|
|
102
|
+
node = node.next;
|
|
103
|
+
}
|
|
104
|
+
// Copy data
|
|
105
|
+
while(node && resultOffset < result.length){
|
|
106
|
+
var chunk = node.data;
|
|
107
|
+
var chunkStart = Math.max(0, start - bufOffset);
|
|
108
|
+
var chunkEnd = Math.min(chunk.length, end - bufOffset);
|
|
109
|
+
var toCopy = chunkEnd - chunkStart;
|
|
110
|
+
if (toCopy > 0) {
|
|
111
|
+
chunk.copy(result, resultOffset, chunkStart, chunkEnd);
|
|
112
|
+
resultOffset += toCopy;
|
|
113
|
+
}
|
|
114
|
+
bufOffset += chunk.length;
|
|
115
|
+
node = node.next;
|
|
116
|
+
}
|
|
117
|
+
return result;
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* Read a single byte at offset without consuming
|
|
121
|
+
*/ _proto.readByte = function readByte(offset) {
|
|
122
|
+
if (offset < 0 || offset >= this.length) return -1;
|
|
123
|
+
var bufOffset = 0;
|
|
124
|
+
var node = this.head;
|
|
125
|
+
while(node){
|
|
126
|
+
if (offset < bufOffset + node.data.length) {
|
|
127
|
+
return node.data[offset - bufOffset];
|
|
128
|
+
}
|
|
129
|
+
bufOffset += node.data.length;
|
|
130
|
+
node = node.next;
|
|
131
|
+
}
|
|
132
|
+
return -1;
|
|
133
|
+
};
|
|
134
|
+
/**
|
|
135
|
+
* Search for a byte sequence in the buffer
|
|
136
|
+
* Returns offset of first match, or -1 if not found
|
|
137
|
+
*/ _proto.indexOf = function indexOf(signature) {
|
|
138
|
+
var startOffset = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0;
|
|
139
|
+
if (signature.length === 0) return startOffset;
|
|
140
|
+
if (startOffset + signature.length > this.length) return -1;
|
|
141
|
+
// Simple byte-by-byte search
|
|
142
|
+
// Could be optimized with KMP/Boyer-Moore for larger signatures
|
|
143
|
+
for(var i = startOffset; i <= this.length - signature.length; i++){
|
|
144
|
+
var match = true;
|
|
145
|
+
for(var j = 0; j < signature.length; j++){
|
|
146
|
+
if (this.readByte(i + j) !== signature[j]) {
|
|
147
|
+
match = false;
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (match) return i;
|
|
152
|
+
}
|
|
153
|
+
return -1;
|
|
154
|
+
};
|
|
155
|
+
/**
|
|
156
|
+
* Skip (consume) n bytes without returning them
|
|
157
|
+
*/ _proto.skip = function skip(n) {
|
|
158
|
+
if (n <= 0) return;
|
|
159
|
+
if (n >= this.length) {
|
|
160
|
+
this.clear();
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
var remaining = n;
|
|
164
|
+
while(remaining > 0 && this.head){
|
|
165
|
+
var chunk = this.head.data;
|
|
166
|
+
if (chunk.length <= remaining) {
|
|
167
|
+
remaining -= chunk.length;
|
|
168
|
+
this.head = this.head.next;
|
|
169
|
+
if (!this.head) this.tail = null;
|
|
170
|
+
} else {
|
|
171
|
+
this.head.data = chunk.slice(remaining);
|
|
172
|
+
remaining = 0;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
this.length -= n;
|
|
176
|
+
};
|
|
177
|
+
/**
|
|
178
|
+
* Clear all buffers
|
|
179
|
+
*/ _proto.clear = function clear() {
|
|
180
|
+
this.head = null;
|
|
181
|
+
this.tail = null;
|
|
182
|
+
this.length = 0;
|
|
183
|
+
};
|
|
184
|
+
/**
|
|
185
|
+
* Check if buffer has at least n bytes available
|
|
186
|
+
*/ _proto.has = function has(n) {
|
|
187
|
+
return this.length >= n;
|
|
188
|
+
};
|
|
189
|
+
/**
|
|
190
|
+
* Check if the buffer starts with a signature at offset 0
|
|
191
|
+
*/ _proto.startsWith = function startsWith(signature) {
|
|
192
|
+
if (signature.length > this.length) return false;
|
|
193
|
+
for(var i = 0; i < signature.length; i++){
|
|
194
|
+
if (this.readByte(i) !== signature[i]) return false;
|
|
195
|
+
}
|
|
196
|
+
return true;
|
|
197
|
+
};
|
|
198
|
+
/**
|
|
199
|
+
* Get a consolidated buffer of the entire contents
|
|
200
|
+
* Note: This creates a copy, so use sparingly for large buffers
|
|
201
|
+
*/ _proto.toBuffer = function toBuffer() {
|
|
202
|
+
if (this.length === 0) return (0, _extractbaseiterator.allocBuffer)(0);
|
|
203
|
+
return this.slice(0, this.length);
|
|
204
|
+
};
|
|
205
|
+
return BufferList;
|
|
206
|
+
}();
|
|
207
|
+
/* 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/BufferList.ts"],"sourcesContent":["/**\n * Buffer List for Streaming\n *\n * Simple linked list for accumulating buffer chunks during streaming.\n * Provides efficient append, consume, and slice operations.\n */\n\nimport { allocBuffer } from 'extract-base-iterator';\n\ninterface BufferNode {\n data: Buffer;\n next: BufferNode | null;\n}\n\nexport default class BufferList {\n private head: BufferNode | null = null;\n private tail: BufferNode | null = null;\n\n /** Total bytes in the buffer list */\n public length = 0;\n\n /**\n * Append a buffer to the end of the list\n */\n append(buf: Buffer): void {\n if (buf.length === 0) return;\n\n const node: BufferNode = { data: buf, next: null };\n\n if (this.tail) {\n this.tail.next = node;\n this.tail = node;\n } else {\n this.head = this.tail = node;\n }\n\n this.length += buf.length;\n }\n\n /**\n * Prepend a buffer to the front of the list\n */\n prepend(buf: Buffer): void {\n if (buf.length === 0) return;\n\n const node: BufferNode = { data: buf, next: this.head };\n\n if (!this.tail) {\n this.tail = node;\n }\n this.head = node;\n\n this.length += buf.length;\n }\n\n /**\n * Consume n bytes from the front of the list\n * Returns a new buffer containing the consumed bytes\n */\n consume(n: number): Buffer {\n if (n <= 0) return allocBuffer(0);\n if (n > this.length) n = this.length;\n\n const result = allocBuffer(n);\n let offset = 0;\n\n while (offset < n && this.head) {\n const chunk = this.head.data;\n const needed = n - offset;\n\n if (chunk.length <= needed) {\n // Use entire chunk\n chunk.copy(result, offset);\n offset += chunk.length;\n this.head = this.head.next;\n if (!this.head) this.tail = null;\n } else {\n // Use partial chunk\n chunk.copy(result, offset, 0, needed);\n this.head.data = chunk.slice(needed);\n offset = n;\n }\n }\n\n this.length -= n;\n return result;\n }\n\n /**\n * Get a slice of the buffer without consuming\n * Returns a new buffer containing the bytes\n */\n slice(start: number, end: number): Buffer {\n const len = end - start;\n if (len <= 0) return allocBuffer(0);\n if (start >= this.length) return allocBuffer(0);\n\n const result = allocBuffer(Math.min(len, this.length - start));\n let resultOffset = 0;\n let bufOffset = 0;\n let node = this.head;\n\n // Skip to start position\n while (node && bufOffset + node.data.length <= start) {\n bufOffset += node.data.length;\n node = node.next;\n }\n\n // Copy data\n while (node && resultOffset < result.length) {\n const chunk = node.data;\n const chunkStart = Math.max(0, start - bufOffset);\n const chunkEnd = Math.min(chunk.length, end - bufOffset);\n const toCopy = chunkEnd - chunkStart;\n\n if (toCopy > 0) {\n chunk.copy(result, resultOffset, chunkStart, chunkEnd);\n resultOffset += toCopy;\n }\n\n bufOffset += chunk.length;\n node = node.next;\n }\n\n return result;\n }\n\n /**\n * Read a single byte at offset without consuming\n */\n readByte(offset: number): number {\n if (offset < 0 || offset >= this.length) return -1;\n\n let bufOffset = 0;\n let node = this.head;\n\n while (node) {\n if (offset < bufOffset + node.data.length) {\n return node.data[offset - bufOffset];\n }\n bufOffset += node.data.length;\n node = node.next;\n }\n\n return -1;\n }\n\n /**\n * Search for a byte sequence in the buffer\n * Returns offset of first match, or -1 if not found\n */\n indexOf(signature: number[], startOffset = 0): number {\n if (signature.length === 0) return startOffset;\n if (startOffset + signature.length > this.length) return -1;\n\n // Simple byte-by-byte search\n // Could be optimized with KMP/Boyer-Moore for larger signatures\n for (let i = startOffset; i <= this.length - signature.length; i++) {\n let match = true;\n for (let j = 0; j < signature.length; j++) {\n if (this.readByte(i + j) !== signature[j]) {\n match = false;\n break;\n }\n }\n if (match) return i;\n }\n\n return -1;\n }\n\n /**\n * Skip (consume) n bytes without returning them\n */\n skip(n: number): void {\n if (n <= 0) return;\n if (n >= this.length) {\n this.clear();\n return;\n }\n\n let remaining = n;\n\n while (remaining > 0 && this.head) {\n const chunk = this.head.data;\n\n if (chunk.length <= remaining) {\n remaining -= chunk.length;\n this.head = this.head.next;\n if (!this.head) this.tail = null;\n } else {\n this.head.data = chunk.slice(remaining);\n remaining = 0;\n }\n }\n\n this.length -= n;\n }\n\n /**\n * Clear all buffers\n */\n clear(): void {\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n /**\n * Check if buffer has at least n bytes available\n */\n has(n: number): boolean {\n return this.length >= n;\n }\n\n /**\n * Check if the buffer starts with a signature at offset 0\n */\n startsWith(signature: number[]): boolean {\n if (signature.length > this.length) return false;\n for (let i = 0; i < signature.length; i++) {\n if (this.readByte(i) !== signature[i]) return false;\n }\n return true;\n }\n\n /**\n * Get a consolidated buffer of the entire contents\n * Note: This creates a copy, so use sparingly for large buffers\n */\n toBuffer(): Buffer {\n if (this.length === 0) return allocBuffer(0);\n return this.slice(0, this.length);\n }\n}\n"],"names":["BufferList","head","tail","length","append","buf","node","data","next","prepend","consume","n","allocBuffer","result","offset","chunk","needed","copy","slice","start","end","len","Math","min","resultOffset","bufOffset","chunkStart","max","chunkEnd","toCopy","readByte","indexOf","signature","startOffset","i","match","j","skip","clear","remaining","has","startsWith","toBuffer"],"mappings":"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"}
|
|
@@ -108,13 +108,7 @@ var EntryStream = /*#__PURE__*/ function(ReadableBase) {
|
|
|
108
108
|
function EntryStream() {
|
|
109
109
|
_class_call_check(this, EntryStream);
|
|
110
110
|
var _this;
|
|
111
|
-
|
|
112
|
-
// This prevents backpressure issues when pushing synchronously
|
|
113
|
-
_this = _call_super(this, EntryStream, [
|
|
114
|
-
{
|
|
115
|
-
highWaterMark: 1024 * 1024
|
|
116
|
-
}
|
|
117
|
-
]), _this._ended = false; // 1MB buffer
|
|
111
|
+
_this = _call_super(this, EntryStream, arguments), _this._ended = false;
|
|
118
112
|
return _this;
|
|
119
113
|
}
|
|
120
114
|
var _proto = EntryStream.prototype;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/shared/EntryStream.ts"],"sourcesContent":["/**\n * EntryStream - Simple readable stream for entry content\n *\n * Extends Readable to emit 'data', 'end', 'error' events.\n * Node 0.8 compatible via readable-stream polyfill.\n *\n * This base class is designed to be used by:\n * - zip-iterator\n * - 7z-iterator\n * - tar-iterator\n * - Any other archive iterator library\n */\n\nimport StreamCompat from 'readable-stream';\nimport Stream from 'stream';\n\n// Use native streams when available, readable-stream only for Node 0.x\nconst major = +process.versions.node.split('.')[0];\nconst ReadableBase: typeof Stream.Readable = major > 0 ? Stream.Readable : (StreamCompat.Readable as typeof Stream.Readable);\n\n/**\n * Base stream class for archive entry content.\n * Can be extended for special entry types like sparse files.\n */\nexport default class EntryStream extends ReadableBase {\n protected _ended = false;\n\n
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/shared/EntryStream.ts"],"sourcesContent":["/**\n * EntryStream - Simple readable stream for entry content\n *\n * Extends Readable to emit 'data', 'end', 'error' events.\n * Node 0.8 compatible via readable-stream polyfill.\n *\n * This base class is designed to be used by:\n * - zip-iterator\n * - 7z-iterator\n * - tar-iterator\n * - Any other archive iterator library\n */\n\nimport StreamCompat from 'readable-stream';\nimport Stream from 'stream';\n\n// Use native streams when available, readable-stream only for Node 0.x\nconst major = +process.versions.node.split('.')[0];\nconst ReadableBase: typeof Stream.Readable = major > 0 ? Stream.Readable : (StreamCompat.Readable as typeof Stream.Readable);\n\n/**\n * Base stream class for archive entry content.\n * Can be extended for special entry types like sparse files.\n */\nexport default class EntryStream extends ReadableBase {\n protected _ended = false;\n\n /**\n * Signal end of stream by pushing null\n */\n end(): void {\n if (this._ended) return;\n this._ended = true;\n this.push(null);\n }\n\n /**\n * Check if stream has ended\n */\n get ended(): boolean {\n return this._ended;\n }\n\n /**\n * Required by Readable - called when consumer wants data.\n * Data is pushed externally via push(), nothing to do here.\n */\n _read(_size: number): void {\n // Data is pushed externally, nothing to do here\n }\n}\n"],"names":["EntryStream","major","process","versions","node","split","ReadableBase","Stream","Readable","StreamCompat","_ended","end","push","_read","_size","ended"],"mappings":"AAAA;;;;;;;;;;;CAWC;;;;;;;eAaoBA;;;qEAXI;6DACN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEnB,uEAAuE;AACvE,IAAMC,QAAQ,CAACC,QAAQC,QAAQ,CAACC,IAAI,CAACC,KAAK,CAAC,IAAI,CAAC,EAAE;AAClD,IAAMC,eAAuCL,QAAQ,IAAIM,eAAM,CAACC,QAAQ,GAAIC,uBAAY,CAACD,QAAQ;AAMlF,IAAA,AAAMR,4BAAN;;cAAMA;aAAAA;gCAAAA;;gBAAN,kBAAMA,+BACTU,SAAS;;;iBADAV;IAGnB;;GAEC,GACDW,OAAAA,GAIC,GAJDA,SAAAA;QACE,IAAI,IAAI,CAACD,MAAM,EAAE;QACjB,IAAI,CAACA,MAAM,GAAG;QACd,IAAI,CAACE,IAAI,CAAC;IACZ;IASA;;;GAGC,GACDC,OAAAA,KAEC,GAFDA,SAAAA,MAAMC,KAAa;IACjB,gDAAgD;IAClD;kBAzBmBd;;YAefe,KAAAA;iBAAJ,AAHA;;GAEC,GACD;gBACE,OAAO,IAAI,CAACL,MAAM;YACpB;;;WAjBmBV;EAAoBM"}
|
|
@@ -76,3 +76,4 @@ export declare function bufferConcat(list: (Buffer | Uint8Array)[], totalLength?
|
|
|
76
76
|
* Uses self-comparison: NaN is the only value not equal to itself
|
|
77
77
|
*/
|
|
78
78
|
export declare function isNaN(value: number): boolean;
|
|
79
|
+
export declare function inflateRaw(input: Buffer): Buffer;
|
|
@@ -76,3 +76,4 @@ export declare function bufferConcat(list: (Buffer | Uint8Array)[], totalLength?
|
|
|
76
76
|
* Uses self-comparison: NaN is the only value not equal to itself
|
|
77
77
|
*/
|
|
78
78
|
export declare function isNaN(value: number): boolean;
|
|
79
|
+
export declare function inflateRaw(input: Buffer): Buffer;
|
|
@@ -1,3 +1,16 @@
|
|
|
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
|
+
*/ // ESM-compatible require - works in both CJS and ESM
|
|
1
14
|
"use strict";
|
|
2
15
|
Object.defineProperty(exports, "__esModule", {
|
|
3
16
|
value: true
|
|
@@ -30,6 +43,9 @@ _export(exports, {
|
|
|
30
43
|
get bufferSliceCopy () {
|
|
31
44
|
return bufferSliceCopy;
|
|
32
45
|
},
|
|
46
|
+
get inflateRaw () {
|
|
47
|
+
return inflateRaw;
|
|
48
|
+
},
|
|
33
49
|
get isNaN () {
|
|
34
50
|
return isNaN;
|
|
35
51
|
},
|
|
@@ -40,6 +56,7 @@ _export(exports, {
|
|
|
40
56
|
return writeUInt64LE;
|
|
41
57
|
}
|
|
42
58
|
});
|
|
59
|
+
var _module = /*#__PURE__*/ _interop_require_default(require("module"));
|
|
43
60
|
function _instanceof(left, right) {
|
|
44
61
|
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
45
62
|
return !!right[Symbol.hasInstance](left);
|
|
@@ -47,19 +64,13 @@ function _instanceof(left, right) {
|
|
|
47
64
|
return left instanceof right;
|
|
48
65
|
}
|
|
49
66
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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)
|
|
67
|
+
function _interop_require_default(obj) {
|
|
68
|
+
return obj && obj.__esModule ? obj : {
|
|
69
|
+
default: obj
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
var _require = typeof require === 'undefined' ? _module.default.createRequire(require("url").pathToFileURL(__filename).toString()) : require;
|
|
73
|
+
// Feature detection (runs once at module load)
|
|
63
74
|
var hasBufferAlloc = typeof Buffer.alloc === 'function';
|
|
64
75
|
var hasBufferAllocUnsafe = typeof Buffer.allocUnsafe === 'function';
|
|
65
76
|
var hasBufferFrom = typeof Buffer.from === 'function' && Buffer.from !== Uint8Array.from;
|
|
@@ -174,4 +185,28 @@ function isNaN(value) {
|
|
|
174
185
|
// biome-ignore lint/suspicious/noSelfCompare: NaN check pattern
|
|
175
186
|
return value !== value;
|
|
176
187
|
}
|
|
188
|
+
/**
|
|
189
|
+
* Decompress raw DEFLATE data (no zlib/gzip header)
|
|
190
|
+
* - Uses native zlib.inflateRawSync() on Node 0.11.12+
|
|
191
|
+
* - Falls back to pako for Node 0.8-0.10
|
|
192
|
+
*
|
|
193
|
+
* Version history:
|
|
194
|
+
* - Node 0.8-0.10: No zlib sync methods, use pako
|
|
195
|
+
* - Node 0.11.12+: zlib.inflateRawSync available
|
|
196
|
+
*/ // Feature detection for native zlib sync methods (Node 0.11.12+)
|
|
197
|
+
var zlib = null;
|
|
198
|
+
try {
|
|
199
|
+
zlib = _require('zlib');
|
|
200
|
+
} catch (_e) {
|
|
201
|
+
// zlib not available (shouldn't happen in Node.js)
|
|
202
|
+
}
|
|
203
|
+
var hasNativeInflateRaw = zlib !== null && typeof zlib.inflateRawSync === 'function';
|
|
204
|
+
function inflateRaw(input) {
|
|
205
|
+
if (hasNativeInflateRaw && zlib) {
|
|
206
|
+
return zlib.inflateRawSync(input);
|
|
207
|
+
}
|
|
208
|
+
// Fallback to pako for Node 0.8-0.10
|
|
209
|
+
var pako = _require('pako');
|
|
210
|
+
return bufferFrom(pako.inflateRaw(input));
|
|
211
|
+
}
|
|
177
212
|
/* 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; }
|
|
@@ -1 +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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"}
|
|
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// ESM-compatible require - works in both CJS and ESM\nimport Module from 'module';\n\nvar _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\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\n/**\n * Decompress raw DEFLATE data (no zlib/gzip header)\n * - Uses native zlib.inflateRawSync() on Node 0.11.12+\n * - Falls back to pako for Node 0.8-0.10\n *\n * Version history:\n * - Node 0.8-0.10: No zlib sync methods, use pako\n * - Node 0.11.12+: zlib.inflateRawSync available\n */\n// Feature detection for native zlib sync methods (Node 0.11.12+)\nvar zlib: typeof import('zlib') | null = null;\ntry {\n zlib = _require('zlib');\n} catch (_e) {\n // zlib not available (shouldn't happen in Node.js)\n}\nvar hasNativeInflateRaw = zlib !== null && typeof zlib.inflateRawSync === 'function';\n\nexport function inflateRaw(input: Buffer): Buffer {\n if (hasNativeInflateRaw && zlib) {\n return zlib.inflateRawSync(input);\n }\n // Fallback to pako for Node 0.8-0.10\n var pako = _require('pako');\n return bufferFrom(pako.inflateRaw(input));\n}\n"],"names":["allocBuffer","allocBufferUnsafe","bufferCompare","bufferConcat","bufferEquals","bufferFrom","bufferSliceCopy","inflateRaw","isNaN","readUInt64LE","writeUInt64LE","_require","require","Module","createRequire","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","zlib","_e","hasNativeInflateRaw","inflateRawSync","input","pako"],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
*
|
|
10
10
|
* All utilities support Node.js 0.8+
|
|
11
11
|
*/
|
|
12
|
-
export {
|
|
12
|
+
export { default as BufferList } from './BufferList.js';
|
|
13
|
+
export { allocBuffer, allocBufferUnsafe, bufferCompare, bufferConcat, bufferEquals, bufferFrom, bufferSliceCopy, inflateRaw, isNaN, readUInt64LE, writeUInt64LE, } from './compat.js';
|
|
13
14
|
export { crc32, crc32Region, verifyCrc32, verifyCrc32Region } from './crc32.js';
|
|
14
15
|
export { default as EntryStream } from './EntryStream.js';
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
*
|
|
10
10
|
* All utilities support Node.js 0.8+
|
|
11
11
|
*/
|
|
12
|
-
export {
|
|
12
|
+
export { default as BufferList } from './BufferList.js';
|
|
13
|
+
export { allocBuffer, allocBufferUnsafe, bufferCompare, bufferConcat, bufferEquals, bufferFrom, bufferSliceCopy, inflateRaw, isNaN, readUInt64LE, writeUInt64LE, } from './compat.js';
|
|
13
14
|
export { crc32, crc32Region, verifyCrc32, verifyCrc32Region } from './crc32.js';
|
|
14
15
|
export { default as EntryStream } from './EntryStream.js';
|
package/dist/cjs/shared/index.js
CHANGED
|
@@ -19,6 +19,9 @@ function _export(target, all) {
|
|
|
19
19
|
});
|
|
20
20
|
}
|
|
21
21
|
_export(exports, {
|
|
22
|
+
get BufferList () {
|
|
23
|
+
return _BufferListts.default;
|
|
24
|
+
},
|
|
22
25
|
get EntryStream () {
|
|
23
26
|
return _EntryStreamts.default;
|
|
24
27
|
},
|
|
@@ -49,6 +52,9 @@ _export(exports, {
|
|
|
49
52
|
get crc32Region () {
|
|
50
53
|
return _crc32ts.crc32Region;
|
|
51
54
|
},
|
|
55
|
+
get inflateRaw () {
|
|
56
|
+
return _compatts.inflateRaw;
|
|
57
|
+
},
|
|
52
58
|
get isNaN () {
|
|
53
59
|
return _compatts.isNaN;
|
|
54
60
|
},
|
|
@@ -65,6 +71,7 @@ _export(exports, {
|
|
|
65
71
|
return _compatts.writeUInt64LE;
|
|
66
72
|
}
|
|
67
73
|
});
|
|
74
|
+
var _BufferListts = /*#__PURE__*/ _interop_require_default(require("./BufferList.js"));
|
|
68
75
|
var _compatts = require("./compat.js");
|
|
69
76
|
var _crc32ts = require("./crc32.js");
|
|
70
77
|
var _EntryStreamts = /*#__PURE__*/ _interop_require_default(require("./EntryStream.js"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/shared/index.ts"],"sourcesContent":["/**\n * Shared utilities for iterator libraries\n *\n * These utilities are designed to be used by:\n * - zip-iterator\n * - 7z-iterator\n * - tar-iterator\n * - Any other archive iterator library\n *\n * All utilities support Node.js 0.8+\n */\n\nexport {\n allocBuffer,\n allocBufferUnsafe,\n bufferCompare,\n bufferConcat,\n bufferEquals,\n bufferFrom,\n bufferSliceCopy,\n isNaN,\n readUInt64LE,\n writeUInt64LE,\n} from './compat.ts';\
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/shared/index.ts"],"sourcesContent":["/**\n * Shared utilities for iterator libraries\n *\n * These utilities are designed to be used by:\n * - zip-iterator\n * - 7z-iterator\n * - tar-iterator\n * - Any other archive iterator library\n *\n * All utilities support Node.js 0.8+\n */\n\nexport { default as BufferList } from './BufferList.ts';\nexport {\n allocBuffer,\n allocBufferUnsafe,\n bufferCompare,\n bufferConcat,\n bufferEquals,\n bufferFrom,\n bufferSliceCopy,\n inflateRaw,\n isNaN,\n readUInt64LE,\n writeUInt64LE,\n} from './compat.ts';\nexport { crc32, crc32Region, verifyCrc32, verifyCrc32Region } from './crc32.ts';\nexport { default as EntryStream } from './EntryStream.ts';\n"],"names":["BufferList","EntryStream","allocBuffer","allocBufferUnsafe","bufferCompare","bufferConcat","bufferEquals","bufferFrom","bufferSliceCopy","crc32","crc32Region","inflateRaw","isNaN","readUInt64LE","verifyCrc32","verifyCrc32Region","writeUInt64LE"],"mappings":"AAAA;;;;;;;;;;CAUC;;;;;;;;;;;QAEmBA;eAAAA,qBAAU;;QAeVC;eAAAA,sBAAW;;QAb7BC;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,oBAAU;;QACVC;eAAAA,eAAK;;QACLC;eAAAA,sBAAY;;QAGeC;eAAAA,oBAAW;;QAAEC;eAAAA,0BAAiB;;QAFzDC;eAAAA,uBAAa;;;mEAZuB;wBAa/B;uBAC4D;oEAC5B"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Buffer List for Streaming
|
|
3
|
+
*
|
|
4
|
+
* Simple linked list for accumulating buffer chunks during streaming.
|
|
5
|
+
* Provides efficient append, consume, and slice operations.
|
|
6
|
+
*/
|
|
7
|
+
export default class BufferList {
|
|
8
|
+
private head;
|
|
9
|
+
private tail;
|
|
10
|
+
/** Total bytes in the buffer list */
|
|
11
|
+
length: number;
|
|
12
|
+
/**
|
|
13
|
+
* Append a buffer to the end of the list
|
|
14
|
+
*/
|
|
15
|
+
append(buf: Buffer): void;
|
|
16
|
+
/**
|
|
17
|
+
* Prepend a buffer to the front of the list
|
|
18
|
+
*/
|
|
19
|
+
prepend(buf: Buffer): void;
|
|
20
|
+
/**
|
|
21
|
+
* Consume n bytes from the front of the list
|
|
22
|
+
* Returns a new buffer containing the consumed bytes
|
|
23
|
+
*/
|
|
24
|
+
consume(n: number): Buffer;
|
|
25
|
+
/**
|
|
26
|
+
* Get a slice of the buffer without consuming
|
|
27
|
+
* Returns a new buffer containing the bytes
|
|
28
|
+
*/
|
|
29
|
+
slice(start: number, end: number): Buffer;
|
|
30
|
+
/**
|
|
31
|
+
* Read a single byte at offset without consuming
|
|
32
|
+
*/
|
|
33
|
+
readByte(offset: number): number;
|
|
34
|
+
/**
|
|
35
|
+
* Search for a byte sequence in the buffer
|
|
36
|
+
* Returns offset of first match, or -1 if not found
|
|
37
|
+
*/
|
|
38
|
+
indexOf(signature: number[], startOffset?: number): number;
|
|
39
|
+
/**
|
|
40
|
+
* Skip (consume) n bytes without returning them
|
|
41
|
+
*/
|
|
42
|
+
skip(n: number): void;
|
|
43
|
+
/**
|
|
44
|
+
* Clear all buffers
|
|
45
|
+
*/
|
|
46
|
+
clear(): void;
|
|
47
|
+
/**
|
|
48
|
+
* Check if buffer has at least n bytes available
|
|
49
|
+
*/
|
|
50
|
+
has(n: number): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Check if the buffer starts with a signature at offset 0
|
|
53
|
+
*/
|
|
54
|
+
startsWith(signature: number[]): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Get a consolidated buffer of the entire contents
|
|
57
|
+
* Note: This creates a copy, so use sparingly for large buffers
|
|
58
|
+
*/
|
|
59
|
+
toBuffer(): Buffer;
|
|
60
|
+
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Buffer List for Streaming
|
|
3
|
+
*
|
|
4
|
+
* Simple linked list for accumulating buffer chunks during streaming.
|
|
5
|
+
* Provides efficient append, consume, and slice operations.
|
|
6
|
+
*/ import { allocBuffer } from 'extract-base-iterator';
|
|
7
|
+
let BufferList = class BufferList {
|
|
8
|
+
/**
|
|
9
|
+
* Append a buffer to the end of the list
|
|
10
|
+
*/ append(buf) {
|
|
11
|
+
if (buf.length === 0) return;
|
|
12
|
+
const node = {
|
|
13
|
+
data: buf,
|
|
14
|
+
next: null
|
|
15
|
+
};
|
|
16
|
+
if (this.tail) {
|
|
17
|
+
this.tail.next = node;
|
|
18
|
+
this.tail = node;
|
|
19
|
+
} else {
|
|
20
|
+
this.head = this.tail = node;
|
|
21
|
+
}
|
|
22
|
+
this.length += buf.length;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Prepend a buffer to the front of the list
|
|
26
|
+
*/ prepend(buf) {
|
|
27
|
+
if (buf.length === 0) return;
|
|
28
|
+
const node = {
|
|
29
|
+
data: buf,
|
|
30
|
+
next: this.head
|
|
31
|
+
};
|
|
32
|
+
if (!this.tail) {
|
|
33
|
+
this.tail = node;
|
|
34
|
+
}
|
|
35
|
+
this.head = node;
|
|
36
|
+
this.length += buf.length;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Consume n bytes from the front of the list
|
|
40
|
+
* Returns a new buffer containing the consumed bytes
|
|
41
|
+
*/ consume(n) {
|
|
42
|
+
if (n <= 0) return allocBuffer(0);
|
|
43
|
+
if (n > this.length) n = this.length;
|
|
44
|
+
const result = allocBuffer(n);
|
|
45
|
+
let offset = 0;
|
|
46
|
+
while(offset < n && this.head){
|
|
47
|
+
const chunk = this.head.data;
|
|
48
|
+
const needed = n - offset;
|
|
49
|
+
if (chunk.length <= needed) {
|
|
50
|
+
// Use entire chunk
|
|
51
|
+
chunk.copy(result, offset);
|
|
52
|
+
offset += chunk.length;
|
|
53
|
+
this.head = this.head.next;
|
|
54
|
+
if (!this.head) this.tail = null;
|
|
55
|
+
} else {
|
|
56
|
+
// Use partial chunk
|
|
57
|
+
chunk.copy(result, offset, 0, needed);
|
|
58
|
+
this.head.data = chunk.slice(needed);
|
|
59
|
+
offset = n;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
this.length -= n;
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get a slice of the buffer without consuming
|
|
67
|
+
* Returns a new buffer containing the bytes
|
|
68
|
+
*/ slice(start, end) {
|
|
69
|
+
const len = end - start;
|
|
70
|
+
if (len <= 0) return allocBuffer(0);
|
|
71
|
+
if (start >= this.length) return allocBuffer(0);
|
|
72
|
+
const result = allocBuffer(Math.min(len, this.length - start));
|
|
73
|
+
let resultOffset = 0;
|
|
74
|
+
let bufOffset = 0;
|
|
75
|
+
let node = this.head;
|
|
76
|
+
// Skip to start position
|
|
77
|
+
while(node && bufOffset + node.data.length <= start){
|
|
78
|
+
bufOffset += node.data.length;
|
|
79
|
+
node = node.next;
|
|
80
|
+
}
|
|
81
|
+
// Copy data
|
|
82
|
+
while(node && resultOffset < result.length){
|
|
83
|
+
const chunk = node.data;
|
|
84
|
+
const chunkStart = Math.max(0, start - bufOffset);
|
|
85
|
+
const chunkEnd = Math.min(chunk.length, end - bufOffset);
|
|
86
|
+
const toCopy = chunkEnd - chunkStart;
|
|
87
|
+
if (toCopy > 0) {
|
|
88
|
+
chunk.copy(result, resultOffset, chunkStart, chunkEnd);
|
|
89
|
+
resultOffset += toCopy;
|
|
90
|
+
}
|
|
91
|
+
bufOffset += chunk.length;
|
|
92
|
+
node = node.next;
|
|
93
|
+
}
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Read a single byte at offset without consuming
|
|
98
|
+
*/ readByte(offset) {
|
|
99
|
+
if (offset < 0 || offset >= this.length) return -1;
|
|
100
|
+
let bufOffset = 0;
|
|
101
|
+
let node = this.head;
|
|
102
|
+
while(node){
|
|
103
|
+
if (offset < bufOffset + node.data.length) {
|
|
104
|
+
return node.data[offset - bufOffset];
|
|
105
|
+
}
|
|
106
|
+
bufOffset += node.data.length;
|
|
107
|
+
node = node.next;
|
|
108
|
+
}
|
|
109
|
+
return -1;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Search for a byte sequence in the buffer
|
|
113
|
+
* Returns offset of first match, or -1 if not found
|
|
114
|
+
*/ indexOf(signature, startOffset = 0) {
|
|
115
|
+
if (signature.length === 0) return startOffset;
|
|
116
|
+
if (startOffset + signature.length > this.length) return -1;
|
|
117
|
+
// Simple byte-by-byte search
|
|
118
|
+
// Could be optimized with KMP/Boyer-Moore for larger signatures
|
|
119
|
+
for(let i = startOffset; i <= this.length - signature.length; i++){
|
|
120
|
+
let match = true;
|
|
121
|
+
for(let j = 0; j < signature.length; j++){
|
|
122
|
+
if (this.readByte(i + j) !== signature[j]) {
|
|
123
|
+
match = false;
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (match) return i;
|
|
128
|
+
}
|
|
129
|
+
return -1;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Skip (consume) n bytes without returning them
|
|
133
|
+
*/ skip(n) {
|
|
134
|
+
if (n <= 0) return;
|
|
135
|
+
if (n >= this.length) {
|
|
136
|
+
this.clear();
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
let remaining = n;
|
|
140
|
+
while(remaining > 0 && this.head){
|
|
141
|
+
const chunk = this.head.data;
|
|
142
|
+
if (chunk.length <= remaining) {
|
|
143
|
+
remaining -= chunk.length;
|
|
144
|
+
this.head = this.head.next;
|
|
145
|
+
if (!this.head) this.tail = null;
|
|
146
|
+
} else {
|
|
147
|
+
this.head.data = chunk.slice(remaining);
|
|
148
|
+
remaining = 0;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
this.length -= n;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Clear all buffers
|
|
155
|
+
*/ clear() {
|
|
156
|
+
this.head = null;
|
|
157
|
+
this.tail = null;
|
|
158
|
+
this.length = 0;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Check if buffer has at least n bytes available
|
|
162
|
+
*/ has(n) {
|
|
163
|
+
return this.length >= n;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Check if the buffer starts with a signature at offset 0
|
|
167
|
+
*/ startsWith(signature) {
|
|
168
|
+
if (signature.length > this.length) return false;
|
|
169
|
+
for(let i = 0; i < signature.length; i++){
|
|
170
|
+
if (this.readByte(i) !== signature[i]) return false;
|
|
171
|
+
}
|
|
172
|
+
return true;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Get a consolidated buffer of the entire contents
|
|
176
|
+
* Note: This creates a copy, so use sparingly for large buffers
|
|
177
|
+
*/ toBuffer() {
|
|
178
|
+
if (this.length === 0) return allocBuffer(0);
|
|
179
|
+
return this.slice(0, this.length);
|
|
180
|
+
}
|
|
181
|
+
constructor(){
|
|
182
|
+
this.head = null;
|
|
183
|
+
this.tail = null;
|
|
184
|
+
/** Total bytes in the buffer list */ this.length = 0;
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
export { BufferList as default };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/shared/BufferList.ts"],"sourcesContent":["/**\n * Buffer List for Streaming\n *\n * Simple linked list for accumulating buffer chunks during streaming.\n * Provides efficient append, consume, and slice operations.\n */\n\nimport { allocBuffer } from 'extract-base-iterator';\n\ninterface BufferNode {\n data: Buffer;\n next: BufferNode | null;\n}\n\nexport default class BufferList {\n private head: BufferNode | null = null;\n private tail: BufferNode | null = null;\n\n /** Total bytes in the buffer list */\n public length = 0;\n\n /**\n * Append a buffer to the end of the list\n */\n append(buf: Buffer): void {\n if (buf.length === 0) return;\n\n const node: BufferNode = { data: buf, next: null };\n\n if (this.tail) {\n this.tail.next = node;\n this.tail = node;\n } else {\n this.head = this.tail = node;\n }\n\n this.length += buf.length;\n }\n\n /**\n * Prepend a buffer to the front of the list\n */\n prepend(buf: Buffer): void {\n if (buf.length === 0) return;\n\n const node: BufferNode = { data: buf, next: this.head };\n\n if (!this.tail) {\n this.tail = node;\n }\n this.head = node;\n\n this.length += buf.length;\n }\n\n /**\n * Consume n bytes from the front of the list\n * Returns a new buffer containing the consumed bytes\n */\n consume(n: number): Buffer {\n if (n <= 0) return allocBuffer(0);\n if (n > this.length) n = this.length;\n\n const result = allocBuffer(n);\n let offset = 0;\n\n while (offset < n && this.head) {\n const chunk = this.head.data;\n const needed = n - offset;\n\n if (chunk.length <= needed) {\n // Use entire chunk\n chunk.copy(result, offset);\n offset += chunk.length;\n this.head = this.head.next;\n if (!this.head) this.tail = null;\n } else {\n // Use partial chunk\n chunk.copy(result, offset, 0, needed);\n this.head.data = chunk.slice(needed);\n offset = n;\n }\n }\n\n this.length -= n;\n return result;\n }\n\n /**\n * Get a slice of the buffer without consuming\n * Returns a new buffer containing the bytes\n */\n slice(start: number, end: number): Buffer {\n const len = end - start;\n if (len <= 0) return allocBuffer(0);\n if (start >= this.length) return allocBuffer(0);\n\n const result = allocBuffer(Math.min(len, this.length - start));\n let resultOffset = 0;\n let bufOffset = 0;\n let node = this.head;\n\n // Skip to start position\n while (node && bufOffset + node.data.length <= start) {\n bufOffset += node.data.length;\n node = node.next;\n }\n\n // Copy data\n while (node && resultOffset < result.length) {\n const chunk = node.data;\n const chunkStart = Math.max(0, start - bufOffset);\n const chunkEnd = Math.min(chunk.length, end - bufOffset);\n const toCopy = chunkEnd - chunkStart;\n\n if (toCopy > 0) {\n chunk.copy(result, resultOffset, chunkStart, chunkEnd);\n resultOffset += toCopy;\n }\n\n bufOffset += chunk.length;\n node = node.next;\n }\n\n return result;\n }\n\n /**\n * Read a single byte at offset without consuming\n */\n readByte(offset: number): number {\n if (offset < 0 || offset >= this.length) return -1;\n\n let bufOffset = 0;\n let node = this.head;\n\n while (node) {\n if (offset < bufOffset + node.data.length) {\n return node.data[offset - bufOffset];\n }\n bufOffset += node.data.length;\n node = node.next;\n }\n\n return -1;\n }\n\n /**\n * Search for a byte sequence in the buffer\n * Returns offset of first match, or -1 if not found\n */\n indexOf(signature: number[], startOffset = 0): number {\n if (signature.length === 0) return startOffset;\n if (startOffset + signature.length > this.length) return -1;\n\n // Simple byte-by-byte search\n // Could be optimized with KMP/Boyer-Moore for larger signatures\n for (let i = startOffset; i <= this.length - signature.length; i++) {\n let match = true;\n for (let j = 0; j < signature.length; j++) {\n if (this.readByte(i + j) !== signature[j]) {\n match = false;\n break;\n }\n }\n if (match) return i;\n }\n\n return -1;\n }\n\n /**\n * Skip (consume) n bytes without returning them\n */\n skip(n: number): void {\n if (n <= 0) return;\n if (n >= this.length) {\n this.clear();\n return;\n }\n\n let remaining = n;\n\n while (remaining > 0 && this.head) {\n const chunk = this.head.data;\n\n if (chunk.length <= remaining) {\n remaining -= chunk.length;\n this.head = this.head.next;\n if (!this.head) this.tail = null;\n } else {\n this.head.data = chunk.slice(remaining);\n remaining = 0;\n }\n }\n\n this.length -= n;\n }\n\n /**\n * Clear all buffers\n */\n clear(): void {\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n /**\n * Check if buffer has at least n bytes available\n */\n has(n: number): boolean {\n return this.length >= n;\n }\n\n /**\n * Check if the buffer starts with a signature at offset 0\n */\n startsWith(signature: number[]): boolean {\n if (signature.length > this.length) return false;\n for (let i = 0; i < signature.length; i++) {\n if (this.readByte(i) !== signature[i]) return false;\n }\n return true;\n }\n\n /**\n * Get a consolidated buffer of the entire contents\n * Note: This creates a copy, so use sparingly for large buffers\n */\n toBuffer(): Buffer {\n if (this.length === 0) return allocBuffer(0);\n return this.slice(0, this.length);\n }\n}\n"],"names":["allocBuffer","BufferList","append","buf","length","node","data","next","tail","head","prepend","consume","n","result","offset","chunk","needed","copy","slice","start","end","len","Math","min","resultOffset","bufOffset","chunkStart","max","chunkEnd","toCopy","readByte","indexOf","signature","startOffset","i","match","j","skip","clear","remaining","has","startsWith","toBuffer"],"mappings":"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"}
|
|
@@ -33,12 +33,8 @@ let EntryStream = class EntryStream extends ReadableBase {
|
|
|
33
33
|
*/ _read(_size) {
|
|
34
34
|
// Data is pushed externally, nothing to do here
|
|
35
35
|
}
|
|
36
|
-
constructor(){
|
|
37
|
-
|
|
38
|
-
// This prevents backpressure issues when pushing synchronously
|
|
39
|
-
super({
|
|
40
|
-
highWaterMark: 1024 * 1024
|
|
41
|
-
}), this._ended = false; // 1MB buffer
|
|
36
|
+
constructor(...args){
|
|
37
|
+
super(...args), this._ended = false;
|
|
42
38
|
}
|
|
43
39
|
};
|
|
44
40
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/shared/EntryStream.ts"],"sourcesContent":["/**\n * EntryStream - Simple readable stream for entry content\n *\n * Extends Readable to emit 'data', 'end', 'error' events.\n * Node 0.8 compatible via readable-stream polyfill.\n *\n * This base class is designed to be used by:\n * - zip-iterator\n * - 7z-iterator\n * - tar-iterator\n * - Any other archive iterator library\n */\n\nimport StreamCompat from 'readable-stream';\nimport Stream from 'stream';\n\n// Use native streams when available, readable-stream only for Node 0.x\nconst major = +process.versions.node.split('.')[0];\nconst ReadableBase: typeof Stream.Readable = major > 0 ? Stream.Readable : (StreamCompat.Readable as typeof Stream.Readable);\n\n/**\n * Base stream class for archive entry content.\n * Can be extended for special entry types like sparse files.\n */\nexport default class EntryStream extends ReadableBase {\n protected _ended = false;\n\n
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/shared/EntryStream.ts"],"sourcesContent":["/**\n * EntryStream - Simple readable stream for entry content\n *\n * Extends Readable to emit 'data', 'end', 'error' events.\n * Node 0.8 compatible via readable-stream polyfill.\n *\n * This base class is designed to be used by:\n * - zip-iterator\n * - 7z-iterator\n * - tar-iterator\n * - Any other archive iterator library\n */\n\nimport StreamCompat from 'readable-stream';\nimport Stream from 'stream';\n\n// Use native streams when available, readable-stream only for Node 0.x\nconst major = +process.versions.node.split('.')[0];\nconst ReadableBase: typeof Stream.Readable = major > 0 ? Stream.Readable : (StreamCompat.Readable as typeof Stream.Readable);\n\n/**\n * Base stream class for archive entry content.\n * Can be extended for special entry types like sparse files.\n */\nexport default class EntryStream extends ReadableBase {\n protected _ended = false;\n\n /**\n * Signal end of stream by pushing null\n */\n end(): void {\n if (this._ended) return;\n this._ended = true;\n this.push(null);\n }\n\n /**\n * Check if stream has ended\n */\n get ended(): boolean {\n return this._ended;\n }\n\n /**\n * Required by Readable - called when consumer wants data.\n * Data is pushed externally via push(), nothing to do here.\n */\n _read(_size: number): void {\n // Data is pushed externally, nothing to do here\n }\n}\n"],"names":["StreamCompat","Stream","major","process","versions","node","split","ReadableBase","Readable","EntryStream","end","_ended","push","ended","_read","_size"],"mappings":"AAAA;;;;;;;;;;;CAWC,GAED,OAAOA,kBAAkB,kBAAkB;AAC3C,OAAOC,YAAY,SAAS;AAE5B,uEAAuE;AACvE,MAAMC,QAAQ,CAACC,QAAQC,QAAQ,CAACC,IAAI,CAACC,KAAK,CAAC,IAAI,CAAC,EAAE;AAClD,MAAMC,eAAuCL,QAAQ,IAAID,OAAOO,QAAQ,GAAIR,aAAaQ,QAAQ;AAMlF,IAAA,AAAMC,cAAN,MAAMA,oBAAoBF;IAGvC;;GAEC,GACDG,MAAY;QACV,IAAI,IAAI,CAACC,MAAM,EAAE;QACjB,IAAI,CAACA,MAAM,GAAG;QACd,IAAI,CAACC,IAAI,CAAC;IACZ;IAEA;;GAEC,GACD,IAAIC,QAAiB;QACnB,OAAO,IAAI,CAACF,MAAM;IACpB;IAEA;;;GAGC,GACDG,MAAMC,KAAa,EAAQ;IACzB,gDAAgD;IAClD;;QAzBa,qBACHJ,SAAS;;AAyBrB;AA9BA;;;CAGC,GACD,SAAqBF,yBA0BpB"}
|
|
@@ -76,3 +76,4 @@ export declare function bufferConcat(list: (Buffer | Uint8Array)[], totalLength?
|
|
|
76
76
|
* Uses self-comparison: NaN is the only value not equal to itself
|
|
77
77
|
*/
|
|
78
78
|
export declare function isNaN(value: number): boolean;
|
|
79
|
+
export declare function inflateRaw(input: Buffer): Buffer;
|
|
@@ -10,7 +10,10 @@
|
|
|
10
10
|
* - Node 10+: Warns or errors on `new Buffer()`
|
|
11
11
|
*
|
|
12
12
|
* Solution: Feature detection with graceful fallback in both directions.
|
|
13
|
-
*/ //
|
|
13
|
+
*/ // ESM-compatible require - works in both CJS and ESM
|
|
14
|
+
import Module from 'module';
|
|
15
|
+
var _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;
|
|
16
|
+
// Feature detection (runs once at module load)
|
|
14
17
|
var hasBufferAlloc = typeof Buffer.alloc === 'function';
|
|
15
18
|
var hasBufferAllocUnsafe = typeof Buffer.allocUnsafe === 'function';
|
|
16
19
|
var hasBufferFrom = typeof Buffer.from === 'function' && Buffer.from !== Uint8Array.from;
|
|
@@ -171,3 +174,27 @@ export function isNaN(value) {
|
|
|
171
174
|
// biome-ignore lint/suspicious/noSelfCompare: NaN check pattern
|
|
172
175
|
return value !== value;
|
|
173
176
|
}
|
|
177
|
+
/**
|
|
178
|
+
* Decompress raw DEFLATE data (no zlib/gzip header)
|
|
179
|
+
* - Uses native zlib.inflateRawSync() on Node 0.11.12+
|
|
180
|
+
* - Falls back to pako for Node 0.8-0.10
|
|
181
|
+
*
|
|
182
|
+
* Version history:
|
|
183
|
+
* - Node 0.8-0.10: No zlib sync methods, use pako
|
|
184
|
+
* - Node 0.11.12+: zlib.inflateRawSync available
|
|
185
|
+
*/ // Feature detection for native zlib sync methods (Node 0.11.12+)
|
|
186
|
+
var zlib = null;
|
|
187
|
+
try {
|
|
188
|
+
zlib = _require('zlib');
|
|
189
|
+
} catch (_e) {
|
|
190
|
+
// zlib not available (shouldn't happen in Node.js)
|
|
191
|
+
}
|
|
192
|
+
var hasNativeInflateRaw = zlib !== null && typeof zlib.inflateRawSync === 'function';
|
|
193
|
+
export function inflateRaw(input) {
|
|
194
|
+
if (hasNativeInflateRaw && zlib) {
|
|
195
|
+
return zlib.inflateRawSync(input);
|
|
196
|
+
}
|
|
197
|
+
// Fallback to pako for Node 0.8-0.10
|
|
198
|
+
var pako = _require('pako');
|
|
199
|
+
return bufferFrom(pako.inflateRaw(input));
|
|
200
|
+
}
|
|
@@ -1 +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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"}
|
|
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// ESM-compatible require - works in both CJS and ESM\nimport Module from 'module';\n\nvar _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\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\n/**\n * Decompress raw DEFLATE data (no zlib/gzip header)\n * - Uses native zlib.inflateRawSync() on Node 0.11.12+\n * - Falls back to pako for Node 0.8-0.10\n *\n * Version history:\n * - Node 0.8-0.10: No zlib sync methods, use pako\n * - Node 0.11.12+: zlib.inflateRawSync available\n */\n// Feature detection for native zlib sync methods (Node 0.11.12+)\nvar zlib: typeof import('zlib') | null = null;\ntry {\n zlib = _require('zlib');\n} catch (_e) {\n // zlib not available (shouldn't happen in Node.js)\n}\nvar hasNativeInflateRaw = zlib !== null && typeof zlib.inflateRawSync === 'function';\n\nexport function inflateRaw(input: Buffer): Buffer {\n if (hasNativeInflateRaw && zlib) {\n return zlib.inflateRawSync(input);\n }\n // Fallback to pako for Node 0.8-0.10\n var pako = _require('pako');\n return bufferFrom(pako.inflateRaw(input));\n}\n"],"names":["Module","_require","require","createRequire","url","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","zlib","_e","hasNativeInflateRaw","inflateRawSync","inflateRaw","input","pako"],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
*
|
|
10
10
|
* All utilities support Node.js 0.8+
|
|
11
11
|
*/
|
|
12
|
-
export {
|
|
12
|
+
export { default as BufferList } from './BufferList.js';
|
|
13
|
+
export { allocBuffer, allocBufferUnsafe, bufferCompare, bufferConcat, bufferEquals, bufferFrom, bufferSliceCopy, inflateRaw, isNaN, readUInt64LE, writeUInt64LE, } from './compat.js';
|
|
13
14
|
export { crc32, crc32Region, verifyCrc32, verifyCrc32Region } from './crc32.js';
|
|
14
15
|
export { default as EntryStream } from './EntryStream.js';
|
package/dist/esm/shared/index.js
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* - Any other archive iterator library
|
|
9
9
|
*
|
|
10
10
|
* All utilities support Node.js 0.8+
|
|
11
|
-
*/ export {
|
|
11
|
+
*/ export { default as BufferList } from './BufferList.js';
|
|
12
|
+
export { allocBuffer, allocBufferUnsafe, bufferCompare, bufferConcat, bufferEquals, bufferFrom, bufferSliceCopy, inflateRaw, isNaN, readUInt64LE, writeUInt64LE } from './compat.js';
|
|
12
13
|
export { crc32, crc32Region, verifyCrc32, verifyCrc32Region } from './crc32.js';
|
|
13
14
|
export { default as EntryStream } from './EntryStream.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/shared/index.ts"],"sourcesContent":["/**\n * Shared utilities for iterator libraries\n *\n * These utilities are designed to be used by:\n * - zip-iterator\n * - 7z-iterator\n * - tar-iterator\n * - Any other archive iterator library\n *\n * All utilities support Node.js 0.8+\n */\n\nexport {\n allocBuffer,\n allocBufferUnsafe,\n bufferCompare,\n bufferConcat,\n bufferEquals,\n bufferFrom,\n bufferSliceCopy,\n isNaN,\n readUInt64LE,\n writeUInt64LE,\n} from './compat.ts';\
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/extract-base-iterator/src/shared/index.ts"],"sourcesContent":["/**\n * Shared utilities for iterator libraries\n *\n * These utilities are designed to be used by:\n * - zip-iterator\n * - 7z-iterator\n * - tar-iterator\n * - Any other archive iterator library\n *\n * All utilities support Node.js 0.8+\n */\n\nexport { default as BufferList } from './BufferList.ts';\nexport {\n allocBuffer,\n allocBufferUnsafe,\n bufferCompare,\n bufferConcat,\n bufferEquals,\n bufferFrom,\n bufferSliceCopy,\n inflateRaw,\n isNaN,\n readUInt64LE,\n writeUInt64LE,\n} from './compat.ts';\nexport { crc32, crc32Region, verifyCrc32, verifyCrc32Region } from './crc32.ts';\nexport { default as EntryStream } from './EntryStream.ts';\n"],"names":["default","BufferList","allocBuffer","allocBufferUnsafe","bufferCompare","bufferConcat","bufferEquals","bufferFrom","bufferSliceCopy","inflateRaw","isNaN","readUInt64LE","writeUInt64LE","crc32","crc32Region","verifyCrc32","verifyCrc32Region","EntryStream"],"mappings":"AAAA;;;;;;;;;;CAUC,GAED,SAASA,WAAWC,UAAU,QAAQ,kBAAkB;AACxD,SACEC,WAAW,EACXC,iBAAiB,EACjBC,aAAa,EACbC,YAAY,EACZC,YAAY,EACZC,UAAU,EACVC,eAAe,EACfC,UAAU,EACVC,KAAK,EACLC,YAAY,EACZC,aAAa,QACR,cAAc;AACrB,SAASC,KAAK,EAAEC,WAAW,EAAEC,WAAW,EAAEC,iBAAiB,QAAQ,aAAa;AAChF,SAAShB,WAAWiB,WAAW,QAAQ,mBAAmB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "extract-base-iterator",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"description": "Base iterator for extract iterators like tar-iterator and zip-iterator",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"extract",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"build": "tsds build",
|
|
38
38
|
"format": "biome check --write --unsafe",
|
|
39
39
|
"prepublishOnly": "tsds validate",
|
|
40
|
-
"test": "
|
|
40
|
+
"test": "tsds test:node --no-timeouts",
|
|
41
41
|
"test:engines": "nvu engines tsds test:node --no-timeouts",
|
|
42
42
|
"version": "tsds version"
|
|
43
43
|
},
|
|
@@ -48,19 +48,23 @@
|
|
|
48
48
|
"mkdirp-classic": "*",
|
|
49
49
|
"next-tick": "*",
|
|
50
50
|
"object-assign": "*",
|
|
51
|
+
"pako": "*",
|
|
51
52
|
"queue-cb": "*",
|
|
52
53
|
"readable-stream": "^2.3.8",
|
|
53
54
|
"rimraf2": "*",
|
|
54
55
|
"stack-base-iterator": "*"
|
|
55
56
|
},
|
|
56
57
|
"devDependencies": {
|
|
58
|
+
"@biomejs/biome": "*",
|
|
57
59
|
"@types/mocha": "*",
|
|
58
60
|
"@types/node": "*",
|
|
59
61
|
"cr": "*",
|
|
60
62
|
"fs-iterator": "*",
|
|
61
63
|
"fs-stats-spys": "*",
|
|
62
64
|
"lodash.find": "*",
|
|
63
|
-
"
|
|
65
|
+
"node-version-use": "*",
|
|
66
|
+
"pinkie-promise": "*",
|
|
67
|
+
"ts-dev-stack": "*"
|
|
64
68
|
},
|
|
65
69
|
"engines": {
|
|
66
70
|
"node": ">=0.8"
|