@push.rocks/smartarchive 4.0.24 → 4.0.27
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 +1 -1
- package/dist_ts/classes.tartools.d.ts +12 -1
- package/dist_ts/classes.tartools.js +83 -6
- package/dist_ts/classes.ziptools.js +2 -2
- package/package.json +9 -9
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.tartools.ts +102 -11
- package/ts/classes.ziptools.ts +1 -1
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@push.rocks/smartarchive',
|
|
6
|
-
version: '4.0.
|
|
6
|
+
version: '4.0.27',
|
|
7
7
|
description: 'A library for working with archive files, providing utilities for compressing and decompressing data.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSwwQkFBMEI7SUFDaEMsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLHVHQUF1RztDQUNySCxDQUFBIn0=
|
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
3
|
import type { SmartArchive } from './classes.smartarchive.js';
|
|
3
4
|
import * as plugins from './plugins.js';
|
|
4
5
|
export declare class TarTools {
|
|
5
6
|
smartArchiveRef: SmartArchive;
|
|
6
7
|
constructor(smartArchiveRefArg: SmartArchive);
|
|
7
|
-
addFileToPack(pack: plugins.tarStream.Pack,
|
|
8
|
+
addFileToPack(pack: plugins.tarStream.Pack, optionsArg: {
|
|
9
|
+
fileName?: string;
|
|
10
|
+
content?: string | Buffer | plugins.smartstream.stream.Readable | plugins.smartfile.SmartFile | plugins.smartfile.StreamFile;
|
|
11
|
+
byteLength?: number;
|
|
12
|
+
filePath?: string;
|
|
13
|
+
}): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* packs a directory from disk into a tar stream
|
|
16
|
+
* @param directoryPath
|
|
17
|
+
*/
|
|
18
|
+
packDirectory(directoryPath: string): Promise<void>;
|
|
8
19
|
getPackStream(): Promise<plugins.tarStream.Pack>;
|
|
9
20
|
getDecompressionStream(): plugins.tarStream.Extract;
|
|
10
21
|
}
|
|
@@ -4,9 +4,66 @@ export class TarTools {
|
|
|
4
4
|
this.smartArchiveRef = smartArchiveRefArg;
|
|
5
5
|
}
|
|
6
6
|
// packing
|
|
7
|
-
addFileToPack(pack,
|
|
8
|
-
return new Promise((resolve, reject) => {
|
|
9
|
-
|
|
7
|
+
async addFileToPack(pack, optionsArg) {
|
|
8
|
+
return new Promise(async (resolve, reject) => {
|
|
9
|
+
let fileName = optionsArg.fileName || optionsArg.content instanceof plugins.smartfile.SmartFile
|
|
10
|
+
? optionsArg.content.relative
|
|
11
|
+
: null || optionsArg.content instanceof plugins.smartfile.StreamFile
|
|
12
|
+
? optionsArg.content.relativeFilePath
|
|
13
|
+
: null || optionsArg.filePath;
|
|
14
|
+
/**
|
|
15
|
+
* contentByteLength is used to set the size of the entry in the tar file
|
|
16
|
+
*/
|
|
17
|
+
let contentByteLength;
|
|
18
|
+
if (optionsArg.byteLength) {
|
|
19
|
+
contentByteLength = optionsArg.byteLength;
|
|
20
|
+
}
|
|
21
|
+
else if (typeof optionsArg.content === 'string') {
|
|
22
|
+
contentByteLength = Buffer.byteLength(optionsArg.content, 'utf8');
|
|
23
|
+
}
|
|
24
|
+
else if (Buffer.isBuffer(optionsArg.content)) {
|
|
25
|
+
contentByteLength = optionsArg.content.length;
|
|
26
|
+
}
|
|
27
|
+
else if (optionsArg.content instanceof plugins.smartfile.SmartFile) {
|
|
28
|
+
contentByteLength = await optionsArg.content.getSize(); // assuming SmartFile has getSize method
|
|
29
|
+
}
|
|
30
|
+
else if (optionsArg.content instanceof plugins.smartfile.StreamFile) {
|
|
31
|
+
contentByteLength = await optionsArg.content.getSize(); // assuming StreamFile has getSize method
|
|
32
|
+
}
|
|
33
|
+
else if (optionsArg.content instanceof plugins.smartstream.stream.Readable) {
|
|
34
|
+
console.warn('@push.rocks/smartarchive: When streaming, it is recommended to provide byteLength, if known.');
|
|
35
|
+
}
|
|
36
|
+
else if (optionsArg.filePath) {
|
|
37
|
+
const fileStat = await plugins.smartfile.fs.stat(optionsArg.filePath);
|
|
38
|
+
contentByteLength = fileStat.size;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* here we try to harmonize all kind of entries towards a readable stream
|
|
42
|
+
*/
|
|
43
|
+
let content;
|
|
44
|
+
if (Buffer.isBuffer(optionsArg.content)) {
|
|
45
|
+
content = plugins.smartstream.stream.Readable.from(optionsArg.content);
|
|
46
|
+
}
|
|
47
|
+
else if (typeof optionsArg.content === 'string') {
|
|
48
|
+
content = plugins.smartstream.stream.Readable.from(Buffer.from(optionsArg.content));
|
|
49
|
+
}
|
|
50
|
+
else if (optionsArg.content instanceof plugins.smartfile.SmartFile) {
|
|
51
|
+
content = plugins.smartstream.stream.Readable.from(optionsArg.content.contents);
|
|
52
|
+
}
|
|
53
|
+
else if (optionsArg.content instanceof plugins.smartfile.StreamFile) {
|
|
54
|
+
content = await optionsArg.content.createReadStream();
|
|
55
|
+
}
|
|
56
|
+
else if (optionsArg.content instanceof plugins.smartstream.stream.Readable) {
|
|
57
|
+
content = optionsArg.content;
|
|
58
|
+
}
|
|
59
|
+
const entry = pack.entry({
|
|
60
|
+
name: fileName,
|
|
61
|
+
...(contentByteLength
|
|
62
|
+
? {
|
|
63
|
+
size: contentByteLength,
|
|
64
|
+
}
|
|
65
|
+
: null),
|
|
66
|
+
}, (err) => {
|
|
10
67
|
if (err) {
|
|
11
68
|
reject(err);
|
|
12
69
|
}
|
|
@@ -14,10 +71,30 @@ export class TarTools {
|
|
|
14
71
|
resolve();
|
|
15
72
|
}
|
|
16
73
|
});
|
|
17
|
-
|
|
18
|
-
entry.end()
|
|
74
|
+
content.pipe(entry);
|
|
75
|
+
entry.on('end', () => {
|
|
76
|
+
resolve();
|
|
77
|
+
});
|
|
19
78
|
});
|
|
20
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* packs a directory from disk into a tar stream
|
|
82
|
+
* @param directoryPath
|
|
83
|
+
*/
|
|
84
|
+
async packDirectory(directoryPath) {
|
|
85
|
+
const fileTree = await plugins.smartfile.fs.listFileTree(directoryPath, '**/*');
|
|
86
|
+
const pack = await this.getPackStream();
|
|
87
|
+
for (const filePath of fileTree) {
|
|
88
|
+
const absolutePath = plugins.path.join(directoryPath, filePath);
|
|
89
|
+
const fileStat = await plugins.smartfile.fs.stat(absolutePath);
|
|
90
|
+
await this.addFileToPack(pack, {
|
|
91
|
+
byteLength: fileStat.size,
|
|
92
|
+
filePath: filePath,
|
|
93
|
+
fileName: filePath,
|
|
94
|
+
content: plugins.smartfile.fsStream.createReadStream(absolutePath),
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
21
98
|
async getPackStream() {
|
|
22
99
|
const pack = plugins.tarStream.pack();
|
|
23
100
|
return pack;
|
|
@@ -27,4 +104,4 @@ export class TarTools {
|
|
|
27
104
|
return plugins.tarStream.extract();
|
|
28
105
|
}
|
|
29
106
|
}
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy50YXJ0b29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMudGFydG9vbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFFeEMsTUFBTSxPQUFPLFFBQVE7SUFJbkIsWUFBWSxrQkFBZ0M7UUFDMUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQztJQUM1QyxDQUFDO0lBRUQsVUFBVTtJQUNILEtBQUssQ0FBQyxhQUFhLENBQ3hCLElBQTRCLEVBQzVCLFVBVUM7UUFFRCxPQUFPLElBQUksT0FBTyxDQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDakQsSUFBSSxRQUFRLEdBQ1YsVUFBVSxDQUFDLFFBQVEsSUFBSSxVQUFVLENBQUMsT0FBTyxZQUFZLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUztnQkFDOUUsQ0FBQyxDQUFFLFVBQVUsQ0FBQyxPQUF1QyxDQUFDLFFBQVE7Z0JBQzlELENBQUMsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLE9BQU8sWUFBWSxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVU7b0JBQ3BFLENBQUMsQ0FBRSxVQUFVLENBQUMsT0FBd0MsQ0FBQyxnQkFBZ0I7b0JBQ3ZFLENBQUMsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUVsQzs7ZUFFRztZQUNILElBQUksaUJBQXlCLENBQUM7WUFDOUIsSUFBSSxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzFCLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUM7WUFDNUMsQ0FBQztpQkFBTSxJQUFJLE9BQU8sVUFBVSxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDbEQsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3BF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
|
|
@@ -15,7 +15,7 @@ class DecompressZipTransform extends plugins.smartstream.SmartDuplex {
|
|
|
15
15
|
});
|
|
16
16
|
this.unzipper = new plugins.fflate.Unzip(async (fileArg) => {
|
|
17
17
|
let resultBuffer;
|
|
18
|
-
fileArg.ondata = async (
|
|
18
|
+
fileArg.ondata = async (flateError, dat, final) => {
|
|
19
19
|
resultBuffer ? resultBuffer = Buffer.concat([resultBuffer, Buffer.from(dat)])
|
|
20
20
|
: resultBuffer = Buffer.from(dat);
|
|
21
21
|
if (final) {
|
|
@@ -63,4 +63,4 @@ export class ZipTools {
|
|
|
63
63
|
return new DecompressZipTransform();
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy56aXB0b29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMuemlwdG9vbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFFeEMsTUFBTSxzQkFBdUIsU0FBUSxPQUFPLENBQUMsV0FBVyxDQUFDLFdBQTRCO0lBZW5GO1FBQ0UsS0FBSyxDQUFDO1lBQ0osVUFBVSxFQUFFLElBQUk7WUFDaEIsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFnQixFQUFFLGNBQWMsRUFBRSxFQUFFO2dCQUN4RCxJQUFJLENBQUMsV0FBVyxDQUFBLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsY0FBYyxDQUFDO2dCQUMzRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEMsQ0FBQztZQUNELGFBQWEsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDMUMsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckMsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQyxDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBekJHLGFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUM1RCxJQUFJLFlBQW9CLENBQUM7WUFDekIsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDaEQsWUFBWSxDQUFBLENBQUMsQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQzFFLENBQUMsQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxLQUFLLEVBQUUsQ0FBQztvQkFDVixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQ3pFLFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO29CQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDcEMsQ0FBQztZQUNILENBQUMsQ0FBQTtZQUNELE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztRQWNELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdEQsQ0FBQztDQUNGO0FBRUQsOEVBQThFO0FBQzlFLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVM7SUFHaEU7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBYSxFQUFFLFFBQXdCLEVBQUUsUUFBMEM7UUFDNUYsMkVBQTJFO1FBQzNFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsUUFBUSxFQUFFLENBQUM7SUFDYixDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQTBDO1FBQy9DLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDN0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDUixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUMvQixRQUFRLEVBQUUsQ0FBQztZQUNiLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxRQUFRO0lBR25CLFlBQVksa0JBQWdDO1FBQzFDLElBQUksQ0FBQyxlQUFlLEdBQUcsa0JBQWtCLENBQUM7SUFDNUMsQ0FBQztJQUVNLG9CQUFvQjtRQUN6QixPQUFPLElBQUksb0JBQW9CLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRU0sc0JBQXNCO1FBQzNCLE9BQU8sSUFBSSxzQkFBc0IsRUFBRSxDQUFDO0lBQ3RDLENBQUM7Q0FDRiJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@push.rocks/smartarchive",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.27",
|
|
4
4
|
"description": "A library for working with archive files, providing utilities for compressing and decompressing data.",
|
|
5
5
|
"main": "dist_ts/index.js",
|
|
6
6
|
"typings": "dist_ts/index.d.ts",
|
|
@@ -17,13 +17,13 @@
|
|
|
17
17
|
"homepage": "https://code.foss.global/push.rocks/smartarchive",
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"@push.rocks/smartdelay": "^3.0.5",
|
|
20
|
-
"@push.rocks/smartfile": "^11.0.
|
|
21
|
-
"@push.rocks/smartpath": "^5.0.
|
|
20
|
+
"@push.rocks/smartfile": "^11.0.20",
|
|
21
|
+
"@push.rocks/smartpath": "^5.0.18",
|
|
22
22
|
"@push.rocks/smartpromise": "^4.0.3",
|
|
23
|
-
"@push.rocks/smartrequest": "^2.0.
|
|
23
|
+
"@push.rocks/smartrequest": "^2.0.22",
|
|
24
24
|
"@push.rocks/smartrx": "^3.0.7",
|
|
25
|
-
"@push.rocks/smartstream": "^3.0.
|
|
26
|
-
"@push.rocks/smartunique": "^3.0.
|
|
25
|
+
"@push.rocks/smartstream": "^3.0.44",
|
|
26
|
+
"@push.rocks/smartunique": "^3.0.9",
|
|
27
27
|
"@push.rocks/smarturl": "^3.0.7",
|
|
28
28
|
"@types/tar-stream": "^3.1.3",
|
|
29
29
|
"fflate": "^0.8.2",
|
|
@@ -32,10 +32,10 @@
|
|
|
32
32
|
"through": "^2.3.8"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@git.zone/tsbuild": "^2.1.
|
|
35
|
+
"@git.zone/tsbuild": "^2.1.80",
|
|
36
36
|
"@git.zone/tsrun": "^1.2.44",
|
|
37
|
-
"@git.zone/tstest": "^1.0.
|
|
38
|
-
"@push.rocks/tapbundle": "^5.0.
|
|
37
|
+
"@git.zone/tstest": "^1.0.90",
|
|
38
|
+
"@push.rocks/tapbundle": "^5.0.23"
|
|
39
39
|
},
|
|
40
40
|
"private": false,
|
|
41
41
|
"files": [
|
package/ts/00_commitinfo_data.ts
CHANGED
package/ts/classes.tartools.ts
CHANGED
|
@@ -2,28 +2,119 @@ import type { SmartArchive } from './classes.smartarchive.js';
|
|
|
2
2
|
import * as plugins from './plugins.js';
|
|
3
3
|
|
|
4
4
|
export class TarTools {
|
|
5
|
+
// INSTANCE
|
|
5
6
|
smartArchiveRef: SmartArchive;
|
|
6
7
|
|
|
7
8
|
constructor(smartArchiveRefArg: SmartArchive) {
|
|
8
9
|
this.smartArchiveRef = smartArchiveRefArg;
|
|
9
10
|
}
|
|
10
|
-
|
|
11
|
+
|
|
11
12
|
// packing
|
|
12
|
-
public addFileToPack(
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
public async addFileToPack(
|
|
14
|
+
pack: plugins.tarStream.Pack,
|
|
15
|
+
optionsArg: {
|
|
16
|
+
fileName?: string;
|
|
17
|
+
content?:
|
|
18
|
+
| string
|
|
19
|
+
| Buffer
|
|
20
|
+
| plugins.smartstream.stream.Readable
|
|
21
|
+
| plugins.smartfile.SmartFile
|
|
22
|
+
| plugins.smartfile.StreamFile;
|
|
23
|
+
byteLength?: number;
|
|
24
|
+
filePath?: string;
|
|
25
|
+
}
|
|
26
|
+
): Promise<void> {
|
|
27
|
+
return new Promise<void>(async (resolve, reject) => {
|
|
28
|
+
let fileName =
|
|
29
|
+
optionsArg.fileName || optionsArg.content instanceof plugins.smartfile.SmartFile
|
|
30
|
+
? (optionsArg.content as plugins.smartfile.SmartFile).relative
|
|
31
|
+
: null || optionsArg.content instanceof plugins.smartfile.StreamFile
|
|
32
|
+
? (optionsArg.content as plugins.smartfile.StreamFile).relativeFilePath
|
|
33
|
+
: null || optionsArg.filePath;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* contentByteLength is used to set the size of the entry in the tar file
|
|
37
|
+
*/
|
|
38
|
+
let contentByteLength: number;
|
|
39
|
+
if (optionsArg.byteLength) {
|
|
40
|
+
contentByteLength = optionsArg.byteLength;
|
|
41
|
+
} else if (typeof optionsArg.content === 'string') {
|
|
42
|
+
contentByteLength = Buffer.byteLength(optionsArg.content, 'utf8');
|
|
43
|
+
} else if (Buffer.isBuffer(optionsArg.content)) {
|
|
44
|
+
contentByteLength = optionsArg.content.length;
|
|
45
|
+
} else if (optionsArg.content instanceof plugins.smartfile.SmartFile) {
|
|
46
|
+
contentByteLength = await optionsArg.content.getSize(); // assuming SmartFile has getSize method
|
|
47
|
+
} else if (optionsArg.content instanceof plugins.smartfile.StreamFile) {
|
|
48
|
+
contentByteLength = await optionsArg.content.getSize(); // assuming StreamFile has getSize method
|
|
49
|
+
} else if (optionsArg.content instanceof plugins.smartstream.stream.Readable) {
|
|
50
|
+
console.warn(
|
|
51
|
+
'@push.rocks/smartarchive: When streaming, it is recommended to provide byteLength, if known.'
|
|
52
|
+
);
|
|
53
|
+
} else if (optionsArg.filePath) {
|
|
54
|
+
const fileStat = await plugins.smartfile.fs.stat(optionsArg.filePath);
|
|
55
|
+
contentByteLength = fileStat.size;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* here we try to harmonize all kind of entries towards a readable stream
|
|
60
|
+
*/
|
|
61
|
+
let content: plugins.smartstream.stream.Readable;
|
|
62
|
+
if (Buffer.isBuffer(optionsArg.content)) {
|
|
63
|
+
content = plugins.smartstream.stream.Readable.from(optionsArg.content);
|
|
64
|
+
} else if (typeof optionsArg.content === 'string') {
|
|
65
|
+
content = plugins.smartstream.stream.Readable.from(Buffer.from(optionsArg.content));
|
|
66
|
+
} else if (optionsArg.content instanceof plugins.smartfile.SmartFile) {
|
|
67
|
+
content = plugins.smartstream.stream.Readable.from(optionsArg.content.contents);
|
|
68
|
+
} else if (optionsArg.content instanceof plugins.smartfile.StreamFile) {
|
|
69
|
+
content = await optionsArg.content.createReadStream();
|
|
70
|
+
} else if (optionsArg.content instanceof plugins.smartstream.stream.Readable) {
|
|
71
|
+
content = optionsArg.content;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const entry = pack.entry(
|
|
75
|
+
{
|
|
76
|
+
name: fileName,
|
|
77
|
+
...(contentByteLength
|
|
78
|
+
? {
|
|
79
|
+
size: contentByteLength,
|
|
80
|
+
}
|
|
81
|
+
: null),
|
|
82
|
+
},
|
|
83
|
+
(err: Error) => {
|
|
84
|
+
if (err) {
|
|
85
|
+
reject(err);
|
|
86
|
+
} else {
|
|
87
|
+
resolve();
|
|
88
|
+
}
|
|
19
89
|
}
|
|
20
|
-
|
|
90
|
+
);
|
|
21
91
|
|
|
22
|
-
|
|
23
|
-
entry.end()
|
|
92
|
+
content.pipe(entry);
|
|
93
|
+
entry.on('end', () => {
|
|
94
|
+
resolve();
|
|
95
|
+
});
|
|
24
96
|
});
|
|
25
97
|
}
|
|
26
98
|
|
|
99
|
+
/**
|
|
100
|
+
* packs a directory from disk into a tar stream
|
|
101
|
+
* @param directoryPath
|
|
102
|
+
*/
|
|
103
|
+
public async packDirectory(directoryPath: string) {
|
|
104
|
+
const fileTree = await plugins.smartfile.fs.listFileTree(directoryPath, '**/*');
|
|
105
|
+
const pack = await this.getPackStream();
|
|
106
|
+
for (const filePath of fileTree) {
|
|
107
|
+
const absolutePath = plugins.path.join(directoryPath, filePath);
|
|
108
|
+
const fileStat = await plugins.smartfile.fs.stat(absolutePath);
|
|
109
|
+
await this.addFileToPack(pack, {
|
|
110
|
+
byteLength: fileStat.size,
|
|
111
|
+
filePath: filePath,
|
|
112
|
+
fileName: filePath,
|
|
113
|
+
content: plugins.smartfile.fsStream.createReadStream(absolutePath),
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
27
118
|
public async getPackStream() {
|
|
28
119
|
const pack = plugins.tarStream.pack();
|
|
29
120
|
return pack;
|
package/ts/classes.ziptools.ts
CHANGED
|
@@ -5,7 +5,7 @@ class DecompressZipTransform extends plugins.smartstream.SmartDuplex<ArrayBuffer
|
|
|
5
5
|
private streamtools: plugins.smartstream.IStreamTools;
|
|
6
6
|
private unzipper = new plugins.fflate.Unzip(async (fileArg) => {
|
|
7
7
|
let resultBuffer: Buffer;
|
|
8
|
-
fileArg.ondata = async (
|
|
8
|
+
fileArg.ondata = async (flateError, dat, final) => {
|
|
9
9
|
resultBuffer? resultBuffer = Buffer.concat([resultBuffer, Buffer.from(dat)])
|
|
10
10
|
: resultBuffer = Buffer.from(dat);
|
|
11
11
|
if (final) {
|