Skip to content

Commit cf039b6

Browse files
committed
Refactor CLI JSON handling into a dedicated runCliJson function
1 parent 77d19d0 commit cf039b6

2 files changed

Lines changed: 51 additions & 110 deletions

File tree

lib/entry-points.js

Lines changed: 23 additions & 53 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/codeql.ts

Lines changed: 28 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -524,16 +524,11 @@ async function getCodeQLForCmd(
524524
},
525525
async getVersion() {
526526
async function runCliVersion() {
527-
const output = await runCli(cmd, ["version", "--format=json"], {
528-
noStreamStdout: true,
529-
});
530-
try {
531-
return JSON.parse(output) as VersionInfo;
532-
} catch {
533-
throw Error(
534-
`Invalid JSON output from \`version --format=json\`: ${output}`,
535-
);
536-
}
527+
return await runCliJson<VersionInfo>(
528+
cmd,
529+
["version", "--format=json"],
530+
{ noStreamStdout: true },
531+
);
537532
}
538533

539534
let result = util.getCachedCodeQlVersion(cmd);
@@ -741,21 +736,12 @@ async function getCodeQLForCmd(
741736
},
742737
async resolveLanguages() {
743738
async function runCliResolveLanguages() {
744-
const codeqlArgs = [
739+
return await runCliJson<ResolveLanguagesOutput>(cmd, [
745740
"resolve",
746741
"languages",
747742
"--format=json",
748743
...getExtraOptionsFromEnv(["resolve", "languages"]),
749-
];
750-
const output = await runCli(cmd, codeqlArgs);
751-
752-
try {
753-
return JSON.parse(output) as ResolveLanguagesOutput;
754-
} catch (e) {
755-
throw new Error(
756-
`Unexpected output from codeql resolve languages: ${e}`,
757-
);
758-
}
744+
]);
759745
}
760746

761747
let result = util.getCachedCodeQlResolveLanguages(cmd);
@@ -783,15 +769,7 @@ async function getCodeQLForCmd(
783769
: []),
784770
...getExtraOptionsFromEnv(["resolve", "languages"]),
785771
];
786-
const output = await runCli(cmd, codeqlArgs);
787-
788-
try {
789-
return JSON.parse(output) as BetterResolveLanguagesOutput;
790-
} catch (e) {
791-
throw new Error(
792-
`Unexpected output from codeql resolve languages with --format=betterjson: ${e}`,
793-
);
794-
}
772+
return await runCliJson<BetterResolveLanguagesOutput>(cmd, codeqlArgs);
795773
},
796774
async resolveBuildEnvironment(
797775
workingDir: string | undefined,
@@ -807,15 +785,7 @@ async function getCodeQLForCmd(
807785
if (workingDir !== undefined) {
808786
codeqlArgs.push("--working-dir", workingDir);
809787
}
810-
const output = await runCli(cmd, codeqlArgs);
811-
812-
try {
813-
return JSON.parse(output) as ResolveBuildEnvironmentOutput;
814-
} catch (e) {
815-
throw new Error(
816-
`Unexpected output from codeql resolve build-environment: ${e} in\n${output}`,
817-
);
818-
}
788+
return await runCliJson<ResolveBuildEnvironmentOutput>(cmd, codeqlArgs);
819789
},
820790
async databaseRunQueries(
821791
databasePath: string,
@@ -996,15 +966,9 @@ async function getCodeQLForCmd(
996966
...getExtraOptionsFromEnv(["resolve", "queries"]),
997967
...queries,
998968
];
999-
const output = await runCli(cmd, codeqlArgs, { noStreamStdout: true });
1000-
1001-
try {
1002-
return JSON.parse(output) as string[];
1003-
} catch (e) {
1004-
throw new Error(
1005-
`Unexpected output from codeql resolve queries --format=startingpacks: ${e}`,
1006-
);
1007-
}
969+
return await runCliJson<string[]>(cmd, codeqlArgs, {
970+
noStreamStdout: true,
971+
});
1008972
},
1009973
async resolveDatabase(
1010974
databasePath: string,
@@ -1016,15 +980,9 @@ async function getCodeQLForCmd(
1016980
"--format=json",
1017981
...getExtraOptionsFromEnv(["resolve", "database"]),
1018982
];
1019-
const output = await runCli(cmd, codeqlArgs, { noStreamStdout: true });
1020-
1021-
try {
1022-
return JSON.parse(output) as ResolveDatabaseOutput;
1023-
} catch (e) {
1024-
throw new Error(
1025-
`Unexpected output from codeql resolve database --format=json: ${e}`,
1026-
);
1027-
}
983+
return await runCliJson<ResolveDatabaseOutput>(cmd, codeqlArgs, {
984+
noStreamStdout: true,
985+
});
1028986
},
1029987
async mergeResults(
1030988
sarifFiles: string[],
@@ -1180,6 +1138,19 @@ async function runCli(
11801138
}
11811139
}
11821140

1141+
async function runCliJson<T>(
1142+
cmd: string,
1143+
args: string[] = [],
1144+
opts: { stdin?: string; noStreamStdout?: boolean } = {},
1145+
): Promise<T> {
1146+
const output = await runCli(cmd, args, opts);
1147+
try {
1148+
return JSON.parse(output) as T;
1149+
} catch {
1150+
throw Error(`Invalid JSON output from \`${args.join(" ")}\`: ${output}`);
1151+
}
1152+
}
1153+
11831154
/**
11841155
* Writes the code scanning configuration that is to be used by the CLI.
11851156
*

0 commit comments

Comments
 (0)