webserv
Version:
a quick, flexible, fully typed development server
58 lines • 2.25 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "busboy", "../../log", "../../util/BufferedResponse"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const busboy_1 = __importDefault(require("busboy"));
const log_1 = require("../../log");
const BufferedResponse_1 = __importDefault(require("../../util/BufferedResponse"));
function setupBuffer(request) {
const busboy = new busboy_1.default({
headers: request.headers
});
const buffer = new BufferedResponse_1.default();
busboy.on('file', (fieldName, file, filename, encoding, mimeType) => {
log_1.log.info(`Uploaded file: ${filename}, encoding ${encoding}, mimetype: ${mimeType}`);
buffer.add({
fieldName,
file,
filename,
encoding,
mimeType
});
});
busboy.on('finish', function () {
buffer.close();
});
request.pipe(busboy);
return buffer;
}
exports.fileProcessor = (request) => {
let buffer;
if (request.method.toUpperCase() === 'POST') {
Object.defineProperty(request, 'files', {
get() {
if (!buffer) {
buffer = setupBuffer(request);
}
return buffer[Symbol.asyncIterator].bind(buffer);
},
configurable: true
});
}
};
function hasIncomingFiles(request) {
return !!(request && Object.prototype.hasOwnProperty.call(request, 'files'));
}
exports.hasIncomingFiles = hasIncomingFiles;
});
//# sourceMappingURL=file.processor.js.map