deepify
Version:
DEEP Development Tools
87 lines (66 loc) • 2.19 kB
JavaScript
/**
* Created by AlexanderC on 3/11/16.
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.FileListener = undefined;
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
var _mime = require('mime');
var _mime2 = _interopRequireDefault(_mime);
var _AbstractListener = require('./AbstractListener');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class FileListener extends _AbstractListener.AbstractListener {
/**
* @param {*} args
*/
constructor(...args) {
super(...args);
}
/**
* @param {ResponseEvent} event
*/
handler(event) {
let request = event.request;
let uri = this.getUri(request.url);
let filename = this._resolveMicroservice(uri);
_fs2.default.exists(filename, exists => {
if (!exists) {
if (this.server.fs.public.existsSync(uri)) {
filename = _path2.default.join(this.server.fs.public._rootFolder, uri);
this.server.logger(`{LFS} ${uri} resolved into ${filename}`);
} else {
this.server.logger(`File ${filename} not found`);
event.send404();
return;
}
}
_fs2.default.stat(filename, (error, stats) => {
if (error) {
this.server.logger(`Unable to stat file ${filename}: ${error}`);
event.send500(error);
return;
}
if (stats.isDirectory()) {
this.server.logger(`Resolving ${filename} into ${filename}/index.html`);
filename = _path2.default.join(filename, 'index.html');
}
_fs2.default.readFile(filename, 'binary', (error, file) => {
if (error) {
this.server.logger(`Unable to read file ${filename}: ${error}`);
event.send500(error);
return;
}
let mimeType = _mime2.default.lookup(filename);
this.server.logger(`Serving file ${filename} of type ${mimeType}`);
event.send(file, 200, mimeType, true);
});
});
});
}
}
exports.FileListener = FileListener;