function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
const fileType = require('file-type');
const Stream = require('stream');
const request = require('request-promise');
const fs = require('fs');
const { URL } = require('url');
exports.file = p => {
Iif (exports.isUrl(p)) {
return request.get({ url: p, encoding: null });
}
return fs.createReadStream(p);
};
exports.isUrl = s => {
try {
new URL(s); // eslint-disable-line no-new
return true;
} catch (e) {
return false;
}
};
// Converts a stream to a buffer
// Useful for locally calling a service
// with a file
exports.streamToBuffer = s => {
return new Promise((resolve, reject) => {
const out = [];
s.on('data', data => {
out.push(data);
});
s.on('end', () => {
resolve(Buffer.concat(out));
});
s.on('error', reject);
});
};
// Converts buffers in response to file type
// Only used for api.local
exports.parseLocalFileResponse = response => {
return JSON.parse(response, (k, v) => {
if (v && v.type === 'Buffer') {
const file = Buffer.from(v.data);
return {
type: exports.getBufferType(file),
file
};
}
return v;
});
};
exports.getBufferType = buffer => {
const type = fileType(buffer);
return type ? type.ext : 'string';
};
// Converts data into the file type if stream or buffer
exports.convertToFileType = (() => {
var _ref = _asyncToGenerator(function* (data) {
const out = {};
for (const d in data) {
if (data[d] instanceof Stream) {
/* eslint-disable no-await-in-loop */
const file = yield exports.streamToBuffer(data[d]);
/* eslint-enable no-await-in-loop */
out[d] = {
file: JSON.parse(JSON.stringify(file)),
type: fileType(file).ext
};
} else if (Buffer.isBuffer(data[d])) {
out[d] = {
file: JSON.parse(JSON.stringify(data[d])),
type: fileType(data[d]).ext
};
} else {
out[d] = data[d];
}
}
return out;
});
return function (_x) {
return _ref.apply(this, arguments);
};
})(); |