From bf05cb27f326fbdae703cddb8d19d3dedb3335b5 Mon Sep 17 00:00:00 2001 From: "Yuichiro Tachibana (Tsuchiya)" Date: Sun, 28 Apr 2024 15:46:14 +0900 Subject: [PATCH] Fix sendHttpRequest method to use the Headers class in the response --- packages/kernel/src/kernel.ts | 5 ++++- .../CustomComponentIFrame/iframe-manipulation.test.ts | 2 +- .../CustomComponentIFrame/iframe-manipulation.ts | 6 ++++-- .../src/react-helpers/CustomComponentIFrame/index.test.tsx | 2 +- .../src/react-helpers/CustomComponentIFrame/index.tsx | 3 ++- packages/kernel/src/react-helpers/download-button.ts | 3 ++- packages/kernel/src/react-helpers/media.ts | 6 ++++-- packages/kernel/src/types.ts | 7 +++++-- 8 files changed, 23 insertions(+), 11 deletions(-) diff --git a/packages/kernel/src/kernel.ts b/packages/kernel/src/kernel.ts index 307af229e..582c624d1 100644 --- a/packages/kernel/src/kernel.ts +++ b/packages/kernel/src/kernel.ts @@ -251,7 +251,10 @@ export class StliteKernel { }, "http:response" ).then((data) => { - return data.response; + return { + ...data.response, + headers: new Headers(Object.fromEntries(data.response.headers)), + }; }); } diff --git a/packages/kernel/src/react-helpers/CustomComponentIFrame/iframe-manipulation.test.ts b/packages/kernel/src/react-helpers/CustomComponentIFrame/iframe-manipulation.test.ts index 5c8b8fe3f..4c5ac1b64 100644 --- a/packages/kernel/src/react-helpers/CustomComponentIFrame/iframe-manipulation.test.ts +++ b/packages/kernel/src/react-helpers/CustomComponentIFrame/iframe-manipulation.test.ts @@ -49,7 +49,7 @@ vi.mock("../../kernel", () => { if (htmlResponse) { return Promise.resolve({ statusCode: 200, - headers: new Map([["Content-Type", htmlResponse.contentType]]), + headers: new Headers([["Content-Type", htmlResponse.contentType]]), body: new TextEncoder().encode(htmlResponse.body), }); } else { diff --git a/packages/kernel/src/react-helpers/CustomComponentIFrame/iframe-manipulation.ts b/packages/kernel/src/react-helpers/CustomComponentIFrame/iframe-manipulation.ts index a78465191..f54d2d789 100644 --- a/packages/kernel/src/react-helpers/CustomComponentIFrame/iframe-manipulation.ts +++ b/packages/kernel/src/react-helpers/CustomComponentIFrame/iframe-manipulation.ts @@ -37,7 +37,8 @@ export function manipulateIFrameDocument( if (statusCode !== 200) { return; } - const blob = new Blob([body], { type: headers.get("Content-Type") }); + const type = headers.get("Content-Type"); + const blob = new Blob([body], type ? { type } : undefined); return blob.text().then((text) => { const newScriptTag = document.createElement("script"); newScriptTag.text = text; @@ -75,7 +76,8 @@ export function manipulateIFrameDocument( if (statusCode !== 200) { return; } - const blob = new Blob([body], { type: headers.get("Content-Type") }); + const type = headers.get("Content-Type"); + const blob = new Blob([body], type ? { type } : undefined); return blob.text().then((text) => { const newStyleTag = document.createElement("style"); newStyleTag.innerHTML = text; diff --git a/packages/kernel/src/react-helpers/CustomComponentIFrame/index.test.tsx b/packages/kernel/src/react-helpers/CustomComponentIFrame/index.test.tsx index fbf0d3054..4d641deb1 100644 --- a/packages/kernel/src/react-helpers/CustomComponentIFrame/index.test.tsx +++ b/packages/kernel/src/react-helpers/CustomComponentIFrame/index.test.tsx @@ -37,7 +37,7 @@ vi.mock("../../kernel", () => { if (htmlResponse) { return Promise.resolve({ statusCode: 200, - headers: new Map([["Content-Type", htmlResponse.contentType]]), + headers: new Headers([["Content-Type", htmlResponse.contentType]]), body: new TextEncoder().encode(htmlResponse.body), }); } else { diff --git a/packages/kernel/src/react-helpers/CustomComponentIFrame/index.tsx b/packages/kernel/src/react-helpers/CustomComponentIFrame/index.tsx index 9d38c2043..f4fb64efa 100644 --- a/packages/kernel/src/react-helpers/CustomComponentIFrame/index.tsx +++ b/packages/kernel/src/react-helpers/CustomComponentIFrame/index.tsx @@ -41,7 +41,8 @@ const InnerIFrame = React.forwardRef< return; } - const blob = new Blob([body], { type: headers.get("Content-Type") }); + const type = headers.get("Content-Type"); + const blob = new Blob([body], type ? { type } : undefined); blob.text().then((text) => { if (released) { return; diff --git a/packages/kernel/src/react-helpers/download-button.ts b/packages/kernel/src/react-helpers/download-button.ts index c69ff5253..b53aaf971 100644 --- a/packages/kernel/src/react-helpers/download-button.ts +++ b/packages/kernel/src/react-helpers/download-button.ts @@ -33,7 +33,8 @@ export function downloadFileFromStlite( ? parseContentDispositionHeader(contentDispositionHeader) : ""; - const blob = new Blob([body], { type: headers.get("Content-Type") }); + const type = headers.get("Content-Type"); + const blob = new Blob([body], type ? { type } : undefined); const objectUrl = URL.createObjectURL(blob); const link = document.createElement("a"); diff --git a/packages/kernel/src/react-helpers/media.ts b/packages/kernel/src/react-helpers/media.ts index f0ca22f3a..7bf32284e 100644 --- a/packages/kernel/src/react-helpers/media.ts +++ b/packages/kernel/src/react-helpers/media.ts @@ -36,7 +36,8 @@ export function useStliteMediaObjectUrl(rawUrl: string): string { return; } - const blob = new Blob([body], { type: headers.get("Content-Type") }); + const type = headers.get("Content-Type"); + const blob = new Blob([body], type ? { type } : undefined); objectUrl = URL.createObjectURL(blob); setUrl(objectUrl); }); @@ -95,7 +96,8 @@ export function useStliteMediaObjects( return obj; } - const blob = new Blob([body], { type: headers.get("Content-Type") }); + const type = headers.get("Content-Type"); + const blob = new Blob([body], type ? { type } : undefined); const objectUrl = URL.createObjectURL(blob); generatedObjectUrls.push(objectUrl); return { diff --git a/packages/kernel/src/types.ts b/packages/kernel/src/types.ts index b13f0d9c1..35179673c 100644 --- a/packages/kernel/src/types.ts +++ b/packages/kernel/src/types.ts @@ -15,9 +15,12 @@ export interface HttpRequest { } export interface HttpResponse { statusCode: number; - headers: Map; + headers: Headers; body: Uint8Array; } +export interface HttpResponseInMessage extends Omit { + headers: Map; +} export interface EmscriptenFile { data: string | ArrayBufferView; opts?: Record; @@ -176,7 +179,7 @@ interface ReplyMessageBase { export interface ReplyMessageHttpResponse extends ReplyMessageBase { type: "http:response"; data: { - response: HttpResponse; + response: HttpResponseInMessage; }; } export interface ReplyMessageGeneralReply extends ReplyMessageBase {