extract-base-iterator 2.3.2 → 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.
@@ -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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"}
@@ -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
- * 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)
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 { allocBuffer, allocBufferUnsafe, bufferCompare, bufferConcat, bufferEquals, bufferFrom, bufferSliceCopy, isNaN, readUInt64LE, writeUInt64LE, } from './compat.js';
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 { allocBuffer, allocBufferUnsafe, bufferCompare, bufferConcat, bufferEquals, bufferFrom, bufferSliceCopy, isNaN, readUInt64LE, writeUInt64LE, } from './compat.js';
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';
@@ -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';\n\nexport { crc32, crc32Region, verifyCrc32, verifyCrc32Region } from './crc32.ts';\n\nexport { default as EntryStream } from './EntryStream.ts';\n"],"names":["EntryStream","allocBuffer","allocBufferUnsafe","bufferCompare","bufferConcat","bufferEquals","bufferFrom","bufferSliceCopy","crc32","crc32Region","isNaN","readUInt64LE","verifyCrc32","verifyCrc32Region","writeUInt64LE"],"mappings":"AAAA;;;;;;;;;;CAUC;;;;;;;;;;;QAiBmBA;eAAAA,sBAAW;;QAd7BC;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;oEAE5B"}
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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"}
@@ -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
- */ // Feature detection (runs once at module load)
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 { allocBuffer, allocBufferUnsafe, bufferCompare, bufferConcat, bufferEquals, bufferFrom, bufferSliceCopy, isNaN, readUInt64LE, writeUInt64LE, } from './compat.js';
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';
@@ -8,6 +8,7 @@
8
8
  * - Any other archive iterator library
9
9
  *
10
10
  * All utilities support Node.js 0.8+
11
- */ export { allocBuffer, allocBufferUnsafe, bufferCompare, bufferConcat, bufferEquals, bufferFrom, bufferSliceCopy, isNaN, readUInt64LE, writeUInt64LE } from './compat.js';
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';\n\nexport { crc32, crc32Region, verifyCrc32, verifyCrc32Region } from './crc32.ts';\n\nexport { default as EntryStream } from './EntryStream.ts';\n"],"names":["allocBuffer","allocBufferUnsafe","bufferCompare","bufferConcat","bufferEquals","bufferFrom","bufferSliceCopy","isNaN","readUInt64LE","writeUInt64LE","crc32","crc32Region","verifyCrc32","verifyCrc32Region","default","EntryStream"],"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;AAEhF,SAASC,WAAWC,WAAW,QAAQ,mBAAmB"}
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.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": "mocha --no-timeouts test/**/*.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
- "pinkie-promise": "*"
65
+ "node-version-use": "*",
66
+ "pinkie-promise": "*",
67
+ "ts-dev-stack": "*"
64
68
  },
65
69
  "engines": {
66
70
  "node": ">=0.8"