AOSSIE-Org / AOSSIE-Org/OrgExplorer

[BUG]: fetchContributors, fetchIssues, and fetchPulls crash with "TypeError: data is not iterable" when GitHub API returns non-array objects

Offen Anfängerfreundlich
#225 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
bug
Vorherrschende Sprache
JavaScript
Sterne
34
Forks
92
Ø Merge
8 T. 7 Std.
Gemergte PRs (30 T.)
12

Beschreibung

### Bug Description
In `src/services/github.js`, `fetchContributors()`, `fetchIssues()`, and `fetchPulls()` spread the response from `fetchWithCache()` directly into an array using `all.push(...data)`.

However, several GitHub API endpoints return non-array JSON objects or 204 No Content responses under valid conditions:
- Querying issues for repositories where issues are disabled returns `{ "message": "Issues are disabled in this repository" }`.
- Querying contributors for empty repositories returns `{ "message": "Git Repository is empty." }` or HTTP 204 No Content.
- Querying restricted repositories returns warning/error payload objects.

When `data` is a non-array object, `all.push(...data)` throws an uncaught JavaScript error:
`TypeError: data is not iterable` (or `SyntaxError: Unexpected end of JSON input`), causing the data fetching pipeline to crash and stall.

### Where the Bug Occurs
- `src/services/github.js` (lines 55-83): `fetchWithCache` attempts `res.json()` on 204 No Content responses without checking status.
- `src/services/github.js` (lines 101-135): `fetchContributors()`, `fetchIssues()`, and `fetchPulls()` execute `all.push(...data)` without validating `Array.isArray(data)`.

### Expected Behavior
1. `fetchWithCache()` should handle 204 No Content responses gracefully (e.g. returning `[]`).
2. `fetchContributors()`, `fetchIssues()`, and `fetchPulls()` should check `if (Array.isArray(data))` before spreading into `all.push(...data)`, and break gracefully if `data` is not an array.

### Steps to Reproduce
1. Run `explore()` on an organization that has repositories with disabled issues or empty repositories.
2. Observe the browser console.
3. The fetch pipeline encounters `TypeError: data is not iterable` and fails to complete analytics aggregation.

### Note
Please do not post AI-generated spam or generic template comments on this issue.

### Logs and Screenshots

_No response_

### Environment Details

_No response_

### Impact

High - Major feature is broken

### Code of Conduct

- [x] I have joined the [Discord server](https://discord.gg/hjUhu33uAn) and will post updates there
- [x] I have searched existing issues to avoid duplicates
- [x] I am ready to submit a pr for this issue

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Start in src/services/github.js, reviewing fetchWithCache() around lines 55-83 and the fetchContributors(), fetchIssues(), and fetchPulls() pagination logic around lines 101-135. Reproduce the issue with disabled-issue, empty, restricted, or 204-response repositories, then verify the pipeline completes without JSON or iterable errors and returns empty results where appropriate.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
github, javascript
Bereich
api, backend
Issue-Typ
Bug
Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Aktivitätsstatus
Aktiv
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
78/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.