tar-xz 6.1.0 → 6.1.1

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/CHANGELOG.md CHANGED
@@ -2,6 +2,27 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [6.1.1] - 2026-05-06
6
+
7
+ ### Changed
8
+ - enrich package metadata (description + keywords) for 3 packages (#141) ([5f0bb5b](https://github.com/oorabona/node-liblzma/commit/5f0bb5b))
9
+ - document TarEntryTypeValue with JSDoc + expose in index (#137) (tar-xz) ([fe56124](https://github.com/oorabona/node-liblzma/commit/fe56124))
10
+ - add tar-xz API and nxz CLI to GitHub Pages (#133) (pages) ([2c22298](https://github.com/oorabona/node-liblzma/commit/2c22298))
11
+ - close 7 final coverage partials to reach 100% (#131) (tar-xz) ([0830fac](https://github.com/oorabona/node-liblzma/commit/0830fac))
12
+ - close 7 coverage partials with surgical v8 ignores (#130) (tar-xz) ([de86c0c](https://github.com/oorabona/node-liblzma/commit/de86c0c))
13
+ - close extract.ts coverage partials with v8 ignores (#129) (tar-xz) ([3abb041](https://github.com/oorabona/node-liblzma/commit/3abb041))
14
+ - close file.ts coverage partials with tests + v8 ignores (#128) (tar-xz) ([8e51020](https://github.com/oorabona/node-liblzma/commit/8e51020))
15
+ - cover three trivial file.ts branches (mtime=0, FILE type, mode=0) (#126) (tar-xz) ([5c496f8](https://github.com/oorabona/node-liblzma/commit/5c496f8))
16
+ - close remaining coverage gaps to 100% lines (#125) (tar-xz) ([7189f8e](https://github.com/oorabona/node-liblzma/commit/7189f8e))
17
+ - cover toAsyncIterable across Node and Browser variants (#124) (tar-xz) ([8c0f994](https://github.com/oorabona/node-liblzma/commit/8c0f994))
18
+ - wrap defensive-unreachable branches with v8 ignore start/stop (#123) (tar-xz) ([add1724](https://github.com/oorabona/node-liblzma/commit/add1724))
19
+ - remove dead biome suppression in tar-xz node-api spec (#119) (lint) ([49c7f14](https://github.com/oorabona/node-liblzma/commit/49c7f14))
20
+ - biome warnings sweep + cognitive-complexity extract-method (63→1) (#115) ([ad2e18f](https://github.com/oorabona/node-liblzma/commit/ad2e18f))
21
+
22
+ ### Fixed
23
+ - use absolute URLs in typedoc navigationLinks (#136) (docs) ([cd1185c](https://github.com/oorabona/node-liblzma/commit/cd1185c))
24
+ - include CHANGELOG.md and SECURITY.md in published tarball (tar-xz) ([408e955](https://github.com/oorabona/node-liblzma/commit/408e955))
25
+
5
26
  ## [6.1.0] - 2026-04-29
6
27
 
7
28
  ### ⚠️ BREAKING CHANGES
@@ -131,6 +152,8 @@ See [README.md § Migration v5 → v6](./README.md#migration-v5--v6) for full co
131
152
 
132
153
  - Workspace package versions synchronized to npm registry (3.2.0 → 5.0.0). Internal infrastructure updates (CI workflows, lockfile maintenance, anti-flake test cleanup). No API changes.
133
154
 
134
- [Unreleased]: https://github.com/oorabona/node-liblzma/compare/v6.1.0...HEAD
155
+ [Unreleased]: https://github.com/oorabona/node-liblzma/compare/v6.1.1...HEAD
135
156
  [v6.1.0]: https://github.com/oorabona/node-liblzma/releases/tag/v6.1.0
136
- [6.1.0]: https://github.com/oorabona/node-liblzma/releases/tag/v6.1.0
157
+ [6.1.0]: https://github.com/oorabona/node-liblzma/releases/tag/v6.1.0
158
+ [v6.1.1]: https://github.com/oorabona/node-liblzma/releases/tag/v6.1.1
159
+ [6.1.1]: https://github.com/oorabona/node-liblzma/releases/tag/v6.1.1
@@ -1 +1 @@
1
- {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/browser/extract.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EAEd,MAAM,aAAa,CAAC;AAgErB;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAuB,OAAO,CAC5B,KAAK,EAAE,QAAQ,EACf,OAAO,GAAE,cAAmB,GAC3B,aAAa,CAAC,gBAAgB,CAAC,CAqCjC"}
1
+ {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/browser/extract.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EAEd,MAAM,aAAa,CAAC;AAwFrB;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAuB,OAAO,CAC5B,KAAK,EAAE,QAAQ,EACf,OAAO,GAAE,cAAmB,GAC3B,aAAa,CAAC,gBAAgB,CAAC,CAqCjC"}
@@ -9,6 +9,24 @@ import { TarEntryType, } from '../types.js';
9
9
  /**
10
10
  * Parse TAR data into entries
11
11
  */
12
+ /**
13
+ * Handle a PAX_HEADER block: parse its attributes and advance the offset.
14
+ * Returns the updated offset and the parsed PAX attributes.
15
+ */
16
+ function parsePaxHeaderBlock(data, offset, size) {
17
+ const paxData = data.subarray(offset, offset + size);
18
+ const newOffset = offset + size + calculatePadding(size);
19
+ return { offset: newOffset, paxAttrs: parsePaxData(paxData) };
20
+ }
21
+ /**
22
+ * Extract entry content bytes and advance the offset past the content + padding.
23
+ * Returns the updated offset and the content Uint8Array.
24
+ */
25
+ function extractEntryContent(data, offset, size) {
26
+ const contentData = size > 0 ? data.subarray(offset, offset + size) : new Uint8Array(0);
27
+ const newOffset = offset + size + calculatePadding(size);
28
+ return { offset: newOffset, contentData };
29
+ }
12
30
  function parseTar(data) {
13
31
  const entries = [];
14
32
  let offset = 0;
@@ -33,10 +51,7 @@ function parseTar(data) {
33
51
  }
34
52
  // Handle PAX headers
35
53
  if (entry.type === TarEntryType.PAX_HEADER) {
36
- const paxSize = entry.size;
37
- const paxData = data.subarray(offset, offset + paxSize);
38
- offset += paxSize + calculatePadding(paxSize);
39
- paxAttrs = parsePaxData(paxData);
54
+ ({ offset, paxAttrs } = parsePaxHeaderBlock(data, offset, entry.size));
40
55
  continue;
41
56
  }
42
57
  if (entry.type === TarEntryType.PAX_GLOBAL) {
@@ -49,8 +64,8 @@ function parseTar(data) {
49
64
  paxAttrs = null;
50
65
  }
51
66
  // Extract content
52
- const contentData = entry.size > 0 ? data.subarray(offset, offset + entry.size) : new Uint8Array(0);
53
- offset += entry.size + calculatePadding(entry.size);
67
+ let contentData;
68
+ ({ offset, contentData } = extractEntryContent(data, offset, entry.size));
54
69
  entries.push({ ...entry, data: contentData });
55
70
  }
56
71
  return entries;
@@ -1 +1 @@
1
- {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/browser/extract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/browser/extract.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -10,5 +10,5 @@ export { create, extract, list } from './node/index.js';
10
10
  export type { TarInputNode } from './node/index.js';
11
11
  export type { CreateHeaderOptions, PaxAttributes } from './tar/index.js';
12
12
  export { applyPaxAttributes, BLOCK_SIZE, calculatePadding, createEndOfArchive, createHeader, createPaxData, createPaxHeaderBlocks, needsPaxHeaders, parseHeader, parsePaxData, } from './tar/index.js';
13
- export { type CreateOptions, type ExtractOptions, type TarEntry, TarEntryType, type TarEntryWithData, type TarInput, type TarSourceFile, } from './types.js';
13
+ export { type CreateOptions, type ExtractOptions, type TarEntry, TarEntryType, type TarEntryTypeValue, type TarEntryWithData, type TarInput, type TarSourceFile, } from './types.js';
14
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACxD,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGzE,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,eAAe,EACf,WAAW,EACX,YAAY,GACb,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EACb,KAAK,aAAa,GACnB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACxD,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGzE,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,eAAe,EACf,WAAW,EACX,YAAY,GACb,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EACb,KAAK,aAAa,GACnB,MAAM,YAAY,CAAC"}
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,wBAAwB;AACxB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAIxD,uDAAuD;AACvD,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,eAAe,EACf,WAAW,EACX,YAAY,GACb,MAAM,gBAAgB,CAAC;AAExB,kBAAkB;AAClB,OAAO,EAIL,YAAY,GAIb,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,wBAAwB;AACxB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAIxD,uDAAuD;AACvD,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,eAAe,EACf,WAAW,EACX,YAAY,GACb,MAAM,gBAAgB,CAAC;AAExB,kBAAkB;AAClB,OAAO,EAIL,YAAY,GAKb,MAAM,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/node/extract.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAY,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAkG9E;;;;;;;;;;;;;;;;GAgBG;AAEH,wBAAuB,OAAO,CAC5B,KAAK,EAAE,YAAY,EACnB,OAAO,GAAE,cAAmB,GAC3B,cAAc,CAAC,gBAAgB,CAAC,CA8HlC;AAED;;GAEG"}
1
+ {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/node/extract.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAY,gBAAgB,EAAE,MAAM,aAAa,CAAC;AA8P9E;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAuB,OAAO,CAC5B,KAAK,EAAE,YAAY,EACnB,OAAO,GAAE,cAAmB,GAC3B,cAAc,CAAC,gBAAgB,CAAC,CA4ElC;AAED;;GAEG"}
@@ -62,6 +62,7 @@ function makeTarEntryWithData(entry, dataPull) {
62
62
  const buf = new Uint8Array(entry.size);
63
63
  let offset = 0;
64
64
  for await (const c of dataGen) {
65
+ /* v8 ignore start: defensive overflow guard — parseTar clips chunks at bytesRemaining (declared entry.size), so this branch can only fire if a custom dataPull generator over-delivers; unreachable via the public extract() API */
65
66
  if (offset + c.byteLength > entry.size) {
66
67
  // Malformed archive: chunk would write past the declared entry size.
67
68
  // Truncate at entry.size to avoid out-of-bounds writes and throw so
@@ -69,6 +70,7 @@ function makeTarEntryWithData(entry, dataPull) {
69
70
  // convention used in parseTar (corrupt archive detected at parse level).
70
71
  throw Object.assign(new Error(`tar: entry "${entry.name}" declared size ${entry.size} but received more bytes (offset ${offset} + chunk ${c.byteLength} = ${offset + c.byteLength})`), { code: 'TAR_PARSER_INVARIANT' });
71
72
  }
73
+ /* v8 ignore stop */
72
74
  buf.set(c, offset);
73
75
  offset += c.byteLength;
74
76
  }
@@ -81,6 +83,143 @@ function makeTarEntryWithData(entry, dataPull) {
81
83
  },
82
84
  };
83
85
  }
86
+ /**
87
+ * Pull the next event from `parser`, respecting any pending lookahead.
88
+ *
89
+ * Extracted from `extract()` to reduce cognitive complexity. Reads from
90
+ * `lookaheadRef.value` first; clears it on consumption.
91
+ */
92
+ async function nextParseEvent(parser, lookaheadRef) {
93
+ if (lookaheadRef.value !== null) {
94
+ const ev = lookaheadRef.value;
95
+ lookaheadRef.value = null;
96
+ return { value: ev, done: false };
97
+ }
98
+ return parser.next();
99
+ }
100
+ /**
101
+ * Drain all remaining 'chunk' events for the current entry from `parser`.
102
+ *
103
+ * The terminating 'entry' or 'end' event is stored in `lookaheadRef.value`.
104
+ * Extracted from `extract()` to reduce cognitive complexity; behavior is
105
+ * byte-identical.
106
+ */
107
+ async function drainEntryChunks(parser, lookaheadRef) {
108
+ while (true) {
109
+ const result = await parser.next();
110
+ /* v8 ignore start: parseTar always emits 'end' before returning; this done:true branch is unreachable via the public API */
111
+ if (result.done)
112
+ return;
113
+ /* v8 ignore stop */
114
+ if (result.value.kind !== 'chunk') {
115
+ lookaheadRef.value = result.value;
116
+ return;
117
+ }
118
+ }
119
+ }
120
+ /**
121
+ * Drain remaining chunks for an entry that the consumer did not fully read,
122
+ * swallowing non-fatal errors per the D-2 policy.
123
+ *
124
+ * TAR_PARSER_INVARIANT errors always re-throw (D-5) — they represent a corrupt
125
+ * archive or internal invariant violation, not a recoverable I/O error.
126
+ * All other errors are swallowed: they arise from decoding/IO on data the
127
+ * consumer intentionally skipped, so propagating them would be surprising.
128
+ *
129
+ * Extracted from `extract()` to reduce cognitive complexity; behavior is
130
+ * byte-identical to the inline drain-with-swallow block.
131
+ */
132
+ async function drainSkippedEntry(parser, lookaheadRef) {
133
+ try {
134
+ await drainEntryChunks(parser, lookaheadRef);
135
+ }
136
+ catch (err) {
137
+ // Decode/IO error during skipped data — swallow per D-2.
138
+ // TAR_PARSER_INVARIANT always re-throws per D-5.
139
+ /* v8 ignore start: race-window — drainEntryChunks() would need to throw TAR_PARSER_INVARIANT during skipped-entry drain, which requires a corrupt parser state that is unreachable via public API */
140
+ if (err.code === 'TAR_PARSER_INVARIANT') {
141
+ throw err;
142
+ }
143
+ /* v8 ignore stop */
144
+ // Swallow other errors from skipped data per D-2.
145
+ }
146
+ }
147
+ /**
148
+ * Build a per-entry data-pull factory that reads 'chunk' events from `parser`.
149
+ *
150
+ * Returns a `make()` function (same contract as the inline `makeDataGen` it
151
+ * replaces) that, when called, returns a single-use `AsyncGenerator<Uint8Array>`
152
+ * backed by the outer `parseTar` generator. When chunks are exhausted, the
153
+ * terminating 'entry' or 'end' event is stored in `lookaheadRef.value`.
154
+ * A `dataGenInFlight` closure flag guards against concurrent iteration of the
155
+ * same entry's data (D-5 / TAR_PARSER_INVARIANT contract).
156
+ *
157
+ * Extracted from `extract()` to reduce cognitive complexity; behavior is
158
+ * byte-identical. The outer generator is suspended at `yield entryWithData`
159
+ * while the consumer iterates the returned generator — natural backpressure.
160
+ */
161
+ function createEntryDataPull(parser, lookaheadRef) {
162
+ let dataGenInFlight = false;
163
+ return function makeDataGen() {
164
+ /* v8 ignore start: internal state machine invariant — makeTarEntryWithData() calls dataPull() exactly once per entry and never exposes makeDataGen to consumers; concurrent-iteration path is unreachable via public API */
165
+ if (dataGenInFlight) {
166
+ // D-5 invariant violation: triggered if the same entry's data generator
167
+ // is created twice (`makeDataGen()` called more than once for one
168
+ // entry). The current `makeTarEntryWithData` design calls `dataPull()`
169
+ // exactly once per entry and never exposes `makeDataGen` to consumers,
170
+ // so this branch is effectively unreachable in production. The
171
+ // `code: 'TAR_PARSER_INVARIANT'` attribute matches the convention used
172
+ // by other invariant errors in this module (e.g. stray-chunk in extract,
173
+ // size-mismatch in bytes()) and keeps downstream filters consistent.
174
+ const err = new Error('concurrent entry.data iteration is not supported');
175
+ err.code = 'TAR_PARSER_INVARIANT';
176
+ throw err;
177
+ /* v8 ignore stop */
178
+ }
179
+ dataGenInFlight = true;
180
+ return (async function* () {
181
+ try {
182
+ while (true) {
183
+ const r = await parser.next();
184
+ /* v8 ignore start: parseTar always emits 'end' before returning; this done:true branch is unreachable via the public API */
185
+ if (r.done)
186
+ return;
187
+ /* v8 ignore stop */
188
+ if (r.value.kind === 'chunk') {
189
+ yield r.value.data;
190
+ }
191
+ else {
192
+ // 'entry' or 'end' — store for outer loop.
193
+ lookaheadRef.value = r.value;
194
+ return;
195
+ }
196
+ }
197
+ }
198
+ finally {
199
+ dataGenInFlight = false;
200
+ }
201
+ })();
202
+ };
203
+ }
204
+ /**
205
+ * Apply the user-supplied `filter` predicate, if any, to decide if an entry
206
+ * should be skipped. Returns true when filter is provided AND the predicate
207
+ * returns ANY falsy value (false / 0 / '' / null / undefined). This preserves
208
+ * the historical `filter && !filter(entry)` semantics — a stricter `=== false`
209
+ * check would treat non-false falsies as "include", which diverges from both
210
+ * the documented contract and the browser-side implementation.
211
+ *
212
+ * Extracted from `extract()` to keep the outer loop under biome's cognitive
213
+ * complexity threshold.
214
+ */
215
+ function isExcludedByFilter(entry, filter) {
216
+ // `typeof === 'function'` over `!== undefined` is mandatory for null-safe
217
+ // semantics. The original `filter && !filter(entry)` short-circuited on ANY
218
+ // falsy filter (false / 0 / '' / null / undefined). A `null !== undefined`
219
+ // check would be true → call filter(null) → runtime crash. The `typeof`
220
+ // gate matches the browser-side `extract()` and the documented contract.
221
+ return typeof filter === 'function' && !filter(entry);
222
+ }
84
223
  /**
85
224
  * Extract a tar.xz archive.
86
225
  *
@@ -98,7 +237,6 @@ function makeTarEntryWithData(entry, dataPull) {
98
237
  * }
99
238
  * ```
100
239
  */
101
- // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: streaming generator with strip/filter/drain logic — complexity is intrinsic
102
240
  export async function* extract(input, options = {}) {
103
241
  const { strip = 0, filter } = options;
104
242
  const xzStream = streamXz(input);
@@ -106,105 +244,52 @@ export async function* extract(input, options = {}) {
106
244
  // Lookahead: an event pulled from parseTar that hasn't been processed yet.
107
245
  // This allows the data-generator to consume chunks and then "return" the
108
246
  // terminating event (entry/end) for the outer loop to process.
109
- let lookahead = null;
110
- /** Pull next event from parser, respecting any pending lookahead. */
111
- async function nextEvent() {
112
- if (lookahead !== null) {
113
- const ev = lookahead;
114
- lookahead = null;
115
- return { value: ev, done: false };
116
- }
117
- return parser.next();
118
- }
119
- /** Drain all remaining 'chunk' events for the current entry from parseTar.
120
- * The terminating 'entry' or 'end' event is stored in `lookahead`. */
121
- async function drainChunks() {
122
- while (true) {
123
- const result = await parser.next();
124
- if (result.done)
125
- return;
126
- if (result.value.kind !== 'chunk') {
127
- lookahead = result.value;
128
- return;
129
- }
130
- }
131
- }
247
+ // Wrapped in a ref-object so top-level helpers can read/write it without
248
+ // capturing `extract`'s local scope (which would add nesting complexity).
249
+ const lookaheadRef = { value: null };
132
250
  try {
133
251
  while (true) {
134
- const result = await nextEvent();
252
+ const result = await nextParseEvent(parser, lookaheadRef);
253
+ /* v8 ignore start: parseTar always emits 'end' before returning; this done:true branch is unreachable via the public API */
135
254
  if (result.done)
136
255
  break;
256
+ /* v8 ignore stop */
137
257
  const ev = result.value;
138
258
  if (ev.kind === 'end')
139
259
  break;
260
+ /* v8 ignore start: state machine invariant — parseTar never emits 'chunk' before 'entry'; this branch guards against a hypothetical parser bug that cannot be triggered via the public API */
140
261
  if (ev.kind === 'chunk') {
141
262
  // Stray chunk at outer-loop level is a parser invariant violation (D-5).
142
263
  const err = new Error('parser invariant: chunk emitted before entry');
143
264
  err.code = 'TAR_PARSER_INVARIANT';
144
265
  throw err;
266
+ /* v8 ignore stop */
145
267
  }
146
268
  // ev.kind === 'entry'
147
269
  const rawEntry = ev.entry;
148
270
  const strippedName = stripPath(rawEntry.name, strip);
149
271
  if (!strippedName) {
150
- await drainChunks();
272
+ await drainEntryChunks(parser, lookaheadRef);
151
273
  continue;
152
274
  }
153
275
  const strippedEntry = { ...rawEntry, name: strippedName };
154
- if (filter && !filter(strippedEntry)) {
155
- await drainChunks();
276
+ if (isExcludedByFilter(strippedEntry, filter)) {
277
+ await drainEntryChunks(parser, lookaheadRef);
156
278
  continue;
157
279
  }
158
280
  // Build a data generator that pulls 'chunk' events from the parseTar stream.
159
- // When chunks are exhausted it stores the next 'entry'/'end' in `lookahead`.
281
+ // When chunks are exhausted it stores the next 'entry'/'end' in lookaheadRef.
160
282
  // The outer generator is suspended at `yield entryWithData` while the consumer
161
283
  // iterates this — natural backpressure.
162
- let dataGenInFlight = false;
163
- function makeDataGen() {
164
- if (dataGenInFlight) {
165
- throw new Error('concurrent entry.data iteration is not supported');
166
- }
167
- dataGenInFlight = true;
168
- return (async function* () {
169
- try {
170
- while (true) {
171
- const r = await parser.next();
172
- if (r.done)
173
- return;
174
- if (r.value.kind === 'chunk') {
175
- yield r.value.data;
176
- }
177
- else {
178
- // 'entry' or 'end' — store for outer loop.
179
- lookahead = r.value;
180
- return;
181
- }
182
- }
183
- }
184
- finally {
185
- dataGenInFlight = false;
186
- }
187
- })();
188
- }
284
+ const makeDataGen = createEntryDataPull(parser, lookaheadRef);
189
285
  const entryWithData = makeTarEntryWithData(strippedEntry, makeDataGen);
190
286
  yield entryWithData;
191
287
  // After the consumer advances past this entry, drain any remaining chunks
192
288
  // that the consumer did not read (S-08 auto-drain, Case A per §12.4).
193
289
  // If the data generator was fully consumed, lookahead is already set.
194
- // If not, drain now.
195
- if (lookahead === null) {
196
- // Consumer did not fully iterate entry.data — drain remaining chunks.
197
- try {
198
- await drainChunks();
199
- }
200
- catch (err) {
201
- // Decode/IO error during skipped data — swallow per D-2.
202
- // TAR_PARSER_INVARIANT always re-throws per D-5.
203
- if (err.code === 'TAR_PARSER_INVARIANT') {
204
- throw err;
205
- }
206
- // Swallow other errors from skipped data per D-2.
207
- }
290
+ // If not, drain now (swallowing non-fatal errors per D-2, re-throwing D-5).
291
+ if (lookaheadRef.value === null) {
292
+ await drainSkippedEntry(parser, lookaheadRef);
208
293
  }
209
294
  }
210
295
  }
@@ -1 +1 @@
1
- {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/node/extract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/node/extract.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/node/file.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA4G3E;;;;;;;;;;;;GAYG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,cAAc,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9C,OAAO,CAAC,IAAI,CAAC,CAiOf;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAOvE"}
1
+ {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/node/file.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAoB,MAAM,aAAa,CAAC;AA4a7F;;;;;;;;;;;;GAYG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,cAAc,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9C,OAAO,CAAC,IAAI,CAAC,CA4Df;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAOvE"}