UNPKG

@jeaks03/overseer

Version:

Just another TypeScript Back-End framework

63 lines 6.44 kB
"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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