UNPKG

@lskjs/upload

Version:

LSK module for uploading files.

423 lines (346 loc) 31.8 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); 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 _multer = _interopRequireDefault(require("multer")); var _fs = _interopRequireDefault(require("fs")); var _path = _interopRequireDefault(require("path")); var _random = _interopRequireDefault(require("lodash/random")); var _get = _interopRequireDefault(require("lodash/get")); var _awsSdk = _interopRequireDefault(require("aws-sdk")); var _multerS = _interopRequireDefault(require("multer-s3")); var _default = function _default(ctx) { return ( /*#__PURE__*/ function () { function LskUpload() { (0, _classCallCheck2["default"])(this, LskUpload); } (0, _createClass2["default"])(LskUpload, [{ key: "init", value: function () { var _init = (0, _asyncToGenerator2["default"])( /*#__PURE__*/ _regenerator["default"].mark(function _callee() { return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: this.config = (0, _get["default"])(ctx, 'config.upload'); if (!this.config) { console.error('config.upload is missing'); this.config = {}; } if (!this.config.url) { this.config.url = ctx.config.url; } if (this.config.s3) { this.s3 = new _awsSdk["default"].S3(this.config.s3); } this.storage = this.getStorage(); this.multer = this.getMulter(); case 6: case "end": return _context.stop(); } } }, _callee, this); })); function init() { return _init.apply(this, arguments); } return init; }() }, { key: "getFileType", value: function getFileType(file) { if (file && file.originalname) { var res = file.originalname.match(/\.([0-9a-z]+)(?:[\?#]|$)/i); //eslint-disable-line if (res && res[1]) { return res[1]; } } return null; } // @TODO real file name // const getFileName = (file) => { // return file.originalname; // }; }, { key: "createDir", value: function createDir(targetDir) { if (!_fs["default"].existsSync(targetDir)) { targetDir.split('/').forEach(function (dir, index, splits) { var parent = splits.slice(0, index).join('/'); var dirPath = _path["default"].resolve(parent, dir); if (!_fs["default"].existsSync(dirPath)) { _fs["default"].mkdirSync(dirPath); } }); } } }, { key: "getStorage", value: function getStorage() { if (this.config.s3) { return this.getS3Storage(); } return this.getDiskStorage(); } }, { key: "getFilePath", value: function getFilePath(req, file) { var e403 = ctx.errors.e403; var config = this.config; var _config$path = config.path, path = _config$path === void 0 ? 'storage' : _config$path; if (req.user && req.user._id) { path += "/".concat(req.user._id); } else if (config.allowGuest) { path += '/general'; } else { throw e403('Guest can not upload files'); } var fileName; if (config.allowSetFilename) { fileName = file.originalname; } else { fileName = "".concat(Date.now(), "_").concat((0, _random["default"])(0, 1000), ".").concat(this.getFileType(file)); } var _config$prefix = config.prefix, prefix = _config$prefix === void 0 ? '' : _config$prefix; var path2 = "".concat(path, "/").concat(prefix).concat(fileName); // console.log({ path2 }); return path2; } }, { key: "getS3Storage", value: function getS3Storage() { var _this = this; return (0, _multerS["default"])({ s3: this.s3, bucket: this.config.s3.bucket, contentType: _multerS["default"].AUTO_CONTENT_TYPE, acl: 'public-read', key3: function key3(req, file, cb) { var filename = _path["default"].parse(file.originalname); // console.log({ req, file }); // console.log(`avatar_${req.user._id}.${filename.ext}`); cb(null, "avatar_".concat(req.user._id, ".").concat(filename.ext)); }, 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; // console.log('req, file', file); filename = _this.getFilePath(req, file); // console.log('filename', filename); filename = filename.replace(/\//g, '__'); // console.log('filename2', filename); _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; }() }); } }, { key: "getDiskStorage", value: function getDiskStorage() { var _this2 = this; // const config = ctx.config.upload; var storage = _multer["default"].diskStorage({ destination: function destination(req, file, cb) { // console.log('destination'); var path; var dirname; try { path = _this2.getFilePath(req, file); dirname = path.split('/').slice(0, -1).join('/'); _this2.createDir(dirname); } catch (err) { return cb(err); } return cb(null, dirname); }, filename: function filename(req, file, cb) { var path; var filename; try { path = _this2.getFilePath(req, file); var _path$split$reverse = path.split('/').reverse(); var _path$split$reverse2 = (0, _slicedToArray2["default"])(_path$split$reverse, 1); filename = _path$split$reverse2[0]; } catch (err) { return cb(err); } // console.log('filename', filename); // this.createDir(filename); return cb(null, filename); } }); return storage; } }, { key: "getMulter", value: function getMulter() { var e400 = ctx.errors.e400; var config = ctx.config.upload; var fileFilter = function fileFilter(req, file, cb) { if (Array.isArray(config.mimetypes)) { if (config.mimetypes.indexOf(file.mimetype) === -1) { return cb(e400('You are not allowed to upload files with this extension')); } } return cb(null, true); }; var limits = {}; if (config.maxSize) { var fileSize = parseFloat(config.maxSize) * 1024 * 1024; limits.fileSize = fileSize; } // console.log('getMulter', { // storage: this.storage, // limits, // fileFilter, // }); return (0, _multer["default"])({ storage: this.storage, limits: limits, fileFilter: fileFilter }); } }, { key: "getApi", value: function getApi() { var config = ctx.config.upload; function processFile(file) { if (config.s3) { return { name: file.fieldname, url: file.location, path: file.location, relative: "/".concat(file.key), mimetype: file.contentType, filename: file.originalname }; } return { name: file.fieldname, url: "".concat(config.url, "/").concat(file.path), path: "/".concat(file.path), relative: "/".concat(file.path), mimetype: file.mimetype, filename: file.originalname }; } var api = ctx.asyncRouter(); api.post('/many', this.multer.any(), /*#__PURE__*/ function () { var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/ _regenerator["default"].mark(function _callee3(req) { var _req$files, files; return _regenerator["default"].wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: _req$files = req.files, files = _req$files === void 0 ? [] : _req$files; return _context3.abrupt("return", files.map(processFile)); case 2: case "end": return _context3.stop(); } } }, _callee3); })); return function (_x4) { return _ref.apply(this, arguments); }; }()); // const upload = multer(); // api.post('/', this.multer.single('file'), async (req) => { api.post('/', this.multer.single('file'), /*#__PURE__*/ function () { var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/ _regenerator["default"].mark(function _callee4(req) { var file; return _regenerator["default"].wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: file = req.file; if (file) { _context4.next = 3; break; } throw '!file'; case 3: return _context4.abrupt("return", processFile(file)); case 4: case "end": return _context4.stop(); } } }, _callee4); })); return function (_x5) { return _ref2.apply(this, arguments); }; }()); return api; } }, { key: "run", value: function () { var _run = (0, _asyncToGenerator2["default"])( /*#__PURE__*/ _regenerator["default"].mark(function _callee5() { return _regenerator["default"].wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: ctx.app.use('/api/module/upload', this.getApi()); case 1: case "end": return _context5.stop(); } } }, _callee5, this); })); function run() { return _run.apply(this, arguments); } return run; }() }]); return LskUpload; }() ); }; exports["default"] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zZXJ2ZXIuanMiXSwibmFtZXMiOlsiY3R4IiwiY29uZmlnIiwiY29uc29sZSIsImVycm9yIiwidXJsIiwiczMiLCJhd3MiLCJTMyIsInN0b3JhZ2UiLCJnZXRTdG9yYWdlIiwibXVsdGVyIiwiZ2V0TXVsdGVyIiwiZmlsZSIsIm9yaWdpbmFsbmFtZSIsInJlcyIsIm1hdGNoIiwidGFyZ2V0RGlyIiwiZnMiLCJleGlzdHNTeW5jIiwic3BsaXQiLCJmb3JFYWNoIiwiZGlyIiwiaW5kZXgiLCJzcGxpdHMiLCJwYXJlbnQiLCJzbGljZSIsImpvaW4iLCJkaXJQYXRoIiwibm9kZXBhdGgiLCJyZXNvbHZlIiwibWtkaXJTeW5jIiwiZ2V0UzNTdG9yYWdlIiwiZ2V0RGlza1N0b3JhZ2UiLCJyZXEiLCJlNDAzIiwiZXJyb3JzIiwicGF0aCIsInVzZXIiLCJfaWQiLCJhbGxvd0d1ZXN0IiwiZmlsZU5hbWUiLCJhbGxvd1NldEZpbGVuYW1lIiwiRGF0ZSIsIm5vdyIsImdldEZpbGVUeXBlIiwicHJlZml4IiwicGF0aDIiLCJidWNrZXQiLCJjb250ZW50VHlwZSIsIm11bHRlclMzIiwiQVVUT19DT05URU5UX1RZUEUiLCJhY2wiLCJrZXkzIiwiY2IiLCJmaWxlbmFtZSIsInBhcnNlIiwiZXh0Iiwia2V5IiwiZ2V0RmlsZVBhdGgiLCJyZXBsYWNlIiwiZGlza1N0b3JhZ2UiLCJkZXN0aW5hdGlvbiIsImRpcm5hbWUiLCJjcmVhdGVEaXIiLCJlcnIiLCJyZXZlcnNlIiwiZTQwMCIsInVwbG9hZCIsImZpbGVGaWx0ZXIiLCJBcnJheSIsImlzQXJyYXkiLCJtaW1ldHlwZXMiLCJpbmRleE9mIiwibWltZXR5cGUiLCJsaW1pdHMiLCJtYXhTaXplIiwiZmlsZVNpemUiLCJwYXJzZUZsb2F0IiwicHJvY2Vzc0ZpbGUiLCJuYW1lIiwiZmllbGRuYW1lIiwibG9jYXRpb24iLCJyZWxhdGl2ZSIsImFwaSIsImFzeW5jUm91dGVyIiwicG9zdCIsImFueSIsImZpbGVzIiwi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LGFBQXJDOztBQUFBO0FBQUE7QUFBQTtBQUFBLGVBekJPLENBOEJQO0FBQ0E7O0FBQ0FLLFVBQUFBLEdBQUcsQ0FBQ0UsSUFBSixDQUFTLEdBQVQsRUFBYyxLQUFLM0UsTUFBTCxDQUFZK0UsTUFBWixDQUFtQixNQUFuQixDQUFkO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSx5Q0FBMEMsa0JBQU94RCxHQUFQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNoQ3JCLHNCQUFBQSxJQURnQyxHQUN2QnFCLEdBRHVCLENBQ2hDckIsSUFEZ0M7O0FBQUEsMEJBRW5DQSxJQUZtQztBQUFBO0FBQUE7QUFBQTs7QUFBQSw0QkFHaEMsT0FIZ0M7O0FBQUE7QUFBQSx3REFLakNrRSxXQUFXLENBQUNsRSxJQUFELENBTHNCOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGFBQTFDOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBT0EsaUJBQU91RSxHQUFQO0FBQ0Q7QUE5TWU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFpTmRuRixvQkFBQUEsR0FBRyxDQUFDMEYsR0FBSixDQUFRQyxHQUFSLENBQVksb0JBQVosRUFBa0MsS0FBS0MsTUFBTCxFQUFsQzs7QUFqTmM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbXVsdGVyIGZyb20gJ211bHRlcic7XG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IG5vZGVwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHJhbmRvbSBmcm9tICdsb2Rhc2gvcmFuZG9tJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoL2dldCc7XG5pbXBvcnQgYXdzIGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0IG11bHRlclMzIGZyb20gJ211bHRlci1zMyc7XG5cbmV4cG9ydCBkZWZhdWx0IGN0eCA9PiBjbGFzcyBMc2tVcGxvYWQge1xuICBhc3luYyBpbml0KCkge1xuICAgIHRoaXMuY29uZmlnID0gZ2V0KGN0eCwgJ2NvbmZpZy51cGxvYWQnKTtcbiAgICBpZiAoIXRoaXMuY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdjb25maWcudXBsb2FkIGlzIG1pc3NpbmcnKTtcbiAgICAgIHRoaXMuY29uZmlnID0ge307XG4gICAgfVxuICAgIGlmICghdGhpcy5jb25maWcudXJsKSB7XG4gICAgICB0aGlzLmNvbmZpZy51cmwgPSBjdHguY29uZmlnLnVybDtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnLnMzKSB7XG4gICAgICB0aGlzLnMzID0gbmV3IGF3cy5TMyh0aGlzLmNvbmZpZy5zMyk7XG4gICAgfVxuICAgIHRoaXMuc3RvcmFnZSA9IHRoaXMuZ2V0U3RvcmFnZSgpO1xuICAgIHRoaXMubXVsdGVyID0gdGhpcy5nZXRNdWx0ZXIoKTtcbiAgfVxuXG4gIGdldEZpbGVUeXBlKGZpbGUpIHtcbiAgICBpZiAoZmlsZSAmJiBmaWxlLm9yaWdpbmFsbmFtZSkge1xuICAgICAgY29uc3QgcmVzID0gZmlsZS5vcmlnaW5hbG5hbWUubWF0Y2goL1xcLihbMC05YS16XSspKD86W1xcPyNdfCQpL2kpOyAgLy9lc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICBpZiAocmVzICYmIHJlc1sxXSkge1xuICAgICAgICByZXR1cm4gcmVzWzFdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBAVE9ETyByZWFsIGZpbGUgbmFtZVxuICAvLyBjb25zdCBnZXRGaWxlTmFtZSA9IChmaWxlKSA9PiB7XG4gIC8vICAgcmV0dXJuIGZpbGUub3JpZ2luYWxuYW1lO1xuICAvLyB9O1xuXG4gIGNyZWF0ZURpcih0YXJnZXREaXIpIHtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmModGFyZ2V0RGlyKSkge1xuICAgICAgdGFyZ2V0RGlyLnNwbGl0KCcvJykuZm9yRWFjaCgoZGlyLCBpbmRleCwgc3BsaXRzKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHNwbGl0cy5zbGljZSgwLCBpbmRleCkuam9pbignLycpO1xuICAgICAgICBjb25zdCBkaXJQYXRoID0gbm9kZXBhdGgucmVzb2x2ZShwYXJlbnQsIGRpcik7XG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhkaXJQYXRoKSkge1xuICAgICAgICAgIGZzLm1rZGlyU3luYyhkaXJQYXRoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0U3RvcmFnZSgpIHtcbiAgICBpZiAodGhpcy5jb25maWcuczMpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFMzU3RvcmFnZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXREaXNrU3RvcmFnZSgpO1xuICB9XG5cbiAgZ2V0RmlsZVBhdGgocmVxLCBmaWxlKSB7XG4gICAgY29uc3QgeyBlNDAzIH0gPSBjdHguZXJyb3JzO1xuICAgIGNvbnN0IHsgY29uZmlnIH0gPSB0aGlzO1xuICAgIGxldCB7IHBhdGggPSAnc3RvcmFnZScgfSA9IGNvbmZpZztcblxuICAgIGlmIChyZXEudXNlciAmJiByZXEudXNlci5faWQpIHtcbiAgICAgIHBhdGggKz0gYC8ke3JlcS51c2VyLl9pZH1gO1xuICAgIH0gZWxzZSBpZiAoY29uZmlnLmFsbG93R3Vlc3QpIHtcbiAgICAgIHBhdGggKz0gJy9nZW5lcmFsJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZTQwMygnR3Vlc3QgY2FuIG5vdCB1cGxvYWQgZmlsZXMnKTtcbiAgICB9XG5cbiAgICBsZXQgZmlsZU5hbWU7XG4gICAgaWYgKGNvbmZpZy5hbGxvd1NldEZpbGVuYW1lKSB7XG4gICAgICBmaWxlTmFtZSA9IGZpbGUub3JpZ2luYWxuYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWxlTmFtZSA9IGAke0RhdGUubm93KCl9XyR7cmFuZG9tKDAsIDEwMDApfS4ke3RoaXMuZ2V0RmlsZVR5cGUoZmlsZSl9YDtcbiAgICB9XG4gICAgY29uc3QgeyBwcmVmaXggPSAnJyB9ID0gY29uZmlnO1xuICAgIGNvbnN0IHBhdGgyID0gYCR7cGF0aH0vJHtwcmVmaXh9JHtmaWxlTmFtZX1gO1xuICAgIC8vIGNvbnNvbGUubG9nKHsgcGF0aDIgfSk7XG5cbiAgICByZXR1cm4gcGF0aDI7XG4gIH1cblxuICBnZXRTM1N0b3JhZ2UoKSB7XG4gICAgcmV0dXJuIG11bHRlclMzKHtcbiAgICAgIHMzOiB0aGlzLnMzLFxuICAgICAgYnVja2V0OiB0aGlzLmNvbmZpZy5zMy5idWNrZXQsXG4gICAgICBjb250ZW50VHlwZTogbXVsdGVyUzMuQVVUT19DT05URU5UX1RZUEUsXG4gICAgICBhY2w6ICdwdWJsaWMtcmVhZCcsXG4gICAgICBrZXkzOiAocmVxLCBmaWxlLCBjYikgPT4ge1xuICAgICAgICBjb25zdCBmaWxlbmFtZSA9IG5vZGVwYXRoLnBhcnNlKGZpbGUub3JpZ2luYWxuYW1lKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coeyByZXEsIGZpbGUgfSk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBhdmF0YXJfJHtyZXEudXNlci5faWR9LiR7ZmlsZW5hbWUuZXh0fWApO1xuICAgICAgICBjYihudWxsLCBgYXZhdGFyXyR7cmVxLnVzZXIuX2lkfS4ke2ZpbGVuYW1lLmV4dH1gKTtcbiAgICAgIH0sXG4gICAgICBrZXk6IGFzeW5jIChyZXEsIGZpbGUsIGNiKSA9PiB7XG4gICAgICAgIGxldCBmaWxlbmFtZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygncmVxLCBmaWxlJywgZmlsZSk7XG4gICAgICAgICAgZmlsZW5hbWUgPSB0aGlzLmdldEZpbGVQYXRoKHJlcSwgZmlsZSk7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ2ZpbGVuYW1lJywgZmlsZW5hbWUpO1xuICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFjZSgvXFwvL2csICdfXycpO1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdmaWxlbmFtZTInLCBmaWxlbmFtZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYihudWxsLCBmaWxlbmFtZSk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0RGlza1N0b3JhZ2UoKSB7XG4gICAgLy8gY29uc3QgY29uZmlnID0gY3R4LmNvbmZpZy51cGxvYWQ7XG4gICAgY29uc3Qgc3RvcmFnZSA9IG11bHRlci5kaXNrU3RvcmFnZSh7XG4gICAgICBkZXN0aW5hdGlvbjogKHJlcSwgZmlsZSwgY2IpID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2Rlc3RpbmF0aW9uJyk7XG4gICAgICAgIGxldCBwYXRoO1xuICAgICAgICBsZXQgZGlybmFtZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwYXRoID0gdGhpcy5nZXRGaWxlUGF0aChyZXEsIGZpbGUpO1xuICAgICAgICAgIGRpcm5hbWUgPSBwYXRoLnNwbGl0KCcvJykuc2xpY2UoMCwgLTEpLmpvaW4oJy8nKTtcbiAgICAgICAgICB0aGlzLmNyZWF0ZURpcihkaXJuYW1lKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNiKG51bGwsIGRpcm5hbWUpO1xuICAgICAgfSxcbiAgICAgIGZpbGVuYW1lOiAocmVxLCBmaWxlLCBjYikgPT4ge1xuICAgICAgICBsZXQgcGF0aDtcbiAgICAgICAgbGV0IGZpbGVuYW1lO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHBhdGggPSB0aGlzLmdldEZpbGVQYXRoKHJlcSwgZmlsZSk7XG4gICAgICAgICAgW2ZpbGVuYW1lXSA9IHBhdGguc3BsaXQoJy8nKS5yZXZlcnNlKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdmaWxlbmFtZScsIGZpbGVuYW1lKTtcbiAgICAgICAgLy8gdGhpcy5jcmVhdGVEaXIoZmlsZW5hbWUpO1xuICAgICAgICByZXR1cm4gY2IobnVsbCwgZmlsZW5hbWUpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gc3RvcmFnZTtcbiAgfVxuXG4gIGdldE11bHRlcigpIHtcbiAgICBjb25zdCB7IGU0MDAgfSA9IGN0eC5lcnJvcnM7XG4gICAgY29uc3QgY29uZmlnID0gY3R4LmNvbmZpZy51cGxvYWQ7XG4gICAgY29uc3QgZmlsZUZpbHRlciA9IChyZXEsIGZpbGUsIGNiKSA9PiB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjb25maWcubWltZXR5cGVzKSkge1xuICAgICAgICBpZiAoY29uZmlnLm1pbWV0eXBlcy5pbmRleE9mKGZpbGUubWltZXR5cGUpID09PSAtMSkge1xuICAgICAgICAgIHJldHVybiBjYihlNDAwKCdZb3UgYXJlIG5vdCBhbGxvd2VkIHRvIHVwbG9hZCBmaWxlcyB3aXRoIHRoaXMgZXh0ZW5zaW9uJykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY2IobnVsbCwgdHJ1ZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxpbWl0cyA9IHt9O1xuICAgIGlmIChjb25maWcubWF4U2l6ZSkge1xuICAgICAgY29uc3QgZmlsZVNpemUgPSBwYXJzZUZsb2F0KGNvbmZpZy5tYXhTaXplKSAqIDEwMjQgKiAxMDI0O1xuICAgICAgbGltaXRzLmZpbGVTaXplID0gZmlsZVNpemU7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKCdnZXRNdWx0ZXInLCB7XG4gICAgLy8gICBzdG9yYWdlOiB0aGlzLnN0b3JhZ2UsXG4gICAgLy8gICBsaW1pdHMsXG4gICAgLy8gICBmaWxlRmlsdGVyLFxuICAgIC8vIH0pO1xuICAgIHJldHVybiBtdWx0ZXIoe1xuICAgICAgc3RvcmFnZTogdGhpcy5zdG9yYWdlLFxuICAgICAgbGltaXRzLFxuICAgICAgZmlsZUZpbHRlcixcbiAgICB9KTtcbiAgfVxuXG4gIGdldEFwaSgpIHtcbiAgICBjb25zdCBjb25maWcgPSBjdHguY29uZmlnLnVwbG9hZDtcbiAgICBmdW5jdGlvbiBwcm9jZXNzRmlsZShmaWxlKSB7XG4gICAgICBpZiAoY29uZmlnLnMzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogZmlsZS5maWVsZG5hbWUsXG4gICAgICAgICAgdXJsOiBmaWxlLmxvY2F0aW9uLFxuICAgICAgICAgIHBhdGg6IGZpbGUubG9jYXRpb24sXG4gICAgICAgICAgcmVsYXRpdmU6IGAvJHtmaWxlLmtleX1gLFxuICAgICAgICAgIG1pbWV0eXBlOiBmaWxlLmNvbnRlbnRUeXBlLFxuICAgICAgICAgIGZpbGVuYW1lOiBmaWxlLm9yaWdpbmFsbmFtZSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZmlsZS5maWVsZG5hbWUsXG4gICAgICAgIHVybDogYCR7Y29uZmlnLnVybH0vJHtmaWxlLnBhdGh9YCxcbiAgICAgICAgcGF0aDogYC8ke2ZpbGUucGF0aH1gLFxuICAgICAgICByZWxhdGl2ZTogYC8ke2ZpbGUucGF0aH1gLFxuICAgICAgICBtaW1ldHlwZTogZmlsZS5taW1ldHlwZSxcbiAgICAgICAgZmlsZW5hbWU6IGZpbGUub3JpZ2luYWxuYW1lLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBhcGkgPSBjdHguYXN5bmNSb3V0ZXIoKTtcbiAgICBhcGkucG9zdCgnL21hbnknLCB0aGlzLm11bHRlci5hbnkoKSwgYXN5bmMgKHJlcSkgPT4ge1xuICAgICAgY29uc3QgeyBmaWxlcyA9IFtdIH0gPSByZXE7XG4gICAgICByZXR1cm4gZmlsZXMubWFwKHByb2Nlc3NGaWxlKTtcbiAgICB9KTtcblxuICAgIC8vIGNvbnN0IHVwbG9hZCA9IG11bHRlcigpO1xuICAgIC8vIGFwaS5wb3N0KCcvJywgdGhpcy5tdWx0ZXIuc2luZ2xlKCdmaWxlJyksIGFzeW5jIChyZXEpID0+IHtcbiAgICBhcGkucG9zdCgnLycsIHRoaXMubXVsdGVyLnNpbmdsZSgnZmlsZScpLCBhc3luYyAocmVxKSA9PiB7XG4gICAgICBjb25zdCB7IGZpbGUgfSA9IHJlcTtcbiAgICAgIGlmICghZmlsZSkge1xuICAgICAgICB0aHJvdyAnIWZpbGUnO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByb2Nlc3NGaWxlKGZpbGUpO1xuICAgIH0pO1xuICAgIHJldHVybiBhcGk7XG4gIH1cblxuICBhc3luYyBydW4oKSB7XG4gICAgY3R4LmFwcC51c2UoJy9hcGkvbW9kdWxlL3VwbG9hZCcsIHRoaXMuZ2V0QXBpKCkpO1xuICB9XG59O1xuIl19 //# sourceMappingURL=server.js.map