@@ -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