2022-04-04 14:28:40 +00:00
|
|
|
import * as plugins from './smartarchive.plugins.js';
|
|
|
|
import * as paths from './smartarchive.paths.js';
|
|
|
|
import 'tar';
|
|
|
|
export class SmartArchive {
|
2020-03-13 20:22:56 +00:00
|
|
|
constructor() { }
|
2022-04-04 14:28:40 +00:00
|
|
|
/**
|
|
|
|
* extracts an archive from a given url
|
|
|
|
*/
|
|
|
|
async extractArchiveFromUrlToFs(urlArg, targetDir) {
|
|
|
|
const parsedPath = plugins.path.parse(urlArg);
|
|
|
|
const uniqueFileName = plugins.smartunique.uni() + parsedPath.ext;
|
|
|
|
plugins.smartfile.fs.ensureDir(paths.nogitDir); // TODO: totally remove caching needs
|
|
|
|
const downloadPath = plugins.path.join(paths.nogitDir, uniqueFileName);
|
|
|
|
const downloadedArchive = (await plugins.smartrequest.getBinary(urlArg)).body;
|
|
|
|
await plugins.smartfile.memory.toFs(downloadedArchive, downloadPath);
|
|
|
|
await this.extractArchiveFromFilePathToFs(downloadPath, targetDir);
|
|
|
|
await plugins.smartfile.fs.remove(downloadPath);
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* extracts an archive from a given filePath on disk
|
|
|
|
* @param filePathArg
|
|
|
|
* @param targetDir
|
|
|
|
*/
|
|
|
|
async extractArchiveFromFilePathToFs(filePathArg, targetDir) {
|
2020-03-13 20:22:56 +00:00
|
|
|
const parsedPath = plugins.path.parse(filePathArg);
|
|
|
|
switch (parsedPath.ext) {
|
2022-04-04 14:28:40 +00:00
|
|
|
case '.tgz':
|
|
|
|
console.log(`detected a .tgz archive`);
|
|
|
|
await plugins.tar.extract({
|
|
|
|
file: filePathArg,
|
|
|
|
cwd: targetDir,
|
|
|
|
});
|
|
|
|
break;
|
2020-03-13 20:22:56 +00:00
|
|
|
}
|
|
|
|
}
|
2022-04-04 14:28:40 +00:00
|
|
|
/**
|
|
|
|
* extracts to Observable
|
|
|
|
*/
|
|
|
|
async extractArchiveFromBufferToObservable(bufferArg) {
|
|
|
|
const intake = new plugins.streamfunction.Intake();
|
|
|
|
const replaySubject = new plugins.smartrx.rxjs.ReplaySubject();
|
|
|
|
const readableStream = intake.getReadableStream();
|
|
|
|
const extractPipeStop = plugins.tarStream.extract();
|
|
|
|
extractPipeStop.on('entry', (header, stream, next) => {
|
|
|
|
let fileBuffer;
|
|
|
|
stream.on('data', (chunkArg) => {
|
|
|
|
if (!fileBuffer) {
|
|
|
|
fileBuffer = chunkArg;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
fileBuffer = Buffer.concat([fileBuffer, chunkArg]);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
stream.on('end', () => {
|
|
|
|
replaySubject.next(new plugins.smartfile.Smartfile({
|
|
|
|
base: null,
|
|
|
|
contentBuffer: fileBuffer,
|
|
|
|
path: `./${header.name}`
|
|
|
|
}));
|
|
|
|
next();
|
|
|
|
});
|
|
|
|
stream.resume();
|
|
|
|
});
|
|
|
|
extractPipeStop.on('finish', () => {
|
|
|
|
replaySubject.complete();
|
|
|
|
});
|
|
|
|
// lets run the stream
|
|
|
|
readableStream
|
|
|
|
.pipe(plugins.gunzipMaybe())
|
|
|
|
.pipe(extractPipeStop);
|
|
|
|
intake.pushData(bufferArg);
|
|
|
|
intake.signalEnd();
|
|
|
|
return replaySubject;
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* extracts to Observable
|
|
|
|
*/
|
|
|
|
async extractArchiveFromUrlToObservable(urlArg) {
|
|
|
|
const response = await plugins.smartrequest.getBinary(urlArg);
|
|
|
|
const replaySubject = this.extractArchiveFromBufferToObservable(response.body);
|
|
|
|
return replaySubject;
|
|
|
|
}
|
2020-03-13 20:22:56 +00:00
|
|
|
}
|
2022-04-04 14:28:40 +00:00
|
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhcmNoaXZlLmNsYXNzZXMuc21hcnRhcmNoaXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRhcmNoaXZlLmNsYXNzZXMuc21hcnRhcmNoaXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sMkJBQTJCLENBQUM7QUFDckQsT0FBTyxLQUFLLEtBQUssTUFBTSx5QkFBeUIsQ0FBQztBQUNqRCxPQUF3QixLQUFLLENBQUM7QUFFOUIsTUFBTSxPQUFPLFlBQVk7SUFFdkIsZ0JBQWUsQ0FBQztJQUVoQjs7T0FFRztJQUNJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxNQUFjLEVBQUUsU0FBaUI7UUFDdEUsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUMsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDO1FBQ2xFLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxxQ0FBcUM7UUFDckYsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN2RSxNQUFNLGlCQUFpQixHQUFHLENBQUMsTUFBTSxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUM5RSxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNyRSxNQUFNLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbkUsTUFBTSxPQUFP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
|