diff --git a/extensions/ql-vscode/src/variant-analysis/store/repo-task-data-types.ts b/extensions/ql-vscode/src/variant-analysis/store/repo-task-data-types.ts new file mode 100644 index 000000000..22dbef63b --- /dev/null +++ b/extensions/ql-vscode/src/variant-analysis/store/repo-task-data-types.ts @@ -0,0 +1,25 @@ +export interface VariantAnalysisRepositoryTaskData { + repository: RepositoryData; + analysisStatus: VariantAnalysisRepoStatusData; + resultCount?: number; + artifactSizeInBytes?: number; + failureMessage?: string; + databaseCommitSha?: string; + sourceLocationPrefix?: string; + artifactUrl?: string; +} + +interface RepositoryData { + id: number; + fullName: string; + private: boolean; +} + +export enum VariantAnalysisRepoStatusData { + Pending = "pending", + InProgress = "inProgress", + Succeeded = "succeeded", + Failed = "failed", + Canceled = "canceled", + TimedOut = "timedOut", +} diff --git a/extensions/ql-vscode/src/variant-analysis/store/repo-task-store.ts b/extensions/ql-vscode/src/variant-analysis/store/repo-task-store.ts index 8baab2cb8..9121164ca 100644 --- a/extensions/ql-vscode/src/variant-analysis/store/repo-task-store.ts +++ b/extensions/ql-vscode/src/variant-analysis/store/repo-task-store.ts @@ -1,18 +1,27 @@ import { outputJson, readJson } from "fs-extra"; import { join } from "path"; import { VariantAnalysisRepositoryTask } from "../shared/variant-analysis"; +import { mapRepoTaskToData } from "./repo-task-to-data-mapper"; +import { mapRepoTaskToDomain } from "./repo-task-to-domain-mapper"; export const REPO_TASK_FILENAME = "repo_task.json"; -export function writeRepoTask( +export async function writeRepoTask( storageDirectory: string, repoTask: VariantAnalysisRepositoryTask, ): Promise { - return outputJson(join(storageDirectory, REPO_TASK_FILENAME), repoTask); + const repoTaskData = mapRepoTaskToData(repoTask); + return await outputJson( + join(storageDirectory, REPO_TASK_FILENAME), + repoTaskData, + ); } -export function readRepoTask( +export async function readRepoTask( storageDirectory: string, ): Promise { - return readJson(join(storageDirectory, REPO_TASK_FILENAME)); + const repoTaskData = await readJson( + join(storageDirectory, REPO_TASK_FILENAME), + ); + return mapRepoTaskToDomain(repoTaskData); } diff --git a/extensions/ql-vscode/src/variant-analysis/store/repo-task-to-data-mapper.ts b/extensions/ql-vscode/src/variant-analysis/store/repo-task-to-data-mapper.ts new file mode 100644 index 000000000..1fc3a1a7b --- /dev/null +++ b/extensions/ql-vscode/src/variant-analysis/store/repo-task-to-data-mapper.ts @@ -0,0 +1,49 @@ +import { assertNever } from "../../pure/helpers-pure"; +import { + VariantAnalysisRepositoryTask, + VariantAnalysisRepoStatus, +} from "../shared/variant-analysis"; +import { + VariantAnalysisRepositoryTaskData, + VariantAnalysisRepoStatusData, +} from "./repo-task-data-types"; + +export function mapRepoTaskToData( + repoTask: VariantAnalysisRepositoryTask, +): VariantAnalysisRepositoryTaskData { + return { + repository: { + id: repoTask.repository.id, + fullName: repoTask.repository.fullName, + private: repoTask.repository.private, + }, + analysisStatus: mapRepoTaskAnalysisStatusToData(repoTask.analysisStatus), + resultCount: repoTask.resultCount, + artifactSizeInBytes: repoTask.artifactSizeInBytes, + failureMessage: repoTask.failureMessage, + databaseCommitSha: repoTask.databaseCommitSha, + sourceLocationPrefix: repoTask.sourceLocationPrefix, + artifactUrl: repoTask.artifactUrl, + }; +} + +function mapRepoTaskAnalysisStatusToData( + analysisStatus: VariantAnalysisRepoStatus, +): VariantAnalysisRepoStatusData { + switch (analysisStatus) { + case VariantAnalysisRepoStatus.Pending: + return VariantAnalysisRepoStatusData.Pending; + case VariantAnalysisRepoStatus.InProgress: + return VariantAnalysisRepoStatusData.InProgress; + case VariantAnalysisRepoStatus.Succeeded: + return VariantAnalysisRepoStatusData.Succeeded; + case VariantAnalysisRepoStatus.Failed: + return VariantAnalysisRepoStatusData.Failed; + case VariantAnalysisRepoStatus.Canceled: + return VariantAnalysisRepoStatusData.Canceled; + case VariantAnalysisRepoStatus.TimedOut: + return VariantAnalysisRepoStatusData.TimedOut; + default: + assertNever(analysisStatus); + } +} diff --git a/extensions/ql-vscode/src/variant-analysis/store/repo-task-to-domain-mapper.ts b/extensions/ql-vscode/src/variant-analysis/store/repo-task-to-domain-mapper.ts new file mode 100644 index 000000000..341eaba8a --- /dev/null +++ b/extensions/ql-vscode/src/variant-analysis/store/repo-task-to-domain-mapper.ts @@ -0,0 +1,49 @@ +import { assertNever } from "../../pure/helpers-pure"; +import { + VariantAnalysisRepositoryTask, + VariantAnalysisRepoStatus, +} from "../shared/variant-analysis"; +import { + VariantAnalysisRepositoryTaskData, + VariantAnalysisRepoStatusData, +} from "./repo-task-data-types"; + +export function mapRepoTaskToDomain( + repoTask: VariantAnalysisRepositoryTaskData, +): VariantAnalysisRepositoryTask { + return { + repository: { + id: repoTask.repository.id, + fullName: repoTask.repository.fullName, + private: repoTask.repository.private, + }, + analysisStatus: mapRepoTaskAnalysisStatusToDomain(repoTask.analysisStatus), + resultCount: repoTask.resultCount, + artifactSizeInBytes: repoTask.artifactSizeInBytes, + failureMessage: repoTask.failureMessage, + databaseCommitSha: repoTask.databaseCommitSha, + sourceLocationPrefix: repoTask.sourceLocationPrefix, + artifactUrl: repoTask.artifactUrl, + }; +} + +function mapRepoTaskAnalysisStatusToDomain( + analysisStatus: VariantAnalysisRepoStatusData, +): VariantAnalysisRepoStatus { + switch (analysisStatus) { + case VariantAnalysisRepoStatusData.Pending: + return VariantAnalysisRepoStatus.Pending; + case VariantAnalysisRepoStatusData.InProgress: + return VariantAnalysisRepoStatus.InProgress; + case VariantAnalysisRepoStatusData.Succeeded: + return VariantAnalysisRepoStatus.Succeeded; + case VariantAnalysisRepoStatusData.Failed: + return VariantAnalysisRepoStatus.Failed; + case VariantAnalysisRepoStatusData.Canceled: + return VariantAnalysisRepoStatus.Canceled; + case VariantAnalysisRepoStatusData.TimedOut: + return VariantAnalysisRepoStatus.TimedOut; + default: + assertNever(analysisStatus); + } +}