Properly handle charset in content-type

This commit is contained in:
Gregory Schier
2024-10-23 05:49:14 -07:00
parent ff52ad5345
commit ec850f2cf0
3 changed files with 23 additions and 1 deletions

18
package-lock.json generated
View File

@@ -3127,6 +3127,13 @@
"dev": true, "dev": true,
"license": "MIT" "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": { "node_modules/@types/yauzl": {
"version": "2.10.3", "version": "2.10.3",
"resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz",
@@ -13242,6 +13249,15 @@
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
"license": "BSD-2-Clause" "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": { "node_modules/whatwg-url": {
"version": "5.0.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
@@ -13786,6 +13802,7 @@
"react-use": "^17.5.1", "react-use": "^17.5.1",
"slugify": "^1.6.6", "slugify": "^1.6.6",
"uuid": "^10.0.0", "uuid": "^10.0.0",
"whatwg-mimetype": "^4.0.0",
"xml-formatter": "^3.6.3" "xml-formatter": "^3.6.3"
}, },
"devDependencies": { "devDependencies": {
@@ -13799,6 +13816,7 @@
"@types/react": "^18.3.5", "@types/react": "^18.3.5",
"@types/react-dom": "^18.3.0", "@types/react-dom": "^18.3.0",
"@types/uuid": "^10.0.0", "@types/uuid": "^10.0.0",
"@types/whatwg-mimetype": "^3.0.2",
"@vitejs/plugin-react": "^4.3.1", "@vitejs/plugin-react": "^4.3.1",
"autoprefixer": "^10.4.20", "autoprefixer": "^10.4.20",
"decompress": "^4.2.1", "decompress": "^4.2.1",

View File

@@ -5,6 +5,7 @@ import type {
HttpResponse, HttpResponse,
HttpResponseHeader, HttpResponseHeader,
} from '@yaakapp-internal/models'; } from '@yaakapp-internal/models';
import MimeType from 'whatwg-mimetype';
export const BODY_TYPE_NONE = null; export const BODY_TYPE_NONE = null;
export const BODY_TYPE_GRAPHQL = 'graphql'; export const BODY_TYPE_GRAPHQL = 'graphql';
@@ -60,5 +61,6 @@ export function getCharsetFromContentType(headers: HttpResponseHeader[]): string
const contentType = getContentTypeHeader(headers); const contentType = getContentTypeHeader(headers);
if (contentType == null) return null; if (contentType == null) return null;
return contentType.toLowerCase().match(/charset="?([^ ;"]+)"?/)?.[1] || null; const mimeType = new MimeType(contentType);
return mimeType.parameters.get('charset') ?? null;
} }

View File

@@ -54,6 +54,7 @@
"react-use": "^17.5.1", "react-use": "^17.5.1",
"slugify": "^1.6.6", "slugify": "^1.6.6",
"uuid": "^10.0.0", "uuid": "^10.0.0",
"whatwg-mimetype": "^4.0.0",
"xml-formatter": "^3.6.3" "xml-formatter": "^3.6.3"
}, },
"devDependencies": { "devDependencies": {
@@ -67,6 +68,7 @@
"@types/react": "^18.3.5", "@types/react": "^18.3.5",
"@types/react-dom": "^18.3.0", "@types/react-dom": "^18.3.0",
"@types/uuid": "^10.0.0", "@types/uuid": "^10.0.0",
"@types/whatwg-mimetype": "^3.0.2",
"@vitejs/plugin-react": "^4.3.1", "@vitejs/plugin-react": "^4.3.1",
"autoprefixer": "^10.4.20", "autoprefixer": "^10.4.20",
"decompress": "^4.2.1", "decompress": "^4.2.1",