Skip to content

Commit dce2f70

Browse files
committed
Fix: decode PR list entries individually to skip invalid entries
The previous implementation used Schema.Array(GitHubPullRequestSchema) which fails the entire decode if any single entry is invalid. This restores the lenient per-entry behavior where invalid entries are silently skipped, matching the old parsePullRequestList semantics.
1 parent e053278 commit dce2f70

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

apps/server/src/git/githubPullRequests.ts

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Cause, Result, Schema } from "effect";
1+
import { Cause, Exit, Result, Schema } from "effect";
22
import { PositiveInt, TrimmedNonEmptyString } from "@t3tools/contracts";
33
import { decodeJsonResult, formatSchemaError } from "@t3tools/shared/schemaJson";
44

@@ -84,7 +84,8 @@ function normalizeGitHubPullRequestRecord(
8484
};
8585
}
8686

87-
const decodeGitHubPullRequestList = decodeJsonResult(Schema.Array(GitHubPullRequestSchema));
87+
const decodeJsonArray = decodeJsonResult(Schema.Array(Schema.Unknown));
88+
const decodeGitHubPullRequestEntry = Schema.decodeUnknownExit(GitHubPullRequestSchema);
8889
const decodeGitHubPullRequest = decodeJsonResult(GitHubPullRequestSchema);
8990

9091
export const formatGitHubJsonDecodeError = formatSchemaError;
@@ -95,11 +96,19 @@ export function decodeGitHubPullRequestListJson(
9596
ReadonlyArray<NormalizedGitHubPullRequestRecord>,
9697
Cause.Cause<Schema.SchemaError>
9798
> {
98-
const result = decodeGitHubPullRequestList(raw);
99-
if (Result.isSuccess(result)) {
100-
return Result.succeed(result.success.map(normalizeGitHubPullRequestRecord));
99+
const arrayResult = decodeJsonArray(raw);
100+
if (!Result.isSuccess(arrayResult)) {
101+
return Result.fail(arrayResult.failure);
101102
}
102-
return Result.fail(result.failure);
103+
104+
const normalized: NormalizedGitHubPullRequestRecord[] = [];
105+
for (const entry of arrayResult.success) {
106+
const decoded = decodeGitHubPullRequestEntry(entry);
107+
if (Exit.isSuccess(decoded)) {
108+
normalized.push(normalizeGitHubPullRequestRecord(decoded.value));
109+
}
110+
}
111+
return Result.succeed(normalized);
103112
}
104113

105114
export function decodeGitHubPullRequestJson(

0 commit comments

Comments
 (0)