Newer
Older
express-blog / src / services / docsService.js
const fs = require("fs/promises");
const path = require("path");
const yaml = require("js-yaml");
const { winstonLogger } = require("../utils/logging");

const docsDir = path.join(__dirname, "../../content/docs");
const docsCache = {}; // { [path]: { modules: {}, crossCuttingSummary: {} } }

async function loadDocFile(filePath) {
  if (docsCache[filePath]) return docsCache[filePath];
  try {
    const fullPath = path.join(docsDir, filePath + ".yaml");
    const fileContent = await fs.readFile(fullPath, "utf-8");
    const parsed = yaml.load(fileContent);
    const crossCuttingSummary = parsed["Cross Cutting Summary"] || null;
    docsCache[filePath] = {
      modules: parsed,
      crossCuttingSummary,
    };
    return docsCache[filePath];
  } catch (e) {
    winstonLogger.error(e.stack);
    return null;
  }
}

function filterModuleSecurityKeys(moduleDoc) {
  if (!moduleDoc || typeof moduleDoc !== "object") return moduleDoc;
  const { securityAndStability, ...moduleWithoutSecurity } = moduleDoc;
  return moduleWithoutSecurity;
}

async function getYamlFileNames() {
  const files = await fs.readdir(docsDir);
  return files.filter((f) => f.endsWith(".yaml")).map((f) => f.slice(0, -5));
}

module.exports = {
  docsDir,
  loadDocFile,
  filterModuleSecurityKeys,
  getYamlFileNames,
};