AOSSIE-Org / AOSSIE-Org/OrgExplorer
[BUG]: fetchContributors, fetchIssues, and fetchPulls crash with "TypeError: data is not iterable" when GitHub API returns non-array objects
- 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