UNPKG

@tdb/web

Version:

Common condiguration for serving a web-site and testing web-based UI components.

122 lines 5.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var common_1 = require("../common"); var Manifest_1 = require("./Manifest"); var util = require("./util"); function init(args) { var _this = this; var rootDir = args.rootDir, _a = args.manifestPath, manifestPath = _a === void 0 ? '/manifest' : _a, _b = args.resourcePath, resourcePath = _b === void 0 ? '/resource' : _b; var router = common_1.express.router(); router.get(manifestPath, function (req, res) { return tslib_1.__awaiter(_this, void 0, void 0, function () { var timer, query, path, loadExtensions, loadFlag, done, error, manifest, _a, _b, _c; return tslib_1.__generator(this, function (_d) { switch (_d.label) { case 0: timer = common_1.time.timer(); query = req.query; path = query.path; loadExtensions = []; loadFlag = function () { var flag = []; for (var _i = 0; _i < arguments.length; _i++) { flag[_i] = arguments[_i]; } if (common_1.queryString.isFlag(flag, query)) { loadExtensions = loadExtensions.concat(flag); } }; loadFlag('markdown', 'md'); loadFlag('json'); loadFlag('yaml', 'yml'); done = function (status, args) { var payload = common_1.value.deleteUndefined({ status: status, elapsed: timer.elapsed(), error: args.error ? { message: args.error } : undefined, manifest: args.manifest, }); res.status(status).send(payload); }; if (!path) { error = "A '?path=<...>' was not passed in the URL's querystring."; return [2, done(400, { error: error })]; } manifest = new Manifest_1.Manifest({ rootDir: rootDir, path: path, urlPrefix: resourcePath, }); _a = done; _b = [200]; _c = {}; return [4, manifest.toObject({ loadExtensions: loadExtensions })]; case 1: return [2, _a.apply(void 0, _b.concat([(_c.manifest = _d.sent(), _c)]))]; } }); }); }); var RESOURCE_ROUTE = common_1.fsPath.join(resourcePath.replace(/\/\*$/, ''), '*'); router.get(RESOURCE_ROUTE, function (req, res) { return tslib_1.__awaiter(_this, void 0, void 0, function () { var path, file, exists, _a, query, data, ext, res_1, res_2, err_1, status_1, message; return tslib_1.__generator(this, function (_b) { switch (_b.label) { case 0: _b.trys.push([0, 8, , 9]); path = (req.params['0'] || ''); file = common_1.fsPath.join(rootDir, path); if (!file) return [3, 2]; return [4, common_1.fs.pathExists(file)]; case 1: _a = _b.sent(); return [3, 3]; case 2: _a = false; _b.label = 3; case 3: exists = _a; query = req.query; data = void 0; ext = common_1.fsPath.extname(path).toLowerCase(); if (!['.yml', '.yaml'].includes(ext)) return [3, 5]; return [4, util.parseYamlFile(file)]; case 4: res_1 = _b.sent(); if (res_1.error) { throw new Error(res_1.error.message); } data = res_1.data; _b.label = 5; case 5: if (!(['.md', '.markdown'].includes(ext) && common_1.queryString.isFlag('parse', query))) return [3, 7]; return [4, util.parseMarkdownFile(file)]; case 6: res_2 = _b.sent(); if (res_2.error) { throw new Error(res_2.error.message); } data = res_2.data; _b.label = 7; case 7: return [2, file && exists ? data ? res.send(data) : res.sendFile(file) : res.status(404).send({ status: 404, error: { message: 'Resource not found.', path: path }, })]; case 8: err_1 = _b.sent(); status_1 = 500; message = "Failed to retrieve resource. " + err_1.message; res.status(status_1).send({ status: status_1, error: { message: message } }); return [3, 9]; case 9: return [2]; } }); }); }); return router; } exports.init = init; //# sourceMappingURL=router.js.map