UNPKG

base-repository

Version:

[![Build Status](https://travis-ci.org/joehua87/base-repository.svg?branch=master)](https://travis-ci.org/joehua87/base-repository)

127 lines (88 loc) 2.95 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = upload; var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs); var _coFsExtra = require('co-fs-extra'); var _coFsExtra2 = _interopRequireDefault(_coFsExtra); var _os = require('os'); var _os2 = _interopRequireDefault(_os); var _coBusboy = require('co-busboy'); var _coBusboy2 = _interopRequireDefault(_coBusboy); var _thunkifyWrap = require('thunkify-wrap'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var _marked = [upload].map(regeneratorRuntime.mark); var debug = require('debug')('base-repository:controller:upload'); function upload(next) { var parts, part, promises, folder, file, stream; return regeneratorRuntime.wrap(function upload$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (!(this.method !== 'POST')) { _context.next = 4; break; } _context.next = 3; return next; case 3: return _context.abrupt('return', _context.sent); case 4: // multipart upload parts = (0, _coBusboy2.default)(this); part = undefined; this.files = []; promises = []; folder = _path2.default.join(_os2.default.tmpdir(), Math.random().toString()); _context.next = 11; return _coFsExtra2.default.mkdirp(folder); case 11: this.fields = []; case 12: _context.next = 14; return parts; case 14: if (!(part = _context.sent)) { _context.next = 26; break; } if (part.filename) { _context.next = 18; break; } // If part is not file, it's a field, so store it into this.fields to consume later this.fields[part[0]] = part[1]; return _context.abrupt('continue', 12); case 18: file = _path2.default.join(folder, part.filename); this.files.push(file); debug('Got file', file); stream = _fs2.default.createWriteStream(file); promises.push((0, _thunkifyWrap.event)(stream, 'end')); part.pipe(stream); _context.next = 12; break; case 26: debug('Got field', this.fields); _context.next = 29; return Promise.all(promises); case 29: debug('Upload successfully'); _context.next = 32; return next; case 32: _context.next = 34; return _coFsExtra2.default.remove(folder); case 34: delete this.files; case 35: case 'end': return _context.stop(); } } }, _marked[0], this); }