tar-xz 3.2.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/browser/extract.d.ts.map +1 -1
- package/lib/browser/extract.js +1 -10
- package/lib/browser/extract.js.map +1 -1
- package/lib/node/extract.d.ts.map +1 -1
- package/lib/node/extract.js +61 -114
- package/lib/node/extract.js.map +1 -1
- package/lib/node/list.d.ts +1 -1
- package/lib/node/list.d.ts.map +1 -1
- package/lib/node/list.js +31 -66
- package/lib/node/list.js.map +1 -1
- package/lib/node/tar-parser.d.ts +56 -0
- package/lib/node/tar-parser.d.ts.map +1 -0
- package/lib/node/tar-parser.js +104 -0
- package/lib/node/tar-parser.js.map +1 -0
- package/lib/tar/checksum.js.map +1 -1
- package/lib/tar/format.d.ts +0 -1
- package/lib/tar/format.d.ts.map +1 -1
- package/lib/tar/format.js +0 -4
- package/lib/tar/format.js.map +1 -1
- package/lib/tar/index.d.ts +2 -1
- package/lib/tar/index.d.ts.map +1 -1
- package/lib/tar/index.js +2 -1
- package/lib/tar/index.js.map +1 -1
- package/lib/tar/utils.d.ts +5 -0
- package/lib/tar/utils.d.ts.map +1 -0
- package/lib/tar/utils.js +11 -0
- package/lib/tar/utils.js.map +1 -0
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/browser/extract.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/browser/extract.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAGnB,MAAM,aAAa,CAAC;AAgErB;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,WAAW,GAAG,UAAU,EACjC,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,aAAa,EAAE,CAAC,CAoC1B"}
|
package/lib/browser/extract.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { unxzAsync } from 'node-liblzma';
|
|
5
5
|
import { applyPaxAttributes, BLOCK_SIZE, calculatePadding, isEmptyBlock, parseHeader, parsePaxData, } from '../tar/index.js';
|
|
6
|
+
import { stripPath } from '../tar/utils.js';
|
|
6
7
|
import { TarEntryType, } from '../types.js';
|
|
7
8
|
/**
|
|
8
9
|
* Parse TAR data into entries
|
|
@@ -53,16 +54,6 @@ function parseTar(data) {
|
|
|
53
54
|
}
|
|
54
55
|
return entries;
|
|
55
56
|
}
|
|
56
|
-
/**
|
|
57
|
-
* Strip leading path components from a path
|
|
58
|
-
*/
|
|
59
|
-
function stripPath(filePath, strip) {
|
|
60
|
-
if (strip <= 0) {
|
|
61
|
-
return filePath;
|
|
62
|
-
}
|
|
63
|
-
const parts = filePath.split('/');
|
|
64
|
-
return parts.slice(strip).join('/');
|
|
65
|
-
}
|
|
66
57
|
/**
|
|
67
58
|
* Extract a tar.xz archive in browser
|
|
68
59
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/browser/extract.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,YAAY,GACb,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAIL,YAAY,GACb,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,SAAS,QAAQ,CAAC,IAAgB;IAChC,MAAM,OAAO,GAA2C,EAAE,CAAC;IAC3D,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,QAAQ,GAAyB,IAAI,CAAC;IAC1C,IAAI,eAAe,GAAG,CAAC,CAAC;IAExB,OAAO,MAAM,GAAG,UAAU,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC;QAC/D,MAAM,IAAI,UAAU,CAAC;QAErB,2BAA2B;QAC3B,IAAI,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9B,eAAe,EAAE,CAAC;YAClB,IAAI,eAAe,IAAI,CAAC,EAAE,CAAC;gBACzB,MAAM;YACR,CAAC;YACD,SAAS;QACX,CAAC;QAED,eAAe,GAAG,CAAC,CAAC;QAEpB,eAAe;QACf,IAAI,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,SAAS;QACX,CAAC;QAED,qBAAqB;QACrB,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,UAAU,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;YAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;YACxD,MAAM,IAAI,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC9C,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;YACjC,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,UAAU,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpD,SAAS;QACX,CAAC;QAED,kCAAkC;QAClC,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,GAAG,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC5C,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;QAED,kBAAkB;QAClB,MAAM,WAAW,GACf,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;QAElF,MAAM,IAAI,KAAK,CAAC,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEpD,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/browser/extract.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/node/extract.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/node/extract.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,QAAQ,EAAgB,MAAM,aAAa,CAAC;AAqH/E;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAuF1E;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAA;CAAO,GACtE,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAehD"}
|
package/lib/node/extract.js
CHANGED
|
@@ -6,22 +6,26 @@ import * as path from 'node:path';
|
|
|
6
6
|
import { Writable } from 'node:stream';
|
|
7
7
|
import { pipeline } from 'node:stream/promises';
|
|
8
8
|
import { createUnxz } from 'node-liblzma';
|
|
9
|
-
import {
|
|
9
|
+
import { calculatePadding } from '../tar/index.js';
|
|
10
|
+
import { stripPath } from '../tar/utils.js';
|
|
10
11
|
import { TarEntryType } from '../types.js';
|
|
12
|
+
import { parseNextHeader } from './tar-parser.js';
|
|
11
13
|
/**
|
|
12
14
|
* Transform stream that unpacks TAR format
|
|
13
15
|
*/
|
|
14
16
|
class TarUnpack extends Writable {
|
|
15
|
-
|
|
17
|
+
state = {
|
|
18
|
+
buffer: Buffer.alloc(0),
|
|
19
|
+
paxAttrs: null,
|
|
20
|
+
emptyBlockCount: 0,
|
|
21
|
+
};
|
|
16
22
|
currentEntry = null;
|
|
17
23
|
bytesRemaining = 0;
|
|
18
24
|
paddingRemaining = 0;
|
|
19
25
|
contentChunks = [];
|
|
20
|
-
paxAttrs = null;
|
|
21
|
-
emptyBlockCount = 0;
|
|
22
26
|
entries = [];
|
|
23
27
|
_write(chunk, _encoding, callback) {
|
|
24
|
-
this.buffer = Buffer.concat([this.buffer, chunk]);
|
|
28
|
+
this.state.buffer = Buffer.concat([this.state.buffer, chunk]);
|
|
25
29
|
try {
|
|
26
30
|
this.processBuffer();
|
|
27
31
|
callback();
|
|
@@ -30,110 +34,63 @@ class TarUnpack extends Writable {
|
|
|
30
34
|
callback(error);
|
|
31
35
|
}
|
|
32
36
|
}
|
|
37
|
+
/** Skip padding bytes that follow a file's content blocks. */
|
|
38
|
+
skipPadding() {
|
|
39
|
+
if (this.paddingRemaining <= 0) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
const skip = Math.min(this.paddingRemaining, this.state.buffer.length);
|
|
43
|
+
this.state.buffer = this.state.buffer.subarray(skip);
|
|
44
|
+
this.paddingRemaining -= skip;
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
/** Read file content bytes into `contentChunks`; finalize entry when done. */
|
|
48
|
+
readContent() {
|
|
49
|
+
if (this.bytesRemaining <= 0 || !this.currentEntry) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
const readSize = Math.min(this.bytesRemaining, this.state.buffer.length);
|
|
53
|
+
this.contentChunks.push(this.state.buffer.subarray(0, readSize));
|
|
54
|
+
this.state.buffer = this.state.buffer.subarray(readSize);
|
|
55
|
+
this.bytesRemaining -= readSize;
|
|
56
|
+
if (this.bytesRemaining === 0) {
|
|
57
|
+
const content = Buffer.concat(this.contentChunks);
|
|
58
|
+
this.entries.push({ ...this.currentEntry, content });
|
|
59
|
+
this.paddingRemaining = calculatePadding(this.currentEntry.size);
|
|
60
|
+
this.currentEntry = null;
|
|
61
|
+
this.contentChunks = [];
|
|
62
|
+
}
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
/** Push a no-content entry (directory, symlink, hardlink, empty file). */
|
|
66
|
+
pushEmptyEntry(entry) {
|
|
67
|
+
this.entries.push({ ...entry, content: Buffer.alloc(0) });
|
|
68
|
+
}
|
|
69
|
+
/** Dispatch a parsed entry: push immediately or prepare for content read. */
|
|
70
|
+
handleEntry(entry) {
|
|
71
|
+
if (entry.type === TarEntryType.DIRECTORY ||
|
|
72
|
+
entry.type === TarEntryType.SYMLINK ||
|
|
73
|
+
entry.type === TarEntryType.HARDLINK ||
|
|
74
|
+
entry.size === 0) {
|
|
75
|
+
this.pushEmptyEntry(entry);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
this.currentEntry = entry;
|
|
79
|
+
this.bytesRemaining = entry.size;
|
|
80
|
+
this.contentChunks = [];
|
|
81
|
+
}
|
|
33
82
|
processBuffer() {
|
|
34
|
-
while (this.buffer.length > 0) {
|
|
35
|
-
|
|
36
|
-
if (this.paddingRemaining > 0) {
|
|
37
|
-
const skip = Math.min(this.paddingRemaining, this.buffer.length);
|
|
38
|
-
this.buffer = this.buffer.subarray(skip);
|
|
39
|
-
this.paddingRemaining -= skip;
|
|
83
|
+
while (this.state.buffer.length > 0) {
|
|
84
|
+
if (this.skipPadding())
|
|
40
85
|
continue;
|
|
41
|
-
|
|
42
|
-
// Handle file content
|
|
43
|
-
if (this.bytesRemaining > 0 && this.currentEntry) {
|
|
44
|
-
const readSize = Math.min(this.bytesRemaining, this.buffer.length);
|
|
45
|
-
this.contentChunks.push(this.buffer.subarray(0, readSize));
|
|
46
|
-
this.buffer = this.buffer.subarray(readSize);
|
|
47
|
-
this.bytesRemaining -= readSize;
|
|
48
|
-
// Entry complete
|
|
49
|
-
if (this.bytesRemaining === 0) {
|
|
50
|
-
const content = Buffer.concat(this.contentChunks);
|
|
51
|
-
this.entries.push({ ...this.currentEntry, content });
|
|
52
|
-
// Calculate padding
|
|
53
|
-
this.paddingRemaining = calculatePadding(this.currentEntry.size);
|
|
54
|
-
this.currentEntry = null;
|
|
55
|
-
this.contentChunks = [];
|
|
56
|
-
}
|
|
86
|
+
if (this.readContent())
|
|
57
87
|
continue;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
/* v8 ignore start - streaming edge case: chunk boundary splits a 512-byte block */
|
|
61
|
-
if (this.buffer.length < BLOCK_SIZE) {
|
|
88
|
+
const result = parseNextHeader(this.state);
|
|
89
|
+
if (result.action === 'need-more-data' || result.action === 'end-of-archive')
|
|
62
90
|
break;
|
|
63
|
-
|
|
64
|
-
/* v8 ignore stop */
|
|
65
|
-
const headerBlock = this.buffer.subarray(0, BLOCK_SIZE);
|
|
66
|
-
this.buffer = this.buffer.subarray(BLOCK_SIZE);
|
|
67
|
-
// Check for end-of-archive
|
|
68
|
-
if (isEmptyBlock(headerBlock)) {
|
|
69
|
-
this.emptyBlockCount++;
|
|
70
|
-
if (this.emptyBlockCount >= 2) {
|
|
71
|
-
// End of archive
|
|
72
|
-
break;
|
|
73
|
-
}
|
|
74
|
-
continue;
|
|
75
|
-
}
|
|
76
|
-
this.emptyBlockCount = 0;
|
|
77
|
-
// Parse header
|
|
78
|
-
let entry = parseHeader(headerBlock);
|
|
79
|
-
/* v8 ignore start - dead code: empty blocks filtered above, parseHeader only returns null for empty */
|
|
80
|
-
if (!entry) {
|
|
81
|
-
continue;
|
|
82
|
-
}
|
|
83
|
-
/* v8 ignore stop */
|
|
84
|
-
// Handle PAX headers
|
|
85
|
-
if (entry.type === TarEntryType.PAX_HEADER) {
|
|
86
|
-
// Read PAX data
|
|
87
|
-
const paxSize = entry.size;
|
|
88
|
-
const paxPadding = calculatePadding(paxSize);
|
|
89
|
-
const totalNeeded = paxSize + paxPadding;
|
|
90
|
-
/* v8 ignore start - streaming edge case: PAX data split across XZ chunks */
|
|
91
|
-
if (this.buffer.length < totalNeeded) {
|
|
92
|
-
this.buffer = Buffer.concat([headerBlock, this.buffer]);
|
|
93
|
-
break;
|
|
94
|
-
}
|
|
95
|
-
/* v8 ignore stop */
|
|
96
|
-
const paxData = this.buffer.subarray(0, paxSize);
|
|
97
|
-
this.buffer = this.buffer.subarray(paxSize + paxPadding);
|
|
98
|
-
this.paxAttrs = parsePaxData(paxData);
|
|
99
|
-
continue;
|
|
100
|
-
}
|
|
101
|
-
if (entry.type === TarEntryType.PAX_GLOBAL) {
|
|
102
|
-
// Skip global PAX headers (we don't support them yet)
|
|
103
|
-
const skipSize = entry.size + calculatePadding(entry.size);
|
|
104
|
-
/* v8 ignore start - streaming edge case: global PAX data split across XZ chunks */
|
|
105
|
-
if (this.buffer.length < skipSize) {
|
|
106
|
-
this.buffer = Buffer.concat([headerBlock, this.buffer]);
|
|
107
|
-
break;
|
|
108
|
-
}
|
|
109
|
-
/* v8 ignore stop */
|
|
110
|
-
this.buffer = this.buffer.subarray(skipSize);
|
|
91
|
+
if (result.action === 'pax-consumed')
|
|
111
92
|
continue;
|
|
112
|
-
|
|
113
|
-
// Apply PAX attributes if present
|
|
114
|
-
if (this.paxAttrs) {
|
|
115
|
-
entry = applyPaxAttributes(entry, this.paxAttrs);
|
|
116
|
-
this.paxAttrs = null;
|
|
117
|
-
}
|
|
118
|
-
// Handle directories (no content)
|
|
119
|
-
if (entry.type === TarEntryType.DIRECTORY) {
|
|
120
|
-
this.entries.push({ ...entry, content: Buffer.alloc(0) });
|
|
121
|
-
continue;
|
|
122
|
-
}
|
|
123
|
-
// Handle symlinks (no content)
|
|
124
|
-
if (entry.type === TarEntryType.SYMLINK || entry.type === TarEntryType.HARDLINK) {
|
|
125
|
-
this.entries.push({ ...entry, content: Buffer.alloc(0) });
|
|
126
|
-
continue;
|
|
127
|
-
}
|
|
128
|
-
// Regular file - prepare to read content
|
|
129
|
-
if (entry.size > 0) {
|
|
130
|
-
this.currentEntry = entry;
|
|
131
|
-
this.bytesRemaining = entry.size;
|
|
132
|
-
this.contentChunks = [];
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
this.entries.push({ ...entry, content: Buffer.alloc(0) });
|
|
136
|
-
}
|
|
93
|
+
this.handleEntry(result.entry);
|
|
137
94
|
}
|
|
138
95
|
}
|
|
139
96
|
_final(callback) {
|
|
@@ -145,16 +102,6 @@ class TarUnpack extends Writable {
|
|
|
145
102
|
}
|
|
146
103
|
}
|
|
147
104
|
}
|
|
148
|
-
/**
|
|
149
|
-
* Strip leading path components from a path
|
|
150
|
-
*/
|
|
151
|
-
function stripPath(filePath, strip) {
|
|
152
|
-
if (strip <= 0) {
|
|
153
|
-
return filePath;
|
|
154
|
-
}
|
|
155
|
-
const parts = filePath.split('/');
|
|
156
|
-
return parts.slice(strip).join('/');
|
|
157
|
-
}
|
|
158
105
|
/**
|
|
159
106
|
* Validate that a path doesn't escape the target directory (path traversal protection)
|
|
160
107
|
* @throws Error if path traversal is detected
|
package/lib/node/extract.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/node/extract.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,
|
|
1
|
+
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/node/extract.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAsC,YAAY,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAA0B,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE1E;;GAEG;AACH,MAAM,SAAU,SAAQ,QAAQ;IACb,KAAK,GAAsB;QAC1C,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACvB,QAAQ,EAAE,IAAI;QACd,eAAe,EAAE,CAAC;KACnB,CAAC;IACM,YAAY,GAAoB,IAAI,CAAC;IACrC,cAAc,GAAG,CAAC,CAAC;IACnB,gBAAgB,GAAG,CAAC,CAAC;IACrB,aAAa,GAAa,EAAE,CAAC;IAE9B,OAAO,GAA0C,EAAE,CAAC;IAE3D,MAAM,CAAC,KAAa,EAAE,SAAyB,EAAE,QAAwC;QACvF,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QAE9D,IAAI,CAAC;YACH,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,QAAQ,EAAE,CAAC;QACb,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,KAAc,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,8DAA8D;IACtD,WAAW;QACjB,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8EAA8E;IACtE,WAAW;QACjB,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACnD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,CAAC,cAAc,IAAI,QAAQ,CAAC;QAEhC,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAClD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC;YACrD,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACjE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0EAA0E;IAClE,cAAc,CAAC,KAAe;QACpC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,6EAA6E;IACrE,WAAW,CAAC,KAAe;QACjC,IACE,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,SAAS;YACrC,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,OAAO;YACnC,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,QAAQ;YACpC,KAAK,CAAC,IAAI,KAAK,CAAC,EAChB,CAAC;YACD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;IAC1B,CAAC;IAEO,aAAa;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,WAAW,EAAE;gBAAE,SAAS;YACjC,IAAI,IAAI,CAAC,WAAW,EAAE;gBAAE,SAAS;YAEjC,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,MAAM,CAAC,MAAM,KAAK,gBAAgB,IAAI,MAAM,CAAC,MAAM,KAAK,gBAAgB;gBAAE,MAAM;YACpF,IAAI,MAAM,CAAC,MAAM,KAAK,cAAc;gBAAE,SAAS;YAC/C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,MAAM,CAAC,QAAwC;QAC7C,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;YAC5B,QAAQ,CAAC,IAAI,KAAK,CAAC,8BAA8B,IAAI,CAAC,cAAc,kBAAkB,CAAC,CAAC,CAAC;QAC3F,CAAC;aAAM,CAAC;YACN,QAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC;CACF;AAED;;;GAGG;AACH,SAAS,YAAY,CAAC,QAAgB,EAAE,GAAW;IACjD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEtC,sEAAsE;IACtE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,YAAY,KAAK,WAAW,EAAE,CAAC;QACrF,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,YAAY,GAAG,EAAE,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAuB;IACnD,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,EAAE,aAAa,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAExF,6CAA6C;IAC7C,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC;IAChC,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;IAElC,eAAe;IACf,MAAM,QAAQ,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAEnD,gBAAgB;IAChB,MAAM,gBAAgB,GAAe,EAAE,CAAC;IAExC,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QACtC,cAAc;QACd,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,SAAS;QACX,CAAC;QAED,eAAe;QACf,MAAM,cAAc,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;QACxD,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;YACtC,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAE9C,+DAA+D;QAC/D,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAE5B,iCAAiC;QACjC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE5D,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,SAAS,EAAE,CAAC;YAC1C,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,OAAO,EAAE,CAAC;YAC/C,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,0BAA0B;YAC5B,CAAC;YACD,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC7C,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,QAAQ,EAAE,CAAC;YAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;YAClE,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,0BAA0B;YAC5B,CAAC;YACD,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,eAAe;YACf,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9C,CAAC;QAED,kBAAkB;QAClB,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;QAC7B,CAAC;QAED,iDAAiD;QACjD,wDAAwD;QACxD,IAAI,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC;YAC9C,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;YACjD,CAAC;YAAC,MAAM,CAAC;gBACP,0BAA0B;YAC5B,CAAC;QACH,CAAC;QACD,oBAAoB;QAEpB,wBAAwB;QACxB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;YAC3C,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB;QACvB,CAAC;QAED,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAY,EACZ,UAAqE,EAAE;IAEvE,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAEtC,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC;IAChC,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;IAElC,MAAM,QAAQ,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAEnD,OAAO,SAAS,CAAC,OAAO;SACrB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACf,GAAG,KAAK;QACR,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;KACnC,CAAC,CAAC;SACF,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC"}
|
package/lib/node/list.d.ts
CHANGED
package/lib/node/list.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/node/list.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/node/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA8DzD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAUpE"}
|
package/lib/node/list.js
CHANGED
|
@@ -5,19 +5,21 @@ import { createReadStream } from 'node:fs';
|
|
|
5
5
|
import { Writable } from 'node:stream';
|
|
6
6
|
import { pipeline } from 'node:stream/promises';
|
|
7
7
|
import { createUnxz } from 'node-liblzma';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
8
|
+
import { calculatePadding } from '../tar/index.js';
|
|
9
|
+
import { parseNextHeader } from './tar-parser.js';
|
|
10
10
|
/**
|
|
11
11
|
* Writable stream that lists TAR entries without extracting content
|
|
12
12
|
*/
|
|
13
13
|
class TarList extends Writable {
|
|
14
|
-
|
|
14
|
+
state = {
|
|
15
|
+
buffer: Buffer.alloc(0),
|
|
16
|
+
paxAttrs: null,
|
|
17
|
+
emptyBlockCount: 0,
|
|
18
|
+
};
|
|
15
19
|
bytesToSkip = 0;
|
|
16
|
-
paxAttrs = null;
|
|
17
|
-
emptyBlockCount = 0;
|
|
18
20
|
entries = [];
|
|
19
21
|
_write(chunk, _encoding, callback) {
|
|
20
|
-
this.buffer = Buffer.concat([this.buffer, chunk]);
|
|
22
|
+
this.state.buffer = Buffer.concat([this.state.buffer, chunk]);
|
|
21
23
|
try {
|
|
22
24
|
this.processBuffer();
|
|
23
25
|
callback();
|
|
@@ -26,70 +28,33 @@ class TarList extends Writable {
|
|
|
26
28
|
callback(error);
|
|
27
29
|
}
|
|
28
30
|
}
|
|
31
|
+
/** Skip content and padding bytes for the current entry. */
|
|
32
|
+
skipBytes() {
|
|
33
|
+
if (this.bytesToSkip <= 0) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
const skip = Math.min(this.bytesToSkip, this.state.buffer.length);
|
|
37
|
+
this.state.buffer = this.state.buffer.subarray(skip);
|
|
38
|
+
this.bytesToSkip -= skip;
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
/** Record entry and schedule content skip. */
|
|
42
|
+
handleEntry(entry) {
|
|
43
|
+
this.entries.push(entry);
|
|
44
|
+
if (entry.size > 0) {
|
|
45
|
+
this.bytesToSkip = entry.size + calculatePadding(entry.size);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
29
48
|
processBuffer() {
|
|
30
|
-
while (this.buffer.length > 0) {
|
|
31
|
-
|
|
32
|
-
if (this.bytesToSkip > 0) {
|
|
33
|
-
const skip = Math.min(this.bytesToSkip, this.buffer.length);
|
|
34
|
-
this.buffer = this.buffer.subarray(skip);
|
|
35
|
-
this.bytesToSkip -= skip;
|
|
49
|
+
while (this.state.buffer.length > 0) {
|
|
50
|
+
if (this.skipBytes())
|
|
36
51
|
continue;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
/* v8 ignore start - streaming edge case: chunk boundary splits a 512-byte block */
|
|
40
|
-
if (this.buffer.length < BLOCK_SIZE) {
|
|
52
|
+
const result = parseNextHeader(this.state);
|
|
53
|
+
if (result.action === 'need-more-data' || result.action === 'end-of-archive')
|
|
41
54
|
break;
|
|
42
|
-
|
|
43
|
-
/* v8 ignore stop */
|
|
44
|
-
const headerBlock = this.buffer.subarray(0, BLOCK_SIZE);
|
|
45
|
-
this.buffer = this.buffer.subarray(BLOCK_SIZE);
|
|
46
|
-
// Check for end-of-archive
|
|
47
|
-
if (isEmptyBlock(headerBlock)) {
|
|
48
|
-
this.emptyBlockCount++;
|
|
49
|
-
if (this.emptyBlockCount >= 2) {
|
|
50
|
-
break;
|
|
51
|
-
}
|
|
52
|
-
continue;
|
|
53
|
-
}
|
|
54
|
-
this.emptyBlockCount = 0;
|
|
55
|
-
// Parse header
|
|
56
|
-
let entry = parseHeader(headerBlock);
|
|
57
|
-
/* v8 ignore start - dead code: empty blocks filtered above, parseHeader only returns null for empty */
|
|
58
|
-
if (!entry) {
|
|
59
|
-
continue;
|
|
60
|
-
}
|
|
61
|
-
/* v8 ignore stop */
|
|
62
|
-
// Handle PAX headers
|
|
63
|
-
if (entry.type === TarEntryType.PAX_HEADER) {
|
|
64
|
-
const paxSize = entry.size;
|
|
65
|
-
const paxPadding = calculatePadding(paxSize);
|
|
66
|
-
const totalNeeded = paxSize + paxPadding;
|
|
67
|
-
/* v8 ignore start - streaming edge case: PAX data split across XZ chunks */
|
|
68
|
-
if (this.buffer.length < totalNeeded) {
|
|
69
|
-
this.buffer = Buffer.concat([headerBlock, this.buffer]);
|
|
70
|
-
break;
|
|
71
|
-
}
|
|
72
|
-
/* v8 ignore stop */
|
|
73
|
-
const paxData = this.buffer.subarray(0, paxSize);
|
|
74
|
-
this.buffer = this.buffer.subarray(paxSize + paxPadding);
|
|
75
|
-
this.paxAttrs = parsePaxData(paxData);
|
|
76
|
-
continue;
|
|
77
|
-
}
|
|
78
|
-
if (entry.type === TarEntryType.PAX_GLOBAL) {
|
|
79
|
-
this.bytesToSkip = entry.size + calculatePadding(entry.size);
|
|
55
|
+
if (result.action === 'pax-consumed')
|
|
80
56
|
continue;
|
|
81
|
-
|
|
82
|
-
// Apply PAX attributes if present
|
|
83
|
-
if (this.paxAttrs) {
|
|
84
|
-
entry = applyPaxAttributes(entry, this.paxAttrs);
|
|
85
|
-
this.paxAttrs = null;
|
|
86
|
-
}
|
|
87
|
-
// Add entry to list
|
|
88
|
-
this.entries.push(entry);
|
|
89
|
-
// Skip content
|
|
90
|
-
if (entry.size > 0) {
|
|
91
|
-
this.bytesToSkip = entry.size + calculatePadding(entry.size);
|
|
92
|
-
}
|
|
57
|
+
this.handleEntry(result.entry);
|
|
93
58
|
}
|
|
94
59
|
}
|
|
95
60
|
_final(callback) {
|
package/lib/node/list.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/node/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/node/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared TAR header parsing helpers for extract and list streams.
|
|
3
|
+
*
|
|
4
|
+
* Both TarUnpack (extract) and TarList (list) share the same header-parsing
|
|
5
|
+
* state machine: read 512-byte blocks, detect end-of-archive, parse headers,
|
|
6
|
+
* consume PAX / PAX_GLOBAL extensions, and apply PAX attributes. The only
|
|
7
|
+
* difference is what they do with the resulting entry (extract content vs skip).
|
|
8
|
+
*
|
|
9
|
+
* These helpers keep that shared logic in one place while letting each stream
|
|
10
|
+
* own its own entry-processing strategy.
|
|
11
|
+
*/
|
|
12
|
+
import type { PaxAttributes } from '../tar/pax.js';
|
|
13
|
+
import { type TarEntry } from '../types.js';
|
|
14
|
+
/** Mutable state shared by the header-parsing helpers. */
|
|
15
|
+
export interface HeaderParserState {
|
|
16
|
+
buffer: Buffer;
|
|
17
|
+
paxAttrs: PaxAttributes | null;
|
|
18
|
+
emptyBlockCount: number;
|
|
19
|
+
}
|
|
20
|
+
/** The buffer didn't contain a full 512-byte block yet. */
|
|
21
|
+
export interface NeedMoreData {
|
|
22
|
+
readonly action: 'need-more-data';
|
|
23
|
+
}
|
|
24
|
+
/** Two consecutive empty blocks — end of archive. */
|
|
25
|
+
export interface EndOfArchive {
|
|
26
|
+
readonly action: 'end-of-archive';
|
|
27
|
+
}
|
|
28
|
+
/** A PAX or global-PAX header was consumed (caller should `continue`). */
|
|
29
|
+
export interface PaxConsumed {
|
|
30
|
+
readonly action: 'pax-consumed';
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* A real entry (file / directory / symlink / …) was parsed, with PAX
|
|
34
|
+
* attributes already applied.
|
|
35
|
+
*/
|
|
36
|
+
export interface EntryParsed {
|
|
37
|
+
readonly action: 'entry';
|
|
38
|
+
readonly entry: TarEntry;
|
|
39
|
+
}
|
|
40
|
+
export type HeaderParseResult = NeedMoreData | EndOfArchive | PaxConsumed | EntryParsed;
|
|
41
|
+
/**
|
|
42
|
+
* Try to parse the next TAR header from `state.buffer`.
|
|
43
|
+
*
|
|
44
|
+
* On success the buffer is advanced past the consumed block(s).
|
|
45
|
+
* The caller loops until it gets `need-more-data` or `end-of-archive`.
|
|
46
|
+
*
|
|
47
|
+
* Handles:
|
|
48
|
+
* - incomplete block detection
|
|
49
|
+
* - end-of-archive (two empty blocks)
|
|
50
|
+
* - header parsing
|
|
51
|
+
* - PAX_HEADER consumption (reads data blocks, updates `paxAttrs`)
|
|
52
|
+
* - PAX_GLOBAL consumption (skips data blocks)
|
|
53
|
+
* - applying accumulated PAX attributes to the entry
|
|
54
|
+
*/
|
|
55
|
+
export declare function parseNextHeader(state: HeaderParserState): HeaderParseResult;
|
|
56
|
+
//# sourceMappingURL=tar-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tar-parser.d.ts","sourceRoot":"","sources":["../../src/node/tar-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAUH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,KAAK,QAAQ,EAAgB,MAAM,aAAa,CAAC;AAM1D,0DAA0D;AAC1D,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC;CACzB;AAMD,2DAA2D;AAC3D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;CACnC;AAED,qDAAqD;AACrD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;CACnC;AAED,0EAA0E;AAC1E,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;CACjC;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;CAC1B;AAED,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,YAAY,GAAG,WAAW,GAAG,WAAW,CAAC;AAMxF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,iBAAiB,CAkD3E"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared TAR header parsing helpers for extract and list streams.
|
|
3
|
+
*
|
|
4
|
+
* Both TarUnpack (extract) and TarList (list) share the same header-parsing
|
|
5
|
+
* state machine: read 512-byte blocks, detect end-of-archive, parse headers,
|
|
6
|
+
* consume PAX / PAX_GLOBAL extensions, and apply PAX attributes. The only
|
|
7
|
+
* difference is what they do with the resulting entry (extract content vs skip).
|
|
8
|
+
*
|
|
9
|
+
* These helpers keep that shared logic in one place while letting each stream
|
|
10
|
+
* own its own entry-processing strategy.
|
|
11
|
+
*/
|
|
12
|
+
import { applyPaxAttributes, BLOCK_SIZE, calculatePadding, isEmptyBlock, parseHeader, parsePaxData, } from '../tar/index.js';
|
|
13
|
+
import { TarEntryType } from '../types.js';
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// Core helper
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
/**
|
|
18
|
+
* Try to parse the next TAR header from `state.buffer`.
|
|
19
|
+
*
|
|
20
|
+
* On success the buffer is advanced past the consumed block(s).
|
|
21
|
+
* The caller loops until it gets `need-more-data` or `end-of-archive`.
|
|
22
|
+
*
|
|
23
|
+
* Handles:
|
|
24
|
+
* - incomplete block detection
|
|
25
|
+
* - end-of-archive (two empty blocks)
|
|
26
|
+
* - header parsing
|
|
27
|
+
* - PAX_HEADER consumption (reads data blocks, updates `paxAttrs`)
|
|
28
|
+
* - PAX_GLOBAL consumption (skips data blocks)
|
|
29
|
+
* - applying accumulated PAX attributes to the entry
|
|
30
|
+
*/
|
|
31
|
+
export function parseNextHeader(state) {
|
|
32
|
+
// Need a full block for the header
|
|
33
|
+
/* v8 ignore start - streaming edge case: chunk boundary splits a 512-byte block */
|
|
34
|
+
if (state.buffer.length < BLOCK_SIZE) {
|
|
35
|
+
return { action: 'need-more-data' };
|
|
36
|
+
}
|
|
37
|
+
/* v8 ignore stop */
|
|
38
|
+
const headerBlock = state.buffer.subarray(0, BLOCK_SIZE);
|
|
39
|
+
// End-of-archive detection (two consecutive empty blocks)
|
|
40
|
+
if (isEmptyBlock(headerBlock)) {
|
|
41
|
+
state.buffer = state.buffer.subarray(BLOCK_SIZE);
|
|
42
|
+
state.emptyBlockCount++;
|
|
43
|
+
if (state.emptyBlockCount >= 2) {
|
|
44
|
+
return { action: 'end-of-archive' };
|
|
45
|
+
}
|
|
46
|
+
return { action: 'pax-consumed' }; // empty block consumed, keep looping
|
|
47
|
+
}
|
|
48
|
+
// Consume the header block
|
|
49
|
+
state.buffer = state.buffer.subarray(BLOCK_SIZE);
|
|
50
|
+
state.emptyBlockCount = 0;
|
|
51
|
+
// Parse header
|
|
52
|
+
const raw = parseHeader(headerBlock);
|
|
53
|
+
/* v8 ignore start - dead code: empty blocks filtered above, parseHeader only returns null for empty */
|
|
54
|
+
if (!raw) {
|
|
55
|
+
return { action: 'pax-consumed' };
|
|
56
|
+
}
|
|
57
|
+
/* v8 ignore stop */
|
|
58
|
+
// PAX extended header — read data blocks and store attributes
|
|
59
|
+
if (raw.type === TarEntryType.PAX_HEADER) {
|
|
60
|
+
return consumePaxHeader(state, headerBlock, raw);
|
|
61
|
+
}
|
|
62
|
+
// PAX global header — skip data blocks
|
|
63
|
+
if (raw.type === TarEntryType.PAX_GLOBAL) {
|
|
64
|
+
return consumePaxGlobal(state, headerBlock, raw);
|
|
65
|
+
}
|
|
66
|
+
// Regular entry — apply pending PAX attributes
|
|
67
|
+
let entry = raw;
|
|
68
|
+
if (state.paxAttrs) {
|
|
69
|
+
entry = applyPaxAttributes(entry, state.paxAttrs);
|
|
70
|
+
state.paxAttrs = null;
|
|
71
|
+
}
|
|
72
|
+
return { action: 'entry', entry };
|
|
73
|
+
}
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
// Internal helpers
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
function consumePaxHeader(state, headerBlock, entry) {
|
|
78
|
+
const paxSize = entry.size;
|
|
79
|
+
const paxPadding = calculatePadding(paxSize);
|
|
80
|
+
const totalNeeded = paxSize + paxPadding;
|
|
81
|
+
/* v8 ignore start - streaming edge case: PAX data split across XZ chunks */
|
|
82
|
+
if (state.buffer.length < totalNeeded) {
|
|
83
|
+
// Put the header block back — we'll retry when more data arrives
|
|
84
|
+
state.buffer = Buffer.concat([headerBlock, state.buffer]);
|
|
85
|
+
return { action: 'need-more-data' };
|
|
86
|
+
}
|
|
87
|
+
/* v8 ignore stop */
|
|
88
|
+
const paxData = state.buffer.subarray(0, paxSize);
|
|
89
|
+
state.buffer = state.buffer.subarray(paxSize + paxPadding);
|
|
90
|
+
state.paxAttrs = parsePaxData(paxData);
|
|
91
|
+
return { action: 'pax-consumed' };
|
|
92
|
+
}
|
|
93
|
+
function consumePaxGlobal(state, headerBlock, entry) {
|
|
94
|
+
const skipSize = entry.size + calculatePadding(entry.size);
|
|
95
|
+
/* v8 ignore start - streaming edge case: global PAX data split across XZ chunks */
|
|
96
|
+
if (state.buffer.length < skipSize) {
|
|
97
|
+
state.buffer = Buffer.concat([headerBlock, state.buffer]);
|
|
98
|
+
return { action: 'need-more-data' };
|
|
99
|
+
}
|
|
100
|
+
/* v8 ignore stop */
|
|
101
|
+
state.buffer = state.buffer.subarray(skipSize);
|
|
102
|
+
return { action: 'pax-consumed' };
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=tar-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tar-parser.js","sourceRoot":"","sources":["../../src/node/tar-parser.ts"],"names":[],"mappings":"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"}
|
package/lib/tar/checksum.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checksum.js","sourceRoot":"","sources":["../../src/tar/checksum.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,6CAA6C;AAC7C,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC;AAEnC,+BAA+B;AAC/B,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC;AAEjC;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAkB;IAClD,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,CAAC,MAAM,gBAAgB,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,GAAG,GAAG,CAAC,CAAC;IAEZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,6DAA6D;QAC7D,IAAI,CAAC,IAAI,eAAe,IAAI,CAAC,GAAG,eAAe,GAAG,eAAe,EAAE,CAAC;YAClE,GAAG,IAAI,IAAI,CAAC;QACd,CAAC;aAAM,CAAC;YACN,GAAG,IAAI,MAAM,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"checksum.js","sourceRoot":"","sources":["../../src/tar/checksum.ts"],"names":[],"mappings":"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"}
|
package/lib/tar/format.d.ts
CHANGED
package/lib/tar/format.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/tar/format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAc,cAAc,EAAiB,MAAM,eAAe,CAAC;AAE7F,qBAAqB;AACrB,eAAO,MAAM,UAAU,MAAM,CAAC;AA4F9B;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAOvD;AAED;;GAEG;
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/tar/format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAc,cAAc,EAAiB,MAAM,eAAe,CAAC;AAE7F,qBAAqB;AACrB,eAAO,MAAM,UAAU,MAAM,CAAC;AA4F9B;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAOvD;AAED;;GAEG;AAEH;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CA8C/D;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,UAAU,CAkErE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,UAAU,CAE/C;AAED,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,CAAC"}
|
package/lib/tar/format.js
CHANGED
|
@@ -117,10 +117,6 @@ export function isEmptyBlock(block) {
|
|
|
117
117
|
/**
|
|
118
118
|
* Check if header has valid USTAR magic
|
|
119
119
|
*/
|
|
120
|
-
export function isUstarHeader(header) {
|
|
121
|
-
const magic = parseString(header, OFFSETS.magic, LENGTHS.magic);
|
|
122
|
-
return magic === 'ustar' || magic === 'ustar\0';
|
|
123
|
-
}
|
|
124
120
|
/**
|
|
125
121
|
* Parse TAR header into entry metadata
|
|
126
122
|
*
|
package/lib/tar/format.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/tar/format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE7F,qBAAqB;AACrB,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,CAAC;AAE9B,yBAAyB;AACzB,MAAM,WAAW,GAAG,SAAS,CAAC;AAC9B,MAAM,aAAa,GAAG,IAAI,CAAC;AAE3B,2BAA2B;AAC3B,MAAM,OAAO,GAAG;IACd,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,GAAG;IACT,GAAG,EAAE,GAAG;IACR,GAAG,EAAE,GAAG;IACR,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;IACX,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,KAAK,EAAE,GAAG;IACV,OAAO,EAAE,GAAG;IACZ,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,GAAG;IACV,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,MAAM,EAAE,GAAG;CACH,CAAC;AAEX,2BAA2B;AAC3B,MAAM,OAAO,GAAG;IACd,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,CAAC;IACP,GAAG,EAAE,CAAC;IACN,GAAG,EAAE,CAAC;IACN,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,CAAC;IACT,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,GAAG;IACb,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC;IACX,MAAM,EAAE,GAAG;CACH,CAAC;AAEX,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AACtC,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAE/D;;GAEG;AACH,SAAS,WAAW,CAAC,MAAkB,EAAE,MAAc,EAAE,MAAc;IACrE,IAAI,GAAG,GAAG,MAAM,CAAC;IACjB,MAAM,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IAE9B,OAAO,GAAG,GAAG,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACxC,GAAG,EAAE,CAAC;IACR,CAAC;IAED,OAAO,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,MAAkB,EAAE,MAAc,EAAE,MAAc,EAAE,KAAa;IACpF,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/tar/format.ts"],"names":[],"mappings":"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"}
|
package/lib/tar/index.d.ts
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* TAR format utilities
|
|
3
3
|
*/
|
|
4
4
|
export type { CreateHeaderOptions } from './format.js';
|
|
5
|
-
export { BLOCK_SIZE, calculateChecksum, calculatePadding, createEndOfArchive, createHeader, isEmptyBlock,
|
|
5
|
+
export { BLOCK_SIZE, calculateChecksum, calculatePadding, createEndOfArchive, createHeader, isEmptyBlock, parseHeader, verifyChecksum, } from './format.js';
|
|
6
6
|
export type { PaxAttributes } from './pax.js';
|
|
7
7
|
export { applyPaxAttributes, createPaxData, createPaxHeaderBlocks, needsPaxHeaders, parsePaxData, } from './pax.js';
|
|
8
|
+
export { stripPath } from './utils.js';
|
|
8
9
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/tar/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tar/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tar/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,qBAAqB,EACrB,eAAe,EACf,YAAY,GACb,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC"}
|
package/lib/tar/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* TAR format utilities
|
|
3
3
|
*/
|
|
4
|
-
export { BLOCK_SIZE, calculateChecksum, calculatePadding, createEndOfArchive, createHeader, isEmptyBlock,
|
|
4
|
+
export { BLOCK_SIZE, calculateChecksum, calculatePadding, createEndOfArchive, createHeader, isEmptyBlock, parseHeader, verifyChecksum, } from './format.js';
|
|
5
5
|
export { applyPaxAttributes, createPaxData, createPaxHeaderBlocks, needsPaxHeaders, parsePaxData, } from './pax.js';
|
|
6
|
+
export { stripPath } from './utils.js';
|
|
6
7
|
//# sourceMappingURL=index.js.map
|
package/lib/tar/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tar/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tar/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,qBAAqB,EACrB,eAAe,EACf,YAAY,GACb,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/tar/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAOjE"}
|
package/lib/tar/utils.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strip leading path components from a path
|
|
3
|
+
*/
|
|
4
|
+
export function stripPath(filePath, strip) {
|
|
5
|
+
if (strip <= 0) {
|
|
6
|
+
return filePath;
|
|
7
|
+
}
|
|
8
|
+
const parts = filePath.split('/');
|
|
9
|
+
return parts.slice(strip).join('/');
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/tar/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,QAAgB,EAAE,KAAa;IACvD,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tar-xz",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"description": "Create and extract tar.xz archives with streaming support for Node.js and buffer-based API for browsers",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/index.js",
|
|
@@ -17,11 +17,11 @@
|
|
|
17
17
|
}
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"node-liblzma": "^
|
|
20
|
+
"node-liblzma": "^4.0.0"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
|
-
"@biomejs/biome": "^2.4.
|
|
24
|
-
"@types/node": "^25.
|
|
23
|
+
"@biomejs/biome": "^2.4.6",
|
|
24
|
+
"@types/node": "^25.3.5",
|
|
25
25
|
"@vitest/coverage-v8": "^4.0.18",
|
|
26
26
|
"typescript": "^5.9.3",
|
|
27
27
|
"vite": "^7.3.1",
|