116 lines
9.9 KiB
JavaScript
116 lines
9.9 KiB
JavaScript
import * as plugins from './smartarchive.plugins.js';
|
|
import * as paths from './smartarchive.paths.js';
|
|
export class SmartArchive {
|
|
constructor() { }
|
|
/**
|
|
* 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 targetDirArg
|
|
*/
|
|
async extractArchiveFromFilePathToFs(filePathArg, targetDirArg) {
|
|
console.log(`extracting ${filePathArg}`);
|
|
const done = plugins.smartpromise.defer();
|
|
filePathArg = plugins.smartpath.transform.makeAbsolute(filePathArg);
|
|
targetDirArg = plugins.smartpath.transform.makeAbsolute(targetDirArg);
|
|
const readableStream = plugins.smartfile.fsStream.createReadStream(filePathArg);
|
|
const extractPipeStop = plugins.tarStream.extract();
|
|
extractPipeStop.on('entry', async (header, stream, next) => {
|
|
const targetFilePath = plugins.path.join(targetDirArg, header.name);
|
|
const parsedPath = plugins.path.parse(targetFilePath);
|
|
await plugins.smartfile.fs.ensureDir(parsedPath.dir);
|
|
const writeStream = plugins.smartfile.fsStream.createWriteStream(targetFilePath);
|
|
stream.pipe(writeStream);
|
|
stream.on('end', () => {
|
|
console.log(`extracted ${header.name}`);
|
|
next();
|
|
});
|
|
stream.resume();
|
|
});
|
|
extractPipeStop.on('finish', () => {
|
|
console.log(`Sucessfully extracted ${filePathArg}!`);
|
|
done.resolve();
|
|
});
|
|
// lets run the stream
|
|
readableStream.pipe(plugins.gunzipMaybe()).pipe(extractPipeStop);
|
|
await done.promise;
|
|
}
|
|
/**
|
|
* extracts to Observable
|
|
* where the Observable is emitting smartfiles
|
|
*/
|
|
async extractArchiveFromBufferToObservable(bufferArg) {
|
|
const { intake, replaySubject } = this.extractArchiveWithIntakeAndReplaySubject();
|
|
intake.pushData(bufferArg);
|
|
intake.signalEnd();
|
|
return replaySubject;
|
|
}
|
|
extractArchiveWithIntakeAndReplaySubject() {
|
|
const intake = new plugins.smartstream.StreamIntake();
|
|
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);
|
|
return {
|
|
intake,
|
|
replaySubject,
|
|
};
|
|
}
|
|
/**
|
|
* extracts to Observable
|
|
*/
|
|
async extractArchiveFromUrlToObservable(urlArg) {
|
|
const response = await plugins.smartrequest.getBinary(urlArg);
|
|
const replaySubject = this.extractArchiveFromBufferToObservable(response.body);
|
|
return replaySubject;
|
|
}
|
|
// TODO
|
|
async extractArchiveFromUrlToStream() { }
|
|
// TODO
|
|
async extractArchiveFromFilePathToStream() { }
|
|
// TODO
|
|
async extractArchiveFromStreamToStream() { }
|
|
// TODO
|
|
async packFromStreamToStream() { }
|
|
// TODO
|
|
async packFromDirPathToStream() { }
|
|
// TODO
|
|
async packFromDirPathToFs() { }
|
|
}
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhcmNoaXZlLmNsYXNzZXMuc21hcnRhcmNoaXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRhcmNoaXZlLmNsYXNzZXMuc21hcnRhcmNoaXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sMkJBQTJCLENBQUM7QUFDckQsT0FBTyxLQUFLLEtBQUssTUFBTSx5QkFBeUIsQ0FBQztBQUVqRCxNQUFNLE9BQU8sWUFBWTtJQUN2QixnQkFBZSxDQUFDO0lBRWhCOztPQUVHO0lBQ0ksS0FBSyxDQUFDLHlCQUF5QixDQUFDLE1BQWMsRUFBRSxTQUFpQjtRQUN0RSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUM7UUFDbEUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLHFDQUFxQztRQUNyRixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzlFLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sSUFBSSxDQUFDLDhCQUE4QixDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNuRSxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxD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
|