diff --git a/src/reporters/CLIReporter.ts b/src/reporters/CLIReporter.ts index e3a3380d6..354b410f2 100644 --- a/src/reporters/CLIReporter.ts +++ b/src/reporters/CLIReporter.ts @@ -43,7 +43,7 @@ export class CLIReporter implements IReporter { lines.push('----------------------------'); for (const key in PracticeImpact) { - const impact = PracticeImpact[key]; + const impact = PracticeImpact[key as keyof typeof PracticeImpact]; const impactLine = this.emitImpactSegment(cwp.practicesAndComponents, impact); impactLine && lines.push(impactLine); diff --git a/src/services/git/Git.ts b/src/services/git/Git.ts index 64b7d73ec..3d472ed95 100644 --- a/src/services/git/Git.ts +++ b/src/services/git/Git.ts @@ -38,6 +38,7 @@ export class Git implements IProjectFilesBrowserService { let result = await this.getRepoContent(await this.followSymLinks(path)); if (result !== null && !isArray(result)) { result = result as File; + if (!result.content) return ''; return Buffer.from(result.content, result.encoding).toString('utf-8'); } else { throw ErrorFactory.newInternalError(`${path} is not a file`); diff --git a/src/services/git/GitHubService.ts b/src/services/git/GitHubService.ts index b86662e49..dca3b43a5 100644 --- a/src/services/git/GitHubService.ts +++ b/src/services/git/GitHubService.ts @@ -12,6 +12,7 @@ import { PullCommits, IssueComment, Symlink, + RepoContentType, } from './model'; import { ICVSService } from './ICVSService'; import { Paginated } from '../../inspectors/common/Paginated'; @@ -33,6 +34,7 @@ import { ArgumentsProvider } from '../../inversify.config'; import { ICache } from '../../scanner/cache/ICache'; import { InMemoryCache } from '../../scanner/cache/InMemoryCahce'; import { GitHubPullRequestState } from './IGitHubService'; +import { ErrorFactory } from '../../lib/errors'; const debug = Debug('cli:services:git:github-service'); @injectable() @@ -288,24 +290,36 @@ export class GitHubService implements ICVSService { return null; } - return isArray(response.data) - ? response.data.map((item) => ({ - name: item.name, - path: item.path, - sha: item.sha, - size: item.size, - type: item.type, - })) - : { - name: response.data.name, - path: response.data.path, - size: response.data.size, - sha: response.data.sha, - type: response.data.type, - content: response.data.content, - encoding: response.data.encoding, - target: response.data.target, - }; + if (isArray(response.data)) { + return response.data.map((item) => ({ + name: item.name, + path: item.path, + sha: item.sha, + size: item.size, + type: item.type, + })); + } else if (response.data.type === RepoContentType.file) { + return { + name: response.data.name, + path: response.data.path, + size: response.data.size, + sha: response.data.sha, + type: response.data.type, + content: response.data.content, + encoding: response.data.encoding, + }; + } else if (response.data.type === RepoContentType.symlink) { + return { + name: response.data.name, + path: response.data.path, + size: response.data.size, + sha: response.data.sha, + type: response.data.type, + target: `${response.data.target}`, + }; + } else { + throw ErrorFactory.newInternalError('Unexpected response'); + } }); } diff --git a/src/services/git/__MOCKS__/gitHubServiceMockFolder/getRepoContentServiceResponse.mock.ts b/src/services/git/__MOCKS__/gitHubServiceMockFolder/getRepoContentServiceResponse.mock.ts index 00797cf54..a91f7cf59 100644 --- a/src/services/git/__MOCKS__/gitHubServiceMockFolder/getRepoContentServiceResponse.mock.ts +++ b/src/services/git/__MOCKS__/gitHubServiceMockFolder/getRepoContentServiceResponse.mock.ts @@ -1,4 +1,4 @@ -import { Directory, File } from '../../model'; +import { Directory, File, RepoContentType } from '../../model'; export const getRepoContentServiceResponseDir: Directory = [ { @@ -6,7 +6,7 @@ export const getRepoContentServiceResponseDir: Directory = [ path: 'mockFolder/mockFile.ts', size: 0, sha: '980a0d5f19a64b4b30a87d4206aade58726b60e3', - type: 'file', + type: RepoContentType.file, }, ]; @@ -15,7 +15,7 @@ export const getRepoContentServiceResponseFile: File = { path: 'README', size: 13, sha: '980a0d5f19a64b4b30a87d4206aade58726b60e3', - type: 'file', + type: RepoContentType.file, content: 'SGVsbG8gV29ybGQhCg==', encoding: 'base64', }; diff --git a/src/services/git/model.ts b/src/services/git/model.ts index 2dfeed327..2508fab3f 100644 --- a/src/services/git/model.ts +++ b/src/services/git/model.ts @@ -62,17 +62,23 @@ export interface RepoContent { path: string; sha: string; size: number; - type: 'dir' | 'file' | 'symlink'; + type: RepoContentType; +} + +export enum RepoContentType { + dir = 'dir', + file = 'file', + symlink = 'symlink', } export interface File extends RepoContent { - type: 'file'; - content: string; - encoding: BufferEncoding; + type: RepoContentType.file; + content: string | undefined; + encoding: BufferEncoding | undefined; } export interface Symlink extends RepoContent { - type: 'symlink'; + type: RepoContentType.symlink; target: string; }