fix(plugins): Migrate filesystem usage to Node fs/fsPromises and upgrade smartfile to v13; add listFileTree helper and update tests
This commit is contained in:
@@ -3,6 +3,6 @@
|
||||
*/
|
||||
export const commitinfo = {
|
||||
name: '@push.rocks/smartarchive',
|
||||
version: '4.2.3',
|
||||
version: '4.2.4',
|
||||
description: 'A library for working with archive files, providing utilities for compressing and decompressing data.'
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@ export class SmartArchive {
|
||||
return urlStream;
|
||||
}
|
||||
if (this.sourceFilePath) {
|
||||
const fileStream = plugins.smartfile.fs.toReadStream(this.sourceFilePath);
|
||||
const fileStream = plugins.fs.createReadStream(this.sourceFilePath);
|
||||
return fileStream;
|
||||
}
|
||||
}
|
||||
@@ -116,14 +116,13 @@ export class SmartArchive {
|
||||
);
|
||||
const streamFile = streamFileArg;
|
||||
const readStream = await streamFile.createReadStream();
|
||||
await plugins.smartfile.fs.ensureDir(targetDir);
|
||||
await plugins.fsPromises.mkdir(targetDir, { recursive: true });
|
||||
const writePath = plugins.path.join(
|
||||
targetDir,
|
||||
streamFile.relativeFilePath || fileNameArg,
|
||||
);
|
||||
await plugins.smartfile.fs.ensureDir(plugins.path.dirname(writePath));
|
||||
const writeStream =
|
||||
plugins.smartfile.fsStream.createWriteStream(writePath);
|
||||
await plugins.fsPromises.mkdir(plugins.path.dirname(writePath), { recursive: true });
|
||||
const writeStream = plugins.fs.createWriteStream(writePath);
|
||||
readStream.pipe(writeStream);
|
||||
writeStream.on('finish', () => {
|
||||
done.resolve();
|
||||
|
||||
@@ -55,7 +55,7 @@ export class TarTools {
|
||||
'@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);
|
||||
const fileStat = await plugins.fsPromises.stat(optionsArg.filePath);
|
||||
contentByteLength = fileStat.size;
|
||||
}
|
||||
|
||||
@@ -109,19 +109,16 @@ export class TarTools {
|
||||
* @param directoryPath
|
||||
*/
|
||||
public async packDirectory(directoryPath: string) {
|
||||
const fileTree = await plugins.smartfile.fs.listFileTree(
|
||||
directoryPath,
|
||||
'**/*',
|
||||
);
|
||||
const fileTree = await plugins.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);
|
||||
const fileStat = await plugins.fsPromises.stat(absolutePath);
|
||||
await this.addFileToPack(pack, {
|
||||
byteLength: fileStat.size,
|
||||
filePath: absolutePath,
|
||||
fileName: filePath,
|
||||
content: plugins.smartfile.fsStream.createReadStream(absolutePath),
|
||||
content: plugins.fs.createReadStream(absolutePath),
|
||||
});
|
||||
}
|
||||
return pack;
|
||||
|
||||
@@ -1,8 +1,34 @@
|
||||
// node native scope
|
||||
import * as path from 'path';
|
||||
import * as stream from 'stream';
|
||||
import * as path from 'node:path';
|
||||
import * as stream from 'node:stream';
|
||||
import * as fs from 'node:fs';
|
||||
import * as fsPromises from 'node:fs/promises';
|
||||
|
||||
export { path, stream };
|
||||
export { path, stream, fs, fsPromises };
|
||||
|
||||
/**
|
||||
* List files in a directory recursively, returning relative paths
|
||||
*/
|
||||
export async function listFileTree(dirPath: string, _pattern: string = '**/*'): Promise<string[]> {
|
||||
const results: string[] = [];
|
||||
|
||||
async function walkDir(currentPath: string, relativePath: string = '') {
|
||||
const entries = await fsPromises.readdir(currentPath, { withFileTypes: true });
|
||||
for (const entry of entries) {
|
||||
const entryRelPath = relativePath ? path.join(relativePath, entry.name) : entry.name;
|
||||
const entryFullPath = path.join(currentPath, entry.name);
|
||||
|
||||
if (entry.isDirectory()) {
|
||||
await walkDir(entryFullPath, entryRelPath);
|
||||
} else if (entry.isFile()) {
|
||||
results.push(entryRelPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
await walkDir(dirPath);
|
||||
return results;
|
||||
}
|
||||
|
||||
// @pushrocks scope
|
||||
import * as smartfile from '@push.rocks/smartfile';
|
||||
|
||||
Reference in New Issue
Block a user