`HttpClient.send` puts a header's string where `Response` says `Array String`
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 86/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- javascript, node.js
Rechercherichtung
Beginne in Gren/Kernel/HttpClient.js bei _HttpClient_formatResponse und vergleiche es mit _HttpClient_formatResponseLegacy. Führe die verknüpfte Reproduktion mit gren make Main --output=app && node app aus und überprüfe anschließend, dass die Werte der Response-Header Arrays sind, wiederholte set-cookie-Werte erhalten bleiben und die bestehende Ausgabe ohne den Promise-Chain-Fehler abgeschlossen wird.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Found against: gren 0.6.6, gren-lang/core 7.4.2, gren-lang/node 6.1.3, node 22
Reproduction: https://github.com/gilramir/gren-bug-reports/tree/main/2026-09-15-httpclient-header-values
HttpClient.Response's headers are a Dict String (Array String), but
HttpClient.send stores each header's value as a plain string. So for
content-type: text/plain, Array.length of the values is 10 and
Array.first is Just "t", and String.join ", " values throws inside
fetch's promise chain after the task has already succeeded: the program
silently stops, with nothing on stderr and exit status 0. A repeated
set-cookie also keeps only the last cookie.
Reproduction
gren.json dependencies: gren-lang/core 7.4.2, gren-lang/node 6.1.3. Save as src/Main.gren. Build and run with gren make Main --output=app && node app; the third row is never printed:
module Main exposing (main)
import Dict
import HttpClient
import Init
import Node
import Stream
import Task
main : Node.SimpleProgram a
main =
Node.defineSimpleProgram <| \env ->
Init.await HttpClient.initialize <| \http ->
let
print line =
Stream.writeLineAsBytes line env.stdout
|> Task.onError (\_ -> Task.succeed env.stdout)
in
Node.endSimpleProgram
(HttpClient.get "data:text/plain,x"
|> HttpClient.send http
|> Task.andThen
(\response ->
let
values =
Dict.get "content-type" response.headers |> Maybe.withDefault []
in
print "| call | result | expected |\n|---|---|---|"
|> Task.andThen (\_ -> print ("| `Array.length values` | " ++ String.fromInt (Array.length values) ++ " | 1 |"))
|> Task.andThen (\_ -> print ("| `Array.first values` | " ++ Debug.toString (Array.first values) ++ " | Just \"text/plain\" |"))
|> Task.andThen (\_ -> print ("| `String.join \", \" values` | " ++ String.join ", " values ++ " | text/plain |"))
)
|> Task.onError (\_ -> print "request failed")
)
Output:
$ node app; echo "exit status $?"
| call | result | expected |
|---|---|---|
| `Array.length values` | 10 | 1 |
| `Array.first values` | Just "t" | Just "text/plain" |
exit status 0
Cause
_HttpClient_formatResponse in Gren/Kernel/HttpClient.js, which send uses:
for (const [key, value] of res.headers.entries()) {
headerDict = A3(__Dict_set, key.toLowerCase(), value, headerDict);
}
Headers.entries() gives each value as a string. fetch already joins a
repeated header with ", ", except set-cookie, which entries() gives once
per cookie, so __Dict_set keeps only the last one. The streaming API's
_HttpClient_formatResponseLegacy reads res.headersDistinct, whose values are
arrays, and is not affected.
- Vorherrschende Sprache
- JavaScript
- Sterne
- 13
- Forks
- 6
- Ø Merge
- 4 T. 10 Std.
- Gemergte PRs (30 T.)
- 4
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus gren-lang/node
-
`ChildProcess.spawn` with `NoShell` looks for a program named after the program and its argumentsOffenbug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
-
bug
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 64/100
-
bug
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 74/100
-
enhancement
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 48/100
Ähnliche Issues
-
Add: Digi 4K LogoOffencheck:passed logos:add
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 82/100
Maintainer antworten meist innerhalb von 1 Tag
-
component/administration domain/framework needs-triage Platform(Default) priority/low
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 90/100
semantic-release/gitlab#1032 ·
-
agent/guide documentation hive/hosted-available-lke648397-260827-5n31
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 92/100
Maintainer antworten meist innerhalb von 1 Tag
-
[aw] Upgrade availableOffenagentic-workflows
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 85/100
githubnext/gh-aw-workshop#3933 ·
Maintainer antworten meist innerhalb von 2 Tagen