From 834b446e7934e57a6281b38cf5a8e2cd5bcf01da Mon Sep 17 00:00:00 2001 From: Aura <kyradiscord@gmail.com> Date: Sun, 18 Aug 2024 14:24:10 +0200 Subject: [PATCH] refactor: switch `MimeTypes` to `MimeType` and use IANA media types (#603) BREAKING CHANGE: `MimeTypes` has been removed in favor of the `MimeType` string union type consists of all IANA media types --- .github/workflows/auto-updater.yml | 42 + packages/api/package.json | 1 + packages/api/scripts/sync-mime-types.mts | 20 + packages/api/src/index.ts | 2 +- .../api/src/lib/structures/MediaParser.ts | 4 +- packages/api/src/lib/structures/Route.ts | 6 +- .../api/src/lib/structures/api/ApiResponse.ts | 17 +- .../api/src/lib/structures/http/Server.ts | 10 +- packages/api/src/lib/utils/MimeType.ts | 2128 +++++++++++++++++ packages/api/src/lib/utils/MimeTypes.ts | 18 - .../mediaParsers/applicationFormUrlEncoded.ts | 7 +- .../api/src/mediaParsers/applicationJson.ts | 4 +- packages/api/src/mediaParsers/textPlain.ts | 4 +- packages/api/tsconfig.eslint.json | 2 +- 14 files changed, 2218 insertions(+), 47 deletions(-) create mode 100644 .github/workflows/auto-updater.yml create mode 100644 packages/api/scripts/sync-mime-types.mts create mode 100644 packages/api/src/lib/utils/MimeType.ts delete mode 100644 packages/api/src/lib/utils/MimeTypes.ts diff --git a/.github/workflows/auto-updater.yml b/.github/workflows/auto-updater.yml new file mode 100644 index 000000000..651d8e4ff --- /dev/null +++ b/.github/workflows/auto-updater.yml @@ -0,0 +1,42 @@ +name: Automatic Data Update + +on: + workflow_dispatch: + schedule: + - cron: '0 2 * * *' + +jobs: + DataUpdater: + name: Automatic Data Update + runs-on: ubuntu-latest + if: github.repository_owner == 'sapphiredev' + steps: + - name: Checkout Project + uses: actions/checkout@v4 + - name: Install dependencies + uses: sapphiredev/.github/actions/install-yarn-dependencies@main + with: + node-version: 20 + - name: Run plugin-api MIME type sync + run: yarn workspace @sapphire/plugin-api sync-mime-types + - name: Run prettier on the code + run: yarn format + - name: Commit any changes and create a pull request + env: + GITHUB_USER: github-actions[bot] + GITHUB_EMAIL: 41898282+github-actions[bot]@users.noreply.github.com + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + git add .; + if git diff-index --quiet HEAD --; then + echo "No changes to commit, exiting with code 0" + exit 0; + else + git remote set-url origin "https://${GITHUB_TOKEN}:x-oauth-basic@github.com/${GITHUB_REPOSITORY}.git"; + git config --local user.email "${GITHUB_EMAIL}"; + git config --local user.name "${GITHUB_USER}"; + git checkout -b update-iana-mime-type/$(date +%F-%H-%M); + git commit -sam "feat: update mime types"; + git push --set-upstream origin $(git rev-parse --abbrev-ref HEAD) + gh pr create -t "feat: update mime types" -b "*bleep bloop* I updated the IANA mime type list" -B main; + fi diff --git a/packages/api/package.json b/packages/api/package.json index f04ba0a9e..8c82daf43 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -43,6 +43,7 @@ "build:types:esm": "rollup-type-bundler -d dist/esm -t .mts", "build:types:cleanup": "tsx ../../scripts/clean-register-imports.mts", "build:rename-cjs-register": "tsx ../../scripts/rename-cjs-register.mts", + "sync-mime-types": "tsx scripts/sync-mime-types.mts", "typecheck": "tsc -b src", "docs": "typedoc-json-parser", "prepack": "yarn build", diff --git a/packages/api/scripts/sync-mime-types.mts b/packages/api/scripts/sync-mime-types.mts new file mode 100644 index 000000000..3eaf5b524 --- /dev/null +++ b/packages/api/scripts/sync-mime-types.mts @@ -0,0 +1,20 @@ +import { writeFile } from 'node:fs/promises'; + +const output = new URL('../src/lib/utils/MimeType.ts', import.meta.url); + +const response = await fetch('https://www.iana.org/assignments/media-types/media-types.xml'); +const text = await response.text(); + +const fileTypeTemplateRegex = /<file type="template">(\w+\/.+?)<\/file>/g; +const outputLines = ['export type MimeType =']; + +let result: RegExpExecArray | null; +while ((result = fileTypeTemplateRegex.exec(text))) { + outputLines.push(`\t| '${result[1]}'`); +} + +outputLines.push('\t| `X-${string}/${string}`;'); +outputLines.push(''); + +await writeFile(output, outputLines.join('\n'), 'utf8'); +console.log(`Successfully written to ${output.href}: ${outputLines.length - 3} mime types total`); diff --git a/packages/api/src/index.ts b/packages/api/src/index.ts index 2b83211e5..338d38048 100644 --- a/packages/api/src/index.ts +++ b/packages/api/src/index.ts @@ -19,7 +19,7 @@ export * from './lib/structures/router/RouterBranch'; export * from './lib/structures/router/RouterNode'; export * from './lib/structures/router/RouterRoot'; export * from './lib/structures/RouteStore'; -export * from './lib/utils/MimeTypes'; +export type * from './lib/utils/MimeType'; export { loadListeners } from './listeners/_load'; export { loadMediaParsers } from './mediaParsers/_load'; diff --git a/packages/api/src/lib/structures/MediaParser.ts b/packages/api/src/lib/structures/MediaParser.ts index 4c5f0b5fd..0144f988f 100644 --- a/packages/api/src/lib/structures/MediaParser.ts +++ b/packages/api/src/lib/structures/MediaParser.ts @@ -1,8 +1,8 @@ import { Piece } from '@sapphire/pieces'; import type { Awaitable } from '@sapphire/utilities'; import { createBrotliDecompress, createGunzip, createInflate, type Gunzip } from 'zlib'; +import type { MimeType } from '../utils/MimeType'; import type { ApiRequest } from './api/ApiRequest'; -import type { MimeTypeWithoutParameters } from './http/Server'; import type { Route } from './Route'; /** @@ -26,7 +26,7 @@ export abstract class MediaParser<Options extends MediaParser.Options = MediaPar * @param route The route to be checked. */ public accepts(route: Route): boolean { - return route.acceptedContentMimeTypes === null || route.acceptedContentMimeTypes.includes(this.name as MimeTypeWithoutParameters); + return route.acceptedContentMimeTypes === null || route.acceptedContentMimeTypes.includes(this.name as MimeType); } /** diff --git a/packages/api/src/lib/structures/Route.ts b/packages/api/src/lib/structures/Route.ts index 9bbb33567..87c3ced71 100644 --- a/packages/api/src/lib/structures/Route.ts +++ b/packages/api/src/lib/structures/Route.ts @@ -1,9 +1,9 @@ import { Piece } from '@sapphire/pieces'; import { isNullish, type Awaitable } from '@sapphire/utilities'; +import type { MimeType } from '../utils/MimeType'; import type { ApiRequest } from './api/ApiRequest'; import type { ApiResponse } from './api/ApiResponse'; import type { MethodName } from './http/HttpMethods'; -import type { MimeTypeWithoutParameters } from './http/Server'; import { RouterRoot } from './router/RouterRoot'; /** @@ -52,7 +52,7 @@ export abstract class Route<Options extends Route.Options = Route.Options> exten /** * The accepted content types. */ - public readonly acceptedContentMimeTypes: readonly MimeTypeWithoutParameters[] | null; + public readonly acceptedContentMimeTypes: readonly MimeType[] | null; /** * The path this route represents. @@ -124,7 +124,7 @@ export interface RouteOptions extends Piece.Options { * * @defaultValue this.context.server.options.acceptedContentMimeTypes ?? null */ - acceptedContentMimeTypes?: readonly MimeTypeWithoutParameters[] | null; + acceptedContentMimeTypes?: readonly MimeType[] | null; /** * The methods this route accepts. diff --git a/packages/api/src/lib/structures/api/ApiResponse.ts b/packages/api/src/lib/structures/api/ApiResponse.ts index f02bc1df8..2e4e998b7 100644 --- a/packages/api/src/lib/structures/api/ApiResponse.ts +++ b/packages/api/src/lib/structures/api/ApiResponse.ts @@ -1,7 +1,7 @@ import { IncomingMessage, ServerResponse, STATUS_CODES } from 'node:http'; import { Readable } from 'node:stream'; import { ReadableStream } from 'node:stream/web'; -import { MimeTypes } from '../../utils/MimeTypes'; +import type { MimeType } from '../../utils/MimeType'; import { HttpCodes } from '../http/HttpCodes'; import type { CookieStore } from './CookieStore'; @@ -110,14 +110,14 @@ export class ApiResponse<Request extends IncomingMessage = IncomingMessage> exte * @since 1.0.0 */ public json(data: any): void { - this.setContentType(MimeTypes.ApplicationJson).end(JSON.stringify(data)); + this.setContentType('application/json').end(JSON.stringify(data)); } /** * @since 1.0.0 */ public text(data: string): void { - this.setContentType(MimeTypes.TextPlain).end(data); + this.setContentType('text/plain').end(data); } /** @@ -125,13 +125,10 @@ export class ApiResponse<Request extends IncomingMessage = IncomingMessage> exte * * Sets the image content type and sends the image data in the response. * - * @param type - The MIME type of the image (e.g., {@link MimeTypes.ImagePng}). + * @param type - The MIME type of the image (e.g., 'image/png'). * @param data - The image data as a `string`, {@link Buffer}, {@link Uint8Array}, or {@link ReadableStream}. */ - public image( - type: MimeTypes.ImageGif | MimeTypes.ImageJpg | MimeTypes.ImagePng | MimeTypes.ImageWebp | MimeTypes.ImageXIcon, - data: string | Buffer | Uint8Array | Readable - ): void { + public image(type: Extract<MimeType, `image/${string}`>, data: string | Buffer | Uint8Array | Readable): void { if (data instanceof Readable) { this.setContentType(type); data.pipe(this); @@ -144,13 +141,13 @@ export class ApiResponse<Request extends IncomingMessage = IncomingMessage> exte * @since 5.1.0 */ public html(code: number, data: string): void { - this.setContentType(MimeTypes.TextHtml).status(code).end(data); + this.setContentType('text/html').status(code).end(data); } /** * @since 1.0.0 */ - public setContentType(contentType: MimeTypes): this { + public setContentType(contentType: MimeType): this { this.setHeader('Content-Type', contentType); return this; } diff --git a/packages/api/src/lib/structures/http/Server.ts b/packages/api/src/lib/structures/http/Server.ts index 1081dc3ac..9bb62d4eb 100644 --- a/packages/api/src/lib/structures/http/Server.ts +++ b/packages/api/src/lib/structures/http/Server.ts @@ -2,6 +2,7 @@ import { container } from '@sapphire/pieces'; import { AsyncEventEmitter } from '@vladfrangu/async_event_emitter'; import { Server as HttpServer, createServer as httpCreateServer, type ServerOptions as HttpOptions } from 'node:http'; import type { ListenOptions } from 'node:net'; +import type { MimeType } from '../../utils/MimeType'; import { MediaParserStore } from '../MediaParserStore'; import { MiddlewareStore } from '../MiddlewareStore'; import type { Route } from '../Route'; @@ -168,15 +169,16 @@ export type ContentTypeParameter = `; ${string}=${string}`; /** * RFC 1341 4: Defines the syntax for a Content-Type field without parameters, which follows the following structure: * `type "/" subtype`. + * @since 7.0.0 */ -export type MimeTypeWithoutParameters = `${ContentTypeType}/${string}`; +export type GenericMimeType = `${ContentTypeType}/${string}`; /** * RFC 1341 4: Defines the syntax for a Content-Type field, which follows the following structure: * `type "/" subtype *[";" parameter]`. - * @since 1.3.0 + * @since 7.0.0 */ -export type MimeType = `${MimeTypeWithoutParameters}${'' | ContentTypeParameter}`; +export type GenericParametrizedMimeType = `${GenericMimeType}${'' | ContentTypeParameter}`; /** * The API options. @@ -209,7 +211,7 @@ export interface ServerOptions { * @since 1.3.0 * @default null */ - acceptedContentMimeTypes?: MimeTypeWithoutParameters[] | null; + acceptedContentMimeTypes?: MimeType[] | null; /** * The HTTP server options. diff --git a/packages/api/src/lib/utils/MimeType.ts b/packages/api/src/lib/utils/MimeType.ts new file mode 100644 index 000000000..829abca6e --- /dev/null +++ b/packages/api/src/lib/utils/MimeType.ts @@ -0,0 +1,2128 @@ +export type MimeType = + | 'application/1d-interleaved-parityfec' + | 'application/3gpdash-qoe-report+xml' + | 'application/3gppHal+json' + | 'application/3gppHalForms+json' + | 'application/3gpp-ims+xml' + | 'application/A2L' + | 'application/ace-groupcomm+cbor' + | 'application/ace+cbor' + | 'application/ace+json' + | 'application/activemessage' + | 'application/activity+json' + | 'application/aif+cbor' + | 'application/aif+json' + | 'application/alto-cdni+json' + | 'application/alto-cdnifilter+json' + | 'application/alto-costmap+json' + | 'application/alto-costmapfilter+json' + | 'application/alto-directory+json' + | 'application/alto-endpointprop+json' + | 'application/alto-endpointpropparams+json' + | 'application/alto-endpointcost+json' + | 'application/alto-endpointcostparams+json' + | 'application/alto-error+json' + | 'application/alto-networkmapfilter+json' + | 'application/alto-networkmap+json' + | 'application/alto-propmap+json' + | 'application/alto-propmapparams+json' + | 'application/alto-tips+json' + | 'application/alto-tipsparams+json' + | 'application/alto-updatestreamcontrol+json' + | 'application/alto-updatestreamparams+json' + | 'application/AML' + | 'application/andrew-inset' + | 'application/applefile' + | 'application/at+jwt' + | 'application/ATF' + | 'application/ATFX' + | 'application/atom+xml' + | 'application/atomcat+xml' + | 'application/atomdeleted+xml' + | 'application/atomicmail' + | 'application/atomsvc+xml' + | 'application/atsc-dwd+xml' + | 'application/atsc-dynamic-event-message' + | 'application/atsc-held+xml' + | 'application/atsc-rdt+json' + | 'application/atsc-rsat+xml' + | 'application/ATXML' + | 'application/auth-policy+xml' + | 'application/automationml-aml+xml' + | 'application/automationml-amlx+zip' + | 'application/bacnet-xdd+zip' + | 'application/batch-SMTP' + | 'application/beep+xml' + | 'application/bufr' + | 'application/c2pa' + | 'application/calendar+json' + | 'application/calendar+xml' + | 'application/call-completion' + | 'application/CALS-1840' + | 'application/captive+json' + | 'application/cbor' + | 'application/cbor-seq' + | 'application/cccex' + | 'application/ccmp+xml' + | 'application/ccxml+xml' + | 'application/cda+xml' + | 'application/CDFX+XML' + | 'application/cdmi-capability' + | 'application/cdmi-container' + | 'application/cdmi-domain' + | 'application/cdmi-object' + | 'application/cdmi-queue' + | 'application/cdni' + | 'application/CEA' + | 'application/cea-2018+xml' + | 'application/cellml+xml' + | 'application/cfw' + | 'application/cid-edhoc+cbor-seq' + | 'application/city+json' + | 'application/clr' + | 'application/clue_info+xml' + | 'application/clue+xml' + | 'application/cms' + | 'application/cnrp+xml' + | 'application/coap-group+json' + | 'application/coap-payload' + | 'application/commonground' + | 'application/concise-problem-details+cbor' + | 'application/conference-info+xml' + | 'application/cpl+xml' + | 'application/cose' + | 'application/cose-key' + | 'application/cose-key-set' + | 'application/cose-x509' + | 'application/csrattrs' + | 'application/csta+xml' + | 'application/CSTAdata+xml' + | 'application/csvm+json' + | 'application/cwl' + | 'application/cwl+json' + | 'application/cwl+yaml' + | 'application/cwt' + | 'application/cybercash' + | 'application/dash+xml' + | 'application/dash-patch+xml' + | 'application/dashdelta' + | 'application/davmount+xml' + | 'application/dca-rft' + | 'application/DCD' + | 'application/dec-dx' + | 'application/dialog-info+xml' + | 'application/dicom' + | 'application/dicom+json' + | 'application/dicom+xml' + | 'application/DII' + | 'application/DIT' + | 'application/dns' + | 'application/dns+json' + | 'application/dns-message' + | 'application/dots+cbor' + | 'application/dpop+jwt' + | 'application/dskpp+xml' + | 'application/dssc+der' + | 'application/dssc+xml' + | 'application/dvcs' + | 'application/ecmascript' + | 'application/edhoc+cbor-seq' + | 'application/EDI-consent' + | 'application/EDIFACT' + | 'application/EDI-X12' + | 'application/efi' + | 'application/elm+json' + | 'application/elm+xml' + | 'application/EmergencyCallData.cap+xml' + | 'application/EmergencyCallData.Comment+xml' + | 'application/EmergencyCallData.Control+xml' + | 'application/EmergencyCallData.DeviceInfo+xml' + | 'application/EmergencyCallData.eCall.MSD' + | 'application/EmergencyCallData.LegacyESN+json' + | 'application/EmergencyCallData.ProviderInfo+xml' + | 'application/EmergencyCallData.ServiceInfo+xml' + | 'application/EmergencyCallData.SubscriberInfo+xml' + | 'application/EmergencyCallData.VEDS+xml' + | 'application/emma+xml' + | 'application/emotionml+xml' + | 'application/encaprtp' + | 'application/epp+xml' + | 'application/epub+zip' + | 'application/eshop' + | 'application/example' + | 'application/exi' + | 'application/expect-ct-report+json' + | 'application/express' + | 'application/fastinfoset' + | 'application/fastsoap' + | 'application/fdf' + | 'application/fdt+xml' + | 'application/fhir+json' + | 'application/fhir+xml' + | 'application/fits' + | 'application/flexfec' + | 'application/font-sfnt' + | 'application/font-tdpfr' + | 'application/font-woff' + | 'application/framework-attributes+xml' + | 'application/geo+json' + | 'application/geo+json-seq' + | 'application/geopackage+sqlite3' + | 'application/geoxacml+json' + | 'application/geoxacml+xml' + | 'application/gltf-buffer' + | 'application/gml+xml' + | 'application/gnap-binding-jws' + | 'application/gnap-binding-jwsd' + | 'application/gnap-binding-rotation-jws' + | 'application/gnap-binding-rotation-jwsd' + | 'application/grib' + | 'application/gzip' + | 'application/H224' + | 'application/held+xml' + | 'application/hl7v2+xml' + | 'application/http' + | 'application/hyperstudio' + | 'application/ibe-key-request+xml' + | 'application/ibe-pkg-reply+xml' + | 'application/ibe-pp-data' + | 'application/iges' + | 'application/im-iscomposing+xml' + | 'application/index' + | 'application/index.cmd' + | 'application/index.obj' + | 'application/index.response' + | 'application/index.vnd' + | 'application/inkml+xml' + | 'application/IOTP' + | 'application/ipfix' + | 'application/ipp' + | 'application/ISUP' + | 'application/its+xml' + | 'application/java-archive' + | 'application/javascript' + | 'application/jf2feed+json' + | 'application/jose' + | 'application/jose+json' + | 'application/jrd+json' + | 'application/jscalendar+json' + | 'application/jscontact+json' + | 'application/json' + | 'application/json-patch+json' + | 'application/json-seq' + | 'application/jsonpath' + | 'application/jwk+json' + | 'application/jwk-set+json' + | 'application/jwt' + | 'application/kpml-request+xml' + | 'application/kpml-response+xml' + | 'application/ld+json' + | 'application/lgr+xml' + | 'application/link-format' + | 'application/linkset' + | 'application/linkset+json' + | 'application/load-control+xml' + | 'application/logout+jwt' + | 'application/lost+xml' + | 'application/lostsync+xml' + | 'application/lpf+zip' + | 'application/LXF' + | 'application/mac-binhex40' + | 'application/macwriteii' + | 'application/mads+xml' + | 'application/manifest+json' + | 'application/marc' + | 'application/marcxml+xml' + | 'application/mathematica' + | 'application/mathml+xml' + | 'application/mathml-content+xml' + | 'application/mathml-presentation+xml' + | 'application/mbms-associated-procedure-description+xml' + | 'application/mbms-deregister+xml' + | 'application/mbms-envelope+xml' + | 'application/mbms-msk-response+xml' + | 'application/mbms-msk+xml' + | 'application/mbms-protection-description+xml' + | 'application/mbms-reception-report+xml' + | 'application/mbms-register-response+xml' + | 'application/mbms-register+xml' + | 'application/mbms-schedule+xml' + | 'application/mbms-user-service-description+xml' + | 'application/mbox' + | 'application/media_control+xml' + | 'application/media-policy-dataset+xml' + | 'application/mediaservercontrol+xml' + | 'application/merge-patch+json' + | 'application/metalink4+xml' + | 'application/mets+xml' + | 'application/MF4' + | 'application/mikey' + | 'application/mipc' + | 'application/missing-blocks+cbor-seq' + | 'application/mmt-aei+xml' + | 'application/mmt-usd+xml' + | 'application/mods+xml' + | 'application/moss-keys' + | 'application/moss-signature' + | 'application/mosskey-data' + | 'application/mosskey-request' + | 'application/mp21' + | 'application/mp4' + | 'application/mpeg4-generic' + | 'application/mpeg4-iod' + | 'application/mpeg4-iod-xmt' + | 'application/mrb-consumer+xml' + | 'application/mrb-publish+xml' + | 'application/msc-ivr+xml' + | 'application/msc-mixer+xml' + | 'application/msword' + | 'application/mud+json' + | 'application/multipart-core' + | 'application/mxf' + | 'application/n-quads' + | 'application/n-triples' + | 'application/nasdata' + | 'application/news-checkgroups' + | 'application/news-groupinfo' + | 'application/news-transmission' + | 'application/nlsml+xml' + | 'application/node' + | 'application/nss' + | 'application/oauth-authz-req+jwt' + | 'application/oblivious-dns-message' + | 'application/ocsp-request' + | 'application/ocsp-response' + | 'application/octet-stream' + | 'application/ODA' + | 'application/odm+xml' + | 'application/ODX' + | 'application/oebps-package+xml' + | 'application/ogg' + | 'application/ohttp-keys' + | 'application/opc-nodeset+xml' + | 'application/oscore' + | 'application/oxps' + | 'application/p21' + | 'application/p21+zip' + | 'application/p2p-overlay+xml' + | 'application/parityfec' + | 'application/passport' + | 'application/patch-ops-error+xml' + | 'application/pdf' + | 'application/PDX' + | 'application/pem-certificate-chain' + | 'application/pgp-encrypted' + | 'application/pgp-keys' + | 'application/pgp-signature' + | 'application/pidf-diff+xml' + | 'application/pidf+xml' + | 'application/pkcs10' + | 'application/pkcs7-mime' + | 'application/pkcs7-signature' + | 'application/pkcs8' + | 'application/pkcs8-encrypted' + | 'application/pkcs12' + | 'application/pkix-attr-cert' + | 'application/pkix-cert' + | 'application/pkix-crl' + | 'application/pkix-pkipath' + | 'application/pkixcmp' + | 'application/pls+xml' + | 'application/poc-settings+xml' + | 'application/postscript' + | 'application/ppsp-tracker+json' + | 'application/private-token-issuer-directory' + | 'application/private-token-request' + | 'application/private-token-response' + | 'application/problem+json' + | 'application/problem+xml' + | 'application/provenance+xml' + | 'application/prs.alvestrand.titrax-sheet' + | 'application/prs.cww' + | 'application/prs.cyn' + | 'application/prs.hpub+zip' + | 'application/prs.implied-document+xml' + | 'application/prs.implied-executable' + | 'application/prs.implied-object+json' + | 'application/prs.implied-object+json-seq' + | 'application/prs.implied-object+yaml' + | 'application/prs.implied-structure' + | 'application/prs.mayfile' + | 'application/prs.nprend' + | 'application/prs.plucker' + | 'application/prs.rdf-xml-crypt' + | 'application/prs.vcfbzip2' + | 'application/prs.xsf+xml' + | 'application/pskc+xml' + | 'application/pvd+json' + | 'application/rdf+xml' + | 'application/route-apd+xml' + | 'application/route-s-tsid+xml' + | 'application/route-usd+xml' + | 'application/QSIG' + | 'application/raptorfec' + | 'application/rdap+json' + | 'application/reginfo+xml' + | 'application/relax-ng-compact-syntax' + | 'application/remote-printing' + | 'application/reputon+json' + | 'application/resource-lists-diff+xml' + | 'application/resource-lists+xml' + | 'application/rfc+xml' + | 'application/riscos' + | 'application/rlmi+xml' + | 'application/rls-services+xml' + | 'application/rpki-checklist' + | 'application/rpki-ghostbusters' + | 'application/rpki-manifest' + | 'application/rpki-publication' + | 'application/rpki-roa' + | 'application/rpki-signed-tal' + | 'application/rpki-updown' + | 'application/rtf' + | 'application/rtploopback' + | 'application/rtx' + | 'application/samlassertion+xml' + | 'application/samlmetadata+xml' + | 'application/sarif-external-properties+json' + | 'application/sarif+json' + | 'application/sbe' + | 'application/sbml+xml' + | 'application/scaip+xml' + | 'application/scim+json' + | 'application/scvp-cv-request' + | 'application/scvp-cv-response' + | 'application/scvp-vp-request' + | 'application/scvp-vp-response' + | 'application/sdp' + | 'application/secevent+jwt' + | 'application/senml-etch+cbor' + | 'application/senml-etch+json' + | 'application/senml-exi' + | 'application/senml+cbor' + | 'application/senml+json' + | 'application/senml+xml' + | 'application/sensml-exi' + | 'application/sensml+cbor' + | 'application/sensml+json' + | 'application/sensml+xml' + | 'application/sep-exi' + | 'application/sep+xml' + | 'application/session-info' + | 'application/set-payment' + | 'application/set-payment-initiation' + | 'application/set-registration' + | 'application/set-registration-initiation' + | 'application/SGML' + | 'application/sgml-open-catalog' + | 'application/shf+xml' + | 'application/sieve' + | 'application/simple-filter+xml' + | 'application/simple-message-summary' + | 'application/simpleSymbolContainer' + | 'application/sipc' + | 'application/slate' + | 'application/smil' + | 'application/smil+xml' + | 'application/smpte336m' + | 'application/soap+fastinfoset' + | 'application/soap+xml' + | 'application/sparql-query' + | 'application/spdx+json' + | 'application/sparql-results+xml' + | 'application/spirits-event+xml' + | 'application/sql' + | 'application/srgs' + | 'application/srgs+xml' + | 'application/sru+xml' + | 'application/sslkeylogfile' + | 'application/ssml+xml' + | 'application/ST2110-41' + | 'application/stix+json' + | 'application/stratum' + | 'application/swid+cbor' + | 'application/swid+xml' + | 'application/tamp-apex-update' + | 'application/tamp-apex-update-confirm' + | 'application/tamp-community-update' + | 'application/tamp-community-update-confirm' + | 'application/tamp-error' + | 'application/tamp-sequence-adjust' + | 'application/tamp-sequence-adjust-confirm' + | 'application/tamp-status-query' + | 'application/tamp-status-response' + | 'application/tamp-update' + | 'application/tamp-update-confirm' + | 'application/taxii+json' + | 'application/td+json' + | 'application/tei+xml' + | 'application/TETRA_ISI' + | 'application/thraud+xml' + | 'application/timestamp-query' + | 'application/timestamp-reply' + | 'application/timestamped-data' + | 'application/tlsrpt+gzip' + | 'application/tlsrpt+json' + | 'application/tm+json' + | 'application/tnauthlist' + | 'application/token-introspection+jwt' + | 'application/trickle-ice-sdpfrag' + | 'application/trig' + | 'application/ttml+xml' + | 'application/tve-trigger' + | 'application/tzif' + | 'application/tzif-leap' + | 'application/ulpfec' + | 'application/urc-grpsheet+xml' + | 'application/urc-ressheet+xml' + | 'application/urc-targetdesc+xml' + | 'application/urc-uisocketdesc+xml' + | 'application/vc' + | 'application/vcard+json' + | 'application/vcard+xml' + | 'application/vemmi' + | 'application/vnd.1000minds.decision-model+xml' + | 'application/vnd.1ob' + | 'application/vnd.3gpp.5gnas' + | 'application/vnd.3gpp.5gsa2x' + | 'application/vnd.3gpp.5gsa2x-local-service-information' + | 'application/vnd.3gpp.access-transfer-events+xml' + | 'application/vnd.3gpp.bsf+xml' + | 'application/vnd.3gpp.crs+xml' + | 'application/vnd.3gpp.current-location-discovery+xml' + | 'application/vnd.3gpp.GMOP+xml' + | 'application/vnd.3gpp.gtpc' + | 'application/vnd.3gpp.interworking-data' + | 'application/vnd.3gpp.lpp' + | 'application/vnd.3gpp.mc-signalling-ear' + | 'application/vnd.3gpp.mcdata-affiliation-command+xml' + | 'application/vnd.3gpp.mcdata-info+xml' + | 'application/vnd.3gpp.mcdata-msgstore-ctrl-request+xml' + | 'application/vnd.3gpp.mcdata-payload' + | 'application/vnd.3gpp.mcdata-regroup+xml' + | 'application/vnd.3gpp.mcdata-service-config+xml' + | 'application/vnd.3gpp.mcdata-signalling' + | 'application/vnd.3gpp.mcdata-ue-config+xml' + | 'application/vnd.3gpp.mcdata-user-profile+xml' + | 'application/vnd.3gpp.mcptt-affiliation-command+xml' + | 'application/vnd.3gpp.mcptt-floor-request+xml' + | 'application/vnd.3gpp.mcptt-info+xml' + | 'application/vnd.3gpp.mcptt-location-info+xml' + | 'application/vnd.3gpp.mcptt-mbms-usage-info+xml' + | 'application/vnd.3gpp.mcptt-regroup+xml' + | 'application/vnd.3gpp.mcptt-service-config+xml' + | 'application/vnd.3gpp.mcptt-signed+xml' + | 'application/vnd.3gpp.mcptt-ue-config+xml' + | 'application/vnd.3gpp.mcptt-ue-init-config+xml' + | 'application/vnd.3gpp.mcptt-user-profile+xml' + | 'application/vnd.3gpp.mcvideo-affiliation-command+xml' + | 'application/vnd.3gpp.mcvideo-affiliation-info+xml' + | 'application/vnd.3gpp.mcvideo-info+xml' + | 'application/vnd.3gpp.mcvideo-location-info+xml' + | 'application/vnd.3gpp.mcvideo-mbms-usage-info+xml' + | 'application/vnd.3gpp.mcvideo-regroup+xml' + | 'application/vnd.3gpp.mcvideo-service-config+xml' + | 'application/vnd.3gpp.mcvideo-transmission-request+xml' + | 'application/vnd.3gpp.mcvideo-ue-config+xml' + | 'application/vnd.3gpp.mcvideo-user-profile+xml' + | 'application/vnd.3gpp.mid-call+xml' + | 'application/vnd.3gpp.ngap' + | 'application/vnd.3gpp.pfcp' + | 'application/vnd.3gpp.pic-bw-large' + | 'application/vnd.3gpp.pic-bw-small' + | 'application/vnd.3gpp.pic-bw-var' + | 'application/vnd.3gpp.pinapp-info+xml' + | 'application/vnd.3gpp-prose-pc3a+xml' + | 'application/vnd.3gpp-prose-pc3ach+xml' + | 'application/vnd.3gpp-prose-pc3ch+xml' + | 'application/vnd.3gpp-prose-pc8+xml' + | 'application/vnd.3gpp-prose+xml' + | 'application/vnd.3gpp.s1ap' + | 'application/vnd.3gpp.seal-group-doc+xml' + | 'application/vnd.3gpp.seal-info+xml' + | 'application/vnd.3gpp.seal-location-info+xml' + | 'application/vnd.3gpp.seal-mbms-usage-info+xml' + | 'application/vnd.3gpp.seal-network-QoS-management-info+xml' + | 'application/vnd.3gpp.seal-ue-config-info+xml' + | 'application/vnd.3gpp.seal-unicast-info+xml' + | 'application/vnd.3gpp.seal-user-profile-info+xml' + | 'application/vnd.3gpp.sms' + | 'application/vnd.3gpp.sms+xml' + | 'application/vnd.3gpp.srvcc-ext+xml' + | 'application/vnd.3gpp.SRVCC-info+xml' + | 'application/vnd.3gpp.state-and-event-info+xml' + | 'application/vnd.3gpp.ussd+xml' + | 'application/vnd.3gpp.vae-info+xml' + | 'application/vnd.3gpp-v2x-local-service-information' + | 'application/vnd.3gpp2.bcmcsinfo+xml' + | 'application/vnd.3gpp2.sms' + | 'application/vnd.3gpp2.tcap' + | 'application/vnd.3gpp.v2x' + | 'application/vnd.3lightssoftware.imagescal' + | 'application/vnd.3M.Post-it-Notes' + | 'application/vnd.accpac.simply.aso' + | 'application/vnd.accpac.simply.imp' + | 'application/vnd.acm.addressxfer+json' + | 'application/vnd.acm.chatbot+json' + | 'application/vnd.acucobol' + | 'application/vnd.acucorp' + | 'application/vnd.adobe.flash.movie' + | 'application/vnd.adobe.formscentral.fcdt' + | 'application/vnd.adobe.fxp' + | 'application/vnd.adobe.partial-upload' + | 'application/vnd.adobe.xdp+xml' + | 'application/vnd.aether.imp' + | 'application/vnd.afpc.afplinedata' + | 'application/vnd.afpc.afplinedata-pagedef' + | 'application/vnd.afpc.cmoca-cmresource' + | 'application/vnd.afpc.foca-charset' + | 'application/vnd.afpc.foca-codedfont' + | 'application/vnd.afpc.foca-codepage' + | 'application/vnd.afpc.modca' + | 'application/vnd.afpc.modca-cmtable' + | 'application/vnd.afpc.modca-formdef' + | 'application/vnd.afpc.modca-mediummap' + | 'application/vnd.afpc.modca-objectcontainer' + | 'application/vnd.afpc.modca-overlay' + | 'application/vnd.afpc.modca-pagesegment' + | 'application/vnd.age' + | 'application/vnd.ah-barcode' + | 'application/vnd.ahead.space' + | 'application/vnd.airzip.filesecure.azf' + | 'application/vnd.airzip.filesecure.azs' + | 'application/vnd.amadeus+json' + | 'application/vnd.amazon.mobi8-ebook' + | 'application/vnd.americandynamics.acc' + | 'application/vnd.amiga.ami' + | 'application/vnd.amundsen.maze+xml' + | 'application/vnd.android.ota' + | 'application/vnd.anki' + | 'application/vnd.anser-web-certificate-issue-initiation' + | 'application/vnd.antix.game-component' + | 'application/vnd.apache.arrow.file' + | 'application/vnd.apache.arrow.stream' + | 'application/vnd.apache.parquet' + | 'application/vnd.apache.thrift.binary' + | 'application/vnd.apache.thrift.compact' + | 'application/vnd.apache.thrift.json' + | 'application/vnd.apexlang' + | 'application/vnd.api+json' + | 'application/vnd.aplextor.warrp+json' + | 'application/vnd.apothekende.reservation+json' + | 'application/vnd.apple.installer+xml' + | 'application/vnd.apple.keynote' + | 'application/vnd.apple.mpegurl' + | 'application/vnd.apple.numbers' + | 'application/vnd.apple.pages' + | 'application/vnd.arastra.swi' + | 'application/vnd.aristanetworks.swi' + | 'application/vnd.artisan+json' + | 'application/vnd.artsquare' + | 'application/vnd.astraea-software.iota' + | 'application/vnd.audiograph' + | 'application/vnd.autopackage' + | 'application/vnd.avalon+json' + | 'application/vnd.avistar+xml' + | 'application/vnd.balsamiq.bmml+xml' + | 'application/vnd.banana-accounting' + | 'application/vnd.bbf.usp.error' + | 'application/vnd.bbf.usp.msg' + | 'application/vnd.bbf.usp.msg+json' + | 'application/vnd.balsamiq.bmpr' + | 'application/vnd.bekitzur-stech+json' + | 'application/vnd.belightsoft.lhzd+zip' + | 'application/vnd.belightsoft.lhzl+zip' + | 'application/vnd.bint.med-content' + | 'application/vnd.biopax.rdf+xml' + | 'application/vnd.blink-idb-value-wrapper' + | 'application/vnd.blueice.multipass' + | 'application/vnd.bluetooth.ep.oob' + | 'application/vnd.bluetooth.le.oob' + | 'application/vnd.bmi' + | 'application/vnd.bpf' + | 'application/vnd.bpf3' + | 'application/vnd.businessobjects' + | 'application/vnd.byu.uapi+json' + | 'application/vnd.bzip3' + | 'application/vnd.c3voc.schedule+xml' + | 'application/vnd.cab-jscript' + | 'application/vnd.canon-cpdl' + | 'application/vnd.canon-lips' + | 'application/vnd.capasystems-pg+json' + | 'application/vnd.cendio.thinlinc.clientconf' + | 'application/vnd.century-systems.tcp_stream' + | 'application/vnd.chemdraw+xml' + | 'application/vnd.chess-pgn' + | 'application/vnd.chipnuts.karaoke-mmd' + | 'application/vnd.ciedi' + | 'application/vnd.cinderella' + | 'application/vnd.cirpack.isdn-ext' + | 'application/vnd.citationstyles.style+xml' + | 'application/vnd.claymore' + | 'application/vnd.cloanto.rp9' + | 'application/vnd.clonk.c4group' + | 'application/vnd.cluetrust.cartomobile-config' + | 'application/vnd.cluetrust.cartomobile-config-pkg' + | 'application/vnd.cncf.helm.chart.content.v1.tar+gzip' + | 'application/vnd.cncf.helm.chart.provenance.v1.prov' + | 'application/vnd.cncf.helm.config.v1+json' + | 'application/vnd.coffeescript' + | 'application/vnd.collabio.xodocuments.document' + | 'application/vnd.collabio.xodocuments.document-template' + | 'application/vnd.collabio.xodocuments.presentation' + | 'application/vnd.collabio.xodocuments.presentation-template' + | 'application/vnd.collabio.xodocuments.spreadsheet' + | 'application/vnd.collabio.xodocuments.spreadsheet-template' + | 'application/vnd.collection.doc+json' + | 'application/vnd.collection+json' + | 'application/vnd.collection.next+json' + | 'application/vnd.comicbook-rar' + | 'application/vnd.comicbook+zip' + | 'application/vnd.commerce-battelle' + | 'application/vnd.commonspace' + | 'application/vnd.coreos.ignition+json' + | 'application/vnd.cosmocaller' + | 'application/vnd.contact.cmsg' + | 'application/vnd.crick.clicker' + | 'application/vnd.crick.clicker.keyboard' + | 'application/vnd.crick.clicker.palette' + | 'application/vnd.crick.clicker.template' + | 'application/vnd.crick.clicker.wordbank' + | 'application/vnd.criticaltools.wbs+xml' + | 'application/vnd.cryptii.pipe+json' + | 'application/vnd.crypto-shade-file' + | 'application/vnd.cryptomator.encrypted' + | 'application/vnd.cryptomator.vault' + | 'application/vnd.ctc-posml' + | 'application/vnd.ctct.ws+xml' + | 'application/vnd.cups-pdf' + | 'application/vnd.cups-postscript' + | 'application/vnd.cups-ppd' + | 'application/vnd.cups-raster' + | 'application/vnd.cups-raw' + | 'application/vnd.curl' + | 'application/vnd.cyan.dean.root+xml' + | 'application/vnd.cybank' + | 'application/vnd.cyclonedx+json' + | 'application/vnd.cyclonedx+xml' + | 'application/vnd.d2l.coursepackage1p0+zip' + | 'application/vnd.d3m-dataset' + | 'application/vnd.d3m-problem' + | 'application/vnd.dart' + | 'application/vnd.data-vision.rdz' + | 'application/vnd.datalog' + | 'application/vnd.datapackage+json' + | 'application/vnd.dataresource+json' + | 'application/vnd.dbf' + | 'application/vnd.debian.binary-package' + | 'application/vnd.dece.data' + | 'application/vnd.dece.ttml+xml' + | 'application/vnd.dece.unspecified' + | 'application/vnd.dece.zip' + | 'application/vnd.denovo.fcselayout-link' + | 'application/vnd.desmume.movie' + | 'application/vnd.dir-bi.plate-dl-nosuffix' + | 'application/vnd.dm.delegation+xml' + | 'application/vnd.dna' + | 'application/vnd.document+json' + | 'application/vnd.dolby.mobile.1' + | 'application/vnd.dolby.mobile.2' + | 'application/vnd.doremir.scorecloud-binary-document' + | 'application/vnd.dpgraph' + | 'application/vnd.dreamfactory' + | 'application/vnd.drive+json' + | 'application/vnd.dtg.local' + | 'application/vnd.dtg.local.flash' + | 'application/vnd.dtg.local.html' + | 'application/vnd.dvb.ait' + | 'application/vnd.dvb.dvbisl+xml' + | 'application/vnd.dvb.dvbj' + | 'application/vnd.dvb.esgcontainer' + | 'application/vnd.dvb.ipdcdftnotifaccess' + | 'application/vnd.dvb.ipdcesgaccess' + | 'application/vnd.dvb.ipdcesgaccess2' + | 'application/vnd.dvb.ipdcesgpdd' + | 'application/vnd.dvb.ipdcroaming' + | 'application/vnd.dvb.iptv.alfec-base' + | 'application/vnd.dvb.iptv.alfec-enhancement' + | 'application/vnd.dvb.notif-aggregate-root+xml' + | 'application/vnd.dvb.notif-container+xml' + | 'application/vnd.dvb.notif-generic+xml' + | 'application/vnd.dvb.notif-ia-msglist+xml' + | 'application/vnd.dvb.notif-ia-registration-request+xml' + | 'application/vnd.dvb.notif-ia-registration-response+xml' + | 'application/vnd.dvb.notif-init+xml' + | 'application/vnd.dvb.pfr' + | 'application/vnd.dvb.service' + | 'application/vnd.dxr' + | 'application/vnd.dynageo' + | 'application/vnd.dzr' + | 'application/vnd.easykaraoke.cdgdownload' + | 'application/vnd.ecip.rlp' + | 'application/vnd.ecdis-update' + | 'application/vnd.eclipse.ditto+json' + | 'application/vnd.ecowin.chart' + | 'application/vnd.ecowin.filerequest' + | 'application/vnd.ecowin.fileupdate' + | 'application/vnd.ecowin.series' + | 'application/vnd.ecowin.seriesrequest' + | 'application/vnd.ecowin.seriesupdate' + | 'application/vnd.efi.img' + | 'application/vnd.efi.iso' + | 'application/vnd.eln+zip' + | 'application/vnd.emclient.accessrequest+xml' + | 'application/vnd.enliven' + | 'application/vnd.enphase.envoy' + | 'application/vnd.eprints.data+xml' + | 'application/vnd.epson.esf' + | 'application/vnd.epson.msf' + | 'application/vnd.epson.quickanime' + | 'application/vnd.epson.salt' + | 'application/vnd.epson.ssf' + | 'application/vnd.ericsson.quickcall' + | 'application/vnd.erofs' + | 'application/vnd.espass-espass+zip' + | 'application/vnd.eszigno3+xml' + | 'application/vnd.etsi.aoc+xml' + | 'application/vnd.etsi.asic-s+zip' + | 'application/vnd.etsi.asic-e+zip' + | 'application/vnd.etsi.cug+xml' + | 'application/vnd.etsi.iptvcommand+xml' + | 'application/vnd.etsi.iptvdiscovery+xml' + | 'application/vnd.etsi.iptvprofile+xml' + | 'application/vnd.etsi.iptvsad-bc+xml' + | 'application/vnd.etsi.iptvsad-cod+xml' + | 'application/vnd.etsi.iptvsad-npvr+xml' + | 'application/vnd.etsi.iptvservice+xml' + | 'application/vnd.etsi.iptvsync+xml' + | 'application/vnd.etsi.iptvueprofile+xml' + | 'application/vnd.etsi.mcid+xml' + | 'application/vnd.etsi.mheg5' + | 'application/vnd.etsi.overload-control-policy-dataset+xml' + | 'application/vnd.etsi.pstn+xml' + | 'application/vnd.etsi.sci+xml' + | 'application/vnd.etsi.simservs+xml' + | 'application/vnd.etsi.timestamp-token' + | 'application/vnd.etsi.tsl+xml' + | 'application/vnd.etsi.tsl.der' + | 'application/vnd.eu.kasparian.car+json' + | 'application/vnd.eudora.data' + | 'application/vnd.evolv.ecig.profile' + | 'application/vnd.evolv.ecig.settings' + | 'application/vnd.evolv.ecig.theme' + | 'application/vnd.exstream-empower+zip' + | 'application/vnd.exstream-package' + | 'application/vnd.ezpix-album' + | 'application/vnd.ezpix-package' + | 'application/vnd.f-secure.mobile' + | 'application/vnd.fastcopy-disk-image' + | 'application/vnd.familysearch.gedcom+zip' + | 'application/vnd.fdsn.mseed' + | 'application/vnd.fdsn.seed' + | 'application/vnd.ffsns' + | 'application/vnd.ficlab.flb+zip' + | 'application/vnd.filmit.zfc' + | 'application/vnd.fints' + | 'application/vnd.firemonkeys.cloudcell' + | 'application/vnd.FloGraphIt' + | 'application/vnd.fluxtime.clip' + | 'application/vnd.font-fontforge-sfd' + | 'application/vnd.framemaker' + | 'application/vnd.freelog.comic' + | 'application/vnd.frogans.fnc' + | 'application/vnd.frogans.ltf' + | 'application/vnd.fsc.weblaunch' + | 'application/vnd.fujifilm.fb.docuworks' + | 'application/vnd.fujifilm.fb.docuworks.binder' + | 'application/vnd.fujifilm.fb.docuworks.container' + | 'application/vnd.fujifilm.fb.jfi+xml' + | 'application/vnd.fujitsu.oasys' + | 'application/vnd.fujitsu.oasys2' + | 'application/vnd.fujitsu.oasys3' + | 'application/vnd.fujitsu.oasysgp' + | 'application/vnd.fujitsu.oasysprs' + | 'application/vnd.fujixerox.ART4' + | 'application/vnd.fujixerox.ART-EX' + | 'application/vnd.fujixerox.ddd' + | 'application/vnd.fujixerox.docuworks' + | 'application/vnd.fujixerox.docuworks.binder' + | 'application/vnd.fujixerox.docuworks.container' + | 'application/vnd.fujixerox.HBPL' + | 'application/vnd.fut-misnet' + | 'application/vnd.futoin+cbor' + | 'application/vnd.futoin+json' + | 'application/vnd.fuzzysheet' + | 'application/vnd.ga4gh.passport+jwt' + | 'application/vnd.genomatix.tuxedo' + | 'application/vnd.genozip' + | 'application/vnd.gentics.grd+json' + | 'application/vnd.gentoo.catmetadata+xml' + | 'application/vnd.gentoo.ebuild' + | 'application/vnd.gentoo.eclass' + | 'application/vnd.gentoo.gpkg' + | 'application/vnd.gentoo.manifest' + | 'application/vnd.gentoo.xpak' + | 'application/vnd.gentoo.pkgmetadata+xml' + | 'application/vnd.geo+json' + | 'application/vnd.geocube+xml' + | 'application/vnd.geogebra.file' + | 'application/vnd.geogebra.slides' + | 'application/vnd.geogebra.tool' + | 'application/vnd.geometry-explorer' + | 'application/vnd.geonext' + | 'application/vnd.geoplan' + | 'application/vnd.geospace' + | 'application/vnd.gerber' + | 'application/vnd.globalplatform.card-content-mgt' + | 'application/vnd.globalplatform.card-content-mgt-response' + | 'application/vnd.gmx' + | 'application/vnd.gnu.taler.exchange+json' + | 'application/vnd.gnu.taler.merchant+json' + | 'application/vnd.google-earth.kml+xml' + | 'application/vnd.google-earth.kmz' + | 'application/vnd.gov.sk.e-form+xml' + | 'application/vnd.gov.sk.e-form+zip' + | 'application/vnd.gov.sk.xmldatacontainer+xml' + | 'application/vnd.gpxsee.map+xml' + | 'application/vnd.grafeq' + | 'application/vnd.gridmp' + | 'application/vnd.groove-account' + | 'application/vnd.groove-help' + | 'application/vnd.groove-identity-message' + | 'application/vnd.groove-injector' + | 'application/vnd.groove-tool-message' + | 'application/vnd.groove-tool-template' + | 'application/vnd.groove-vcard' + | 'application/vnd.hal+json' + | 'application/vnd.hal+xml' + | 'application/vnd.HandHeld-Entertainment+xml' + | 'application/vnd.hbci' + | 'application/vnd.hc+json' + | 'application/vnd.hcl-bireports' + | 'application/vnd.hdt' + | 'application/vnd.heroku+json' + | 'application/vnd.hhe.lesson-player' + | 'application/vnd.hp-HPGL' + | 'application/vnd.hp-hpid' + | 'application/vnd.hp-hps' + | 'application/vnd.hp-jlyt' + | 'application/vnd.hp-PCL' + | 'application/vnd.hp-PCLXL' + | 'application/vnd.hsl' + | 'application/vnd.httphone' + | 'application/vnd.hydrostatix.sof-data' + | 'application/vnd.hyper-item+json' + | 'application/vnd.hyper+json' + | 'application/vnd.hyperdrive+json' + | 'application/vnd.hzn-3d-crossword' + | 'application/vnd.ibm.afplinedata' + | 'application/vnd.ibm.electronic-media' + | 'application/vnd.ibm.MiniPay' + | 'application/vnd.ibm.modcap' + | 'application/vnd.ibm.rights-management' + | 'application/vnd.ibm.secure-container' + | 'application/vnd.iccprofile' + | 'application/vnd.ieee.1905' + | 'application/vnd.igloader' + | 'application/vnd.imagemeter.folder+zip' + | 'application/vnd.imagemeter.image+zip' + | 'application/vnd.immervision-ivp' + | 'application/vnd.immervision-ivu' + | 'application/vnd.ims.imsccv1p1' + | 'application/vnd.ims.imsccv1p2' + | 'application/vnd.ims.imsccv1p3' + | 'application/vnd.ims.lis.v2.result+json' + | 'application/vnd.ims.lti.v2.toolconsumerprofile+json' + | 'application/vnd.ims.lti.v2.toolproxy.id+json' + | 'application/vnd.ims.lti.v2.toolproxy+json' + | 'application/vnd.ims.lti.v2.toolsettings+json' + | 'application/vnd.ims.lti.v2.toolsettings.simple+json' + | 'application/vnd.informedcontrol.rms+xml' + | 'application/vnd.infotech.project' + | 'application/vnd.infotech.project+xml' + | 'application/vnd.informix-visionary' + | 'application/vnd.innopath.wamp.notification' + | 'application/vnd.insors.igm' + | 'application/vnd.intercon.formnet' + | 'application/vnd.intergeo' + | 'application/vnd.intertrust.digibox' + | 'application/vnd.intertrust.nncp' + | 'application/vnd.intu.qbo' + | 'application/vnd.intu.qfx' + | 'application/vnd.ipfs.ipns-record' + | 'application/vnd.ipld.car' + | 'application/vnd.ipld.dag-cbor' + | 'application/vnd.ipld.dag-json' + | 'application/vnd.ipld.raw' + | 'application/vnd.iptc.g2.catalogitem+xml' + | 'application/vnd.iptc.g2.conceptitem+xml' + | 'application/vnd.iptc.g2.knowledgeitem+xml' + | 'application/vnd.iptc.g2.newsitem+xml' + | 'application/vnd.iptc.g2.newsmessage+xml' + | 'application/vnd.iptc.g2.packageitem+xml' + | 'application/vnd.iptc.g2.planningitem+xml' + | 'application/vnd.ipunplugged.rcprofile' + | 'application/vnd.irepository.package+xml' + | 'application/vnd.is-xpr' + | 'application/vnd.isac.fcs' + | 'application/vnd.jam' + | 'application/vnd.iso11783-10+zip' + | 'application/vnd.japannet-directory-service' + | 'application/vnd.japannet-jpnstore-wakeup' + | 'application/vnd.japannet-payment-wakeup' + | 'application/vnd.japannet-registration' + | 'application/vnd.japannet-registration-wakeup' + | 'application/vnd.japannet-setstore-wakeup' + | 'application/vnd.japannet-verification' + | 'application/vnd.japannet-verification-wakeup' + | 'application/vnd.jcp.javame.midlet-rms' + | 'application/vnd.jisp' + | 'application/vnd.joost.joda-archive' + | 'application/vnd.jsk.isdn-ngn' + | 'application/vnd.kahootz' + | 'application/vnd.kde.karbon' + | 'application/vnd.kde.kchart' + | 'application/vnd.kde.kformula' + | 'application/vnd.kde.kivio' + | 'application/vnd.kde.kontour' + | 'application/vnd.kde.kpresenter' + | 'application/vnd.kde.kspread' + | 'application/vnd.kde.kword' + | 'application/vnd.kenameaapp' + | 'application/vnd.kidspiration' + | 'application/vnd.Kinar' + | 'application/vnd.koan' + | 'application/vnd.kodak-descriptor' + | 'application/vnd.las' + | 'application/vnd.las.las+json' + | 'application/vnd.las.las+xml' + | 'application/vnd.laszip' + | 'application/vnd.ldev.productlicensing' + | 'application/vnd.leap+json' + | 'application/vnd.liberty-request+xml' + | 'application/vnd.llamagraphics.life-balance.desktop' + | 'application/vnd.llamagraphics.life-balance.exchange+xml' + | 'application/vnd.logipipe.circuit+zip' + | 'application/vnd.loom' + | 'application/vnd.lotus-1-2-3' + | 'application/vnd.lotus-approach' + | 'application/vnd.lotus-freelance' + | 'application/vnd.lotus-notes' + | 'application/vnd.lotus-organizer' + | 'application/vnd.lotus-screencam' + | 'application/vnd.lotus-wordpro' + | 'application/vnd.macports.portpkg' + | 'application/vnd.mapbox-vector-tile' + | 'application/vnd.marlin.drm.actiontoken+xml' + | 'application/vnd.marlin.drm.conftoken+xml' + | 'application/vnd.marlin.drm.license+xml' + | 'application/vnd.marlin.drm.mdcf' + | 'application/vnd.mason+json' + | 'application/vnd.maxar.archive.3tz+zip' + | 'application/vnd.maxmind.maxmind-db' + | 'application/vnd.mcd' + | 'application/vnd.mdl' + | 'application/vnd.mdl-mbsdf' + | 'application/vnd.medcalcdata' + | 'application/vnd.mediastation.cdkey' + | 'application/vnd.medicalholodeck.recordxr' + | 'application/vnd.meridian-slingshot' + | 'application/vnd.mermaid' + | 'application/vnd.MFER' + | 'application/vnd.mfmp' + | 'application/vnd.micro+json' + | 'application/vnd.micrografx.flo' + | 'application/vnd.micrografx.igx' + | 'application/vnd.microsoft.portable-executable' + | 'application/vnd.microsoft.windows.thumbnail-cache' + | 'application/vnd.miele+json' + | 'application/vnd.mif' + | 'application/vnd.minisoft-hp3000-save' + | 'application/vnd.mitsubishi.misty-guard.trustweb' + | 'application/vnd.Mobius.DAF' + | 'application/vnd.Mobius.DIS' + | 'application/vnd.Mobius.MBK' + | 'application/vnd.Mobius.MQY' + | 'application/vnd.Mobius.MSL' + | 'application/vnd.Mobius.PLC' + | 'application/vnd.Mobius.TXF' + | 'application/vnd.modl' + | 'application/vnd.mophun.application' + | 'application/vnd.mophun.certificate' + | 'application/vnd.motorola.flexsuite' + | 'application/vnd.motorola.flexsuite.adsi' + | 'application/vnd.motorola.flexsuite.fis' + | 'application/vnd.motorola.flexsuite.gotap' + | 'application/vnd.motorola.flexsuite.kmr' + | 'application/vnd.motorola.flexsuite.ttc' + | 'application/vnd.motorola.flexsuite.wem' + | 'application/vnd.motorola.iprm' + | 'application/vnd.mozilla.xul+xml' + | 'application/vnd.ms-artgalry' + | 'application/vnd.ms-asf' + | 'application/vnd.ms-cab-compressed' + | 'application/vnd.ms-3mfdocument' + | 'application/vnd.ms-excel' + | 'application/vnd.ms-excel.addin.macroEnabled.12' + | 'application/vnd.ms-excel.sheet.binary.macroEnabled.12' + | 'application/vnd.ms-excel.sheet.macroEnabled.12' + | 'application/vnd.ms-excel.template.macroEnabled.12' + | 'application/vnd.ms-fontobject' + | 'application/vnd.ms-htmlhelp' + | 'application/vnd.ms-ims' + | 'application/vnd.ms-lrm' + | 'application/vnd.ms-office.activeX+xml' + | 'application/vnd.ms-officetheme' + | 'application/vnd.ms-playready.initiator+xml' + | 'application/vnd.ms-powerpoint' + | 'application/vnd.ms-powerpoint.addin.macroEnabled.12' + | 'application/vnd.ms-powerpoint.presentation.macroEnabled.12' + | 'application/vnd.ms-powerpoint.slide.macroEnabled.12' + | 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12' + | 'application/vnd.ms-powerpoint.template.macroEnabled.12' + | 'application/vnd.ms-PrintDeviceCapabilities+xml' + | 'application/vnd.ms-PrintSchemaTicket+xml' + | 'application/vnd.ms-project' + | 'application/vnd.ms-tnef' + | 'application/vnd.ms-windows.devicepairing' + | 'application/vnd.ms-windows.nwprinting.oob' + | 'application/vnd.ms-windows.printerpairing' + | 'application/vnd.ms-windows.wsd.oob' + | 'application/vnd.ms-wmdrm.lic-chlg-req' + | 'application/vnd.ms-wmdrm.lic-resp' + | 'application/vnd.ms-wmdrm.meter-chlg-req' + | 'application/vnd.ms-wmdrm.meter-resp' + | 'application/vnd.ms-word.document.macroEnabled.12' + | 'application/vnd.ms-word.template.macroEnabled.12' + | 'application/vnd.ms-works' + | 'application/vnd.ms-wpl' + | 'application/vnd.ms-xpsdocument' + | 'application/vnd.msa-disk-image' + | 'application/vnd.mseq' + | 'application/vnd.msgpack' + | 'application/vnd.msign' + | 'application/vnd.multiad.creator' + | 'application/vnd.multiad.creator.cif' + | 'application/vnd.musician' + | 'application/vnd.music-niff' + | 'application/vnd.muvee.style' + | 'application/vnd.mynfc' + | 'application/vnd.nacamar.ybrid+json' + | 'application/vnd.nato.bindingdataobject+cbor' + | 'application/vnd.nato.bindingdataobject+json' + | 'application/vnd.nato.bindingdataobject+xml' + | 'application/vnd.nato.openxmlformats-package.iepd+zip' + | 'application/vnd.ncd.control' + | 'application/vnd.ncd.reference' + | 'application/vnd.nearst.inv+json' + | 'application/vnd.nebumind.line' + | 'application/vnd.nervana' + | 'application/vnd.netfpx' + | 'application/vnd.neurolanguage.nlu' + | 'application/vnd.nimn' + | 'application/vnd.nintendo.snes.rom' + | 'application/vnd.nintendo.nitro.rom' + | 'application/vnd.nitf' + | 'application/vnd.noblenet-directory' + | 'application/vnd.noblenet-sealer' + | 'application/vnd.noblenet-web' + | 'application/vnd.nokia.catalogs' + | 'application/vnd.nokia.conml+wbxml' + | 'application/vnd.nokia.conml+xml' + | 'application/vnd.nokia.iptv.config+xml' + | 'application/vnd.nokia.iSDS-radio-presets' + | 'application/vnd.nokia.landmark+wbxml' + | 'application/vnd.nokia.landmark+xml' + | 'application/vnd.nokia.landmarkcollection+xml' + | 'application/vnd.nokia.ncd' + | 'application/vnd.nokia.n-gage.ac+xml' + | 'application/vnd.nokia.n-gage.data' + | 'application/vnd.nokia.n-gage.symbian.install' + | 'application/vnd.nokia.pcd+wbxml' + | 'application/vnd.nokia.pcd+xml' + | 'application/vnd.nokia.radio-preset' + | 'application/vnd.nokia.radio-presets' + | 'application/vnd.novadigm.EDM' + | 'application/vnd.novadigm.EDX' + | 'application/vnd.novadigm.EXT' + | 'application/vnd.ntt-local.content-share' + | 'application/vnd.ntt-local.file-transfer' + | 'application/vnd.ntt-local.ogw_remote-access' + | 'application/vnd.ntt-local.sip-ta_remote' + | 'application/vnd.ntt-local.sip-ta_tcp_stream' + | 'application/vnd.oai.workflows' + | 'application/vnd.oai.workflows+json' + | 'application/vnd.oai.workflows+yaml' + | 'application/vnd.oasis.opendocument.base' + | 'application/vnd.oasis.opendocument.chart' + | 'application/vnd.oasis.opendocument.chart-template' + | 'application/vnd.oasis.opendocument.database' + | 'application/vnd.oasis.opendocument.formula' + | 'application/vnd.oasis.opendocument.formula-template' + | 'application/vnd.oasis.opendocument.graphics' + | 'application/vnd.oasis.opendocument.graphics-template' + | 'application/vnd.oasis.opendocument.image' + | 'application/vnd.oasis.opendocument.image-template' + | 'application/vnd.oasis.opendocument.presentation' + | 'application/vnd.oasis.opendocument.presentation-template' + | 'application/vnd.oasis.opendocument.spreadsheet' + | 'application/vnd.oasis.opendocument.spreadsheet-template' + | 'application/vnd.oasis.opendocument.text' + | 'application/vnd.oasis.opendocument.text-master' + | 'application/vnd.oasis.opendocument.text-master-template' + | 'application/vnd.oasis.opendocument.text-template' + | 'application/vnd.oasis.opendocument.text-web' + | 'application/vnd.obn' + | 'application/vnd.ocf+cbor' + | 'application/vnd.oci.image.manifest.v1+json' + | 'application/vnd.oftn.l10n+json' + | 'application/vnd.oipf.contentaccessdownload+xml' + | 'application/vnd.oipf.contentaccessstreaming+xml' + | 'application/vnd.oipf.cspg-hexbinary' + | 'application/vnd.oipf.dae.svg+xml' + | 'application/vnd.oipf.dae.xhtml+xml' + | 'application/vnd.oipf.mippvcontrolmessage+xml' + | 'application/vnd.oipf.pae.gem' + | 'application/vnd.oipf.spdiscovery+xml' + | 'application/vnd.oipf.spdlist+xml' + | 'application/vnd.oipf.ueprofile+xml' + | 'application/vnd.oipf.userprofile+xml' + | 'application/vnd.olpc-sugar' + | 'application/vnd.oma.bcast.associated-procedure-parameter+xml' + | 'application/vnd.oma.bcast.drm-trigger+xml' + | 'application/vnd.oma.bcast.imd+xml' + | 'application/vnd.oma.bcast.ltkm' + | 'application/vnd.oma.bcast.notification+xml' + | 'application/vnd.oma.bcast.provisioningtrigger' + | 'application/vnd.oma.bcast.sgboot' + | 'application/vnd.oma.bcast.sgdd+xml' + | 'application/vnd.oma.bcast.sgdu' + | 'application/vnd.oma.bcast.simple-symbol-container' + | 'application/vnd.oma.bcast.smartcard-trigger+xml' + | 'application/vnd.oma.bcast.sprov+xml' + | 'application/vnd.oma.bcast.stkm' + | 'application/vnd.oma.cab-address-book+xml' + | 'application/vnd.oma.cab-feature-handler+xml' + | 'application/vnd.oma.cab-pcc+xml' + | 'application/vnd.oma.cab-subs-invite+xml' + | 'application/vnd.oma.cab-user-prefs+xml' + | 'application/vnd.oma.dcd' + | 'application/vnd.oma.dcdc' + | 'application/vnd.oma.dd2+xml' + | 'application/vnd.oma.drm.risd+xml' + | 'application/vnd.oma.group-usage-list+xml' + | 'application/vnd.oma.lwm2m+cbor' + | 'application/vnd.oma.lwm2m+json' + | 'application/vnd.oma.lwm2m+tlv' + | 'application/vnd.oma.pal+xml' + | 'application/vnd.oma.poc.detailed-progress-report+xml' + | 'application/vnd.oma.poc.final-report+xml' + | 'application/vnd.oma.poc.groups+xml' + | 'application/vnd.oma.poc.invocation-descriptor+xml' + | 'application/vnd.oma.poc.optimized-progress-report+xml' + | 'application/vnd.oma.push' + | 'application/vnd.oma.scidm.messages+xml' + | 'application/vnd.oma.xcap-directory+xml' + | 'application/vnd.omads-email+xml' + | 'application/vnd.omads-file+xml' + | 'application/vnd.omads-folder+xml' + | 'application/vnd.omaloc-supl-init' + | 'application/vnd.oma-scws-config' + | 'application/vnd.oma-scws-http-request' + | 'application/vnd.oma-scws-http-response' + | 'application/vnd.onepager' + | 'application/vnd.onepagertamp' + | 'application/vnd.onepagertamx' + | 'application/vnd.onepagertat' + | 'application/vnd.onepagertatp' + | 'application/vnd.onepagertatx' + | 'application/vnd.onvif.metadata' + | 'application/vnd.openblox.game-binary' + | 'application/vnd.openblox.game+xml' + | 'application/vnd.openeye.oeb' + | 'application/vnd.openstreetmap.data+xml' + | 'application/vnd.opentimestamps.ots' + | 'application/vnd.openxmlformats-officedocument.custom-properties+xml' + | 'application/vnd.openxmlformats-officedocument.customXmlProperties+xml' + | 'application/vnd.openxmlformats-officedocument.drawing+xml' + | 'application/vnd.openxmlformats-officedocument.drawingml.chart+xml' + | 'application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml' + | 'application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml' + | 'application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml' + | 'application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml' + | 'application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml' + | 'application/vnd.openxmlformats-officedocument.extended-properties+xml' + | 'application/vnd.openxmlformats-officedocument.presentationml.commentAuthors+xml' + | 'application/vnd.openxmlformats-officedocument.presentationml.comments+xml' + | 'application/vnd.openxmlformats-officedocument.presentationml.handoutMaster+xml' + | 'application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml' + | 'application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml' + | 'application/vnd.openxmlformats-officedocument.presentationml.presentation' + | 'application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml' + | 'application/vnd.openxmlformats-officedocument.presentationml.presProps+xml' + | 'application/vnd.openxmlformats-officedocument.presentationml.slide' + | 'application/vnd.openxmlformats-officedocument.presentationml.slide+xml' + | 'application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml' + | 'application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml' + | 'application/vnd.openxmlformats-officedocument.presentationml.slideshow' + | 'application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml' + | 'application/vnd.openxmlformats-officedocument.presentationml.slideUpdateInfo+xml' + | 'application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml' + | 'application/vnd.openxmlformats-officedocument.presentationml.tags+xml' + | 'application/vnd.openxmlformats-officedocument.presentationml.template' + | 'application/vnd.openxmlformats-officedocument.presentationml.template.main+xml' + | 'application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml' + | 'application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml' + | 'application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml' + | 'application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml' + | 'application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml' + | 'application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml' + | 'application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml' + | 'application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml' + | 'application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml' + | 'application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml' + | 'application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml' + | 'application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml' + | 'application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml' + | 'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml' + | 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' + | 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml' + | 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml' + | 'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml' + | 'application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml' + | 'application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml' + | 'application/vnd.openxmlformats-officedocument.spreadsheetml.template' + | 'application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml' + | 'application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml' + | 'application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml' + | 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml' + | 'application/vnd.openxmlformats-officedocument.theme+xml' + | 'application/vnd.openxmlformats-officedocument.themeOverride+xml' + | 'application/vnd.openxmlformats-officedocument.vmlDrawing' + | 'application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml' + | 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' + | 'application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml' + | 'application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml' + | 'application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml' + | 'application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml' + | 'application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml' + | 'application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml' + | 'application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml' + | 'application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml' + | 'application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml' + | 'application/vnd.openxmlformats-officedocument.wordprocessingml.template' + | 'application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml' + | 'application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml' + | 'application/vnd.openxmlformats-package.core-properties+xml' + | 'application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml' + | 'application/vnd.openxmlformats-package.relationships+xml' + | 'application/vnd.oracle.resource+json' + | 'application/vnd.orange.indata' + | 'application/vnd.osa.netdeploy' + | 'application/vnd.osgeo.mapguide.package' + | 'application/vnd.osgi.bundle' + | 'application/vnd.osgi.dp' + | 'application/vnd.osgi.subsystem' + | 'application/vnd.otps.ct-kip+xml' + | 'application/vnd.oxli.countgraph' + | 'application/vnd.pagerduty+json' + | 'application/vnd.palm' + | 'application/vnd.panoply' + | 'application/vnd.paos.xml' + | 'application/vnd.patentdive' + | 'application/vnd.patientecommsdoc' + | 'application/vnd.pawaafile' + | 'application/vnd.pcos' + | 'application/vnd.pg.format' + | 'application/vnd.pg.osasli' + | 'application/vnd.piaccess.application-licence' + | 'application/vnd.picsel' + | 'application/vnd.pmi.widget' + | 'application/vnd.poc.group-advertisement+xml' + | 'application/vnd.pocketlearn' + | 'application/vnd.powerbuilder6' + | 'application/vnd.powerbuilder6-s' + | 'application/vnd.powerbuilder7' + | 'application/vnd.powerbuilder75' + | 'application/vnd.powerbuilder75-s' + | 'application/vnd.powerbuilder7-s' + | 'application/vnd.preminet' + | 'application/vnd.previewsystems.box' + | 'application/vnd.proteus.magazine' + | 'application/vnd.psfs' + | 'application/vnd.pt.mundusmundi' + | 'application/vnd.publishare-delta-tree' + | 'application/vnd.pvi.ptid1' + | 'application/vnd.pwg-multiplexed' + | 'application/vnd.pwg-xhtml-print+xml' + | 'application/vnd.qualcomm.brew-app-res' + | 'application/vnd.quarantainenet' + | 'application/vnd.Quark.QuarkXPress' + | 'application/vnd.quobject-quoxdocument' + | 'application/vnd.radisys.moml+xml' + | 'application/vnd.radisys.msml-audit-conf+xml' + | 'application/vnd.radisys.msml-audit-conn+xml' + | 'application/vnd.radisys.msml-audit-dialog+xml' + | 'application/vnd.radisys.msml-audit-stream+xml' + | 'application/vnd.radisys.msml-audit+xml' + | 'application/vnd.radisys.msml-conf+xml' + | 'application/vnd.radisys.msml-dialog-base+xml' + | 'application/vnd.radisys.msml-dialog-fax-detect+xml' + | 'application/vnd.radisys.msml-dialog-fax-sendrecv+xml' + | 'application/vnd.radisys.msml-dialog-group+xml' + | 'application/vnd.radisys.msml-dialog-speech+xml' + | 'application/vnd.radisys.msml-dialog-transform+xml' + | 'application/vnd.radisys.msml-dialog+xml' + | 'application/vnd.radisys.msml+xml' + | 'application/vnd.rainstor.data' + | 'application/vnd.rapid' + | 'application/vnd.rar' + | 'application/vnd.realvnc.bed' + | 'application/vnd.recordare.musicxml' + | 'application/vnd.recordare.musicxml+xml' + | 'application/vnd.relpipe' + | 'application/vnd.RenLearn.rlprint' + | 'application/vnd.resilient.logic' + | 'application/vnd.restful+json' + | 'application/vnd.rig.cryptonote' + | 'application/vnd.route66.link66+xml' + | 'application/vnd.rs-274x' + | 'application/vnd.ruckus.download' + | 'application/vnd.s3sms' + | 'application/vnd.sailingtracker.track' + | 'application/vnd.sar' + | 'application/vnd.sbm.cid' + | 'application/vnd.sbm.mid2' + | 'application/vnd.scribus' + | 'application/vnd.sealed.3df' + | 'application/vnd.sealed.csf' + | 'application/vnd.sealed.doc' + | 'application/vnd.sealed.eml' + | 'application/vnd.sealed.mht' + | 'application/vnd.sealed.net' + | 'application/vnd.sealed.ppt' + | 'application/vnd.sealed.tiff' + | 'application/vnd.sealed.xls' + | 'application/vnd.sealedmedia.softseal.html' + | 'application/vnd.sealedmedia.softseal.pdf' + | 'application/vnd.seemail' + | 'application/vnd.seis+json' + | 'application/vnd.sema' + | 'application/vnd.semd' + | 'application/vnd.semf' + | 'application/vnd.shade-save-file' + | 'application/vnd.shana.informed.formdata' + | 'application/vnd.shana.informed.formtemplate' + | 'application/vnd.shana.informed.interchange' + | 'application/vnd.shana.informed.package' + | 'application/vnd.shootproof+json' + | 'application/vnd.shopkick+json' + | 'application/vnd.shp' + | 'application/vnd.shx' + | 'application/vnd.sigrok.session' + | 'application/vnd.SimTech-MindMapper' + | 'application/vnd.siren+json' + | 'application/vnd.smaf' + | 'application/vnd.smart.notebook' + | 'application/vnd.smart.teacher' + | 'application/vnd.smintio.portals.archive' + | 'application/vnd.snesdev-page-table' + | 'application/vnd.software602.filler.form+xml' + | 'application/vnd.software602.filler.form-xml-zip' + | 'application/vnd.solent.sdkm+xml' + | 'application/vnd.spotfire.dxp' + | 'application/vnd.spotfire.sfs' + | 'application/vnd.sqlite3' + | 'application/vnd.sss-cod' + | 'application/vnd.sss-dtf' + | 'application/vnd.sss-ntf' + | 'application/vnd.stepmania.package' + | 'application/vnd.stepmania.stepchart' + | 'application/vnd.street-stream' + | 'application/vnd.sun.wadl+xml' + | 'application/vnd.sus-calendar' + | 'application/vnd.svd' + | 'application/vnd.swiftview-ics' + | 'application/vnd.sybyl.mol2' + | 'application/vnd.sycle+xml' + | 'application/vnd.syft+json' + | 'application/vnd.syncml.dm.notification' + | 'application/vnd.syncml.dmddf+xml' + | 'application/vnd.syncml.dmtnds+wbxml' + | 'application/vnd.syncml.dmtnds+xml' + | 'application/vnd.syncml.dmddf+wbxml' + | 'application/vnd.syncml.dm+wbxml' + | 'application/vnd.syncml.dm+xml' + | 'application/vnd.syncml.ds.notification' + | 'application/vnd.syncml+xml' + | 'application/vnd.tableschema+json' + | 'application/vnd.tao.intent-module-archive' + | 'application/vnd.tcpdump.pcap' + | 'application/vnd.think-cell.ppttc+json' + | 'application/vnd.tml' + | 'application/vnd.tmd.mediaflex.api+xml' + | 'application/vnd.tmobile-livetv' + | 'application/vnd.tri.onesource' + | 'application/vnd.trid.tpt' + | 'application/vnd.triscape.mxs' + | 'application/vnd.trueapp' + | 'application/vnd.truedoc' + | 'application/vnd.ubisoft.webplayer' + | 'application/vnd.ufdl' + | 'application/vnd.uiq.theme' + | 'application/vnd.umajin' + | 'application/vnd.unity' + | 'application/vnd.uoml+xml' + | 'application/vnd.uplanet.alert' + | 'application/vnd.uplanet.alert-wbxml' + | 'application/vnd.uplanet.bearer-choice' + | 'application/vnd.uplanet.bearer-choice-wbxml' + | 'application/vnd.uplanet.cacheop' + | 'application/vnd.uplanet.cacheop-wbxml' + | 'application/vnd.uplanet.channel' + | 'application/vnd.uplanet.channel-wbxml' + | 'application/vnd.uplanet.list' + | 'application/vnd.uplanet.listcmd' + | 'application/vnd.uplanet.listcmd-wbxml' + | 'application/vnd.uplanet.list-wbxml' + | 'application/vnd.uri-map' + | 'application/vnd.uplanet.signal' + | 'application/vnd.valve.source.material' + | 'application/vnd.vcx' + | 'application/vnd.vd-study' + | 'application/vnd.vectorworks' + | 'application/vnd.vel+json' + | 'application/vnd.verimatrix.vcas' + | 'application/vnd.veritone.aion+json' + | 'application/vnd.veryant.thin' + | 'application/vnd.ves.encrypted' + | 'application/vnd.vidsoft.vidconference' + | 'application/vnd.visio' + | 'application/vnd.visionary' + | 'application/vnd.vividence.scriptfile' + | 'application/vnd.vsf' + | 'application/vnd.wap.sic' + | 'application/vnd.wap.slc' + | 'application/vnd.wap.wbxml' + | 'application/vnd.wap.wmlc' + | 'application/vnd.wap.wmlscriptc' + | 'application/vnd.wasmflow.wafl' + | 'application/vnd.webturbo' + | 'application/vnd.wfa.dpp' + | 'application/vnd.wfa.p2p' + | 'application/vnd.wfa.wsc' + | 'application/vnd.windows.devicepairing' + | 'application/vnd.wmc' + | 'application/vnd.wmf.bootstrap' + | 'application/vnd.wolfram.mathematica' + | 'application/vnd.wolfram.mathematica.package' + | 'application/vnd.wolfram.player' + | 'application/vnd.wordlift' + | 'application/vnd.wordperfect' + | 'application/vnd.wqd' + | 'application/vnd.wrq-hp3000-labelled' + | 'application/vnd.wt.stf' + | 'application/vnd.wv.csp+xml' + | 'application/vnd.wv.csp+wbxml' + | 'application/vnd.wv.ssp+xml' + | 'application/vnd.xacml+json' + | 'application/vnd.xara' + | 'application/vnd.xecrets-encrypted' + | 'application/vnd.xfdl' + | 'application/vnd.xfdl.webform' + | 'application/vnd.xmi+xml' + | 'application/vnd.xmpie.cpkg' + | 'application/vnd.xmpie.dpkg' + | 'application/vnd.xmpie.plan' + | 'application/vnd.xmpie.ppkg' + | 'application/vnd.xmpie.xlim' + | 'application/vnd.yamaha.hv-dic' + | 'application/vnd.yamaha.hv-script' + | 'application/vnd.yamaha.hv-voice' + | 'application/vnd.yamaha.openscoreformat.osfpvg+xml' + | 'application/vnd.yamaha.openscoreformat' + | 'application/vnd.yamaha.remote-setup' + | 'application/vnd.yamaha.smaf-audio' + | 'application/vnd.yamaha.smaf-phrase' + | 'application/vnd.yamaha.through-ngn' + | 'application/vnd.yamaha.tunnel-udpencap' + | 'application/vnd.yaoweme' + | 'application/vnd.yellowriver-custom-menu' + | 'application/vnd.youtube.yt' + | 'application/vnd.zul' + | 'application/vnd.zzazz.deck+xml' + | 'application/voicexml+xml' + | 'application/voucher-cms+json' + | 'application/vp' + | 'application/vq-rtcpxr' + | 'application/wasm' + | 'application/watcherinfo+xml' + | 'application/webpush-options+json' + | 'application/whoispp-query' + | 'application/whoispp-response' + | 'application/widget' + | 'application/wita' + | 'application/wordperfect5.1' + | 'application/wsdl+xml' + | 'application/wspolicy+xml' + | 'application/x-pki-message' + | 'application/x-www-form-urlencoded' + | 'application/x-x509-ca-cert' + | 'application/x-x509-ca-ra-cert' + | 'application/x-x509-next-ca-cert' + | 'application/x400-bp' + | 'application/xacml+xml' + | 'application/xcap-att+xml' + | 'application/xcap-caps+xml' + | 'application/xcap-diff+xml' + | 'application/xcap-el+xml' + | 'application/xcap-error+xml' + | 'application/xcap-ns+xml' + | 'application/xcon-conference-info-diff+xml' + | 'application/xcon-conference-info+xml' + | 'application/xenc+xml' + | 'application/xfdf' + | 'application/xhtml+xml' + | 'application/xliff+xml' + | 'application/xml' + | 'application/xml-dtd' + | 'application/xml-external-parsed-entity' + | 'application/xml-patch+xml' + | 'application/xmpp+xml' + | 'application/xop+xml' + | 'application/xslt+xml' + | 'application/xv+xml' + | 'application/yaml' + | 'application/yang' + | 'application/yang-data+cbor' + | 'application/yang-data+json' + | 'application/yang-data+xml' + | 'application/yang-patch+json' + | 'application/yang-patch+xml' + | 'application/yang-sid+json' + | 'application/yin+xml' + | 'application/zip' + | 'application/zlib' + | 'application/zstd' + | 'audio/1d-interleaved-parityfec' + | 'audio/32kadpcm' + | 'audio/3gpp' + | 'audio/3gpp2' + | 'audio/aac' + | 'audio/ac3' + | 'audio/AMR' + | 'audio/AMR-WB' + | 'audio/amr-wb+' + | 'audio/aptx' + | 'audio/asc' + | 'audio/ATRAC-ADVANCED-LOSSLESS' + | 'audio/ATRAC-X' + | 'audio/ATRAC3' + | 'audio/basic' + | 'audio/BV16' + | 'audio/BV32' + | 'audio/clearmode' + | 'audio/CN' + | 'audio/DAT12' + | 'audio/dls' + | 'audio/dsr-es201108' + | 'audio/dsr-es202050' + | 'audio/dsr-es202211' + | 'audio/dsr-es202212' + | 'audio/DV' + | 'audio/DVI4' + | 'audio/eac3' + | 'audio/encaprtp' + | 'audio/EVRC' + | 'audio/EVRC-QCP' + | 'audio/EVRC0' + | 'audio/EVRC1' + | 'audio/EVRCB' + | 'audio/EVRCB0' + | 'audio/EVRCB1' + | 'audio/EVRCNW' + | 'audio/EVRCNW0' + | 'audio/EVRCNW1' + | 'audio/EVRCWB' + | 'audio/EVRCWB0' + | 'audio/EVRCWB1' + | 'audio/EVS' + | 'audio/example' + | 'audio/flac' + | 'audio/flexfec' + | 'audio/fwdred' + | 'audio/G711-0' + | 'audio/G719' + | 'audio/G7221' + | 'audio/G722' + | 'audio/G723' + | 'audio/G726-16' + | 'audio/G726-24' + | 'audio/G726-32' + | 'audio/G726-40' + | 'audio/G728' + | 'audio/G729' + | 'audio/G7291' + | 'audio/G729D' + | 'audio/G729E' + | 'audio/GSM' + | 'audio/GSM-EFR' + | 'audio/GSM-HR-08' + | 'audio/iLBC' + | 'audio/ip-mr_v2.5' + | 'audio/L8' + | 'audio/L16' + | 'audio/L20' + | 'audio/L24' + | 'audio/LPC' + | 'audio/matroska' + | 'audio/MELP' + | 'audio/MELP600' + | 'audio/MELP1200' + | 'audio/MELP2400' + | 'audio/mhas' + | 'audio/midi-clip' + | 'audio/mobile-xmf' + | 'audio/MPA' + | 'audio/mp4' + | 'audio/MP4A-LATM' + | 'audio/mpa-robust' + | 'audio/mpeg' + | 'audio/mpeg4-generic' + | 'audio/ogg' + | 'audio/opus' + | 'audio/parityfec' + | 'audio/PCMA' + | 'audio/PCMA-WB' + | 'audio/PCMU' + | 'audio/PCMU-WB' + | 'audio/prs.sid' + | 'audio/QCELP' + | 'audio/raptorfec' + | 'audio/RED' + | 'audio/rtp-enc-aescm128' + | 'audio/rtploopback' + | 'audio/rtp-midi' + | 'audio/rtx' + | 'audio/scip' + | 'audio/SMV' + | 'audio/SMV0' + | 'audio/SMV-QCP' + | 'audio/sofa' + | 'audio/sp-midi' + | 'audio/speex' + | 'audio/t140c' + | 'audio/t38' + | 'audio/telephone-event' + | 'audio/TETRA_ACELP' + | 'audio/TETRA_ACELP_BB' + | 'audio/tone' + | 'audio/TSVCIS' + | 'audio/UEMCLIP' + | 'audio/ulpfec' + | 'audio/usac' + | 'audio/VDVI' + | 'audio/VMR-WB' + | 'audio/vnd.3gpp.iufp' + | 'audio/vnd.4SB' + | 'audio/vnd.audiokoz' + | 'audio/vnd.CELP' + | 'audio/vnd.cisco.nse' + | 'audio/vnd.cmles.radio-events' + | 'audio/vnd.cns.anp1' + | 'audio/vnd.cns.inf1' + | 'audio/vnd.dece.audio' + | 'audio/vnd.digital-winds' + | 'audio/vnd.dlna.adts' + | 'audio/vnd.dolby.heaac.1' + | 'audio/vnd.dolby.heaac.2' + | 'audio/vnd.dolby.mlp' + | 'audio/vnd.dolby.mps' + | 'audio/vnd.dolby.pl2' + | 'audio/vnd.dolby.pl2x' + | 'audio/vnd.dolby.pl2z' + | 'audio/vnd.dolby.pulse.1' + | 'audio/vnd.dra' + | 'audio/vnd.dts' + | 'audio/vnd.dts.hd' + | 'audio/vnd.dts.uhd' + | 'audio/vnd.dvb.file' + | 'audio/vnd.everad.plj' + | 'audio/vnd.hns.audio' + | 'audio/vnd.lucent.voice' + | 'audio/vnd.ms-playready.media.pya' + | 'audio/vnd.nokia.mobile-xmf' + | 'audio/vnd.nortel.vbk' + | 'audio/vnd.nuera.ecelp4800' + | 'audio/vnd.nuera.ecelp7470' + | 'audio/vnd.nuera.ecelp9600' + | 'audio/vnd.octel.sbc' + | 'audio/vnd.presonus.multitrack' + | 'audio/vnd.qcelp' + | 'audio/vnd.rhetorex.32kadpcm' + | 'audio/vnd.rip' + | 'audio/vnd.sealedmedia.softseal.mpeg' + | 'audio/vnd.vmx.cvsd' + | 'audio/vorbis' + | 'audio/vorbis-config' + | 'font/collection' + | 'font/otf' + | 'font/sfnt' + | 'font/ttf' + | 'font/woff' + | 'font/woff2' + | 'haptics/ivs' + | 'haptics/hjif' + | 'haptics/hmpg' + | 'image/aces' + | 'image/apng' + | 'image/avci' + | 'image/avcs' + | 'image/avif' + | 'image/bmp' + | 'image/cgm' + | 'image/dicom-rle' + | 'image/dpx' + | 'image/emf' + | 'image/example' + | 'image/fits' + | 'image/g3fax' + | 'image/gif' + | 'image/heic' + | 'image/heic-sequence' + | 'image/heif' + | 'image/heif-sequence' + | 'image/hej2k' + | 'image/hsj2' + | 'image/ief' + | 'image/j2c' + | 'image/jls' + | 'image/jp2' + | 'image/jpeg' + | 'image/jph' + | 'image/jphc' + | 'image/jpm' + | 'image/jpx' + | 'image/jxl' + | 'image/jxr' + | 'image/jxrA' + | 'image/jxrS' + | 'image/jxs' + | 'image/jxsc' + | 'image/jxsi' + | 'image/jxss' + | 'image/ktx' + | 'image/ktx2' + | 'image/naplps' + | 'image/png' + | 'image/prs.btif' + | 'image/prs.pti' + | 'image/pwg-raster' + | 'image/svg+xml' + | 'image/t38' + | 'image/tiff' + | 'image/tiff-fx' + | 'image/vnd.adobe.photoshop' + | 'image/vnd.airzip.accelerator.azv' + | 'image/vnd.cns.inf2' + | 'image/vnd.dece.graphic' + | 'image/vnd.djvu' + | 'image/vnd.dwg' + | 'image/vnd.dxf' + | 'image/vnd.dvb.subtitle' + | 'image/vnd.fastbidsheet' + | 'image/vnd.fpx' + | 'image/vnd.fst' + | 'image/vnd.fujixerox.edmics-mmr' + | 'image/vnd.fujixerox.edmics-rlc' + | 'image/vnd.globalgraphics.pgb' + | 'image/vnd.microsoft.icon' + | 'image/vnd.mix' + | 'image/vnd.ms-modi' + | 'image/vnd.mozilla.apng' + | 'image/vnd.net-fpx' + | 'image/vnd.pco.b16' + | 'image/vnd.radiance' + | 'image/vnd.sealed.png' + | 'image/vnd.sealedmedia.softseal.gif' + | 'image/vnd.sealedmedia.softseal.jpg' + | 'image/vnd.svf' + | 'image/vnd.tencent.tap' + | 'image/vnd.valve.source.texture' + | 'image/vnd.wap.wbmp' + | 'image/vnd.xiff' + | 'image/vnd.zbrush.pcx' + | 'image/webp' + | 'image/wmf' + | 'message/bhttp' + | 'message/CPIM' + | 'message/delivery-status' + | 'message/disposition-notification' + | 'message/example' + | 'message/external-body' + | 'message/feedback-report' + | 'message/global' + | 'message/global-delivery-status' + | 'message/global-disposition-notification' + | 'message/global-headers' + | 'message/http' + | 'message/imdn+xml' + | 'message/mls' + | 'message/news' + | 'message/ohttp-req' + | 'message/ohttp-res' + | 'message/partial' + | 'message/rfc822' + | 'message/s-http' + | 'message/sip' + | 'message/sipfrag' + | 'message/tracking-status' + | 'message/vnd.si.simp' + | 'message/vnd.wfa.wsc' + | 'model/3mf' + | 'model/e57' + | 'model/example' + | 'model/gltf-binary' + | 'model/gltf+json' + | 'model/JT' + | 'model/iges' + | 'model/mesh' + | 'model/mtl' + | 'model/obj' + | 'model/prc' + | 'model/step' + | 'model/step+xml' + | 'model/step+zip' + | 'model/step-xml+zip' + | 'model/stl' + | 'model/u3d' + | 'model/vnd.bary' + | 'model/vnd.cld' + | 'model/vnd.collada+xml' + | 'model/vnd.dwf' + | 'model/vnd.flatland.3dml' + | 'model/vnd.gdl' + | 'model/vnd.gs-gdl' + | 'model/vnd.gtw' + | 'model/vnd.moml+xml' + | 'model/vnd.mts' + | 'model/vnd.opengex' + | 'model/vnd.parasolid.transmit.binary' + | 'model/vnd.parasolid.transmit.text' + | 'model/vnd.pytha.pyox' + | 'model/vnd.rosette.annotated-data-model' + | 'model/vnd.sap.vds' + | 'model/vnd.usda' + | 'model/vnd.usdz+zip' + | 'model/vnd.valve.source.compiled-map' + | 'model/vnd.vtu' + | 'model/vrml' + | 'model/x3d-vrml' + | 'model/x3d+fastinfoset' + | 'model/x3d+xml' + | 'multipart/alternative' + | 'multipart/appledouble' + | 'multipart/byteranges' + | 'multipart/digest' + | 'multipart/encrypted' + | 'multipart/example' + | 'multipart/form-data' + | 'multipart/header-set' + | 'multipart/mixed' + | 'multipart/multilingual' + | 'multipart/parallel' + | 'multipart/related' + | 'multipart/report' + | 'multipart/signed' + | 'multipart/vnd.bint.med-plus' + | 'multipart/voice-message' + | 'multipart/x-mixed-replace' + | 'text/1d-interleaved-parityfec' + | 'text/cache-manifest' + | 'text/calendar' + | 'text/cql' + | 'text/cql-expression' + | 'text/cql-identifier' + | 'text/css' + | 'text/csv' + | 'text/csv-schema' + | 'text/directory' + | 'text/dns' + | 'text/ecmascript' + | 'text/encaprtp' + | 'text/enriched' + | 'text/example' + | 'text/fhirpath' + | 'text/flexfec' + | 'text/fwdred' + | 'text/gff3' + | 'text/grammar-ref-list' + | 'text/hl7v2' + | 'text/html' + | 'text/javascript' + | 'text/jcr-cnd' + | 'text/markdown' + | 'text/mizar' + | 'text/n3' + | 'text/parameters' + | 'text/parityfec' + | 'text/plain' + | 'text/provenance-notation' + | 'text/prs.fallenstein.rst' + | 'text/prs.lines.tag' + | 'text/prs.prop.logic' + | 'text/prs.texi' + | 'text/raptorfec' + | 'text/RED' + | 'text/rfc822-headers' + | 'text/richtext' + | 'text/rtf' + | 'text/rtp-enc-aescm128' + | 'text/rtploopback' + | 'text/rtx' + | 'text/SGML' + | 'text/shaclc' + | 'text/shex' + | 'text/spdx' + | 'text/strings' + | 'text/t140' + | 'text/tab-separated-values' + | 'text/troff' + | 'text/turtle' + | 'text/ulpfec' + | 'text/uri-list' + | 'text/vcard' + | 'text/vnd.a' + | 'text/vnd.abc' + | 'text/vnd.ascii-art' + | 'text/vnd.curl' + | 'text/vnd.debian.copyright' + | 'text/vnd.DMClientScript' + | 'text/vnd.dvb.subtitle' + | 'text/vnd.esmertec.theme-descriptor' + | 'text/vnd.exchangeable' + | 'text/vnd.familysearch.gedcom' + | 'text/vnd.ficlab.flt' + | 'text/vnd.fly' + | 'text/vnd.fmi.flexstor' + | 'text/vnd.gml' + | 'text/vnd.graphviz' + | 'text/vnd.hans' + | 'text/vnd.hgl' + | 'text/vnd.in3d.3dml' + | 'text/vnd.in3d.spot' + | 'text/vnd.IPTC.NewsML' + | 'text/vnd.IPTC.NITF' + | 'text/vnd.latex-z' + | 'text/vnd.motorola.reflex' + | 'text/vnd.ms-mediapackage' + | 'text/vnd.net2phone.commcenter.command' + | 'text/vnd.radisys.msml-basic-layout' + | 'text/vnd.senx.warpscript' + | 'text/vnd.si.uricatalogue' + | 'text/vnd.sun.j2me.app-descriptor' + | 'text/vnd.sosi' + | 'text/vnd.trolltech.linguist' + | 'text/vnd.vcf' + | 'text/vnd.wap.si' + | 'text/vnd.wap.sl' + | 'text/vnd.wap.wml' + | 'text/vnd.wap.wmlscript' + | 'text/vnd.zoo.kcl' + | 'text/vtt' + | 'text/wgsl' + | 'text/xml' + | 'text/xml-external-parsed-entity' + | 'video/1d-interleaved-parityfec' + | 'video/3gpp' + | 'video/3gpp2' + | 'video/3gpp-tt' + | 'video/AV1' + | 'video/BMPEG' + | 'video/BT656' + | 'video/CelB' + | 'video/DV' + | 'video/encaprtp' + | 'video/evc' + | 'video/example' + | 'video/FFV1' + | 'video/flexfec' + | 'video/H261' + | 'video/H263' + | 'video/H263-1998' + | 'video/H263-2000' + | 'video/H264' + | 'video/H264-RCDO' + | 'video/H264-SVC' + | 'video/H265' + | 'video/H266' + | 'video/iso.segment' + | 'video/JPEG' + | 'video/jpeg2000' + | 'video/jxsv' + | 'video/matroska' + | 'video/matroska-3d' + | 'video/mj2' + | 'video/MP1S' + | 'video/MP2P' + | 'video/MP2T' + | 'video/mp4' + | 'video/MP4V-ES' + | 'video/MPV' + | 'video/mpeg' + | 'video/mpeg4-generic' + | 'video/nv' + | 'video/ogg' + | 'video/parityfec' + | 'video/pointer' + | 'video/quicktime' + | 'video/raptorfec' + | 'video/raw' + | 'video/rtp-enc-aescm128' + | 'video/rtploopback' + | 'video/rtx' + | 'video/scip' + | 'video/smpte291' + | 'video/SMPTE292M' + | 'video/ulpfec' + | 'video/vc1' + | 'video/vc2' + | 'video/vnd.CCTV' + | 'video/vnd.dece.hd' + | 'video/vnd.dece.mobile' + | 'video/vnd.dece.mp4' + | 'video/vnd.dece.pd' + | 'video/vnd.dece.sd' + | 'video/vnd.dece.video' + | 'video/vnd.directv.mpeg' + | 'video/vnd.directv.mpeg-tts' + | 'video/vnd.dlna.mpeg-tts' + | 'video/vnd.dvb.file' + | 'video/vnd.fvt' + | 'video/vnd.hns.video' + | 'video/vnd.iptvforum.1dparityfec-1010' + | 'video/vnd.iptvforum.1dparityfec-2005' + | 'video/vnd.iptvforum.2dparityfec-1010' + | 'video/vnd.iptvforum.2dparityfec-2005' + | 'video/vnd.iptvforum.ttsavc' + | 'video/vnd.iptvforum.ttsmpeg2' + | 'video/vnd.motorola.video' + | 'video/vnd.motorola.videop' + | 'video/vnd.mpegurl' + | 'video/vnd.ms-playready.media.pyv' + | 'video/vnd.nokia.interleaved-multimedia' + | 'video/vnd.nokia.mp4vr' + | 'video/vnd.nokia.videovoip' + | 'video/vnd.objectvideo' + | 'video/vnd.radgamettools.bink' + | 'video/vnd.radgamettools.smacker' + | 'video/vnd.sealed.mpeg1' + | 'video/vnd.sealed.mpeg4' + | 'video/vnd.sealed.swf' + | 'video/vnd.sealedmedia.softseal.mov' + | 'video/vnd.uvvu.mp4' + | 'video/vnd.youtube.yt' + | 'video/vnd.vivo' + | 'video/VP8' + | 'video/VP9' + | `X-${string}/${string}`; diff --git a/packages/api/src/lib/utils/MimeTypes.ts b/packages/api/src/lib/utils/MimeTypes.ts deleted file mode 100644 index 3d799a7f1..000000000 --- a/packages/api/src/lib/utils/MimeTypes.ts +++ /dev/null @@ -1,18 +0,0 @@ -export enum MimeTypes { - ApplicationFormUrlEncoded = 'application/x-www-form-urlencoded', - ApplicationJson = 'application/json', - AudioOgg = 'audio/ogg', - AudioOpus = 'audio/opus', - AudioWebm = 'audio/webm', - ImageGif = 'image/gif', - ImageJpg = 'image/jpeg', - ImagePng = 'image/png', - ImageWebp = 'image/webp', - ImageXIcon = 'image/x-icon', - TextPlain = 'text/plain', - TextHtml = 'text/html', - VideoMp4 = 'video/mp4', - VideoMpeg = 'video/mpeg', - VideoOgg = 'video/ogg', - VideoWebm = 'video/webm' -} diff --git a/packages/api/src/mediaParsers/applicationFormUrlEncoded.ts b/packages/api/src/mediaParsers/applicationFormUrlEncoded.ts index 01ad73e53..48a7f382b 100644 --- a/packages/api/src/mediaParsers/applicationFormUrlEncoded.ts +++ b/packages/api/src/mediaParsers/applicationFormUrlEncoded.ts @@ -1,14 +1,13 @@ import { URLSearchParams } from 'url'; import { MediaParser } from '../lib/structures/MediaParser'; -import type { ApiRequest } from '../lib/structures/api/ApiRequest'; -import { MimeTypes } from '../lib/utils/MimeTypes'; +import type { MimeType } from '../lib/utils/MimeType'; export class PluginMediaParser extends MediaParser { public constructor(context: MediaParser.LoaderContext) { - super(context, { name: MimeTypes.ApplicationFormUrlEncoded }); + super(context, { name: 'application/x-www-form-urlencoded' satisfies MimeType }); } - public override async run(request: ApiRequest): Promise<unknown> { + public override async run(request: MediaParser.Request): Promise<unknown> { const body = await this.readString(request); return body.length === 0 ? null : Object.fromEntries(new URLSearchParams(body).entries()); } diff --git a/packages/api/src/mediaParsers/applicationJson.ts b/packages/api/src/mediaParsers/applicationJson.ts index e2b49e084..55b0f0a18 100644 --- a/packages/api/src/mediaParsers/applicationJson.ts +++ b/packages/api/src/mediaParsers/applicationJson.ts @@ -1,9 +1,9 @@ import { MediaParser } from '../lib/structures/MediaParser'; -import { MimeTypes } from '../lib/utils/MimeTypes'; +import type { MimeType } from '../lib/utils/MimeType'; export class PluginMediaParser extends MediaParser { public constructor(context: MediaParser.LoaderContext) { - super(context, { name: MimeTypes.ApplicationJson }); + super(context, { name: 'application/json' satisfies MimeType }); } public override async run(request: MediaParser.Request): Promise<unknown> { diff --git a/packages/api/src/mediaParsers/textPlain.ts b/packages/api/src/mediaParsers/textPlain.ts index 099d10bcf..ea0b07eb7 100644 --- a/packages/api/src/mediaParsers/textPlain.ts +++ b/packages/api/src/mediaParsers/textPlain.ts @@ -1,9 +1,9 @@ import { MediaParser } from '../lib/structures/MediaParser'; -import { MimeTypes } from '../lib/utils/MimeTypes'; +import type { MimeType } from '../lib/utils/MimeType'; export class PluginMediaParser extends MediaParser { public constructor(context: MediaParser.LoaderContext) { - super(context, { name: MimeTypes.TextPlain }); + super(context, { name: 'text/plain' satisfies MimeType }); } public override async run(request: MediaParser.Request): Promise<unknown> { diff --git a/packages/api/tsconfig.eslint.json b/packages/api/tsconfig.eslint.json index 6ab8e2728..2836bcae4 100644 --- a/packages/api/tsconfig.eslint.json +++ b/packages/api/tsconfig.eslint.json @@ -4,5 +4,5 @@ "allowJs": true, "checkJs": true }, - "include": ["src", "tests"] + "include": ["scripts", "src", "tests"] }