Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 39 additions & 27 deletions src/lib/githubYearInReview.ts
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,42 @@ function mergeTopRepository(data: NonNullable<YearInReviewResponse["user"]>["con
return top;
}


function buildRepoFragment(index: number) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

To maintain type safety and API clarity, please provide an explicit return type for the buildRepoFragment function.

Suggested change
function buildRepoFragment(index: number) {
function buildRepoFragment(index: number): string {
References
  1. Maintain explicit return types for functions in TypeScript to ensure type safety and API clarity.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 buildRepoFragment には戻り値の型アノテーションがありません。隣の extractCommitDatesFromRepoData には : string[] が付いているので、一貫性のために : string を明示するとよいです。

Suggested change
function buildRepoFragment(index: number) {
function buildRepoFragment(index: number): string {
Prompt To Fix With AI
This is a comment left during a code review.
Path: src/lib/githubYearInReview.ts
Line: 143

Comment:
`buildRepoFragment` には戻り値の型アノテーションがありません。隣の `extractCommitDatesFromRepoData` には `: string[]` が付いているので、一貫性のために `: string` を明示するとよいです。

```suggestion
function buildRepoFragment(index: number): string {
```

How can I resolve this? If you propose a fix, please make it concise.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

return `
repo${index}: repository(owner: $owner${index}, name: $name${index}) {
defaultBranchRef {
target {
... on Commit {
history(author: { id: $authorId }, since: $since, until: $until, first: 100) {
nodes {
author {
date
}
}
}
}
}
}
}
`;
}

function extractCommitDatesFromRepoData(repoData?: Record<string, unknown>): string[] {
const dates: string[] = [];
const defaultBranchRef = repoData?.defaultBranchRef as Record<string, unknown> | undefined;
const target = defaultBranchRef?.target as Record<string, unknown> | undefined;
const history = target?.history as Record<string, unknown> | undefined;
const historyNodes = (history?.nodes as Array<Record<string, unknown>> | undefined) || [];
for (const node of historyNodes) {
const author = node?.author as Record<string, unknown> | undefined;
if (typeof author?.date === 'string') {
dates.push(author.date);
}
}
return dates;
}

async function fetchCommitDatesForTopRepos(
authorId: string,
token: string,
Expand All @@ -163,23 +199,7 @@ async function fetchCommitDatesForTopRepos(
};

candidates.forEach((repo, index) => {
fragments.push(`
repo${index}: repository(owner: $owner${index}, name: $name${index}) {
defaultBranchRef {
target {
... on Commit {
history(author: { id: $authorId }, since: $since, until: $until, first: 100) {
nodes {
author {
date
}
}
}
}
}
}
}
`);
fragments.push(buildRepoFragment(index));
variables[`owner${index}`] = repo.repository.owner.login;
variables[`name${index}`] = repo.repository.name;
});
Expand All @@ -198,16 +218,8 @@ async function fetchCommitDatesForTopRepos(

for (let i = 0; i < candidates.length; i++) {
const repoData = response[`repo${i}`] as Record<string, unknown> | undefined;
const defaultBranchRef = repoData?.defaultBranchRef as Record<string, unknown> | undefined;
const target = defaultBranchRef?.target as Record<string, unknown> | undefined;
const history = target?.history as Record<string, unknown> | undefined;
const historyNodes = (history?.nodes as Array<Record<string, unknown>> | undefined) || [];
for (const node of historyNodes) {
const author = node?.author as Record<string, unknown> | undefined;
if (typeof author?.date === 'string') {
dates.push(author.date);
}
}
const repoDates = extractCommitDatesFromRepoData(repoData);
dates.push(...repoDates);
}

return dates;
Expand Down
Loading