From ec850f2cf06ef47426e25a0cee3939b59d4a7ed4 Mon Sep 17 00:00:00 2001 From: Gregory Schier Date: Wed, 23 Oct 2024 05:49:14 -0700 Subject: [PATCH] Properly handle charset in content-type --- package-lock.json | 18 ++++++++++++++++++ src-web/lib/model_util.ts | 4 +++- src-web/package.json | 2 ++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 32aea8ab..71c4c501 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3127,6 +3127,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/whatwg-mimetype": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/whatwg-mimetype/-/whatwg-mimetype-3.0.2.tgz", + "integrity": "sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/yauzl": { "version": "2.10.3", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", @@ -13242,6 +13249,15 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "license": "BSD-2-Clause" }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -13786,6 +13802,7 @@ "react-use": "^17.5.1", "slugify": "^1.6.6", "uuid": "^10.0.0", + "whatwg-mimetype": "^4.0.0", "xml-formatter": "^3.6.3" }, "devDependencies": { @@ -13799,6 +13816,7 @@ "@types/react": "^18.3.5", "@types/react-dom": "^18.3.0", "@types/uuid": "^10.0.0", + "@types/whatwg-mimetype": "^3.0.2", "@vitejs/plugin-react": "^4.3.1", "autoprefixer": "^10.4.20", "decompress": "^4.2.1", diff --git a/src-web/lib/model_util.ts b/src-web/lib/model_util.ts index 4b8ab41e..0f74d596 100644 --- a/src-web/lib/model_util.ts +++ b/src-web/lib/model_util.ts @@ -5,6 +5,7 @@ import type { HttpResponse, HttpResponseHeader, } from '@yaakapp-internal/models'; +import MimeType from 'whatwg-mimetype'; export const BODY_TYPE_NONE = null; export const BODY_TYPE_GRAPHQL = 'graphql'; @@ -60,5 +61,6 @@ export function getCharsetFromContentType(headers: HttpResponseHeader[]): string const contentType = getContentTypeHeader(headers); if (contentType == null) return null; - return contentType.toLowerCase().match(/charset="?([^ ;"]+)"?/)?.[1] || null; + const mimeType = new MimeType(contentType); + return mimeType.parameters.get('charset') ?? null; } diff --git a/src-web/package.json b/src-web/package.json index 07727adf..a6efce06 100644 --- a/src-web/package.json +++ b/src-web/package.json @@ -54,6 +54,7 @@ "react-use": "^17.5.1", "slugify": "^1.6.6", "uuid": "^10.0.0", + "whatwg-mimetype": "^4.0.0", "xml-formatter": "^3.6.3" }, "devDependencies": { @@ -67,6 +68,7 @@ "@types/react": "^18.3.5", "@types/react-dom": "^18.3.0", "@types/uuid": "^10.0.0", + "@types/whatwg-mimetype": "^3.0.2", "@vitejs/plugin-react": "^4.3.1", "autoprefixer": "^10.4.20", "decompress": "^4.2.1",