fix(core): update

This commit is contained in:
Philipp Kunz 2024-06-08 10:30:03 +02:00
parent f257c0c5a4
commit e1891a6aa3
5 changed files with 4993 additions and 2789 deletions

View File

@ -22,13 +22,13 @@
"homepage": "https://code.foss.global/push.rocks/smartarchive", "homepage": "https://code.foss.global/push.rocks/smartarchive",
"dependencies": { "dependencies": {
"@push.rocks/smartdelay": "^3.0.5", "@push.rocks/smartdelay": "^3.0.5",
"@push.rocks/smartfile": "^11.0.4", "@push.rocks/smartfile": "^11.0.20",
"@push.rocks/smartpath": "^5.0.11", "@push.rocks/smartpath": "^5.0.18",
"@push.rocks/smartpromise": "^4.0.3", "@push.rocks/smartpromise": "^4.0.3",
"@push.rocks/smartrequest": "^2.0.21", "@push.rocks/smartrequest": "^2.0.22",
"@push.rocks/smartrx": "^3.0.7", "@push.rocks/smartrx": "^3.0.7",
"@push.rocks/smartstream": "^3.0.34", "@push.rocks/smartstream": "^3.0.44",
"@push.rocks/smartunique": "^3.0.8", "@push.rocks/smartunique": "^3.0.9",
"@push.rocks/smarturl": "^3.0.7", "@push.rocks/smarturl": "^3.0.7",
"@types/tar-stream": "^3.1.3", "@types/tar-stream": "^3.1.3",
"fflate": "^0.8.2", "fflate": "^0.8.2",
@ -37,10 +37,10 @@
"through": "^2.3.8" "through": "^2.3.8"
}, },
"devDependencies": { "devDependencies": {
"@git.zone/tsbuild": "^2.1.72", "@git.zone/tsbuild": "^2.1.80",
"@git.zone/tsrun": "^1.2.44", "@git.zone/tsrun": "^1.2.44",
"@git.zone/tstest": "^1.0.88", "@git.zone/tstest": "^1.0.90",
"@push.rocks/tapbundle": "^5.0.17" "@push.rocks/tapbundle": "^5.0.23"
}, },
"private": false, "private": false,
"files": [ "files": [

7576
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -3,6 +3,6 @@
*/ */
export const commitinfo = { export const commitinfo = {
name: '@push.rocks/smartarchive', name: '@push.rocks/smartarchive',
version: '4.0.24', version: '4.0.25',
description: 'A library for working with archive files, providing utilities for compressing and decompressing data.' description: 'A library for working with archive files, providing utilities for compressing and decompressing data.'
} }

View File

@ -2,6 +2,7 @@ import type { SmartArchive } from './classes.smartarchive.js';
import * as plugins from './plugins.js'; import * as plugins from './plugins.js';
export class TarTools { export class TarTools {
// INSTANCE
smartArchiveRef: SmartArchive; smartArchiveRef: SmartArchive;
constructor(smartArchiveRefArg: SmartArchive) { constructor(smartArchiveRefArg: SmartArchive) {
@ -9,19 +10,106 @@ export class TarTools {
} }
// packing // packing
public addFileToPack(pack: plugins.tarStream.Pack, fileName: string, content: string | Buffer) { public async addFileToPack(
return new Promise<void>((resolve, reject) => { pack: plugins.tarStream.Pack,
const entry = pack.entry({ name: fileName, size: content.length }, (err: Error) => { optionsArg: {
fileName?: string;
content?:
| string
| Buffer
| plugins.smartstream.stream.Readable
| plugins.smartfile.SmartFile
| plugins.smartfile.StreamFile;
byteLength?: number;
filePath?: string;
}
): Promise<void> {
return new Promise<void>(async (resolve, reject) => {
let fileName =
optionsArg.fileName || optionsArg.content instanceof plugins.smartfile.SmartFile
? (optionsArg.content as plugins.smartfile.SmartFile).relative
: null || optionsArg.content instanceof plugins.smartfile.StreamFile
? (optionsArg.content as plugins.smartfile.StreamFile).relativeFilePath
: null || optionsArg.filePath;
/**
* contentByteLength is used to set the size of the entry in the tar file
*/
let contentByteLength: number;
if (optionsArg.byteLength) {
contentByteLength = optionsArg.byteLength;
} else if (typeof optionsArg.content === 'string') {
contentByteLength = Buffer.byteLength(optionsArg.content, 'utf8');
} else if (Buffer.isBuffer(optionsArg.content)) {
contentByteLength = optionsArg.content.length;
} else if (optionsArg.content instanceof plugins.smartfile.SmartFile) {
contentByteLength = await optionsArg.content.getSize(); // assuming SmartFile has getSize method
} else if (optionsArg.content instanceof plugins.smartfile.StreamFile) {
contentByteLength = await optionsArg.content.getSize(); // assuming StreamFile has getSize method
} else if (optionsArg.content instanceof plugins.smartstream.stream.Readable) {
console.warn(
'@push.rocks/smartarchive: When streaming, it is recommended to provide byteLength, if known.'
);
} else if (optionsArg.filePath) {
const fileStat = await plugins.smartfile.fs.stat(optionsArg.filePath);
contentByteLength = fileStat.size;
}
const entry = pack.entry(
{
name: fileName,
...(contentByteLength
? {
size: contentByteLength,
}
: null),
},
(err: Error) => {
if (err) { if (err) {
reject(err); reject(err);
} else { } else {
resolve(); resolve();
} }
}); }
);
entry.write(content); let content: plugins.smartstream.stream.Readable;
entry.end(); if (Buffer.isBuffer(optionsArg.content)) {
content = plugins.smartstream.stream.Readable.from(optionsArg.content);
} else if (typeof optionsArg.content === 'string') {
content = plugins.smartstream.stream.Readable.from(Buffer.from(optionsArg.content));
} else if (optionsArg.content instanceof plugins.smartfile.SmartFile) {
content = plugins.smartstream.stream.Readable.from(optionsArg.content.contents);
} else if (optionsArg.content instanceof plugins.smartfile.StreamFile) {
content = await optionsArg.content.createReadStream();
} else if (optionsArg.content instanceof plugins.smartstream.stream.Readable) {
content = optionsArg.content;
}
content.pipe(entry);
entry.on('end', () => {
resolve();
}); });
});
}
/**
* packs a directory from disk into a tar stream
* @param directoryPath
*/
public async packDirectory(directoryPath: string) {
const fileTree = await plugins.smartfile.fs.listFileTree(directoryPath, '**/*');
const pack = await this.getPackStream();
for (const filePath of fileTree) {
const absolutePath = plugins.path.join(directoryPath, filePath);
const fileStat = await plugins.smartfile.fs.stat(absolutePath);
await this.addFileToPack(pack, {
byteLength: fileStat.size,
filePath: filePath,
fileName: filePath,
content: plugins.smartfile.fsStream.createReadStream(absolutePath),
});
}
} }
public async getPackStream() { public async getPackStream() {

View File

@ -5,7 +5,7 @@ class DecompressZipTransform extends plugins.smartstream.SmartDuplex<ArrayBuffer
private streamtools: plugins.smartstream.IStreamTools; private streamtools: plugins.smartstream.IStreamTools;
private unzipper = new plugins.fflate.Unzip(async (fileArg) => { private unzipper = new plugins.fflate.Unzip(async (fileArg) => {
let resultBuffer: Buffer; let resultBuffer: Buffer;
fileArg.ondata = async (dataArg, dat, final) => { fileArg.ondata = async (flateError, dat, final) => {
resultBuffer? resultBuffer = Buffer.concat([resultBuffer, Buffer.from(dat)]) resultBuffer? resultBuffer = Buffer.concat([resultBuffer, Buffer.from(dat)])
: resultBuffer = Buffer.from(dat); : resultBuffer = Buffer.from(dat);
if (final) { if (final) {