UNPKG

@ima/cli

Version:

IMA.js CLI tool to build, develop and work with IMA.js applications.

41 lines (40 loc) 1.42 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.internalSourceMiddleware = internalSourceMiddleware; const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); /** * Returns project source files requested by url query param fileName. * Don't use in production! */ function internalSourceMiddleware(rootDir) { return async (req, res) => { let fileName = req.query.fileName?.toString(); // Handle files with absolute/relative urls if (!fileName) { return res.status(500).end(); } // Resolve absolute fileName = path_1.default.resolve(fileName); // Don't allow access outside of project dir if (!fileName.startsWith(rootDir)) { return res.status(500).end(); } if (!fs_1.default.existsSync(fileName)) { return res.status(404).end(); } try { const fileSource = await fs_1.default.promises.readFile(fileName, 'utf8'); return res.json({ source: fileSource, rootDir, // Used to print relative urls in error-overlay }); } catch (error) { return res.status(500).end(); } }; }