CoolFace
Datasetpublic

basant307/AI_Governance_Project

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes48downloads
index.js176 linesDownload Raw Back to module
1import { getFormatterList as textlintGetFormatterList, loadFormatter as textlintCreateFormatter, } from "@textlint/linter-formatter";2import terminalLink from "terminal-link";3import fs from "node:fs";4import path from "node:path";5import debug0 from "debug";6import { dynamicImport, tryResolve } from "@secretlint/resolver";7import jsonFormatter from "./formatters/json.js";8import maskResultFormatter from "./formatters/mask-result.js";9import tableFormatter from "./formatters/table.js";10const BuiltInFormatters = ["json", "mask-result", "table"];11const debug = debug0("@secretlint/formatter");12const tryResolveModule = (moduleName) => {13    return tryResolve(moduleName, {14        parentImportMeta: import.meta,15        parentModule: "formatter",16    });17};18/**19 * Convert secretlint result to textlint result for formatter20 */21const convertSecretLintResultToTextlintResult = (secretLintCoreResult, { enableTerminalLink }) => {22    return {23        filePath: secretLintCoreResult.filePath,24        messages: secretLintCoreResult.messages.map((message) => {25            const severityLevel = message.severity === "info"26                ? 027                : message.severity === "warning"28                    ? 129                    : message.severity === "error"30                        ? 231                        : 0;32            // If the message has docsUrl, try to link to docsUrl33            const messageId = enableTerminalLink && message.docsUrl34                ? terminalLink(message.messageId, message.docsUrl, {35                    fallback: (text, _url) => {36                        return text;37                    },38                })39                : message.messageId;40            return {41                // Preset rule format42                // {preset-id} > {rule-id}43                // Single rule format44                // {rule-id}45                ruleId: message.ruleParentId ? `${message.ruleParentId} > ${message.ruleId}` : message.ruleId,46                /**47                 * @deprecated backward compatibility - use range or loc48                 */49                index: message.range[0],50                /**51                 * @deprecated backward compatibility - use range or loc52                 */53                line: message.loc.start.line,54                /**55                 * @deprecated backward compatibility - use range or loc56                 */57                column: message.loc.start.column,58                range: message.range,59                loc: message.loc,60                severity: severityLevel,61                message: `[${messageId}] ${message.message}`,62                data: message.data,63                // NO NEED - DUMMY DATA64                fix: undefined,65                type: "lint",66            };67        }),68    };69};70export async function loadFormatter(formatterConfig) {71    const formatterName = formatterConfig.formatterName;72    const isHumanReadableFormat = ["stylish", "pretty-error"].includes(formatterName);73    /**74     * Terminal Link is enabled when use human-readable format and option is enabled75     */76    const enableTerminalLink = isHumanReadableFormat ?? formatterConfig.terminalLink ?? false;77    debug(`formatterName: ${formatterName}`);78    try {79        const formatter = await secretlintCreateFormatter(formatterConfig);80        return {81            format: (results) => {82                return formatter.format(results);83            },84        };85    }86    catch {87        const formatter = await textlintCreateFormatter(formatterConfig);88        return {89            format: (results) => {90                return formatter.format(results.map((result) => convertSecretLintResultToTextlintResult(result, {91                    enableTerminalLink,92                })));93            },94        };95    }96}97export async function secretlintCreateFormatter(formatterConfig) {98    const formatterName = formatterConfig.formatterName;99    debug(`formatterName: ${formatterName}`);100    if (BuiltInFormatters.includes(formatterName)) {101        switch (formatterName) {102            case "json":103                return {104                    format: function secretlintFormatterFormat(results) {105                        return jsonFormatter(results, formatterConfig);106                    },107                };108            case "mask-result":109                return {110                    format: function secretlintFormatterFormat(results) {111                        return maskResultFormatter(results, formatterConfig);112                    },113                };114            case "table":115                return {116                    format: function secretlintFormatterFormat(results) {117                        return tableFormatter(results, formatterConfig);118                    },119                };120        }121    }122    let formatter;123    let formatterPath;124    if (fs.existsSync(formatterName)) {125        formatterPath = formatterName;126    }127    else if (fs.existsSync(path.resolve(process.cwd(), formatterName))) {128        formatterPath = path.resolve(process.cwd(), formatterName);129    }130    else {131        const pkgPath = tryResolveModule(formatterName) || tryResolveModule(`secretlint-formatter-${formatterName}`);132        if (pkgPath) {133            formatterPath = pkgPath;134        }135    }136    if (!formatterPath) {137        throw new Error(`Could not find formatter ${formatterName}`);138    }139    try {140        // dynamic import require file url141        formatter = (await dynamicImport(formatterPath, {142            parentImportMeta: import.meta,143            parentModule: "formatter",144        })).exports.default;145    }146    catch (ex) {147        throw new Error(`Could not find formatter ${formatterName}148${ex}`);149    }150    return {151        format: function secretlintFormatterFormat(results) {152            return formatter(results, formatterConfig);153        },154    };155}156export function getFormatterList() {157    const textlintFormatters = textlintGetFormatterList();158    const secretlintFormatters = secretlintGetFormatterList();159    const secretlintFormatterNames = secretlintFormatters.map((formatter) => formatter.name);160    const externalFormatters = textlintFormatters.filter((formatter) => !secretlintFormatterNames.includes(formatter.name));161    return [...externalFormatters, ...secretlintFormatters];162}163export function secretlintGetFormatterList() {164    return [165        {166            name: "json",167        },168        {169            name: "mask-result",170        },171        {172            name: "table",173        },174    ];175}176//# sourceMappingURL=index.js.map
basant307/AI_Governance_Project · CoolFace