UNPKG

@lskjs/upload

Version:
140 lines (138 loc) 6.55 kB
"use strict"; 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