BREAKING CHANGE(SmartArchive): Refactor public API: rename factory/extraction methods, introduce typed interfaces and improved compression tools
This commit is contained in:
@@ -38,15 +38,15 @@ tap.test('should create and extract a gzip file', async () => {
|
||||
);
|
||||
|
||||
// Now test extraction using SmartArchive
|
||||
const gzipArchive = await smartarchive.SmartArchive.fromArchiveFile(
|
||||
const gzipArchive = await smartarchive.SmartArchive.fromFile(
|
||||
plugins.path.join(testPaths.gzipTestDir, gzipFileName)
|
||||
);
|
||||
|
||||
|
||||
// Export to a new location
|
||||
const extractPath = plugins.path.join(testPaths.gzipTestDir, 'extracted');
|
||||
await plugins.fsPromises.mkdir(extractPath, { recursive: true });
|
||||
// Provide a filename since gzip doesn't contain filename metadata
|
||||
await gzipArchive.exportToFs(extractPath, 'test-file.txt');
|
||||
await gzipArchive.extractToDirectory(extractPath, { fileName: 'test-file.txt' });
|
||||
|
||||
// Read the extracted file
|
||||
const extractedContent = await plugins.fsPromises.readFile(
|
||||
@@ -77,11 +77,11 @@ tap.test('should handle gzip stream extraction', async () => {
|
||||
);
|
||||
|
||||
// Test extraction using SmartArchive from stream
|
||||
const gzipArchive = await smartarchive.SmartArchive.fromArchiveStream(gzipStream);
|
||||
|
||||
const gzipArchive = await smartarchive.SmartArchive.fromStream(gzipStream);
|
||||
|
||||
// Export to stream and collect the result
|
||||
const streamFiles: any[] = [];
|
||||
const resultStream = await gzipArchive.exportToStreamOfStreamFiles();
|
||||
const resultStream = await gzipArchive.extractToStream();
|
||||
|
||||
await new Promise<void>((resolve, reject) => {
|
||||
resultStream.on('data', (streamFile) => {
|
||||
@@ -134,14 +134,14 @@ tap.test('should handle gzip files with original filename in header', async () =
|
||||
);
|
||||
|
||||
// Test extraction
|
||||
const gzipArchive = await smartarchive.SmartArchive.fromArchiveFile(
|
||||
const gzipArchive = await smartarchive.SmartArchive.fromFile(
|
||||
plugins.path.join(testPaths.gzipTestDir, gzipFileName)
|
||||
);
|
||||
|
||||
const extractPath = plugins.path.join(testPaths.gzipTestDir, 'header-test');
|
||||
await plugins.fsPromises.mkdir(extractPath, { recursive: true });
|
||||
// Provide a filename since gzip doesn't reliably contain filename metadata
|
||||
await gzipArchive.exportToFs(extractPath, 'compressed.txt');
|
||||
await gzipArchive.extractToDirectory(extractPath, { fileName: 'compressed.txt' });
|
||||
|
||||
// Check if file was extracted (name might be derived from archive name)
|
||||
const files = await plugins.listFileTree(extractPath, '**/*');
|
||||
@@ -170,14 +170,14 @@ tap.test('should handle large gzip files', async () => {
|
||||
);
|
||||
|
||||
// Test extraction
|
||||
const gzipArchive = await smartarchive.SmartArchive.fromArchiveFile(
|
||||
const gzipArchive = await smartarchive.SmartArchive.fromFile(
|
||||
plugins.path.join(testPaths.gzipTestDir, gzipFileName)
|
||||
);
|
||||
|
||||
const extractPath = plugins.path.join(testPaths.gzipTestDir, 'large-extracted');
|
||||
await plugins.fsPromises.mkdir(extractPath, { recursive: true });
|
||||
// Provide a filename since gzip doesn't contain filename metadata
|
||||
await gzipArchive.exportToFs(extractPath, 'large-file.txt');
|
||||
await gzipArchive.extractToDirectory(extractPath, { fileName: 'large-file.txt' });
|
||||
|
||||
// Verify the extracted content
|
||||
const files = await plugins.listFileTree(extractPath, '**/*');
|
||||
@@ -194,15 +194,15 @@ tap.test('should handle large gzip files', async () => {
|
||||
tap.test('should handle real-world multi-chunk gzip from URL', async () => {
|
||||
// Test with a real tgz file that will be processed in multiple chunks
|
||||
const testUrl = 'https://registry.npmjs.org/@push.rocks/smartfile/-/smartfile-11.2.7.tgz';
|
||||
|
||||
|
||||
// Download and extract the archive
|
||||
const testArchive = await smartarchive.SmartArchive.fromArchiveUrl(testUrl);
|
||||
const testArchive = await smartarchive.SmartArchive.fromUrl(testUrl);
|
||||
|
||||
const extractPath = plugins.path.join(testPaths.gzipTestDir, 'real-world-test');
|
||||
await plugins.fsPromises.mkdir(extractPath, { recursive: true });
|
||||
|
||||
// This will test multi-chunk decompression as the file is larger
|
||||
await testArchive.exportToFs(extractPath);
|
||||
await testArchive.extractToDirectory(extractPath);
|
||||
|
||||
// Verify extraction worked
|
||||
const files = await plugins.listFileTree(extractPath, '**/*');
|
||||
@@ -275,11 +275,11 @@ tap.test('should handle gzip extraction fully in memory', async () => {
|
||||
const compressedStream = Readable.from(Buffer.from(compressed));
|
||||
|
||||
// Process through SmartArchive without touching filesystem
|
||||
const gzipArchive = await smartarchive.SmartArchive.fromArchiveStream(compressedStream);
|
||||
|
||||
const gzipArchive = await smartarchive.SmartArchive.fromStream(compressedStream);
|
||||
|
||||
// Export to stream of stream files (in memory)
|
||||
const streamFiles: plugins.smartfile.StreamFile[] = [];
|
||||
const resultStream = await gzipArchive.exportToStreamOfStreamFiles();
|
||||
const resultStream = await gzipArchive.extractToStream();
|
||||
|
||||
await new Promise<void>((resolve, reject) => {
|
||||
resultStream.on('data', (streamFile: plugins.smartfile.StreamFile) => {
|
||||
@@ -323,11 +323,11 @@ tap.test('should handle real tgz file fully in memory', async (tools) => {
|
||||
const tgzStream = Readable2.from(tgzBuffer);
|
||||
|
||||
// Process through SmartArchive in memory
|
||||
const archive = await smartarchive.SmartArchive.fromArchiveStream(tgzStream);
|
||||
|
||||
const archive = await smartarchive.SmartArchive.fromStream(tgzStream);
|
||||
|
||||
// Export to stream of stream files (in memory)
|
||||
const streamFiles: plugins.smartfile.StreamFile[] = [];
|
||||
const resultStream = await archive.exportToStreamOfStreamFiles();
|
||||
const resultStream = await archive.extractToStream();
|
||||
|
||||
await new Promise<void>((resolve, reject) => {
|
||||
let timeout: NodeJS.Timeout;
|
||||
|
||||
Reference in New Issue
Block a user