@push.rocks/smartarchive 5.0.1 → 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_ts/00_commitinfo_data.js +2 -2
- package/dist_ts/classes.archiveanalyzer.d.ts +1 -1
- package/dist_ts/classes.archiveanalyzer.js +34 -4
- package/dist_ts/classes.smartarchive.d.ts +4 -4
- package/dist_ts/classes.smartarchive.js +45 -26
- package/dist_ts/classes.tartools.d.ts +74 -23
- package/dist_ts/classes.tartools.js +190 -139
- package/dist_ts/index.d.ts +2 -6
- package/dist_ts/index.js +7 -11
- package/dist_ts/paths.js +1 -1
- package/dist_ts/plugins.d.ts +4 -9
- package/dist_ts/plugins.js +9 -13
- package/{dist_ts → dist_ts_shared}/bzip2/bititerator.d.ts +1 -1
- package/dist_ts_shared/bzip2/bititerator.js +50 -0
- package/{dist_ts → dist_ts_shared}/bzip2/bzip2.d.ts +2 -2
- package/{dist_ts → dist_ts_shared}/bzip2/bzip2.js +1 -1
- package/{dist_ts → dist_ts_shared}/bzip2/index.d.ts +1 -1
- package/dist_ts_shared/bzip2/index.js +92 -0
- package/dist_ts_shared/classes.bzip2tools.d.ts +10 -0
- package/dist_ts_shared/classes.bzip2tools.js +14 -0
- package/dist_ts_shared/classes.gziptools.d.ts +26 -0
- package/dist_ts_shared/classes.gziptools.js +38 -0
- package/dist_ts_shared/classes.tartools.d.ts +30 -0
- package/dist_ts_shared/classes.tartools.js +78 -0
- package/dist_ts_shared/classes.ziptools.d.ts +31 -0
- package/dist_ts_shared/classes.ziptools.js +103 -0
- package/{dist_ts → dist_ts_shared}/errors.js +1 -1
- package/dist_ts_shared/index.d.ts +8 -0
- package/dist_ts_shared/index.js +14 -0
- package/{dist_ts → dist_ts_shared}/interfaces.d.ts +17 -7
- package/{dist_ts → dist_ts_shared}/interfaces.js +1 -1
- package/dist_ts_shared/plugins.d.ts +9 -0
- package/dist_ts_shared/plugins.js +14 -0
- package/dist_ts_web/00_commitinfo_data.d.ts +8 -0
- package/dist_ts_web/00_commitinfo_data.js +9 -0
- package/dist_ts_web/index.d.ts +1 -0
- package/dist_ts_web/index.js +4 -0
- package/dist_ts_web/plugins.d.ts +1 -0
- package/dist_ts_web/plugins.js +4 -0
- package/npmextra.json +13 -7
- package/package.json +24 -13
- package/readme.md +154 -46
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.archiveanalyzer.ts +33 -5
- package/ts/classes.smartarchive.ts +48 -27
- package/ts/classes.tartools.ts +217 -153
- package/ts/index.ts +7 -11
- package/ts/plugins.ts +8 -16
- package/{ts → ts_shared}/bzip2/bititerator.ts +1 -1
- package/{ts → ts_shared}/bzip2/bzip2.ts +2 -2
- package/{ts → ts_shared}/bzip2/index.ts +6 -6
- package/ts_shared/classes.bzip2tools.ts +14 -0
- package/ts_shared/classes.gziptools.ts +42 -0
- package/ts_shared/classes.tartools.ts +89 -0
- package/ts_shared/classes.ziptools.ts +107 -0
- package/ts_shared/index.ts +17 -0
- package/{ts → ts_shared}/interfaces.ts +18 -7
- package/ts_shared/plugins.ts +22 -0
- package/ts_web/00_commitinfo_data.ts +8 -0
- package/ts_web/index.ts +4 -0
- package/ts_web/plugins.ts +3 -0
- package/dist_ts/bzip2/bititerator.js +0 -50
- package/dist_ts/bzip2/index.js +0 -92
- package/dist_ts/classes.bzip2tools.d.ts +0 -7
- package/dist_ts/classes.bzip2tools.js +0 -11
- package/dist_ts/classes.gziptools.d.ts +0 -53
- package/dist_ts/classes.gziptools.js +0 -116
- package/dist_ts/classes.ziptools.d.ts +0 -56
- package/dist_ts/classes.ziptools.js +0 -171
- package/dist_ts/smartarchive.classes.smartarchive.d.ts +0 -34
- package/dist_ts/smartarchive.classes.smartarchive.js +0 -116
- package/dist_ts/smartarchive.paths.d.ts +0 -2
- package/dist_ts/smartarchive.paths.js +0 -4
- package/dist_ts/smartarchive.plugins.d.ts +0 -14
- package/dist_ts/smartarchive.plugins.js +0 -19
- package/ts/classes.bzip2tools.ts +0 -16
- package/ts/classes.gziptools.ts +0 -138
- package/ts/classes.ziptools.ts +0 -196
- /package/{dist_ts → dist_ts_shared}/errors.d.ts +0 -0
- /package/{ts → ts_shared}/errors.ts +0 -0
|
@@ -1,175 +1,226 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
|
-
import {
|
|
2
|
+
import { TarTools as SharedTarTools } from '../ts_shared/classes.tartools.js';
|
|
3
3
|
/**
|
|
4
|
-
* TAR archive
|
|
4
|
+
* Extended TAR archive utilities with Node.js streaming support
|
|
5
|
+
*
|
|
6
|
+
* For small archives: Use inherited buffer-based methods (packFiles, extractTar, etc.)
|
|
7
|
+
* For large archives: Use streaming methods (getPackStream, getExtractStream, etc.)
|
|
5
8
|
*/
|
|
6
|
-
export class TarTools {
|
|
9
|
+
export class TarTools extends SharedTarTools {
|
|
10
|
+
// ============================================
|
|
11
|
+
// STREAMING PACK METHODS (for large files)
|
|
12
|
+
// ============================================
|
|
13
|
+
/**
|
|
14
|
+
* Get a streaming TAR pack instance
|
|
15
|
+
* Use this for packing large files without buffering everything in memory
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const pack = tarTools.getPackStream();
|
|
20
|
+
*
|
|
21
|
+
* await tarTools.addFileToPack(pack, { fileName: 'large.bin', content: readStream, size: fileSize });
|
|
22
|
+
* await tarTools.addFileToPack(pack, { fileName: 'small.txt', content: 'Hello World' });
|
|
23
|
+
*
|
|
24
|
+
* pack.finalize();
|
|
25
|
+
* pack.pipe(fs.createWriteStream('output.tar'));
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
getPackStream() {
|
|
29
|
+
return plugins.tarStream.pack();
|
|
30
|
+
}
|
|
7
31
|
/**
|
|
8
32
|
* Add a file to a TAR pack stream
|
|
33
|
+
* Supports strings, buffers, and readable streams
|
|
34
|
+
*
|
|
35
|
+
* @param pack - The pack stream from getPackStream()
|
|
36
|
+
* @param options - File options including name, content, and optional metadata
|
|
9
37
|
*/
|
|
10
|
-
async addFileToPack(pack,
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
// Determine content byte length
|
|
30
|
-
let contentByteLength;
|
|
31
|
-
if (optionsArg.byteLength) {
|
|
32
|
-
contentByteLength = optionsArg.byteLength;
|
|
33
|
-
}
|
|
34
|
-
else if (typeof optionsArg.content === 'string') {
|
|
35
|
-
contentByteLength = Buffer.byteLength(optionsArg.content, 'utf8');
|
|
36
|
-
}
|
|
37
|
-
else if (Buffer.isBuffer(optionsArg.content)) {
|
|
38
|
-
contentByteLength = optionsArg.content.length;
|
|
39
|
-
}
|
|
40
|
-
else if (optionsArg.content instanceof plugins.smartfile.SmartFile) {
|
|
41
|
-
contentByteLength = await optionsArg.content.getSize();
|
|
42
|
-
}
|
|
43
|
-
else if (optionsArg.content instanceof plugins.smartfile.StreamFile) {
|
|
44
|
-
contentByteLength = await optionsArg.content.getSize();
|
|
45
|
-
}
|
|
46
|
-
else if (optionsArg.filePath) {
|
|
47
|
-
const fileStat = await plugins.fsPromises.stat(optionsArg.filePath);
|
|
48
|
-
contentByteLength = fileStat.size;
|
|
49
|
-
}
|
|
50
|
-
// Convert all content types to Readable stream
|
|
51
|
-
let content;
|
|
52
|
-
if (Buffer.isBuffer(optionsArg.content)) {
|
|
53
|
-
content = plugins.stream.Readable.from(optionsArg.content);
|
|
54
|
-
}
|
|
55
|
-
else if (typeof optionsArg.content === 'string') {
|
|
56
|
-
content = plugins.stream.Readable.from(Buffer.from(optionsArg.content));
|
|
57
|
-
}
|
|
58
|
-
else if (optionsArg.content instanceof plugins.smartfile.SmartFile) {
|
|
59
|
-
content = plugins.stream.Readable.from(optionsArg.content.contents);
|
|
60
|
-
}
|
|
61
|
-
else if (optionsArg.content instanceof plugins.smartfile.StreamFile) {
|
|
62
|
-
content = await optionsArg.content.createReadStream();
|
|
63
|
-
}
|
|
64
|
-
else if (optionsArg.content instanceof plugins.stream.Readable) {
|
|
65
|
-
content = optionsArg.content;
|
|
66
|
-
}
|
|
67
|
-
else if (optionsArg.filePath) {
|
|
68
|
-
content = plugins.fs.createReadStream(optionsArg.filePath);
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
reject(new Error('No content or filePath specified for TAR entry'));
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
38
|
+
async addFileToPack(pack, options) {
|
|
39
|
+
const { fileName, content, mode = 0o644, mtime = new Date() } = options;
|
|
40
|
+
if (typeof content === 'string') {
|
|
41
|
+
// String content - convert to buffer
|
|
42
|
+
const buffer = Buffer.from(content, 'utf8');
|
|
43
|
+
const entry = pack.entry({
|
|
44
|
+
name: fileName,
|
|
45
|
+
size: buffer.length,
|
|
46
|
+
mode,
|
|
47
|
+
mtime,
|
|
48
|
+
});
|
|
49
|
+
entry.write(buffer);
|
|
50
|
+
entry.end();
|
|
51
|
+
}
|
|
52
|
+
else if (Buffer.isBuffer(content) || content instanceof Uint8Array) {
|
|
53
|
+
// Buffer content
|
|
54
|
+
const buffer = Buffer.isBuffer(content) ? content : Buffer.from(content);
|
|
74
55
|
const entry = pack.entry({
|
|
75
56
|
name: fileName,
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
57
|
+
size: buffer.length,
|
|
58
|
+
mode,
|
|
59
|
+
mtime,
|
|
60
|
+
});
|
|
61
|
+
entry.write(buffer);
|
|
62
|
+
entry.end();
|
|
63
|
+
}
|
|
64
|
+
else if (content && typeof content.pipe === 'function') {
|
|
65
|
+
// Readable stream - requires size to be provided
|
|
66
|
+
const size = options.size;
|
|
67
|
+
if (size === undefined) {
|
|
68
|
+
throw new Error('Size must be provided when adding a stream to TAR pack');
|
|
69
|
+
}
|
|
70
|
+
return new Promise((resolve, reject) => {
|
|
71
|
+
const entry = pack.entry({
|
|
72
|
+
name: fileName,
|
|
73
|
+
size,
|
|
74
|
+
mode,
|
|
75
|
+
mtime,
|
|
76
|
+
}, (err) => {
|
|
77
|
+
if (err)
|
|
78
|
+
reject(err);
|
|
79
|
+
else
|
|
80
|
+
resolve();
|
|
81
|
+
});
|
|
82
|
+
content.pipe(entry);
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
throw new Error('Unsupported content type for TAR entry');
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// ============================================
|
|
90
|
+
// STREAMING EXTRACT METHODS (for large files)
|
|
91
|
+
// ============================================
|
|
92
|
+
/**
|
|
93
|
+
* Get a streaming TAR extract instance
|
|
94
|
+
* Use this for extracting large archives without buffering everything in memory
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```typescript
|
|
98
|
+
* const extract = tarTools.getExtractStream();
|
|
99
|
+
*
|
|
100
|
+
* extract.on('entry', (header, stream, next) => {
|
|
101
|
+
* console.log(`Extracting: ${header.name}`);
|
|
102
|
+
* stream.pipe(fs.createWriteStream(`./out/${header.name}`));
|
|
103
|
+
* stream.on('end', next);
|
|
104
|
+
* });
|
|
105
|
+
*
|
|
106
|
+
* fs.createReadStream('archive.tar').pipe(extract);
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
getExtractStream() {
|
|
110
|
+
return plugins.tarStream.extract();
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Extract a TAR stream to a directory with true streaming (no buffering)
|
|
114
|
+
*
|
|
115
|
+
* @param sourceStream - The TAR archive stream
|
|
116
|
+
* @param targetDir - Directory to extract files to
|
|
117
|
+
*/
|
|
118
|
+
async extractToDirectory(sourceStream, targetDir) {
|
|
119
|
+
await plugins.fsPromises.mkdir(targetDir, { recursive: true });
|
|
120
|
+
return new Promise((resolve, reject) => {
|
|
121
|
+
const extract = this.getExtractStream();
|
|
122
|
+
extract.on('entry', async (header, stream, next) => {
|
|
123
|
+
const filePath = plugins.path.join(targetDir, header.name);
|
|
124
|
+
if (header.type === 'directory') {
|
|
125
|
+
await plugins.fsPromises.mkdir(filePath, { recursive: true });
|
|
126
|
+
stream.resume(); // Drain the stream
|
|
127
|
+
next();
|
|
128
|
+
}
|
|
129
|
+
else if (header.type === 'file') {
|
|
130
|
+
await plugins.fsPromises.mkdir(plugins.path.dirname(filePath), { recursive: true });
|
|
131
|
+
const writeStream = plugins.fs.createWriteStream(filePath);
|
|
132
|
+
stream.pipe(writeStream);
|
|
133
|
+
writeStream.on('finish', next);
|
|
134
|
+
writeStream.on('error', reject);
|
|
80
135
|
}
|
|
81
136
|
else {
|
|
82
|
-
|
|
137
|
+
stream.resume(); // Skip other types
|
|
138
|
+
next();
|
|
83
139
|
}
|
|
84
140
|
});
|
|
85
|
-
|
|
86
|
-
|
|
141
|
+
extract.on('finish', resolve);
|
|
142
|
+
extract.on('error', reject);
|
|
143
|
+
sourceStream.pipe(extract);
|
|
87
144
|
});
|
|
88
145
|
}
|
|
146
|
+
// ============================================
|
|
147
|
+
// STREAMING DIRECTORY PACK (for large directories)
|
|
148
|
+
// ============================================
|
|
89
149
|
/**
|
|
90
|
-
* Pack a directory into a TAR stream
|
|
150
|
+
* Pack a directory into a TAR stream with true streaming (no buffering)
|
|
151
|
+
* Files are read and written one at a time, never loading everything into memory
|
|
91
152
|
*/
|
|
92
|
-
async
|
|
153
|
+
async getDirectoryPackStream(directoryPath) {
|
|
154
|
+
const pack = this.getPackStream();
|
|
93
155
|
const fileTree = await plugins.listFileTree(directoryPath, '**/*');
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
156
|
+
// Process files sequentially to avoid memory issues
|
|
157
|
+
(async () => {
|
|
158
|
+
for (const filePath of fileTree) {
|
|
159
|
+
const absolutePath = plugins.path.join(directoryPath, filePath);
|
|
160
|
+
const stat = await plugins.fsPromises.stat(absolutePath);
|
|
161
|
+
if (stat.isFile()) {
|
|
162
|
+
const readStream = plugins.fs.createReadStream(absolutePath);
|
|
163
|
+
await this.addFileToPack(pack, {
|
|
164
|
+
fileName: filePath,
|
|
165
|
+
content: readStream,
|
|
166
|
+
size: stat.size,
|
|
167
|
+
mode: stat.mode,
|
|
168
|
+
mtime: stat.mtime,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
pack.finalize();
|
|
173
|
+
})().catch((err) => pack.destroy(err));
|
|
105
174
|
return pack;
|
|
106
175
|
}
|
|
107
176
|
/**
|
|
108
|
-
*
|
|
109
|
-
|
|
110
|
-
async getPackStream() {
|
|
111
|
-
return plugins.tarStream.pack();
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Get a TAR extraction stream
|
|
177
|
+
* Pack a directory into a TAR.GZ stream with true streaming
|
|
178
|
+
* Uses Node.js zlib for streaming compression
|
|
115
179
|
*/
|
|
116
|
-
|
|
117
|
-
|
|
180
|
+
async getDirectoryPackStreamGz(directoryPath, compressionLevel) {
|
|
181
|
+
const tarStream = await this.getDirectoryPackStream(directoryPath);
|
|
182
|
+
const { createGzip } = await import('node:zlib');
|
|
183
|
+
const gzip = createGzip({ level: compressionLevel ?? 6 });
|
|
184
|
+
return tarStream.pipe(gzip);
|
|
118
185
|
}
|
|
186
|
+
// ============================================
|
|
187
|
+
// BUFFER-BASED METHODS (inherited + filesystem)
|
|
188
|
+
// ============================================
|
|
119
189
|
/**
|
|
120
|
-
* Pack
|
|
190
|
+
* Pack a directory into a TAR buffer (loads all files into memory)
|
|
191
|
+
* For large directories, use getDirectoryPackStream() instead
|
|
121
192
|
*/
|
|
122
|
-
async
|
|
123
|
-
const
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
193
|
+
async packDirectory(directoryPath) {
|
|
194
|
+
const fileTree = await plugins.listFileTree(directoryPath, '**/*');
|
|
195
|
+
const entries = [];
|
|
196
|
+
for (const filePath of fileTree) {
|
|
197
|
+
const absolutePath = plugins.path.join(directoryPath, filePath);
|
|
198
|
+
const stat = await plugins.fsPromises.stat(absolutePath);
|
|
199
|
+
if (stat.isFile()) {
|
|
200
|
+
const content = await plugins.fsPromises.readFile(absolutePath);
|
|
201
|
+
entries.push({
|
|
202
|
+
archivePath: filePath,
|
|
203
|
+
content: new Uint8Array(content),
|
|
204
|
+
});
|
|
205
|
+
}
|
|
130
206
|
}
|
|
131
|
-
|
|
132
|
-
const chunks = [];
|
|
133
|
-
return new Promise((resolve, reject) => {
|
|
134
|
-
pack.on('data', (chunk) => chunks.push(chunk));
|
|
135
|
-
pack.on('end', () => resolve(Buffer.concat(chunks)));
|
|
136
|
-
pack.on('error', reject);
|
|
137
|
-
});
|
|
207
|
+
return this.packFiles(entries);
|
|
138
208
|
}
|
|
139
209
|
/**
|
|
140
|
-
* Pack a directory into a TAR.GZ buffer
|
|
210
|
+
* Pack a directory into a TAR.GZ buffer (loads all files into memory)
|
|
211
|
+
* For large directories, use getDirectoryPackStreamGz() instead
|
|
141
212
|
*/
|
|
142
213
|
async packDirectoryToTarGz(directoryPath, compressionLevel) {
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
const gzipStream = gzipTools.getCompressionStream(compressionLevel);
|
|
147
|
-
const chunks = [];
|
|
148
|
-
return new Promise((resolve, reject) => {
|
|
149
|
-
pack
|
|
150
|
-
.pipe(gzipStream)
|
|
151
|
-
.on('data', (chunk) => chunks.push(chunk))
|
|
152
|
-
.on('end', () => resolve(Buffer.concat(chunks)))
|
|
153
|
-
.on('error', reject);
|
|
154
|
-
});
|
|
214
|
+
const tarBuffer = await this.packDirectory(directoryPath);
|
|
215
|
+
const { gzipSync } = await import('fflate');
|
|
216
|
+
return gzipSync(new Uint8Array(tarBuffer), { level: compressionLevel ?? 6 });
|
|
155
217
|
}
|
|
156
218
|
/**
|
|
157
219
|
* Pack a directory into a TAR.GZ stream
|
|
220
|
+
* This is now a true streaming implementation
|
|
158
221
|
*/
|
|
159
222
|
async packDirectoryToTarGzStream(directoryPath, compressionLevel) {
|
|
160
|
-
|
|
161
|
-
pack.finalize();
|
|
162
|
-
const gzipTools = new GzipTools();
|
|
163
|
-
const gzipStream = gzipTools.getCompressionStream(compressionLevel);
|
|
164
|
-
return pack.pipe(gzipStream);
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Pack files into a TAR.GZ buffer
|
|
168
|
-
*/
|
|
169
|
-
async packFilesToTarGz(files, compressionLevel) {
|
|
170
|
-
const tarBuffer = await this.packFiles(files);
|
|
171
|
-
const gzipTools = new GzipTools();
|
|
172
|
-
return gzipTools.compress(tarBuffer, compressionLevel);
|
|
223
|
+
return this.getDirectoryPackStreamGz(directoryPath, compressionLevel);
|
|
173
224
|
}
|
|
174
225
|
}
|
|
175
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
226
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy50YXJ0b29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2NsYXNzZXMudGFydG9vbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFFeEMsT0FBTyxFQUFFLFFBQVEsSUFBSSxjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQWE5RTs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxRQUFTLFNBQVEsY0FBYztJQUMxQywrQ0FBK0M7SUFDL0MsMkNBQTJDO0lBQzNDLCtDQUErQztJQUUvQzs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNJLGFBQWE7UUFDbEIsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxLQUFLLENBQUMsYUFBYSxDQUN4QixJQUE0QixFQUM1QixPQUE0QjtRQUU1QixNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEdBQUcsS0FBSyxFQUFFLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBRXhFLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDaEMscUNBQXFDO1lBQ3JDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzVDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQ3ZCLElBQUksRUFBRSxRQUFRO2dCQUNkLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTTtnQkFDbkIsSUFBSTtnQkFDSixLQUFLO2FBQ04sQ0FBQyxDQUFDO1lBQ0gsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwQixLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDZCxDQUFDO2FBQU0sSUFBSSxNQUFNLENBQUMs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
|
package/dist_ts/index.d.ts
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
export * from '
|
|
2
|
-
export * from './errors.js';
|
|
1
|
+
export * from '../ts_shared/index.js';
|
|
3
2
|
export * from './classes.smartarchive.js';
|
|
4
|
-
export * from './classes.tartools.js';
|
|
5
|
-
export * from './classes.ziptools.js';
|
|
6
|
-
export * from './classes.gziptools.js';
|
|
7
|
-
export * from './classes.bzip2tools.js';
|
|
8
3
|
export * from './classes.archiveanalyzer.js';
|
|
4
|
+
export { TarTools, type ITarPackFileOptions } from './classes.tartools.js';
|
package/dist_ts/index.js
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
//
|
|
2
|
-
export * from '
|
|
3
|
-
|
|
4
|
-
// Main archive class
|
|
1
|
+
// Re-export everything from ts_shared (browser-compatible)
|
|
2
|
+
export * from '../ts_shared/index.js';
|
|
3
|
+
// Node.js-specific: Main archive class with filesystem support
|
|
5
4
|
export * from './classes.smartarchive.js';
|
|
6
|
-
//
|
|
7
|
-
export * from './classes.tartools.js';
|
|
8
|
-
export * from './classes.ziptools.js';
|
|
9
|
-
export * from './classes.gziptools.js';
|
|
10
|
-
export * from './classes.bzip2tools.js';
|
|
11
|
-
// Archive analysis
|
|
5
|
+
// Node.js-specific: Archive analysis with SmartArchive integration
|
|
12
6
|
export * from './classes.archiveanalyzer.js';
|
|
13
|
-
|
|
7
|
+
// Node.js-specific: Extended TarTools with streaming support (overrides shared TarTools)
|
|
8
|
+
export { TarTools } from './classes.tartools.js';
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyREFBMkQ7QUFDM0QsY0FBYyx1QkFBdUIsQ0FBQztBQUV0QywrREFBK0Q7QUFDL0QsY0FBYywyQkFBMkIsQ0FBQztBQUUxQyxtRUFBbUU7QUFDbkUsY0FBYyw4QkFBOEIsQ0FBQztBQUU3Qyx5RkFBeUY7QUFDekYsT0FBTyxFQUFFLFFBQVEsRUFBNEIsTUFBTSx1QkFBdUIsQ0FBQyJ9
|
package/dist_ts/paths.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
2
|
export const packageDir = plugins.path.join(plugins.smartpath.get.dirnameFromImportMetaUrl(import.meta.url), '../');
|
|
3
3
|
export const nogitDir = plugins.path.join(packageDir, './.nogit');
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9wYXRocy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4QyxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ3pDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQy9ELEtBQUssQ0FDTixDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyJ9
|
package/dist_ts/plugins.d.ts
CHANGED
|
@@ -7,17 +7,12 @@ export { path, stream, fs, fsPromises };
|
|
|
7
7
|
* List files in a directory recursively, returning relative paths
|
|
8
8
|
*/
|
|
9
9
|
export declare function listFileTree(dirPath: string, _pattern?: string): Promise<string[]>;
|
|
10
|
-
|
|
11
|
-
import * as smartdelay from '@push.rocks/smartdelay';
|
|
10
|
+
export * from '../ts_shared/plugins.js';
|
|
12
11
|
import * as smartpath from '@push.rocks/smartpath';
|
|
13
|
-
import * as smartpromise from '@push.rocks/smartpromise';
|
|
14
12
|
import * as smartrequest from '@push.rocks/smartrequest';
|
|
15
13
|
import * as smartunique from '@push.rocks/smartunique';
|
|
16
|
-
import * as smartstream from '@push.rocks/smartstream';
|
|
17
14
|
import * as smartrx from '@push.rocks/smartrx';
|
|
18
15
|
import * as smarturl from '@push.rocks/smarturl';
|
|
19
|
-
export {
|
|
20
|
-
import * as
|
|
21
|
-
|
|
22
|
-
import tarStream from 'tar-stream';
|
|
23
|
-
export { fileType, fflate, tarStream };
|
|
16
|
+
export { smartpath, smartrequest, smartunique, smartrx, smarturl, };
|
|
17
|
+
import * as tarStream from 'tar-stream';
|
|
18
|
+
export { tarStream };
|
package/dist_ts/plugins.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//
|
|
1
|
+
// Node.js native scope
|
|
2
2
|
import * as path from 'node:path';
|
|
3
3
|
import * as stream from 'node:stream';
|
|
4
4
|
import * as fs from 'node:fs';
|
|
@@ -25,20 +25,16 @@ export async function listFileTree(dirPath, _pattern = '**/*') {
|
|
|
25
25
|
await walkDir(dirPath);
|
|
26
26
|
return results;
|
|
27
27
|
}
|
|
28
|
-
//
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
// Re-export browser-compatible plugins from ts_shared
|
|
29
|
+
export * from '../ts_shared/plugins.js';
|
|
30
|
+
// Additional Node.js-specific @pushrocks packages
|
|
31
31
|
import * as smartpath from '@push.rocks/smartpath';
|
|
32
|
-
import * as smartpromise from '@push.rocks/smartpromise';
|
|
33
32
|
import * as smartrequest from '@push.rocks/smartrequest';
|
|
34
33
|
import * as smartunique from '@push.rocks/smartunique';
|
|
35
|
-
import * as smartstream from '@push.rocks/smartstream';
|
|
36
34
|
import * as smartrx from '@push.rocks/smartrx';
|
|
37
35
|
import * as smarturl from '@push.rocks/smarturl';
|
|
38
|
-
export {
|
|
39
|
-
//
|
|
40
|
-
import * as
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
export { fileType, fflate, tarStream };
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sS0FBSyxVQUFVLE1BQU0sa0JBQWtCLENBQUM7QUFFL0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDO0FBRXhDOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxZQUFZLENBQUMsT0FBZSxFQUFFLFdBQW1CLE1BQU07SUFDM0UsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDO0lBRTdCLEtBQUssVUFBVSxPQUFPLENBQUMsV0FBbUIsRUFBRSxlQUF1QixFQUFFO1FBQ25FLE1BQU0sT0FBTyxHQUFHLE1BQU0sVUFBVSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMvRSxLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzVCLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ3JGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUV6RCxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO2dCQUN4QixNQUFNLE9BQU8sQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDN0MsQ0FBQztpQkFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO2dCQUMxQixPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzdCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZCLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxtQkFBbUI7QUFDbkIsT0FBTyxLQUFLLFNBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssVUFBVSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxLQUFLLFlBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEtBQUssWUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxXQUFXLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxLQUFLLFdBQVcsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssT0FBTyxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sS0FBSyxRQUFRLE1BQU0sc0JBQXNCLENBQUM7QUFFakQsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osV0FBVyxFQUNYLFdBQVcsRUFDWCxPQUFPLEVBQ1AsUUFBUSxHQUNULENBQUM7QUFFRixvQkFBb0I7QUFDcEIsT0FBTyxLQUFLLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxTQUFTLE1BQU0sWUFBWSxDQUFDO0FBRW5DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDIn0=
|
|
36
|
+
export { smartpath, smartrequest, smartunique, smartrx, smarturl, };
|
|
37
|
+
// Node.js-specific: tar-stream for true streaming TAR support
|
|
38
|
+
import * as tarStream from 'tar-stream';
|
|
39
|
+
export { tarStream };
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdUJBQXVCO0FBQ3ZCLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sS0FBSyxVQUFVLE1BQU0sa0JBQWtCLENBQUM7QUFFL0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDO0FBRXhDOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxZQUFZLENBQUMsT0FBZSxFQUFFLFdBQW1CLE1BQU07SUFDM0UsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDO0lBRTdCLEtBQUssVUFBVSxPQUFPLENBQUMsV0FBbUIsRUFBRSxlQUF1QixFQUFFO1FBQ25FLE1BQU0sT0FBTyxHQUFHLE1BQU0sVUFBVSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMvRSxLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzVCLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ3JGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUV6RCxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO2dCQUN4QixNQUFNLE9BQU8sQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDN0MsQ0FBQztpQkFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO2dCQUMxQixPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzdCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZCLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxzREFBc0Q7QUFDdEQsY0FBYyx5QkFBeUIsQ0FBQztBQUV4QyxrREFBa0Q7QUFDbEQsT0FBTyxLQUFLLFNBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssWUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxXQUFXLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxLQUFLLE9BQU8sTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEtBQUssUUFBUSxNQUFNLHNCQUFzQixDQUFDO0FBRWpELE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxPQUFPLEVBQ1AsUUFBUSxHQUNULENBQUM7QUFFRiw4REFBOEQ7QUFDOUQsT0FBTyxLQUFLLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFDeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDIn0=
|
|
@@ -3,4 +3,4 @@ import type { IBitReader } from '../interfaces.js';
|
|
|
3
3
|
* Creates a bit reader function for BZIP2 decompression.
|
|
4
4
|
* Takes a buffer iterator as input and returns a function that reads bits.
|
|
5
5
|
*/
|
|
6
|
-
export declare function bitIterator(nextBuffer: () =>
|
|
6
|
+
export declare function bitIterator(nextBuffer: () => Uint8Array): IBitReader;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
const BITMASK = [0, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff];
|
|
2
|
+
/**
|
|
3
|
+
* Creates a bit reader function for BZIP2 decompression.
|
|
4
|
+
* Takes a buffer iterator as input and returns a function that reads bits.
|
|
5
|
+
*/
|
|
6
|
+
export function bitIterator(nextBuffer) {
|
|
7
|
+
let bit = 0;
|
|
8
|
+
let byte = 0;
|
|
9
|
+
let bytes = nextBuffer();
|
|
10
|
+
let _bytesRead = 0;
|
|
11
|
+
const reader = function (n) {
|
|
12
|
+
if (n === null && bit !== 0) {
|
|
13
|
+
// align to byte boundary
|
|
14
|
+
bit = 0;
|
|
15
|
+
byte++;
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
let result = 0;
|
|
19
|
+
let remaining = n;
|
|
20
|
+
while (remaining > 0) {
|
|
21
|
+
if (byte >= bytes.length) {
|
|
22
|
+
byte = 0;
|
|
23
|
+
bytes = nextBuffer();
|
|
24
|
+
}
|
|
25
|
+
const left = 8 - bit;
|
|
26
|
+
if (bit === 0 && remaining > 0) {
|
|
27
|
+
_bytesRead++;
|
|
28
|
+
}
|
|
29
|
+
if (remaining >= left) {
|
|
30
|
+
result <<= left;
|
|
31
|
+
result |= BITMASK[left] & bytes[byte++];
|
|
32
|
+
bit = 0;
|
|
33
|
+
remaining -= left;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
result <<= remaining;
|
|
37
|
+
result |= (bytes[byte] & (BITMASK[remaining] << (8 - remaining - bit))) >> (8 - remaining - bit);
|
|
38
|
+
bit += remaining;
|
|
39
|
+
remaining = 0;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return result;
|
|
43
|
+
};
|
|
44
|
+
Object.defineProperty(reader, 'bytesRead', {
|
|
45
|
+
get: () => _bytesRead,
|
|
46
|
+
enumerable: true,
|
|
47
|
+
});
|
|
48
|
+
return reader;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0aXRlcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c19zaGFyZWQvYnppcDIvYml0aXRlcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBVSxDQUFDO0FBRTdFOzs7R0FHRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsVUFBNEI7SUFDdEQsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ1osSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsSUFBSSxLQUFLLEdBQUcsVUFBVSxFQUFFLENBQUM7SUFDekIsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBRW5CLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBZ0I7UUFDdkMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1Qix5QkFBeUI7WUFDekIsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUNSLElBQUksRUFBRSxDQUFDO1lBQ1AsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLFNBQVMsR0FBRyxDQUFXLENBQUM7UUFFNUIsT0FBTyxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckIsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN6QixJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUNULEtBQUssR0FBRyxVQUFVLEVBQUUsQ0FBQztZQUN2QixDQUFDO1lBRUQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUVyQixJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMvQixVQUFVLEVBQUUsQ0FBQztZQUNmLENBQUM7WUFFRCxJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxLQUFLLElBQUksQ0FBQztnQkFDaEIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDeEMsR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDUixTQUFTLElBQUksSUFBSSxDQUFDO1lBQ3BCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLEtBQUssU0FBUyxDQUFDO2dCQUNyQixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUM7Z0JBQ2pHLEdBQUcsSUFBSSxTQUFTLENBQUM7Z0JBQ2pCLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDaEIsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFlLENBQUM7SUFFaEIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFO1FBQ3pDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVO1FBQ3JCLFVBQVUsRUFBRSxJQUFJO0tBQ2pCLENBQUMsQ0FBQztJQUVILE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMifQ==
|
|
@@ -13,11 +13,11 @@ export declare class Bzip2 {
|
|
|
13
13
|
/**
|
|
14
14
|
* Create a bit reader from a byte array
|
|
15
15
|
*/
|
|
16
|
-
array(bytes: Uint8Array
|
|
16
|
+
array(bytes: Uint8Array): (n: number) => number;
|
|
17
17
|
/**
|
|
18
18
|
* Simple decompression from a buffer
|
|
19
19
|
*/
|
|
20
|
-
simple(srcbuffer: Uint8Array
|
|
20
|
+
simple(srcbuffer: Uint8Array, stream: (byte: number) => void): void;
|
|
21
21
|
/**
|
|
22
22
|
* Parse BZIP2 header and return block size
|
|
23
23
|
*/
|