@lskjs/upload
Version:
LSK module for uploading files.
140 lines (138 loc) • 6.55 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = exports.S3UploadServerModule = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _err = _interopRequireDefault(require("@lskjs/err"));
var _awsSdk = _interopRequireDefault(require("aws-sdk"));
var _magicBytes = require("magic-bytes.js");
var _multerS = _interopRequireDefault(require("multer-s3"));
var _stream = _interopRequireDefault(require("stream"));
var _UploadServerModule2 = require("./UploadServerModule");
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var S3UploadServerModule = /*#__PURE__*/function (_UploadServerModule) {
(0, _inherits2["default"])(S3UploadServerModule, _UploadServerModule);
var _super = _createSuper(S3UploadServerModule);
function S3UploadServerModule() {
(0, _classCallCheck2["default"])(this, S3UploadServerModule);
return _super.apply(this, arguments);
}
(0, _createClass2["default"])(S3UploadServerModule, [{
key: "initStorage",
value: function () {
var _initStorage = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
var config;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
config = this.config.s3;
if (config) {
_context.next = 3;
break;
}
throw new _err["default"]('!config.upload.s3');
case 3:
if (this.config.s3) {
this.s3 = new _awsSdk["default"].S3(this.config.s3);
}
this.storage = this.getStorage();
case 5:
case "end":
return _context.stop();
}
}, _callee, this);
}));
function initStorage() {
return _initStorage.apply(this, arguments);
}
return initStorage;
}()
}, {
key: "isSvg",
value: function isSvg(svg) {
var svgRegex = /^\s*(?:<\?xml[^>]*>\s*)?(?:<!doctype svg[^>]*>\s*)?<svg[^>]*>/i;
return svgRegex.test(svg);
}
}, {
key: "normalizeContentType",
value: function normalizeContentType(req, file, cb) {
var _this = this;
file.stream.once('data', function (firstChunk) {
var _mime = (0, _magicBytes.filetypemime)(firstChunk);
var _ext = (0, _magicBytes.filetypeextension)(firstChunk);
var type = Array.isArray(_mime) && _mime.length ? {
mime: _mime[0],
ext: _ext[0]
} : null;
var mimetype = type === null || type === void 0 ? void 0 : type.mime;
var mime = 'application/octet-stream'; // default type
if ((!type || type.ext === 'xml') && _this.isSvg(firstChunk.toString())) {
mimetype = 'image/svg+xml';
} else if (['text/csv'].includes(file === null || file === void 0 ? void 0 : file.mimetype)) {
mimetype = file.mimetype;
} else if (type) {
mime = type.mime;
}
var isMIMETypeValid = _this.validateMIMEType(mimetype, cb);
if (!isMIMETypeValid) return;
var outStream = new _stream["default"].PassThrough();
outStream.write(firstChunk);
file.stream.pipe(outStream);
cb(null, mime, outStream);
});
}
}, {
key: "getStorage",
value: function getStorage() {
var _this2 = this;
return (0, _multerS["default"])({
s3: this.s3,
bucket: this.config.s3.bucket,
contentType: this.normalizeContentType.bind(this),
acl: this.config.s3.acl || 'public-read',
key: function () {
var _key = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(req, file, cb) {
var filename;
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
_context2.prev = 0;
filename = _this2.getFilePath(req, file);
filename = filename.replace(/\//g, '__');
_context2.next = 8;
break;
case 5:
_context2.prev = 5;
_context2.t0 = _context2["catch"](0);
return _context2.abrupt("return", cb(_context2.t0));
case 8:
return _context2.abrupt("return", cb(null, filename));
case 9:
case "end":
return _context2.stop();
}
}, _callee2, null, [[0, 5]]);
}));
function key(_x, _x2, _x3) {
return _key.apply(this, arguments);
}
return key;
}()
});
}
}]);
return S3UploadServerModule;
}(_UploadServerModule2.UploadServerModule);
exports.S3UploadServerModule = S3UploadServerModule;
var _default = S3UploadServerModule;
exports["default"] = _default;
//# sourceMappingURL=S3UploadServerModule.js.map