AOSSIE-Org / AOSSIE-Org/OrgExplorer

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

Ouverte Adaptée aux débutants
#225 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub
bug
Langage dominant
JavaScript
Étoiles
34
Forks
92
Merge moyen
8 j 7 h
PR mergées (30 j)
12

Description

### 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

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

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.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
github, javascript
Domaine
api, backend
Type d'issue
Bug
Difficulté
2/5
Temps estimé
1-3 heures
Activité
Active
Clarté
Clairement spécifiée
Accessibilité débutants
78/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.