webserv
Version:
a quick, flexible, fully typed development server
73 lines • 3.17 kB
JavaScript
(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", "path", "../guards/method", "../guards/path", "../middleware/saveFiles", "../middleware/serve", "../middleware/serveFile", "../processors/before/file.processor", "../transforms/directory.transform", "../util/htmlTemplate"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = require("path");
const method_1 = require("../guards/method");
const path_2 = require("../guards/path");
const saveFiles_1 = require("../middleware/saveFiles");
const serve_1 = require("../middleware/serve");
const serveFile_1 = require("../middleware/serveFile");
const file_processor_1 = require("../processors/before/file.processor");
const directory_transform_1 = require("../transforms/directory.transform");
const htmlTemplate_1 = require("../util/htmlTemplate");
function uploadService(props) {
const { route = '*', directory } = props;
return {
route: {
guards: [path_2.pathGuard({ match: route })],
middleware: [
{
before: [file_processor_1.fileProcessor],
guards: [method_1.method.post()],
middleware: saveFiles_1.saveFiles(props),
transforms: [exports.fileUploadTransform]
},
{
guards: [method_1.method.get('list')],
middleware: serve_1.serve({ basePath: directory }),
transforms: [directory_transform_1.directoryTransform]
},
{
guards: [method_1.method.get()],
middleware: serveFile_1.serveFile({ path: path_1.join(__dirname, 'upload', 'upload.html') })
}
]
}
};
}
exports.uploadService = uploadService;
function isFileUploadResult(value) {
return value && typeof value === 'object' && value.files && value.failed;
}
exports.fileUploadTransform = (result, _request, response) => {
if (isFileUploadResult(result)) {
const successful = result.files.map((file) => `<li>${file}</li>`);
const failed = result.failed.map((file) => `<li>${file}</li>`);
const body = `
<div>
<h1>Successfully Uploaded</h1>
<ul>${successful}</ul>
</div>
${failed.length
? `
<div>
<h1>Failed</h1>
<ul>${failed}</ul>
</div>
`
: ''}`;
const html = htmlTemplate_1.htmlTemplate('Upload Complete', body);
response.write(html);
response.end();
}
};
});
//# sourceMappingURL=upload.service.js.map