kibana-with-account
Version:
kibana-with-account is develop based kibana project
69 lines (55 loc) • 1.79 kB
JavaScript
const { createWriteStream, createReadStream, unlinkSync, statSync } = require('fs');
const getProgressReporter = require('../progress_reporter');
import fileType from '../file_type';
function openSourceFile({ sourcePath }) {
try {
let fileInfo = statSync(sourcePath);
const readStream = createReadStream(sourcePath);
return { readStream, fileInfo };
} catch (err) {
if (err.code === 'ENOENT') {
throw new Error('ENOTFOUND');
}
throw err;
}
}
async function copyFile({ readStream, writeStream, progressReporter }) {
await new Promise((resolve, reject) => {
// if either stream errors, fail quickly
readStream.on('error', reject);
writeStream.on('error', reject);
// report progress as we transfer
readStream.on('data', (chunk) => {
progressReporter.progress(chunk.length);
});
// write the download to the file system
readStream.pipe(writeStream);
// when the write is done, we are done
writeStream.on('finish', resolve);
});
}
/*
// Responsible for managing local file transfers
*/
export default async function copyLocalFile(logger, sourcePath, targetPath) {
try {
const { readStream, fileInfo } = openSourceFile({ sourcePath });
const writeStream = createWriteStream(targetPath);
try {
const progressReporter = getProgressReporter(logger);
progressReporter.init(fileInfo.size);
await copyFile({ readStream, writeStream, progressReporter });
progressReporter.complete();
} catch (err) {
readStream.close();
writeStream.close();
throw err;
}
// all is well, return our archive type
const archiveType = fileType(sourcePath);
return { archiveType };
} catch (err) {
logger.error(err);
throw err;
}
};