Move loadModeledMethods to a separate file
This commit is contained in:
@@ -20,8 +20,6 @@ import {
|
|||||||
showAndLogExceptionWithTelemetry,
|
showAndLogExceptionWithTelemetry,
|
||||||
showAndLogErrorMessage,
|
showAndLogErrorMessage,
|
||||||
} from "../common/logging";
|
} from "../common/logging";
|
||||||
import { readFile } from "fs-extra";
|
|
||||||
import { load as loadYaml } from "js-yaml";
|
|
||||||
import { DatabaseItem, DatabaseManager } from "../databases/local-databases";
|
import { DatabaseItem, DatabaseManager } from "../databases/local-databases";
|
||||||
import { CodeQLCliServer } from "../codeql-cli/cli";
|
import { CodeQLCliServer } from "../codeql-cli/cli";
|
||||||
import { asError, assertNever, getErrorMessage } from "../common/helpers-pure";
|
import { asError, assertNever, getErrorMessage } from "../common/helpers-pure";
|
||||||
@@ -33,7 +31,6 @@ import { showResolvableLocation } from "../databases/local-databases/locations";
|
|||||||
import { decodeBqrsToExternalApiUsages } from "./bqrs";
|
import { decodeBqrsToExternalApiUsages } from "./bqrs";
|
||||||
import { redactableError } from "../common/errors";
|
import { redactableError } from "../common/errors";
|
||||||
import { readQueryResults, runQuery } from "./external-api-usage-query";
|
import { readQueryResults, runQuery } from "./external-api-usage-query";
|
||||||
import { loadDataExtensionYaml } from "./yaml";
|
|
||||||
import { ExternalApiUsage } from "./external-api-usage";
|
import { ExternalApiUsage } from "./external-api-usage";
|
||||||
import { ModeledMethod } from "./modeled-method";
|
import { ModeledMethod } from "./modeled-method";
|
||||||
import { ExtensionPack } from "./shared/extension-pack";
|
import { ExtensionPack } from "./shared/extension-pack";
|
||||||
@@ -44,9 +41,8 @@ import {
|
|||||||
} from "./auto-model";
|
} from "./auto-model";
|
||||||
import { enableFrameworkMode, showLlmGeneration } from "../config";
|
import { enableFrameworkMode, showLlmGeneration } from "../config";
|
||||||
import { getAutoModelUsages } from "./auto-model-usages-query";
|
import { getAutoModelUsages } from "./auto-model-usages-query";
|
||||||
import { getOnDiskWorkspaceFolders } from "../common/vscode/workspace-folders";
|
|
||||||
import { Mode } from "./shared/mode";
|
import { Mode } from "./shared/mode";
|
||||||
import { saveModeledMethods } from "./modeled-method-fs";
|
import { loadModeledMethods, saveModeledMethods } from "./modeled-method-fs";
|
||||||
|
|
||||||
export class DataExtensionsEditorView extends AbstractWebview<
|
export class DataExtensionsEditorView extends AbstractWebview<
|
||||||
ToDataExtensionsEditorMessage,
|
ToDataExtensionsEditorMessage,
|
||||||
@@ -189,45 +185,14 @@ export class DataExtensionsEditorView extends AbstractWebview<
|
|||||||
|
|
||||||
protected async loadExistingModeledMethods(): Promise<void> {
|
protected async loadExistingModeledMethods(): Promise<void> {
|
||||||
try {
|
try {
|
||||||
const extensions = await this.cliServer.resolveExtensions(
|
const modeledMethods = await loadModeledMethods(
|
||||||
this.extensionPack.path,
|
this.extensionPack,
|
||||||
getOnDiskWorkspaceFolders(),
|
this.cliServer,
|
||||||
|
this.app.logger,
|
||||||
);
|
);
|
||||||
|
|
||||||
const modelFiles = new Set<string>();
|
|
||||||
|
|
||||||
if (this.extensionPack.path in extensions.data) {
|
|
||||||
for (const extension of extensions.data[this.extensionPack.path]) {
|
|
||||||
modelFiles.add(extension.file);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const existingModeledMethods: Record<string, ModeledMethod> = {};
|
|
||||||
|
|
||||||
for (const modelFile of modelFiles) {
|
|
||||||
const yaml = await readFile(modelFile, "utf8");
|
|
||||||
|
|
||||||
const data = loadYaml(yaml, {
|
|
||||||
filename: modelFile,
|
|
||||||
});
|
|
||||||
|
|
||||||
const modeledMethods = loadDataExtensionYaml(data);
|
|
||||||
if (!modeledMethods) {
|
|
||||||
void showAndLogErrorMessage(
|
|
||||||
this.app.logger,
|
|
||||||
`Failed to parse data extension YAML ${modelFile}.`,
|
|
||||||
);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const [key, value] of Object.entries(modeledMethods)) {
|
|
||||||
existingModeledMethods[key] = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
await this.postMessage({
|
await this.postMessage({
|
||||||
t: "loadModeledMethods",
|
t: "loadModeledMethods",
|
||||||
modeledMethods: existingModeledMethods,
|
modeledMethods,
|
||||||
});
|
});
|
||||||
} catch (e: unknown) {
|
} catch (e: unknown) {
|
||||||
void showAndLogErrorMessage(
|
void showAndLogErrorMessage(
|
||||||
|
|||||||
@@ -1,11 +1,18 @@
|
|||||||
import { outputFile } from "fs-extra";
|
import { outputFile, readFile } from "fs-extra";
|
||||||
import { ExternalApiUsage } from "./external-api-usage";
|
import { ExternalApiUsage } from "./external-api-usage";
|
||||||
import { ModeledMethod } from "./modeled-method";
|
import { ModeledMethod } from "./modeled-method";
|
||||||
import { Mode } from "./shared/mode";
|
import { Mode } from "./shared/mode";
|
||||||
import { createDataExtensionYamls } from "./yaml";
|
import { createDataExtensionYamls, loadDataExtensionYaml } from "./yaml";
|
||||||
import { join } from "path";
|
import { join } from "path";
|
||||||
import { ExtensionPack } from "./shared/extension-pack";
|
import { ExtensionPack } from "./shared/extension-pack";
|
||||||
import { Logger } from "../common/logging";
|
import {
|
||||||
|
Logger,
|
||||||
|
NotificationLogger,
|
||||||
|
showAndLogErrorMessage,
|
||||||
|
} from "../common/logging";
|
||||||
|
import { getOnDiskWorkspaceFolders } from "../common/vscode/workspace-folders";
|
||||||
|
import { load as loadYaml } from "js-yaml";
|
||||||
|
import { CodeQLCliServer } from "../codeql-cli/cli";
|
||||||
|
|
||||||
export async function saveModeledMethods(
|
export async function saveModeledMethods(
|
||||||
extensionPack: ExtensionPack,
|
extensionPack: ExtensionPack,
|
||||||
@@ -30,3 +37,47 @@ export async function saveModeledMethods(
|
|||||||
|
|
||||||
void logger.log(`Saved data extension YAML`);
|
void logger.log(`Saved data extension YAML`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function loadModeledMethods(
|
||||||
|
extensionPack: ExtensionPack,
|
||||||
|
cliServer: CodeQLCliServer,
|
||||||
|
logger: NotificationLogger,
|
||||||
|
): Promise<Record<string, ModeledMethod>> {
|
||||||
|
const extensions = await cliServer.resolveExtensions(
|
||||||
|
extensionPack.path,
|
||||||
|
getOnDiskWorkspaceFolders(),
|
||||||
|
);
|
||||||
|
|
||||||
|
const modelFiles = new Set<string>();
|
||||||
|
|
||||||
|
if (extensionPack.path in extensions.data) {
|
||||||
|
for (const extension of extensions.data[extensionPack.path]) {
|
||||||
|
modelFiles.add(extension.file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const existingModeledMethods: Record<string, ModeledMethod> = {};
|
||||||
|
|
||||||
|
for (const modelFile of modelFiles) {
|
||||||
|
const yaml = await readFile(modelFile, "utf8");
|
||||||
|
|
||||||
|
const data = loadYaml(yaml, {
|
||||||
|
filename: modelFile,
|
||||||
|
});
|
||||||
|
|
||||||
|
const modeledMethods = loadDataExtensionYaml(data);
|
||||||
|
if (!modeledMethods) {
|
||||||
|
void showAndLogErrorMessage(
|
||||||
|
logger,
|
||||||
|
`Failed to parse data extension YAML ${modelFile}.`,
|
||||||
|
);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const [key, value] of Object.entries(modeledMethods)) {
|
||||||
|
existingModeledMethods[key] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return existingModeledMethods;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user