@ima/cli
Version:
IMA.js CLI tool to build, develop and work with IMA.js applications.
41 lines (40 loc) • 1.42 kB
JavaScript
;
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();
}
};
}