transfr
Version:
A Node CLI to upload files with https://transfer.sh/
48 lines (39 loc) • 1.28 kB
JavaScript
const got = require('got');
const concat = require('concat-stream');
const pump = require('pump');
const { URL } = require('url');
const progress = require('./progress');
const pkg = require('../package.json');
module.exports = function putFile(fileName) {
return (fileStream) => {
const url = new URL(fileName, 'https://transfer.sh/');
const options = {
headers: {
'user-agent': `${pkg.name}/${pkg.version} (${pkg.homepage})`,
},
};
const spinner = progress(`Starting upload of ${fileName}`);
return new Promise((resolve, reject) => {
const onSuccess = (linkBuffer) => {
const link = linkBuffer.toString();
spinner.succeed(`File uploaded, here's the link: ${link} 👍`);
resolve(link);
};
const onError = (err) => {
if (err) {
switch (err.code) {
case 'ENOENT':
spinner.fail(`Couldn't find the file ${fileName} 👎`);
break;
default:
spinner.fail(err.message);
}
reject(err);
}
};
const requestStream = got.stream.put(url.href, options);
const concatStream = concat(onSuccess);
pump(fileStream, requestStream, concatStream, onError);
});
};
};