@jeaks03/overseer
Version:
Just another TypeScript Back-End framework
63 lines • 6.44 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const logger_1 = __importDefault(require("@jeaks03/logger"));
const util_1 = require("util");
class Resources {
constructor(basePath, mimeFinder) {
this.basePath = basePath;
this.mimeFinder = mimeFinder;
this.resourceDirectory = path_1.default.join(basePath, Resources.BASE_RELATIVE_RESOURCES_DIRECTORY);
this.publicDirectory = path_1.default.join(this.resourceDirectory, Resources.RESOURCES_RELATIVE_PUBLIC_DIRECTORY);
if (!fs_1.default.existsSync(this.resourceDirectory)) {
throw new Error('Resources directory not found. It should be ' + this.resourceDirectory);
}
if (!fs_1.default.existsSync(this.publicDirectory)) {
throw new Error('Public resources directory not found. It should be ' + this.resourceDirectory);
}
logger_1.default.info(this, 'Resources directory set in {}', this.resourceDirectory);
}
fileExists(relativePath) {
const p = path_1.default.join(this.resourceDirectory, relativePath);
if (!fs_1.default.existsSync(p)) {
return false;
}
return fs_1.default.lstatSync(p).isFile();
}
fileOrIndexExists(relativePath) {
const p = path_1.default.join(this.resourceDirectory, relativePath);
if (!this.fileExists(relativePath)) {
return false;
}
if (!fs_1.default.existsSync(path_1.default.join(p, 'index.html'))) {
return false;
}
return fs_1.default.lstatSync(path_1.default.join(p, 'index.html')).isFile();
}
async readFile(relativePath) {
if (!this.fileExists(relativePath)) {
throw new Error(`File ${relativePath} does not exist`);
}
return await util_1.promisify(fs_1.default.readFile)(path_1.default.join(Resources.BASE_RELATIVE_RESOURCES_DIRECTORY, relativePath));
}
handleRequest(baseUrl, res) {
const url = fs_1.default.lstatSync(path_1.default.join(this.resourceDirectory, baseUrl)).isFile() ? baseUrl : path_1.default.join(baseUrl, 'index.html');
const data = url.split(".");
const extension = "." + data[data.length - 1];
const stat = fs_1.default.statSync(path_1.default.join(this.resourceDirectory, url));
res.writeHead(200, {
'Content-Type': this.mimeFinder.getMimeType(extension),
'Content-Length': stat.size
});
const readStream = fs_1.default.createReadStream(path_1.default.join(this.resourceDirectory, url));
readStream.pipe(res);
}
}
Resources.BASE_RELATIVE_RESOURCES_DIRECTORY = '../resources';
Resources.RESOURCES_RELATIVE_PUBLIC_DIRECTORY = './public';
exports.Resources = Resources;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvcmVzb3VyY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNENBQW9CO0FBRXBCLGdEQUF3QjtBQUN4Qiw2REFBcUM7QUFDckMsK0JBQWlDO0FBR2pDLE1BQWEsU0FBUztJQU9wQixZQUE2QixRQUFnQixFQUFVLFVBQXNCO1FBQWhELGFBQVEsR0FBUixRQUFRLENBQVE7UUFBVSxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQzNFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUMxRixJQUFJLENBQUMsZUFBZSxHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBRXhHLElBQUcsQ0FBQyxZQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7U0FDMUY7UUFFRCxJQUFHLENBQUMsWUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUNqRztRQUVELGdCQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSwrQkFBK0IsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRU0sVUFBVSxDQUFDLFlBQW9CO1FBQ3BDLE1BQU0sQ0FBQyxHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFlBQVksQ0FBQyxDQUFDO1FB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