tar-xz 3.1.2 → 3.2.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/lib/browser/create.d.ts +27 -0
- package/lib/browser/create.d.ts.map +1 -0
- package/lib/browser/create.js +113 -0
- package/lib/browser/create.js.map +1 -0
- package/lib/browser/extract.d.ts +24 -0
- package/lib/browser/extract.d.ts.map +1 -0
- package/lib/browser/extract.js +112 -0
- package/lib/browser/extract.js.map +1 -0
- package/lib/browser/index.d.ts +7 -0
- package/lib/browser/index.d.ts.map +1 -0
- package/lib/browser/index.js +7 -0
- package/lib/browser/index.js.map +1 -0
- package/lib/browser/list.d.ts +23 -0
- package/lib/browser/list.d.ts.map +1 -0
- package/lib/browser/list.js +81 -0
- package/lib/browser/list.js.map +1 -0
- package/lib/index.browser.d.ts +12 -0
- package/lib/index.browser.d.ts.map +1 -0
- package/lib/index.browser.js +14 -0
- package/lib/index.browser.js.map +1 -0
- package/lib/index.d.ts +12 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +14 -0
- package/lib/index.js.map +1 -0
- package/lib/node/create.d.ts +22 -0
- package/lib/node/create.d.ts.map +1 -0
- package/lib/node/create.js +155 -0
- package/lib/node/create.js.map +1 -0
- package/lib/node/extract.d.ts +30 -0
- package/lib/node/extract.d.ts.map +1 -0
- package/lib/node/extract.js +283 -0
- package/lib/node/extract.js.map +1 -0
- package/lib/node/index.d.ts +7 -0
- package/lib/node/index.d.ts.map +1 -0
- package/lib/node/index.js +7 -0
- package/lib/node/index.js.map +1 -0
- package/lib/node/list.d.ts +20 -0
- package/lib/node/list.d.ts.map +1 -0
- package/lib/node/list.js +121 -0
- package/lib/node/list.js.map +1 -0
- package/lib/tar/checksum.d.ts +40 -0
- package/lib/tar/checksum.d.ts.map +1 -0
- package/lib/tar/checksum.js +91 -0
- package/lib/tar/checksum.js.map +1 -0
- package/lib/tar/format.d.ts +87 -0
- package/lib/tar/format.d.ts.map +1 -0
- package/lib/tar/format.js +244 -0
- package/lib/tar/format.js.map +1 -0
- package/lib/tar/index.d.ts +8 -0
- package/lib/tar/index.d.ts.map +1 -0
- package/lib/tar/index.js +6 -0
- package/lib/tar/index.js.map +1 -0
- package/lib/tar/pax.d.ts +82 -0
- package/lib/tar/pax.d.ts.map +1 -0
- package/lib/tar/pax.js +185 -0
- package/lib/tar/pax.js.map +1 -0
- package/lib/types.d.ts +144 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +26 -0
- package/lib/types.js.map +1 -0
- package/package.json +6 -6
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-based TAR creation with XZ compression
|
|
3
|
+
*/
|
|
4
|
+
import { type BrowserCreateOptions } from '../types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Create a tar.xz archive in browser
|
|
7
|
+
*
|
|
8
|
+
* @param options - Creation options
|
|
9
|
+
* @returns Compressed archive as Uint8Array
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* const archive = await createTarXz({
|
|
14
|
+
* files: [
|
|
15
|
+
* { name: 'hello.txt', content: 'Hello, World!' },
|
|
16
|
+
* { name: 'data.json', content: JSON.stringify({ foo: 'bar' }) }
|
|
17
|
+
* ],
|
|
18
|
+
* preset: 3
|
|
19
|
+
* });
|
|
20
|
+
*
|
|
21
|
+
* // Download the archive
|
|
22
|
+
* const blob = new Blob([archive], { type: 'application/x-xz' });
|
|
23
|
+
* const url = URL.createObjectURL(blob);
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare function createTarXz(options: BrowserCreateOptions): Promise<Uint8Array>;
|
|
27
|
+
//# sourceMappingURL=create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/browser/create.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,EAAE,KAAK,oBAAoB,EAAgB,MAAM,aAAa,CAAC;AAsCtE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC,CAiEpF"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-based TAR creation with XZ compression
|
|
3
|
+
*/
|
|
4
|
+
import { xzAsync } from 'node-liblzma';
|
|
5
|
+
import { calculatePadding, createEndOfArchive, createHeader, createPaxHeaderBlocks, needsPaxHeaders, } from '../tar/index.js';
|
|
6
|
+
import { TarEntryType } from '../types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Convert input content to Uint8Array
|
|
9
|
+
*/
|
|
10
|
+
async function toUint8Array(content) {
|
|
11
|
+
if (typeof content === 'string') {
|
|
12
|
+
return new TextEncoder().encode(content);
|
|
13
|
+
}
|
|
14
|
+
if (content instanceof Uint8Array) {
|
|
15
|
+
return content;
|
|
16
|
+
}
|
|
17
|
+
if (content instanceof ArrayBuffer) {
|
|
18
|
+
return new Uint8Array(content);
|
|
19
|
+
}
|
|
20
|
+
if (content instanceof Blob) {
|
|
21
|
+
const buffer = await content.arrayBuffer();
|
|
22
|
+
return new Uint8Array(buffer);
|
|
23
|
+
}
|
|
24
|
+
throw new Error('Unsupported content type');
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Concatenate multiple Uint8Arrays
|
|
28
|
+
*/
|
|
29
|
+
function concatArrays(arrays) {
|
|
30
|
+
const totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0);
|
|
31
|
+
const result = new Uint8Array(totalLength);
|
|
32
|
+
let offset = 0;
|
|
33
|
+
for (const arr of arrays) {
|
|
34
|
+
result.set(arr, offset);
|
|
35
|
+
offset += arr.length;
|
|
36
|
+
}
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Create a tar.xz archive in browser
|
|
41
|
+
*
|
|
42
|
+
* @param options - Creation options
|
|
43
|
+
* @returns Compressed archive as Uint8Array
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```ts
|
|
47
|
+
* const archive = await createTarXz({
|
|
48
|
+
* files: [
|
|
49
|
+
* { name: 'hello.txt', content: 'Hello, World!' },
|
|
50
|
+
* { name: 'data.json', content: JSON.stringify({ foo: 'bar' }) }
|
|
51
|
+
* ],
|
|
52
|
+
* preset: 3
|
|
53
|
+
* });
|
|
54
|
+
*
|
|
55
|
+
* // Download the archive
|
|
56
|
+
* const blob = new Blob([archive], { type: 'application/x-xz' });
|
|
57
|
+
* const url = URL.createObjectURL(blob);
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export async function createTarXz(options) {
|
|
61
|
+
const { files, preset = 3 } = options;
|
|
62
|
+
const blocks = [];
|
|
63
|
+
for (const file of files) {
|
|
64
|
+
const content = await toUint8Array(file.content);
|
|
65
|
+
const size = content.length;
|
|
66
|
+
// Normalize name
|
|
67
|
+
let name = file.name.replace(/\\/g, '/');
|
|
68
|
+
// Determine if it's a directory (ends with / and has no content)
|
|
69
|
+
const isDir = name.endsWith('/') && size === 0;
|
|
70
|
+
const type = isDir ? TarEntryType.DIRECTORY : TarEntryType.FILE;
|
|
71
|
+
// Check if PAX headers are needed
|
|
72
|
+
if (needsPaxHeaders({ name, size })) {
|
|
73
|
+
const paxBlocks = createPaxHeaderBlocks(name, {
|
|
74
|
+
path: name,
|
|
75
|
+
size,
|
|
76
|
+
});
|
|
77
|
+
blocks.push(...paxBlocks);
|
|
78
|
+
// Truncate name for the regular header
|
|
79
|
+
name = name.slice(-100);
|
|
80
|
+
}
|
|
81
|
+
// Create header
|
|
82
|
+
const mtime = file.mtime
|
|
83
|
+
? typeof file.mtime === 'number'
|
|
84
|
+
? file.mtime
|
|
85
|
+
: Math.floor(file.mtime.getTime() / 1000)
|
|
86
|
+
: Math.floor(Date.now() / 1000);
|
|
87
|
+
const header = createHeader({
|
|
88
|
+
name,
|
|
89
|
+
type,
|
|
90
|
+
size,
|
|
91
|
+
mode: file.mode ?? (isDir ? 0o755 : 0o644),
|
|
92
|
+
mtime,
|
|
93
|
+
});
|
|
94
|
+
blocks.push(header);
|
|
95
|
+
// Add content
|
|
96
|
+
if (size > 0) {
|
|
97
|
+
blocks.push(content);
|
|
98
|
+
// Add padding
|
|
99
|
+
const padding = calculatePadding(size);
|
|
100
|
+
if (padding > 0) {
|
|
101
|
+
blocks.push(new Uint8Array(padding));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Add end-of-archive marker
|
|
106
|
+
blocks.push(createEndOfArchive());
|
|
107
|
+
// Concatenate all blocks into TAR
|
|
108
|
+
const tarData = concatArrays(blocks);
|
|
109
|
+
// Compress with XZ
|
|
110
|
+
// Cast to any because WASM accepts Uint8Array but types are defined for Node.js Buffer
|
|
111
|
+
return xzAsync(tarData, { preset });
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/browser/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-based TAR extraction with XZ decompression
|
|
3
|
+
*/
|
|
4
|
+
import { type BrowserExtractOptions, type ExtractedFile } from '../types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Extract a tar.xz archive in browser
|
|
7
|
+
*
|
|
8
|
+
* @param archive - Compressed archive data (ArrayBuffer or Uint8Array)
|
|
9
|
+
* @param options - Extraction options
|
|
10
|
+
* @returns Array of extracted files
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* const response = await fetch('archive.tar.xz');
|
|
15
|
+
* const data = await response.arrayBuffer();
|
|
16
|
+
* const files = await extractTarXz(data);
|
|
17
|
+
*
|
|
18
|
+
* for (const file of files) {
|
|
19
|
+
* console.log(file.name, file.data.length);
|
|
20
|
+
* }
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare function extractTarXz(archive: ArrayBuffer | Uint8Array, options?: BrowserExtractOptions): Promise<ExtractedFile[]>;
|
|
24
|
+
//# sourceMappingURL=extract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/browser/extract.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAGnB,MAAM,aAAa,CAAC;AA4ErB;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,WAAW,GAAG,UAAU,EACjC,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,aAAa,EAAE,CAAC,CAoC1B"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-based TAR extraction with XZ decompression
|
|
3
|
+
*/
|
|
4
|
+
import { unxzAsync } from 'node-liblzma';
|
|
5
|
+
import { applyPaxAttributes, BLOCK_SIZE, calculatePadding, isEmptyBlock, parseHeader, parsePaxData, } from '../tar/index.js';
|
|
6
|
+
import { TarEntryType, } from '../types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Parse TAR data into entries
|
|
9
|
+
*/
|
|
10
|
+
function parseTar(data) {
|
|
11
|
+
const entries = [];
|
|
12
|
+
let offset = 0;
|
|
13
|
+
let paxAttrs = null;
|
|
14
|
+
let emptyBlockCount = 0;
|
|
15
|
+
while (offset + BLOCK_SIZE <= data.length) {
|
|
16
|
+
const headerBlock = data.subarray(offset, offset + BLOCK_SIZE);
|
|
17
|
+
offset += BLOCK_SIZE;
|
|
18
|
+
// Check for end-of-archive
|
|
19
|
+
if (isEmptyBlock(headerBlock)) {
|
|
20
|
+
emptyBlockCount++;
|
|
21
|
+
if (emptyBlockCount >= 2) {
|
|
22
|
+
break;
|
|
23
|
+
}
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
emptyBlockCount = 0;
|
|
27
|
+
// Parse header
|
|
28
|
+
let entry = parseHeader(headerBlock);
|
|
29
|
+
if (!entry) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
// Handle PAX headers
|
|
33
|
+
if (entry.type === TarEntryType.PAX_HEADER) {
|
|
34
|
+
const paxSize = entry.size;
|
|
35
|
+
const paxData = data.subarray(offset, offset + paxSize);
|
|
36
|
+
offset += paxSize + calculatePadding(paxSize);
|
|
37
|
+
paxAttrs = parsePaxData(paxData);
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (entry.type === TarEntryType.PAX_GLOBAL) {
|
|
41
|
+
offset += entry.size + calculatePadding(entry.size);
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
// Apply PAX attributes if present
|
|
45
|
+
if (paxAttrs) {
|
|
46
|
+
entry = applyPaxAttributes(entry, paxAttrs);
|
|
47
|
+
paxAttrs = null;
|
|
48
|
+
}
|
|
49
|
+
// Extract content
|
|
50
|
+
const contentData = entry.size > 0 ? data.subarray(offset, offset + entry.size) : new Uint8Array(0);
|
|
51
|
+
offset += entry.size + calculatePadding(entry.size);
|
|
52
|
+
entries.push({ ...entry, data: contentData });
|
|
53
|
+
}
|
|
54
|
+
return entries;
|
|
55
|
+
}
|
|
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
|
+
/**
|
|
67
|
+
* Extract a tar.xz archive in browser
|
|
68
|
+
*
|
|
69
|
+
* @param archive - Compressed archive data (ArrayBuffer or Uint8Array)
|
|
70
|
+
* @param options - Extraction options
|
|
71
|
+
* @returns Array of extracted files
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```ts
|
|
75
|
+
* const response = await fetch('archive.tar.xz');
|
|
76
|
+
* const data = await response.arrayBuffer();
|
|
77
|
+
* const files = await extractTarXz(data);
|
|
78
|
+
*
|
|
79
|
+
* for (const file of files) {
|
|
80
|
+
* console.log(file.name, file.data.length);
|
|
81
|
+
* }
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
export async function extractTarXz(archive, options = {}) {
|
|
85
|
+
const { strip = 0, filter } = options;
|
|
86
|
+
// Convert to Uint8Array if needed
|
|
87
|
+
const archiveData = archive instanceof Uint8Array ? archive : new Uint8Array(archive);
|
|
88
|
+
// Decompress XZ
|
|
89
|
+
// Cast to any because WASM accepts Uint8Array but types are defined for Node.js Buffer
|
|
90
|
+
const tarData = await unxzAsync(archiveData);
|
|
91
|
+
// Parse TAR
|
|
92
|
+
const entries = parseTar(tarData);
|
|
93
|
+
// Apply strip and filter
|
|
94
|
+
const results = [];
|
|
95
|
+
for (const entry of entries) {
|
|
96
|
+
const strippedName = stripPath(entry.name, strip);
|
|
97
|
+
if (!strippedName) {
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
const strippedEntry = { ...entry, name: strippedName };
|
|
101
|
+
if (filter && !filter(strippedEntry)) {
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
results.push({
|
|
105
|
+
name: strippedName,
|
|
106
|
+
data: entry.data,
|
|
107
|
+
entry: strippedEntry,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
return results;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=extract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/browser/extract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-based TAR listing with XZ decompression
|
|
3
|
+
*/
|
|
4
|
+
import { type TarEntry } from '../types.js';
|
|
5
|
+
/**
|
|
6
|
+
* List contents of a tar.xz archive in browser
|
|
7
|
+
*
|
|
8
|
+
* @param archive - Compressed archive data (ArrayBuffer or Uint8Array)
|
|
9
|
+
* @returns Array of entry metadata (without content)
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* const response = await fetch('archive.tar.xz');
|
|
14
|
+
* const data = await response.arrayBuffer();
|
|
15
|
+
* const entries = await listTarXz(data);
|
|
16
|
+
*
|
|
17
|
+
* for (const entry of entries) {
|
|
18
|
+
* console.log(entry.name, entry.size, entry.type);
|
|
19
|
+
* }
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare function listTarXz(archive: ArrayBuffer | Uint8Array): Promise<TarEntry[]>;
|
|
23
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/browser/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,OAAO,EAAE,KAAK,QAAQ,EAAgB,MAAM,aAAa,CAAC;AA6D1D;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAUtF"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-based TAR listing with XZ decompression
|
|
3
|
+
*/
|
|
4
|
+
import { unxzAsync } from 'node-liblzma';
|
|
5
|
+
import { applyPaxAttributes, BLOCK_SIZE, calculatePadding, isEmptyBlock, parseHeader, parsePaxData, } from '../tar/index.js';
|
|
6
|
+
import { TarEntryType } from '../types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Parse TAR headers only (skip content)
|
|
9
|
+
*/
|
|
10
|
+
function listTarEntries(data) {
|
|
11
|
+
const entries = [];
|
|
12
|
+
let offset = 0;
|
|
13
|
+
let paxAttrs = null;
|
|
14
|
+
let emptyBlockCount = 0;
|
|
15
|
+
while (offset + BLOCK_SIZE <= data.length) {
|
|
16
|
+
const headerBlock = data.subarray(offset, offset + BLOCK_SIZE);
|
|
17
|
+
offset += BLOCK_SIZE;
|
|
18
|
+
// Check for end-of-archive
|
|
19
|
+
if (isEmptyBlock(headerBlock)) {
|
|
20
|
+
emptyBlockCount++;
|
|
21
|
+
if (emptyBlockCount >= 2) {
|
|
22
|
+
break;
|
|
23
|
+
}
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
emptyBlockCount = 0;
|
|
27
|
+
// Parse header
|
|
28
|
+
let entry = parseHeader(headerBlock);
|
|
29
|
+
if (!entry) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
// Handle PAX headers
|
|
33
|
+
if (entry.type === TarEntryType.PAX_HEADER) {
|
|
34
|
+
const paxSize = entry.size;
|
|
35
|
+
const paxData = data.subarray(offset, offset + paxSize);
|
|
36
|
+
offset += paxSize + calculatePadding(paxSize);
|
|
37
|
+
paxAttrs = parsePaxData(paxData);
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (entry.type === TarEntryType.PAX_GLOBAL) {
|
|
41
|
+
offset += entry.size + calculatePadding(entry.size);
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
// Apply PAX attributes if present
|
|
45
|
+
if (paxAttrs) {
|
|
46
|
+
entry = applyPaxAttributes(entry, paxAttrs);
|
|
47
|
+
paxAttrs = null;
|
|
48
|
+
}
|
|
49
|
+
// Skip content
|
|
50
|
+
offset += entry.size + calculatePadding(entry.size);
|
|
51
|
+
entries.push(entry);
|
|
52
|
+
}
|
|
53
|
+
return entries;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* List contents of a tar.xz archive in browser
|
|
57
|
+
*
|
|
58
|
+
* @param archive - Compressed archive data (ArrayBuffer or Uint8Array)
|
|
59
|
+
* @returns Array of entry metadata (without content)
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```ts
|
|
63
|
+
* const response = await fetch('archive.tar.xz');
|
|
64
|
+
* const data = await response.arrayBuffer();
|
|
65
|
+
* const entries = await listTarXz(data);
|
|
66
|
+
*
|
|
67
|
+
* for (const entry of entries) {
|
|
68
|
+
* console.log(entry.name, entry.size, entry.type);
|
|
69
|
+
* }
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
export async function listTarXz(archive) {
|
|
73
|
+
// Convert to Uint8Array if needed
|
|
74
|
+
const archiveData = archive instanceof Uint8Array ? archive : new Uint8Array(archive);
|
|
75
|
+
// Decompress XZ
|
|
76
|
+
// Cast to any because WASM accepts Uint8Array but types are defined for Node.js Buffer
|
|
77
|
+
const tarData = await unxzAsync(archiveData);
|
|
78
|
+
// List entries
|
|
79
|
+
return listTarEntries(tarData);
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/browser/list.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,EAAiB,YAAY,EAAE,MAAM,aAAa,CAAC;AAE1D;;GAEG;AACH,SAAS,cAAc,CAAC,IAAgB;IACtC,MAAM,OAAO,GAAe,EAAE,CAAC;IAC/B,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,eAAe;QACf,MAAM,IAAI,KAAK,CAAC,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEpD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAiC;IAC/D,kCAAkC;IAClC,MAAM,WAAW,GAAG,OAAO,YAAY,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;IAEtF,gBAAgB;IAChB,uFAAuF;IACvF,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,WAAyD,CAAC,CAAC;IAE3F,eAAe;IACf,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tar-xz — Create and extract tar.xz archives (Browser)
|
|
3
|
+
*
|
|
4
|
+
* Buffer-based API for browsers with XZ compression powered by node-liblzma WASM.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
export { createTarXz, extractTarXz, listTarXz } from './browser/index.js';
|
|
9
|
+
export type { CreateHeaderOptions, PaxAttributes } from './tar/index.js';
|
|
10
|
+
export { applyPaxAttributes, BLOCK_SIZE, calculatePadding, createEndOfArchive, createHeader, createPaxData, createPaxHeaderBlocks, needsPaxHeaders, parseHeader, parsePaxData, } from './tar/index.js';
|
|
11
|
+
export { type BrowserCreateOptions, type BrowserExtractOptions, type ExtractedFile, type TarEntry, TarEntryType, type TarEntryWithData, type TarInputFile, } from './types.js';
|
|
12
|
+
//# sourceMappingURL=index.browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.browser.d.ts","sourceRoot":"","sources":["../src/index.browser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1E,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;AAExB,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tar-xz — Create and extract tar.xz archives (Browser)
|
|
3
|
+
*
|
|
4
|
+
* Buffer-based API for browsers with XZ compression powered by node-liblzma WASM.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
// Re-export Browser API
|
|
9
|
+
export { createTarXz, extractTarXz, listTarXz } from './browser/index.js';
|
|
10
|
+
// Re-export low-level TAR utilities for advanced usage
|
|
11
|
+
export { applyPaxAttributes, BLOCK_SIZE, calculatePadding, createEndOfArchive, createHeader, createPaxData, createPaxHeaderBlocks, needsPaxHeaders, parseHeader, parsePaxData, } from './tar/index.js';
|
|
12
|
+
// Re-export types
|
|
13
|
+
export { TarEntryType, } from './types.js';
|
|
14
|
+
//# sourceMappingURL=index.browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.browser.js","sourceRoot":"","sources":["../src/index.browser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,wBAAwB;AACxB,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG1E,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;AACxB,kBAAkB;AAClB,OAAO,EAKL,YAAY,GAGb,MAAM,YAAY,CAAC"}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tar-xz — Create and extract tar.xz archives
|
|
3
|
+
*
|
|
4
|
+
* Node.js streaming API with XZ compression powered by node-liblzma.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
export { create, extract, extractToMemory, list } from './node/index.js';
|
|
9
|
+
export type { CreateHeaderOptions, PaxAttributes } from './tar/index.js';
|
|
10
|
+
export { applyPaxAttributes, BLOCK_SIZE, calculatePadding, createEndOfArchive, createHeader, createPaxData, createPaxHeaderBlocks, needsPaxHeaders, parseHeader, parsePaxData, } from './tar/index.js';
|
|
11
|
+
export { type CreateOptions, type ExtractedFile, type ExtractOptions, type ListOptions, type TarEntry, TarEntryType, type TarEntryWithData, type TarInputFile, } from './types.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACzE,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;AAExB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC"}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tar-xz — Create and extract tar.xz archives
|
|
3
|
+
*
|
|
4
|
+
* Node.js streaming API with XZ compression powered by node-liblzma.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
// Re-export Node.js API
|
|
9
|
+
export { create, extract, extractToMemory, list } from './node/index.js';
|
|
10
|
+
// Re-export low-level TAR utilities for advanced usage
|
|
11
|
+
export { applyPaxAttributes, BLOCK_SIZE, calculatePadding, createEndOfArchive, createHeader, createPaxData, createPaxHeaderBlocks, needsPaxHeaders, parseHeader, parsePaxData, } from './tar/index.js';
|
|
12
|
+
// Re-export types
|
|
13
|
+
export { TarEntryType, } from './types.js';
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,wBAAwB;AACxB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAGzE,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;AACxB,kBAAkB;AAClB,OAAO,EAML,YAAY,GAGb,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js TAR creation with XZ compression
|
|
3
|
+
*/
|
|
4
|
+
import type { CreateOptions } from '../types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Create a tar.xz archive
|
|
7
|
+
*
|
|
8
|
+
* @param options - Creation options
|
|
9
|
+
* @returns Promise that resolves when archive is complete
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* await create({
|
|
14
|
+
* file: 'archive.tar.xz',
|
|
15
|
+
* cwd: '/source',
|
|
16
|
+
* files: ['file1.txt', 'dir/'],
|
|
17
|
+
* preset: 6
|
|
18
|
+
* });
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare function create(options: CreateOptions): Promise<void>;
|
|
22
|
+
//# sourceMappingURL=create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/node/create.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAsHjD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA6ClE"}
|