* @see https://fetch.spec.whatwg.org/#concept-header-extract-mime-type * @param {import('./headers').HeadersList} headers
(headers)
| 1286 | * @param {import('./headers').HeadersList} headers |
| 1287 | */ |
| 1288 | function extractMimeType (headers) { |
| 1289 | // 1. Let charset be null. |
| 1290 | let charset = null |
| 1291 | |
| 1292 | // 2. Let essence be null. |
| 1293 | let essence = null |
| 1294 | |
| 1295 | // 3. Let mimeType be null. |
| 1296 | let mimeType = null |
| 1297 | |
| 1298 | // 4. Let values be the result of getting, decoding, and splitting `Content-Type` from headers. |
| 1299 | const values = getDecodeSplit('content-type', headers) |
| 1300 | |
| 1301 | // 5. If values is null, then return failure. |
| 1302 | if (values === null) { |
| 1303 | return 'failure' |
| 1304 | } |
| 1305 | |
| 1306 | // 6. For each value of values: |
| 1307 | for (const value of values) { |
| 1308 | // 6.1. Let temporaryMimeType be the result of parsing value. |
| 1309 | const temporaryMimeType = parseMIMEType(value) |
| 1310 | |
| 1311 | // 6.2. If temporaryMimeType is failure or its essence is "*/*", then continue. |
| 1312 | if (temporaryMimeType === 'failure' || temporaryMimeType.essence === '*/*') { |
| 1313 | continue |
| 1314 | } |
| 1315 | |
| 1316 | // 6.3. Set mimeType to temporaryMimeType. |
| 1317 | mimeType = temporaryMimeType |
| 1318 | |
| 1319 | // 6.4. If mimeType’s essence is not essence, then: |
| 1320 | if (mimeType.essence !== essence) { |
| 1321 | // 6.4.1. Set charset to null. |
| 1322 | charset = null |
| 1323 | |
| 1324 | // 6.4.2. If mimeType’s parameters["charset"] exists, then set charset to |
| 1325 | // mimeType’s parameters["charset"]. |
| 1326 | if (mimeType.parameters.has('charset')) { |
| 1327 | charset = mimeType.parameters.get('charset') |
| 1328 | } |
| 1329 | |
| 1330 | // 6.4.3. Set essence to mimeType’s essence. |
| 1331 | essence = mimeType.essence |
| 1332 | } else if (!mimeType.parameters.has('charset') && charset !== null) { |
| 1333 | // 6.5. Otherwise, if mimeType’s parameters["charset"] does not exist, and |
| 1334 | // charset is non-null, set mimeType’s parameters["charset"] to charset. |
| 1335 | mimeType.parameters.set('charset', charset) |
| 1336 | } |
| 1337 | } |
| 1338 | |
| 1339 | // 7. If mimeType is null, then return failure. |
| 1340 | if (mimeType == null) { |
| 1341 | return 'failure' |
| 1342 | } |
| 1343 | |
| 1344 | // 8. Return mimeType. |
| 1345 | return mimeType |
no test coverage detected