Skip to content

Commit a39e555

Browse files
committed
Move query setup to query file
1 parent 6e4641f commit a39e555

File tree

2 files changed

+43
-37
lines changed

2 files changed

+43
-37
lines changed

extensions/ql-vscode/src/data-extensions-editor/data-extensions-editor-module.ts

Lines changed: 5 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { DataExtensionsEditorCommands } from "../common/commands";
44
import { CliVersionConstraint, CodeQLCliServer } from "../codeql-cli/cli";
55
import { QueryRunner } from "../query-server";
66
import { DatabaseManager } from "../databases/local-databases";
7-
import { ensureDir, writeFile } from "fs-extra";
7+
import { ensureDir } from "fs-extra";
88
import { join } from "path";
99
import { App } from "../common/app";
1010
import { withProgress } from "../common/vscode/progress";
@@ -14,13 +14,12 @@ import {
1414
showAndLogExceptionWithTelemetry,
1515
} from "../common/logging";
1616
import { dir } from "tmp-promise";
17-
import { dump as dumpYaml } from "js-yaml";
1817
import { fetchExternalApiQueries } from "./queries";
1918
import { telemetryListener } from "../common/vscode/telemetry";
2019
import { redactableError } from "../common/errors";
2120
import { extLogger } from "../common/logging/vscode";
2221
import { isQueryLanguage } from "../common/query-language";
23-
import { Mode } from "./shared/mode";
22+
import { setUpPack } from "./external-api-usage-query";
2423

2524
const SUPPORTED_LANGUAGES: string[] = ["java", "csharp"];
2625

@@ -110,9 +109,6 @@ export class DataExtensionsEditorModule {
110109
return;
111110
}
112111

113-
// Create new temporary directory for query files and pack dependencies
114-
const queryDir = (await dir({ unsafeCleanup: true })).path;
115-
116112
if (!isQueryLanguage(db.language)) {
117113
void showAndLogExceptionWithTelemetry(
118114
extLogger,
@@ -132,36 +128,9 @@ export class DataExtensionsEditorModule {
132128
return;
133129
}
134130

135-
Object.values(Mode).map(async (mode) => {
136-
const queryFile = join(
137-
queryDir,
138-
`FetchExternalApis${
139-
mode.charAt(0).toUpperCase() + mode.slice(1)
140-
}Mode.ql`,
141-
);
142-
await writeFile(queryFile, query[`${mode}ModeQuery`], "utf8");
143-
});
144-
145-
if (query.dependencies) {
146-
for (const [filename, contents] of Object.entries(
147-
query.dependencies,
148-
)) {
149-
const dependencyFile = join(queryDir, filename);
150-
await writeFile(dependencyFile, contents, "utf8");
151-
}
152-
}
153-
154-
const syntheticQueryPack = {
155-
name: "codeql/external-api-usage",
156-
version: "0.0.0",
157-
dependencies: {
158-
[`codeql/${db.language}-all`]: "*",
159-
},
160-
};
161-
162-
const qlpackFile = join(queryDir, "codeql-pack.yml");
163-
await writeFile(qlpackFile, dumpYaml(syntheticQueryPack), "utf8");
164-
131+
// Create new temporary directory for query files and pack dependencies
132+
const queryDir = (await dir({ unsafeCleanup: true })).path;
133+
await setUpPack(queryDir, query, db.language);
165134
await this.cliServer.packInstall(queryDir);
166135

167136
const view = new DataExtensionsEditorView(

extensions/ql-vscode/src/data-extensions-editor/external-api-usage-query.ts

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ import { QueryResultType } from "../query-server/new-messages";
1010
import { redactableError } from "../common/errors";
1111
import { telemetryListener } from "../common/vscode/telemetry";
1212
import { join } from "path";
13+
import { Mode } from "./shared/mode";
14+
import { writeFile } from "fs-extra";
15+
import { Query } from "./queries/query";
16+
import { QueryLanguage } from "../common/query-language";
17+
import { dump } from "js-yaml";
1318

1419
type RunQueryOptions = {
1520
cliServer: Pick<CodeQLCliServer, "resolveQlpacks">;
@@ -22,8 +27,40 @@ type RunQueryOptions = {
2227
token: CancellationToken;
2328
};
2429

30+
export async function setUpPack(
31+
queryDir: string,
32+
query: Query,
33+
language: QueryLanguage,
34+
) {
35+
Object.values(Mode).map(async (mode) => {
36+
const queryFile = join(
37+
queryDir,
38+
`FetchExternalApis${mode.charAt(0).toUpperCase() + mode.slice(1)}Mode.ql`,
39+
);
40+
await writeFile(queryFile, query[`${mode}ModeQuery`], "utf8");
41+
});
42+
43+
if (query.dependencies) {
44+
for (const [filename, contents] of Object.entries(query.dependencies)) {
45+
const dependencyFile = join(queryDir, filename);
46+
await writeFile(dependencyFile, contents, "utf8");
47+
}
48+
}
49+
50+
const syntheticQueryPack = {
51+
name: "codeql/external-api-usage",
52+
version: "0.0.0",
53+
dependencies: {
54+
[`codeql/${language}-all`]: "*",
55+
},
56+
};
57+
58+
const qlpackFile = join(queryDir, "codeql-pack.yml");
59+
await writeFile(qlpackFile, dump(syntheticQueryPack), "utf8");
60+
}
61+
2562
export async function runQuery(
26-
mode: string,
63+
mode: Mode,
2764
{
2865
cliServer,
2966
queryRunner,

0 commit comments

Comments
 (0)