Skip to content

Commit 3f66d8e

Browse files
committed
Create wrapper runCliJson
1 parent 628fc3f commit 3f66d8e

2 files changed

Lines changed: 51 additions & 113 deletions

File tree

lib/entry-points.js

Lines changed: 23 additions & 60 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 & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -512,21 +512,9 @@ async function getCodeQLForCmd(
512512
return cmd;
513513
},
514514
async getVersion() {
515-
let result = util.getCachedCodeQlVersion(cmd);
516-
if (result === undefined) {
517-
const output = await runCli(cmd, ["version", "--format=json"], {
518-
noStreamStdout: true,
519-
});
520-
try {
521-
result = JSON.parse(output) as VersionInfo;
522-
} catch {
523-
throw Error(
524-
`Invalid JSON output from \`version --format=json\`: ${output}`,
525-
);
526-
}
527-
util.cacheCodeQlVersion(cmd, result);
528-
}
529-
return result;
515+
return runCliJson<VersionInfo>(cmd, ["version", "--format=json"], {
516+
noStreamStdout: true,
517+
});
530518
},
531519
async printVersion() {
532520
// Reuse the cached version information rather than invoking the CLI again.
@@ -731,26 +719,20 @@ async function getCodeQLForCmd(
731719
filterToLanguagesWithQueries: boolean;
732720
} = { filterToLanguagesWithQueries: false },
733721
) {
734-
const codeqlArgs = [
722+
return runCliJson<ResolveLanguagesOutput>(cmd, [
735723
"resolve",
736724
"languages",
737725
"--format=betterjson",
738726
"--extractor-options-verbosity=4",
739727
"--extractor-include-aliases",
728+
// TODO: Unconditionally include `--filter-to-languages-with-queries`
729+
// once CODEQL_MINIMUM_VERSION is at least v2.23.0
730+
// — the first version to support this flag.
740731
...(filterToLanguagesWithQueries
741732
? ["--filter-to-languages-with-queries"]
742733
: []),
743734
...getExtraOptionsFromEnv(["resolve", "languages"]),
744-
];
745-
const output = await runCli(cmd, codeqlArgs);
746-
747-
try {
748-
return JSON.parse(output) as ResolveLanguagesOutput;
749-
} catch (e) {
750-
throw new Error(
751-
`Unexpected output from codeql resolve languages with --format=betterjson: ${e}`,
752-
);
753-
}
735+
]);
754736
},
755737
async resolveBuildEnvironment(
756738
workingDir: string | undefined,
@@ -766,15 +748,7 @@ async function getCodeQLForCmd(
766748
if (workingDir !== undefined) {
767749
codeqlArgs.push("--working-dir", workingDir);
768750
}
769-
const output = await runCli(cmd, codeqlArgs);
770-
771-
try {
772-
return JSON.parse(output) as ResolveBuildEnvironmentOutput;
773-
} catch (e) {
774-
throw new Error(
775-
`Unexpected output from codeql resolve build-environment: ${e} in\n${output}`,
776-
);
777-
}
751+
return await runCliJson<ResolveBuildEnvironmentOutput>(cmd, codeqlArgs);
778752
},
779753
async databaseRunQueries(
780754
databasePath: string,
@@ -976,15 +950,9 @@ async function getCodeQLForCmd(
976950
...getExtraOptionsFromEnv(["resolve", "queries"]),
977951
...queries,
978952
];
979-
const output = await runCli(cmd, codeqlArgs, { noStreamStdout: true });
980-
981-
try {
982-
return JSON.parse(output) as string[];
983-
} catch (e) {
984-
throw new Error(
985-
`Unexpected output from codeql resolve queries --format=startingpacks: ${e}`,
986-
);
987-
}
953+
return await runCliJson<string[]>(cmd, codeqlArgs, {
954+
noStreamStdout: true,
955+
});
988956
},
989957
async resolveDatabase(
990958
databasePath: string,
@@ -996,15 +964,9 @@ async function getCodeQLForCmd(
996964
"--format=json",
997965
...getExtraOptionsFromEnv(["resolve", "database"]),
998966
];
999-
const output = await runCli(cmd, codeqlArgs, { noStreamStdout: true });
1000-
1001-
try {
1002-
return JSON.parse(output) as ResolveDatabaseOutput;
1003-
} catch (e) {
1004-
throw new Error(
1005-
`Unexpected output from codeql resolve database --format=json: ${e}`,
1006-
);
1007-
}
967+
return await runCliJson<ResolveDatabaseOutput>(cmd, codeqlArgs, {
968+
noStreamStdout: true,
969+
});
1008970
},
1009971
async mergeResults(
1010972
sarifFiles: string[],
@@ -1160,6 +1122,19 @@ async function runCli(
11601122
}
11611123
}
11621124

1125+
async function runCliJson<T>(
1126+
cmd: string,
1127+
args: string[] = [],
1128+
opts: { stdin?: string; noStreamStdout?: boolean } = {},
1129+
): Promise<T> {
1130+
const output = await runCli(cmd, args, opts);
1131+
try {
1132+
return JSON.parse(output) as T;
1133+
} catch {
1134+
throw Error(`Invalid JSON output from \`${args.join(" ")}\`: ${output}`);
1135+
}
1136+
}
1137+
11631138
/**
11641139
* Writes the code scanning configuration that is to be used by the CLI.
11651140
*

0 commit comments

Comments
 (0)