Home Reference Source

cables_dev/cables_electron/src/utils/doc_util.js

import { SharedDocUtil, utilProvider } from "cables-shared-api";
import fs from "fs";
import path from "path";
import jsonfile from "jsonfile";
import opsUtil from "./ops_util.js";
import helper from "./helper_util.js";
import cables from "../cables.js";

class DocUtil extends SharedDocUtil
{
    getDocForOp(opName, docs = null)
    {
        if (!opName) return null;
        if (!this._opsUtil.isOpNameValid(opName)) return null;

        const fromFile = this.getOpDocsFromFile(opName);
        if (fromFile) fromFile.name = opName;
        return fromFile;
    }


    getOpDocsInDir(opDir)
    {
        const opDocs = [];
        if (fs.existsSync(opDir))
        {
            const opJsons = helper.getFilesRecursive(opDir, ".json");
            for (let jsonPath in opJsons)
            {
                const opName = path.basename(jsonPath, ".json");
                if (opsUtil.isOpNameValid(opName))
                {
                    try
                    {
                        const opDoc = jsonfile.readFileSync(path.join(opDir, jsonPath));
                        opDoc.name = opName;
                        opDocs[jsonPath] = opDoc;
                    }
                    catch (e)
                    {
                        this._log.warn("failed to parse opdocs for", opName, "from", jsonPath);
                    }
                }
            }
        }
        return opDocs;
    }

    makeReadable(opDocs)
    {
        const readables = super.makeReadable(opDocs);
        readables.forEach((opDoc) =>
        {
            const relativeDir = opsUtil.getOpSourceDir(opDoc.name, true);
            const absolute = opsUtil.getOpSourceDir(opDoc.name);
            const opDir = absolute.replace(relativeDir, "");
            if (opDir !== cables.getOpsPath())
            {
                opDoc.opDir = opDir;
            }
            opDoc.opDirFull = absolute;
        });
        return readables;
    }
}
export default new DocUtil(utilProvider);