Skip to content

Commit 80e8417

Browse files
committed
fix: ensure headers are parsed properly
1 parent 5cb2c22 commit 80e8417

File tree

1 file changed

+19
-10
lines changed

1 file changed

+19
-10
lines changed

src/rs_lib/http_client.rs

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ use deno_cache_dir::file_fetcher::SendResponse;
66
use deno_cache_dir::file_fetcher::StatusCode;
77
use deno_error::JsErrorBox;
88
use deno_npm_cache::NpmCacheHttpClientResponse;
9+
use js_sys::Array;
910
use js_sys::Object;
1011
use js_sys::Reflect;
1112
use serde::Deserialize;
1213
use url::Url;
14+
use wasm_bindgen::JsCast;
1315
use wasm_bindgen::JsValue;
1416
use wasm_bindgen::prelude::wasm_bindgen;
1517

@@ -200,20 +202,27 @@ fn parse_response(js_value: JsValue) -> Result<Response, JsValue> {
200202

201203
fn response_headers_to_headermap(headers: JsValue) -> HeaderMap {
202204
let mut map = HeaderMap::new();
203-
204-
if !headers.is_object() {
205+
let entries_fn = Reflect::get(&headers, &JsValue::from_str("entries"));
206+
let Ok(entries_fn) = entries_fn else {
205207
return map;
206-
}
208+
};
207209

208-
let obj = Object::from(headers);
209-
let entries = Object::entries(&obj);
210+
let entries_iter = js_sys::Function::from(entries_fn)
211+
.call0(&headers)
212+
.ok()
213+
.and_then(|iter| iter.dyn_into::<js_sys::Iterator>().ok());
210214

211-
for i in 0..entries.length() {
212-
let entry = entries.get(i);
213-
if !entry.is_object() {
214-
continue;
215+
let Some(iter) = entries_iter else {
216+
return map;
217+
};
218+
219+
while let Ok(next) = iter.next() {
220+
if next.done() {
221+
break;
215222
}
216-
let pair = js_sys::Array::from(&entry);
223+
224+
let val = next.value();
225+
let pair = Array::from(&val);
217226
if pair.length() != 2 {
218227
continue;
219228
}

0 commit comments

Comments
 (0)