rpc4next 0.3.9 → 0.4.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -0
- package/dist/rpc/client/client-utils.d.ts +6 -0
- package/dist/rpc/client/client-utils.js +1 -1
- package/dist/rpc/client/http-method.d.ts +17 -1
- package/dist/rpc/client/http-method.js +1 -1
- package/dist/rpc/client/index.d.ts +1 -1
- package/dist/rpc/client/match.d.ts +12 -1
- package/dist/rpc/client/match.js +1 -1
- package/dist/rpc/client/rpc.js +1 -1
- package/dist/rpc/client/types.d.ts +37 -24
- package/dist/rpc/client/url.d.ts +118 -0
- package/dist/rpc/lib/content-type-types.d.ts +1 -1
- package/dist/rpc/lib/headers.d.ts +36 -0
- package/dist/rpc/lib/headers.js +1 -0
- package/dist/rpc/lib/http-request-headers-types.d.ts +11 -6
- package/dist/rpc/lib/http-response-headers-types.d.ts +28 -5
- package/dist/rpc/lib/search-params.d.ts +35 -0
- package/dist/rpc/lib/types.d.ts +1 -2
- package/dist/rpc/server/handler.d.ts +1 -1
- package/dist/rpc/server/route-context.js +1 -1
- package/dist/rpc/server/route-handler-factory.js +1 -1
- package/dist/rpc/server/route-types.d.ts +1 -1
- package/dist/rpc/server/types.d.ts +14 -9
- package/dist/rpc/server/validators/validator.d.ts +1 -1
- package/dist/rpc/server/validators/validator.js +1 -1
- package/dist/rpc/server/validators/zod/zod-validator.d.ts +2 -2
- package/package.json +44 -36
- package/LICENSE +0 -21
- package/README.md +0 -164
- package/dist/rpc/cli/index.js +0 -7
- package/dist/rpc/lib/constants.d.ts +0 -6
- package/dist/rpc/lib/constants.js +0 -1
- package/dist/rpc/server/server-utils.d.ts +0 -1
- /package/dist/rpc/{server/server-utils.js → lib/search-params.js} +0 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export*from"./rpc/server";export*from"./rpc/client";
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import type { HttpMethodFuncKey } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Returns true if the given key represents a dynamic segment.
|
|
4
|
+
*/
|
|
2
5
|
export declare const isDynamic: (key: string) => boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Returns true if the key represents a catch-all or optional catch-all segment.
|
|
8
|
+
*/
|
|
3
9
|
export declare const isCatchAllOrOptional: (key: string) => boolean;
|
|
4
10
|
export declare const isHttpMethod: (value: string) => value is HttpMethodFuncKey;
|
|
5
11
|
export declare const deepMerge: <T extends object, U extends object>(target: T, source: U) => T;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{DYNAMIC_PREFIX as i,CATCH_ALL_PREFIX as a,OPTIONAL_CATCH_ALL_PREFIX as p,HTTP_METHOD_FUNC_KEYS as u}from"
|
|
1
|
+
import{DYNAMIC_PREFIX as i,CATCH_ALL_PREFIX as a,OPTIONAL_CATCH_ALL_PREFIX as p,HTTP_METHOD_FUNC_KEYS as u}from"rpc4next-shared";const T=t=>t.startsWith(i),l=t=>t.startsWith(a)||t.startsWith(p),y=new Set(u),A=t=>y.has(t),c=t=>typeof t=="object"&&t!==null&&!Array.isArray(t),d=(t,n)=>{const s={...t};for(const e in n)if(Object.prototype.hasOwnProperty.call(n,e)){const r=t[e],o=n[e];c(r)&&c(o)?s[e]=d(r,o):s[e]=o}return s};export{d as deepMerge,l as isCatchAllOrOptional,T as isDynamic,A as isHttpMethod};
|
|
@@ -1,6 +1,22 @@
|
|
|
1
1
|
import type { FuncParams, UrlOptions, ClientOptions, BodyOptions, HeadersOptions } from "./types";
|
|
2
|
+
/** Local, non-breaking extension for future body shapes */
|
|
3
|
+
type ExtendedBodyOptions = BodyOptions & {
|
|
4
|
+
text?: string;
|
|
5
|
+
formData?: FormData;
|
|
6
|
+
urlencoded?: URLSearchParams;
|
|
7
|
+
raw?: BodyInit;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Build a typed HTTP method invoker.
|
|
11
|
+
* - Header precedence: default < options.init < methodParam.requestHeaders
|
|
12
|
+
* - Do NOT override user-specified `content-type`.
|
|
13
|
+
* - Merge cookies instead of clobbering.
|
|
14
|
+
* - Never attach a body for GET/HEAD.
|
|
15
|
+
* - Provide basic body-shape inference (json/text/formData/urlencoded) while keeping current types compatible.
|
|
16
|
+
*/
|
|
2
17
|
export declare const httpMethod: (key: string, paths: string[], params: FuncParams, dynamicKeys: string[], defaultOptions: ClientOptions) => (methodParam?: {
|
|
3
18
|
url?: UrlOptions;
|
|
4
|
-
body?:
|
|
19
|
+
body?: ExtendedBodyOptions;
|
|
5
20
|
requestHeaders?: HeadersOptions;
|
|
6
21
|
}, options?: ClientOptions) => Promise<Response>;
|
|
22
|
+
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{deepMerge as
|
|
1
|
+
import{deepMerge as x}from"./client-utils";import{createUrl as R}from"./url";import{normalizeHeaders as l}from"../lib/headers";const H=n=>{if(!n)return{};const{headers:i,headersInit:m,...p}=n;return p},U=n=>"content-type"in n?!0:Object.keys(n).some(i=>i.toLowerCase()==="content-type"),B=(n,i,m,p,g)=>async(d,O)=>{const a=n.replace(/^\$/,"").toUpperCase(),I=R([...i],m,p)(d?.url),C=O?.fetch??g.fetch??fetch,f=g.init,u=O?.init,w=l(f?.headers??f?.headersInit),T=l(u?.headers??u?.headersInit),j=l(d?.requestHeaders?.headers),o={...w,...T,...j},b=o.cookie,y=d?.requestHeaders?.cookies;if(y&&Object.keys(y).length>0){const s=Object.entries(y).map(([h,k])=>`${h}=${k}`).join("; ");o.cookie=b?`${b}; ${s}`:s}let t,r;const e=d?.body;e?.json!==void 0?(t=JSON.stringify(e.json),r="application/json"):typeof e?.text=="string"?(t=e.text,r="text/plain; charset=utf-8"):e?.formData instanceof FormData?(t=e.formData,r=void 0):e?.urlencoded instanceof URLSearchParams?(t=e.urlencoded,r="application/x-www-form-urlencoded; charset=UTF-8"):e?.raw!==void 0&&(t=e.raw,r=void 0),(a==="GET"||a==="HEAD")&&(t=void 0),!U(o)&&t&&r&&(o["content-type"]=r);const c=x(H(f),H(u));c.method=a,Object.keys(o).length>0&&(c.headers=o),t!==void 0&&(c.body=t);try{return await C(I.path,c)}catch(s){const h=s instanceof Error?s.message:String(s);throw new Error(`[httpMethod] ${a} ${I.path} failed: ${h}`)}};export{B as httpMethod};
|
|
@@ -1 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
type ParamValue = string | string[] | undefined;
|
|
2
|
+
/**
|
|
3
|
+
* Match a URL (string) against a pre-defined path pattern array.
|
|
4
|
+
* @param paths e.g. ["/", "users", "_id"] or ["users", "_id"]
|
|
5
|
+
* @param dynamicKeys keys in the same order the capturing groups appear
|
|
6
|
+
*/
|
|
7
|
+
export declare const matchPath: (paths: string[], dynamicKeys: string[]) => (input: string) => {
|
|
8
|
+
params: Record<string, ParamValue>;
|
|
9
|
+
query: Record<string, string | string[] | undefined>;
|
|
10
|
+
hash: string | undefined;
|
|
11
|
+
} | null;
|
|
12
|
+
export {};
|
package/dist/rpc/client/match.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{isCatchAllOrOptional as
|
|
1
|
+
import{isCatchAllOrOptional as w}from"./client-utils";import{replaceDynamicSegments as x}from"./url";import{searchParamsToObject as L}from"../lib/search-params";const o=n=>{if(n!=null)try{return decodeURIComponent(n)}catch{return n}},$=n=>{const e=n.join("/").replace(/\/+/g,"/");return(e.startsWith("/")?e:`/${e}`).replace(/\/+$/,"")||"/"},O=(n,e)=>{const l=$(n),u=x(l,{optionalCatchAll:"(?:/(.*))?",catchAll:"/([^/]+(?:/[^/]+)*)",dynamic:"/([^/]+)"}),m=new RegExp(`^${u}(?:/)?$`);return p=>{let t;try{t=new URL(p,"http://dummy")}catch{return null}const f=t.pathname,d=m.exec(f);if(!d)return null;const a={};for(let s=0;s<e.length;s++){const h=e[s],i=h.replace(/^_+/,""),r=d[s+1];if(w(h))if(r==null||r==="")a[i]=void 0;else{const R=r.split("/").filter(Boolean).map(c=>o(c)).filter(c=>c!==void 0);a[i]=R}else a[i]=o(r)}const g=L(t.searchParams),P=t.hash?t.hash.slice(1):void 0,y=o(P);return{params:a,query:g,hash:y}}};export{O as matchPath};
|
package/dist/rpc/client/rpc.js
CHANGED
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
* Inspired by the design of Hono (https://github.com/honojs/hono)
|
|
3
3
|
* and pathpida (https://github.com/aspida/pathpida)
|
|
4
4
|
* particularly their routing structures and developer experience.
|
|
5
|
-
*/import{isDynamic as
|
|
5
|
+
*/import{isDynamic as g}from"./client-utils";const l=(r,e,n,s,o)=>{const p=function(){};return new Proxy(p,{apply(a,u,t){const i=t[0],c=n[n.length-1],f=o[o.length-1];if(!c||!g(c))throw new Error(`Cannot apply a value: "${c??""}" is not a dynamic segment.`);if(i===void 0){const d=f??c;throw new Error(`Missing value for dynamic parameter: ${String(d)}`)}return l(r,e,n,{...s,[f]:i},o)},get(a,u){if(u==="then"||typeof u=="symbol")return;const t=String(u),i=r(t,{paths:n,params:s,dynamicKeys:o,options:e});return i!==void 0?i:g(t)?l(r,e,[...n,t],s,[...o,t]):l(r,e,[...n,t],s,o)}})},T=r=>(e="/",n={})=>l(r,n,[e],{},[]);export{T as makeCreateRpc};
|
|
@@ -1,19 +1,24 @@
|
|
|
1
|
-
import type { OPTIONAL_CATCH_ALL_PREFIX, CATCH_ALL_PREFIX, DYNAMIC_PREFIX, HTTP_METHOD_FUNC_KEYS } from "../lib/constants";
|
|
2
1
|
import type { ContentType } from "../lib/content-type-types";
|
|
3
2
|
import type { HttpRequestHeaders } from "../lib/http-request-headers-types";
|
|
4
3
|
import type { HttpStatusCode } from "../lib/http-status-code-types";
|
|
5
4
|
import type { RouteHandlerResponse, RouteResponse, ValidationSchema } from "../server/route-types";
|
|
6
5
|
import type { TypedNextResponse, ValidationInputFor } from "../server/types";
|
|
7
6
|
import type { NextResponse } from "next/server";
|
|
7
|
+
import type { OPTIONAL_CATCH_ALL_PREFIX, CATCH_ALL_PREFIX, DYNAMIC_PREFIX, HTTP_METHOD_FUNC_KEYS } from "rpc4next-shared";
|
|
8
|
+
type DistributeOmit<T, K extends keyof any> = T extends any ? Omit<T, K> : never;
|
|
8
9
|
/**
|
|
9
10
|
* Extension of the standard `RequestInit` interface with strongly typed headers.
|
|
10
11
|
*/
|
|
11
|
-
export
|
|
12
|
-
headers?:
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
export type TypedRequestInit<TWithoutHeaders extends keyof HttpRequestHeaders = never> = Omit<RequestInit, "headers"> & ({
|
|
13
|
+
headers?: Omit<HttpRequestHeaders, TWithoutHeaders> & Record<string, string>;
|
|
14
|
+
headersInit?: never;
|
|
15
|
+
} | {
|
|
16
|
+
headers?: never;
|
|
17
|
+
headersInit?: HeadersInit;
|
|
18
|
+
});
|
|
19
|
+
export type ClientOptions<TWithoutHeaders extends "Content-Type" | "Cookie" = never, TWithoutInit extends "body" | "headers" | "headersInit" = never> = {
|
|
15
20
|
fetch?: typeof fetch;
|
|
16
|
-
init?:
|
|
21
|
+
init?: DistributeOmit<TypedRequestInit<TWithoutHeaders>, TWithoutInit>;
|
|
17
22
|
};
|
|
18
23
|
declare const __proxy: unique symbol;
|
|
19
24
|
export type Endpoint = {
|
|
@@ -23,8 +28,6 @@ export type ParamsKey = "__params";
|
|
|
23
28
|
type IsParams = Record<ParamsKey, unknown>;
|
|
24
29
|
export type QueryKey = "__query";
|
|
25
30
|
type IsQuery = Record<QueryKey, unknown>;
|
|
26
|
-
export type OptionalQueryKey = "__op_query";
|
|
27
|
-
type IsOptionalQuery = Record<OptionalQueryKey, unknown>;
|
|
28
31
|
export type HttpMethodFuncKey = (typeof HTTP_METHOD_FUNC_KEYS)[number];
|
|
29
32
|
type IsHttpMethod = {
|
|
30
33
|
[K in HttpMethodFuncKey]?: unknown;
|
|
@@ -33,16 +36,20 @@ type IsOptionalCatchAll = `${typeof OPTIONAL_CATCH_ALL_PREFIX}${string}`;
|
|
|
33
36
|
type IsCatchAll = `${typeof CATCH_ALL_PREFIX}${string}`;
|
|
34
37
|
type IsDynamic = `${typeof DYNAMIC_PREFIX}${string}`;
|
|
35
38
|
export type FuncParams<T = Record<string, string | number | string[] | undefined>> = T;
|
|
36
|
-
type QueryParams<T = Record<string, string | number>> = T;
|
|
37
39
|
type Params<T = unknown> = T extends IsParams ? T[ParamsKey] : Record<string, string>;
|
|
38
|
-
export type UrlOptions<T = unknown> = T extends IsQuery ? {
|
|
40
|
+
export type UrlOptions<T = unknown, TQuery = unknown> = T extends IsQuery ? AllOptional<T[QueryKey]> extends true ? {
|
|
41
|
+
query?: T[QueryKey];
|
|
42
|
+
hash?: string;
|
|
43
|
+
} : {
|
|
39
44
|
query: T[QueryKey];
|
|
40
45
|
hash?: string;
|
|
41
|
-
} :
|
|
42
|
-
|
|
46
|
+
} : IsNever<TQuery> extends true ? {
|
|
47
|
+
hash?: string;
|
|
48
|
+
} : AllOptional<TQuery> extends true ? {
|
|
49
|
+
query?: TQuery;
|
|
43
50
|
hash?: string;
|
|
44
51
|
} : {
|
|
45
|
-
query
|
|
52
|
+
query: TQuery;
|
|
46
53
|
hash?: string;
|
|
47
54
|
};
|
|
48
55
|
export type UrlResult<T = unknown> = {
|
|
@@ -53,11 +60,11 @@ export type UrlResult<T = unknown> = {
|
|
|
53
60
|
};
|
|
54
61
|
type IsNever<T> = [T] extends [never] ? true : false;
|
|
55
62
|
type AllOptional<T> = Partial<T> extends T ? true : false;
|
|
56
|
-
type UrlArgs<T
|
|
57
|
-
type UrlArgsObj<T
|
|
58
|
-
url
|
|
63
|
+
type UrlArgs<T, TQuery, TUrlOptions = UrlOptions<T, TQuery>> = AllOptional<TUrlOptions> extends true ? [url?: TUrlOptions] : [url: TUrlOptions];
|
|
64
|
+
type UrlArgsObj<T, TQuery, TUrlOptions = UrlOptions<T, TQuery>> = AllOptional<TUrlOptions> extends true ? {
|
|
65
|
+
url?: TUrlOptions;
|
|
59
66
|
} : {
|
|
60
|
-
url
|
|
67
|
+
url: TUrlOptions;
|
|
61
68
|
};
|
|
62
69
|
export type BodyOptions<TJson = unknown> = {
|
|
63
70
|
json: TJson;
|
|
@@ -76,30 +83,36 @@ type HeadersArgsObj<THeaders = unknown, TCookies = unknown> = IsNever<THeaders>
|
|
|
76
83
|
} : {
|
|
77
84
|
requestHeaders: HeadersOptions<THeaders, TCookies>;
|
|
78
85
|
};
|
|
79
|
-
type HttpMethodsArgs<T, TValidationSchema extends ValidationSchema, TJson = ValidationInputFor<"json", TValidationSchema>, THeaders = ValidationInputFor<"headers", TValidationSchema>, TCookies = ValidationInputFor<"cookies", TValidationSchema>, TBaseArgs = UrlArgsObj<T> & BodyArgsObj<TJson> & HeadersArgsObj<THeaders, TCookies>> = [
|
|
86
|
+
type HttpMethodsArgs<T, TValidationSchema extends ValidationSchema, TQuery = ValidationInputFor<"query", TValidationSchema>, TJson = ValidationInputFor<"json", TValidationSchema>, THeaders = ValidationInputFor<"headers", TValidationSchema>, TCookies = ValidationInputFor<"cookies", TValidationSchema>, TBaseArgs = UrlArgsObj<T, TQuery> & BodyArgsObj<TJson> & HeadersArgsObj<THeaders, TCookies>> = [
|
|
80
87
|
...(AllOptional<TBaseArgs> extends true ? [methodParam?: TBaseArgs] : [methodParam: TBaseArgs]),
|
|
81
|
-
option?: ClientOptions<(IsNever<TJson> extends true ? never : "Content-Type") | (IsNever<TCookies> extends true ? never : "Cookie"), (IsNever<TJson> extends true ? never : "body") | (IsNever<THeaders> extends true ? never : "headers")>
|
|
88
|
+
option?: ClientOptions<(IsNever<TJson> extends true ? never : "Content-Type") | (IsNever<TCookies> extends true ? never : "Cookie"), (IsNever<TJson> extends true ? never : "body") | (IsNever<THeaders> extends true ? never : "headers" | "headersInit")>
|
|
82
89
|
];
|
|
83
90
|
type InferHttpMethods<T extends IsHttpMethod> = {
|
|
84
91
|
[K in keyof T as K extends HttpMethodFuncKey ? K : never]: (...args: HttpMethodsArgs<T, InferValidationSchema<T[K]>>) => Promise<InferTypedNextResponseType<T[K]>>;
|
|
85
92
|
};
|
|
93
|
+
type InferHttpMethodValidationSchema<T> = {
|
|
94
|
+
[K in keyof T]: K extends HttpMethodFuncKey ? InferValidationSchema<T[K]> : never;
|
|
95
|
+
}[keyof T & HttpMethodFuncKey];
|
|
86
96
|
type InferValidationSchema<T> = T extends (...args: any[]) => RouteHandlerResponse<RouteResponse, infer TValidationSchema> ? TValidationSchema : ValidationSchema;
|
|
87
97
|
type InferNextResponseType<T> = T extends (...args: any[]) => Promise<NextResponse<infer U>> ? U : never;
|
|
88
98
|
type InferTypedNextResponseType<T> = T extends (...args: any[]) => Promise<TypedNextResponse> ? Awaited<ReturnType<T>> : TypedNextResponse<InferNextResponseType<T>, HttpStatusCode, ContentType>;
|
|
89
99
|
type PathProxyAsProperty<T> = {
|
|
90
|
-
$match: (path: string) =>
|
|
100
|
+
$match: (path: string) => ({
|
|
101
|
+
params: Params<T>;
|
|
102
|
+
} & Partial<UrlOptions<T, InferQuery<T>>>) | null;
|
|
91
103
|
};
|
|
104
|
+
type InferQuery<T> = ValidationInputFor<"query", InferHttpMethodValidationSchema<T>>;
|
|
92
105
|
type PathProxyAsFunction<T> = {
|
|
93
|
-
$url: (...args: UrlArgs<T
|
|
106
|
+
$url: (...args: UrlArgs<T, InferQuery<T>>) => UrlResult<T>;
|
|
94
107
|
} & (T extends IsHttpMethod ? InferHttpMethods<T> : unknown);
|
|
95
|
-
type ParamFunction<T, TParamArgs extends unknown[]> = (...args:
|
|
108
|
+
type ParamFunction<T, TParamArgs extends unknown[]> = (...args: TParamArgs) => DynamicPathProxyAsFunction<T>;
|
|
96
109
|
type NonEmptyArray<T> = [T, ...T[]];
|
|
97
110
|
export type DynamicPathProxyAsFunction<T> = Omit<(T extends Endpoint ? PathProxyAsFunction<T> : unknown) & {
|
|
98
111
|
[K in keyof T]: K extends IsOptionalCatchAll ? ParamFunction<T[K], [value?: string[]]> : K extends IsCatchAll ? ParamFunction<T[K], [value: NonEmptyArray<string>]> : K extends IsDynamic ? ParamFunction<T[K], [value: string | number]> : DynamicPathProxyAsFunction<T[K]>;
|
|
99
|
-
}, QueryKey |
|
|
112
|
+
}, QueryKey | ParamsKey>;
|
|
100
113
|
export type DynamicPathProxyAsProperty<T> = Omit<(T extends Endpoint ? PathProxyAsProperty<T> : unknown) & {
|
|
101
114
|
[K in keyof T]: K extends unknown ? DynamicPathProxyAsProperty<T[K]> : DynamicPathProxyAsProperty<T[K]>;
|
|
102
|
-
}, QueryKey |
|
|
115
|
+
}, QueryKey | ParamsKey>;
|
|
103
116
|
export type RpcHandler = (key: string, context: {
|
|
104
117
|
paths: string[];
|
|
105
118
|
params: FuncParams;
|
package/dist/rpc/client/url.d.ts
CHANGED
|
@@ -1,8 +1,126 @@
|
|
|
1
1
|
import type { UrlOptions, UrlResult, FuncParams } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Builds a URL suffix string from optional query and hash values.
|
|
4
|
+
*
|
|
5
|
+
* This utility generates the trailing portion of a URL, consisting of:
|
|
6
|
+
* - A query string (e.g. `?key=value&foo=bar`)
|
|
7
|
+
* - A hash fragment (e.g. `#section`)
|
|
8
|
+
*
|
|
9
|
+
* If both are present, they are concatenated in the order:
|
|
10
|
+
* `?query#hash`.
|
|
11
|
+
*
|
|
12
|
+
* If `url` is `undefined` or neither `query` nor `hash` is provided,
|
|
13
|
+
* an empty string is returned.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* buildUrlSuffix({
|
|
17
|
+
* query: { page: "1", sort: "asc" },
|
|
18
|
+
* hash: "top"
|
|
19
|
+
* });
|
|
20
|
+
* // => "?page=1&sort=asc#top"
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* buildUrlSuffix({ hash: "section" });
|
|
24
|
+
* // => "#section"
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* buildUrlSuffix();
|
|
28
|
+
* // => ""
|
|
29
|
+
*
|
|
30
|
+
* @param url - Optional URL options containing query parameters and/or a hash fragment.
|
|
31
|
+
* @returns A URL suffix string beginning with `?` and/or `#`, or an empty string if none exist.
|
|
32
|
+
*/
|
|
2
33
|
export declare const buildUrlSuffix: (url?: UrlOptions) => string;
|
|
34
|
+
/**
|
|
35
|
+
* Replaces dynamic route segment markers in a base path string.
|
|
36
|
+
*
|
|
37
|
+
* This utility transforms special placeholder patterns in `basePath`
|
|
38
|
+
* into concrete replacement strings.
|
|
39
|
+
*
|
|
40
|
+
* It supports three types of dynamic segments:
|
|
41
|
+
*
|
|
42
|
+
* - **Optional catch-all**: `"/_____<name>"` (5 underscores)
|
|
43
|
+
* - **Catch-all**: `"/___<name>"` (3 underscores)
|
|
44
|
+
* - **Dynamic segment**: `"/_<name>"` (1 underscore)
|
|
45
|
+
*
|
|
46
|
+
* Each matched segment (including its leading slash) is replaced
|
|
47
|
+
* with the corresponding value from the `replacements` object.
|
|
48
|
+
*
|
|
49
|
+
* Replacement is performed in the following order:
|
|
50
|
+
* 1. optionalCatchAll
|
|
51
|
+
* 2. catchAll
|
|
52
|
+
* 3. dynamic
|
|
53
|
+
*
|
|
54
|
+
* This ordering ensures that longer patterns are processed before
|
|
55
|
+
* shorter ones to avoid partial matching.
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```ts
|
|
59
|
+
* replaceDynamicSegments(
|
|
60
|
+
* "/users/_id/posts/___slug/files/_____path",
|
|
61
|
+
* {
|
|
62
|
+
* dynamic: ":id",
|
|
63
|
+
* catchAll: "*",
|
|
64
|
+
* optionalCatchAll: "**",
|
|
65
|
+
* }
|
|
66
|
+
* );
|
|
67
|
+
* ```
|
|
68
|
+
*
|
|
69
|
+
* @param basePath - The path string containing dynamic segment markers.
|
|
70
|
+
* @param replacements - Replacement strings for each dynamic segment type.
|
|
71
|
+
* @param replacements.optionalCatchAll - Replacement for `"/_____<name>"` segments.
|
|
72
|
+
* @param replacements.catchAll - Replacement for `"/___<name>"` segments.
|
|
73
|
+
* @param replacements.dynamic - Replacement for `"/_<name>"` segments.
|
|
74
|
+
*
|
|
75
|
+
* @returns A new path string with all dynamic segment markers replaced.
|
|
76
|
+
*/
|
|
3
77
|
export declare const replaceDynamicSegments: (basePath: string, replacements: {
|
|
4
78
|
optionalCatchAll: string;
|
|
5
79
|
catchAll: string;
|
|
6
80
|
dynamic: string;
|
|
7
81
|
}) => string;
|
|
82
|
+
/**
|
|
83
|
+
* Creates a URL builder for a route definition.
|
|
84
|
+
*
|
|
85
|
+
* This function takes a list of path segments (e.g. `["api", "users", "[id]"]`),
|
|
86
|
+
* a params object, and a list of dynamic keys used in the path, then returns a
|
|
87
|
+
* function that can build a concrete URL string plus related metadata.
|
|
88
|
+
*
|
|
89
|
+
* Dynamic segments are replaced using `dynamicKeys`:
|
|
90
|
+
* - If `params[key]` is an array, it is treated as a catch-all segment and each
|
|
91
|
+
* element is URL-encoded then joined by `/`.
|
|
92
|
+
* - If `params[key]` is `undefined`, the segment is removed (useful for optional
|
|
93
|
+
* segments).
|
|
94
|
+
* - Otherwise, the value is URL-encoded and substituted into the segment.
|
|
95
|
+
*
|
|
96
|
+
* The returned builder optionally appends a suffix (e.g. query/hash) via
|
|
97
|
+
* `buildUrlSuffix(url)` and also produces a Next.js-style `pathname` by converting
|
|
98
|
+
* dynamic markers using `replaceDynamicSegments`.
|
|
99
|
+
*
|
|
100
|
+
* In addition, params keys are normalized by removing leading underscores
|
|
101
|
+
* (e.g. `__id` -> `id`) in the returned `params`.
|
|
102
|
+
*
|
|
103
|
+
* @param paths - Path segments. The first element is treated as an optional base
|
|
104
|
+
* URL, and the remaining segments form the route path.
|
|
105
|
+
* @param params - Parameters used to replace dynamic segments. Values may be
|
|
106
|
+
* `string`, `string[]`, or `undefined` depending on the segment type.
|
|
107
|
+
* @param dynamicKeys - Keys representing dynamic segments present in the path,
|
|
108
|
+
* used to substitute values from `params`.
|
|
109
|
+
* @returns A builder function that accepts URL options and returns a `UrlResult`.
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* ```ts
|
|
113
|
+
* const build = createUrl(
|
|
114
|
+
* ["https://example.com", "users", "id"],
|
|
115
|
+
* { id: "a b" },
|
|
116
|
+
* ["id"],
|
|
117
|
+
* );
|
|
118
|
+
*
|
|
119
|
+
* const result = build({ query: { page: "1" } });
|
|
120
|
+
* // result.path: "https://example.com/users/a%20b?page=1"
|
|
121
|
+
* // result.relativePath: "/users/a%20b?page=1"
|
|
122
|
+
* // result.pathname: "/users/[$1]" (depending on replaceDynamicSegments behavior)
|
|
123
|
+
* // result.params: { id: "a b" }
|
|
124
|
+
* ```
|
|
125
|
+
*/
|
|
8
126
|
export declare const createUrl: (paths: string[], params: FuncParams, dynamicKeys: string[]) => (url?: UrlOptions) => UrlResult;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
type KnownContentType = "application/json" | "text/html" | "text/plain" | "application/javascript" | "text/css" | "image/png" | "image/jpeg" | "image/svg+xml" | "application/pdf" | "application/octet-stream" | "multipart/form-data" | "application/x-www-form-urlencoded";
|
|
1
|
+
type KnownContentType = "application/1d-interleaved-parityfec" | "application/3gpdash-qoe-report+xml" | "application/3gpp-ims+xml" | "application/3gppHal+json" | "application/3gppHalForms+json" | "application/A2L" | "application/AML" | "application/ATF" | "application/ATFX" | "application/ATXML" | "application/CALS-1840" | "application/CDFX+XML" | "application/CEA" | "application/CSTAdata+xml" | "application/DCD" | "application/DII" | "application/DIT" | "application/EDI-X12" | "application/EDI-consent" | "application/EDIFACT" | "application/EmergencyCallData.Comment+xml" | "application/EmergencyCallData.Control+xml" | "application/EmergencyCallData.DeviceInfo+xml" | "application/EmergencyCallData.LegacyESN+json" | "application/EmergencyCallData.ProviderInfo+xml" | "application/EmergencyCallData.ServiceInfo+xml" | "application/EmergencyCallData.SubscriberInfo+xml" | "application/EmergencyCallData.VEDS+xml" | "application/EmergencyCallData.cap+xml" | "application/EmergencyCallData.eCall.MSD" | "application/H224" | "application/IOTP" | "application/ISUP" | "application/LXF" | "application/MF4" | "application/ODA" | "application/ODX" | "application/PDX" | "application/QSIG" | "application/SGML" | "application/ST2110-41" | "application/TETRA_ISI" | "application/ace+cbor" | "application/ace+json" | "application/ace-groupcomm+cbor" | "application/ace-trl+cbor" | "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-endpointcost+json" | "application/alto-endpointcostparams+json" | "application/alto-endpointprop+json" | "application/alto-endpointpropparams+json" | "application/alto-error+json" | "application/alto-networkmap+json" | "application/alto-networkmapfilter+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/andrew-inset" | "application/applefile" | "application/application/jwk-set+jwt" | "application/application/resolve-response+jwt" | "application/application/trust-chain+json" | "application/application/trust-mark+jwt" | "application/application/trust-mark-delegation+jwt" | "application/at+jwt" | "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/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/captive+json" | "application/cbor" | "application/cbor-seq" | "application/cccex" | "application/ccmp+xml" | "application/ccxml+xml" | "application/cda+xml" | "application/cdmi-capability" | "application/cdmi-container" | "application/cdmi-domain" | "application/cdmi-object" | "application/cdmi-queue" | "application/cdni" | "application/ce+cbor" | "application/cea-2018+xml" | "application/cellml+xml" | "application/cfw" | "application/cid" | "application/cid-edhoc+cbor-seq" | "application/city+json" | "application/city+json-seq" | "application/clr" | "application/clue+xml" | "application/clue_info+xml" | "application/cms" | "application/cnrp+xml" | "application/coap-eap" | "application/coap-group+json" | "application/coap-payload" | "application/commonground" | "application/concise-problem-details+cbor" | "application/conference-info+xml" | "application/cose" | "application/cose-key" | "application/cose-key-set" | "application/cose-x509" | "application/cpl+xml" | "application/csrattrs" | "application/csta+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/dec-dx" | "application/dialog-info+xml" | "application/dicom" | "application/dicom+json" | "application/dicom+xml" | "application/did" | "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/eat+cwt" | "application/eat+jwt" | "application/eat-bun+cbor" | "application/eat-bun+json" | "application/eat-ucs+cbor" | "application/eat-ucs+json" | "application/ecmascript (OBSOLETED in favor of text/javascript)" | "application/edhoc+cbor-seq" | "application/efi" | "application/elm+json" | "application/elm+xml" | "application/emma+xml" | "application/emotionml+xml" | "application/encaprtp" | "application/entity-statement+jwt" | "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 - DEPRECATED in favor of font/sfnt" | "application/font-tdpfr" | "application/font-woff - DEPRECATED in favor of font/woff" | "application/framework-attributes+xml" | "application/geo+json" | "application/geo+json-seq" | "application/geopackage+sqlite3" | "application/geopose+json" | "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/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/ipfix" | "application/ipp" | "application/its+xml" | "application/java-archive" | "application/javascript (OBSOLETED in favor of text/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/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+xml" | "application/mbms-msk-response+xml" | "application/mbms-protection-description+xml" | "application/mbms-reception-report+xml" | "application/mbms-register+xml" | "application/mbms-register-response+xml" | "application/mbms-schedule+xml" | "application/mbms-user-service-description+xml" | "application/mbox" | "application/media-policy-dataset+xml" | "application/media_control+xml" | "application/mediaservercontrol+xml" | "application/merge-patch+json" | "application/metalink4+xml" | "application/mets+xml" | "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/odm+xml" | "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/pem-certificate-chain" | "application/pgp-encrypted" | "application/pgp-keys" | "application/pgp-signature" | "application/pidf+xml" | "application/pidf-diff+xml" | "application/pkcs10" | "application/pkcs12" | "application/pkcs7-mime" | "application/pkcs7-signature" | "application/pkcs8" | "application/pkcs8-encrypted" | "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/provided-claims+jwt" | "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/raptorfec" | "application/rdap+json" | "application/rdf+xml" | "application/reginfo+xml" | "application/relax-ng-compact-syntax" | "application/remote-printing (OBSOLETE)" | "application/reputon+json" | "application/resource-lists+xml" | "application/resource-lists-diff+xml" | "application/rfc+xml" | "application/riscos" | "application/rlmi+xml" | "application/rls-services+xml" | "application/route-apd+xml" | "application/route-s-tsid+xml" | "application/route-usd+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+json" | "application/sarif-external-properties+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/sdf+json" | "application/sdp" | "application/secevent+jwt" | "application/senml+cbor" | "application/senml+json" | "application/senml+xml" | "application/senml-etch+cbor" | "application/senml-etch+json" | "application/senml-exi" | "application/sensml+cbor" | "application/sensml+json" | "application/sensml+xml" | "application/sensml-exi" | "application/sep+xml" | "application/sep-exi" | "application/session-info" | "application/set-payment" | "application/set-payment-initiation" | "application/set-registration" | "application/set-registration-initiation" | "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 (OBSOLETED in favor of application/smil+xml)" | "application/smil+xml" | "application/smpte336m" | "application/soap+fastinfoset" | "application/soap+xml" | "application/sparql-query" | "application/sparql-results+xml" | "application/spdx+json" | "application/spirits-event+xml" | "application/sql" | "application/srgs" | "application/srgs+xml" | "application/sru+xml" | "application/sslkeylogfile" | "application/ssml+xml" | "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/texinfo" | "application/thraud+xml" | "application/timestamp-query" | "application/timestamp-reply" | "application/timestamped-data" | "application/tlsrpt+gzip" | "application/tlsrpt+json" | "application/tm+json" | "application/tnauthlist" | "application/toc+cbor" | "application/token-introspection+jwt" | "application/toml" | "application/trickle-ice-sdpfrag" | "application/trig" | "application/ttml+xml" | "application/tve-trigger" | "application/tzif" | "application/tzif-leap" | "application/uccs+cbor" | "application/ujcs+json" | "application/ulpfec" | "application/urc-grpsheet+xml" | "application/urc-ressheet+xml" | "application/urc-targetdesc+xml" | "application/urc-uisocketdesc+xml" | "application/vc" | "application/vc+cose" | "application/vc+jwt" | "application/vcard+json" | "application/vcard+xml" | "application/vemmi" | "application/vnd.1000minds.decision-model+xml" | "application/vnd.1ob" | "application/vnd.3M.Post-it-Notes" | "application/vnd.3gpp-prose+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-v2x-local-service-information" | "application/vnd.3gpp.5gnas" | "application/vnd.3gpp.5gsa2x" | "application/vnd.3gpp.5gsa2x-local-service-information" | "application/vnd.3gpp.5gsv2x" | "application/vnd.3gpp.5gsv2x-local-service-information" | "application/vnd.3gpp.GMOP+xml" | "application/vnd.3gpp.SRVCC-info+xml" | "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.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 (OBSOLETED in favor of application/vnd.3gpp.mcvideo-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.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.state-and-event-info+xml" | "application/vnd.3gpp.ussd+xml" | "application/vnd.3gpp.v2x" | "application/vnd.3gpp.vae-info+xml" | "application/vnd.3gpp2.bcmcsinfo+xml" | "application/vnd.3gpp2.sms" | "application/vnd.3gpp2.tcap" | "application/vnd.3lightssoftware.imagescal" | "application/vnd.FloGraphIt" | "application/vnd.HandHeld-Entertainment+xml" | "application/vnd.Kinar" | "application/vnd.MFER" | "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.Quark.QuarkXPress" | "application/vnd.RenLearn.rlprint" | "application/vnd.SimTech-MindMapper" | "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 (OBSOLETED in favor of application/vnd.aristanetworks.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.balsamiq.bmpr" | "application/vnd.banana-accounting" | "application/vnd.bbf.usp.error" | "application/vnd.bbf.usp.msg" | "application/vnd.bbf.usp.msg+json" | "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.cel" | "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+json" | "application/vnd.collection.doc+json" | "application/vnd.collection.next+json" | "application/vnd.comicbook+zip" | "application/vnd.comicbook-rar" | "application/vnd.commerce-battelle" | "application/vnd.commonspace" | "application/vnd.contact.cmsg" | "application/vnd.coreos.ignition+json" | "application/vnd.cosmocaller" | "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.dcmp+xml" | "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.ecdis-update" | "application/vnd.ecip.rlp" | "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-e+zip" | "application/vnd.etsi.asic-s+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.familysearch.gedcom+zip" | "application/vnd.fastcopy-disk-image" | "application/vnd.fdsn.mseed" | "application/vnd.fdsn.seed" | "application/vnd.fdsn.stationxml+xml" | "application/vnd.ffsns" | "application/vnd.ficlab.flb+zip" | "application/vnd.filmit.zfc" | "application/vnd.fints" | "application/vnd.firemonkeys.cloudcell" | "application/vnd.fluxtime.clip" | "application/vnd.font-fontforge-sfd" | "application/vnd.framemaker" | "application/vnd.freelog.comic" | "application/vnd.frogans.fnc (OBSOLETE)" | "application/vnd.frogans.ltf (OBSOLETE)" | "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.ART-EX" | "application/vnd.fujixerox.ART4" | "application/vnd.fujixerox.HBPL" | "application/vnd.fujixerox.ddd" | "application/vnd.fujixerox.docuworks" | "application/vnd.fujixerox.docuworks.binder" | "application/vnd.fujixerox.docuworks.container" | "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.pkgmetadata+xml" | "application/vnd.gentoo.xpak" | "application/vnd.geo+json (OBSOLETED by [RFC7946] in favor of application/geo+json)" | "application/vnd.geocube+xml (OBSOLETED by request)" | "application/vnd.geogebra.file" | "application/vnd.geogebra.pinboard" | "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 - DEPRECATED" | "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 (OBSOLETED by request)" | "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.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-PCL" | "application/vnd.hp-PCLXL" | "application/vnd.hp-hpid" | "application/vnd.hp-hps" | "application/vnd.hp-jlyt" | "application/vnd.hsl" | "application/vnd.httphone" | "application/vnd.hydrostatix.sof-data" | "application/vnd.hyper+json" | "application/vnd.hyper-item+json" | "application/vnd.hyperdrive+json" | "application/vnd.hzn-3d-crossword" | "application/vnd.ibm.MiniPay" | "application/vnd.ibm.afplinedata (OBSOLETED in favor of vnd.afpc.afplinedata)" | "application/vnd.ibm.electronic-media" | "application/vnd.ibm.modcap (OBSOLETED in favor of application/vnd.afpc.modca)" | "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+json" | "application/vnd.ims.lti.v2.toolproxy.id+json" | "application/vnd.ims.lti.v2.toolsettings+json" | "application/vnd.ims.lti.v2.toolsettings.simple+json" | "application/vnd.informedcontrol.rms+xml" | "application/vnd.informix-visionary (OBSOLETED in favor of application/vnd.visionary)" | "application/vnd.infotech.project" | "application/vnd.infotech.project+xml" | "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.iso11783-10+zip" | "application/vnd.jam" | "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.kdl" | "application/vnd.kenameaapp" | "application/vnd.keyman.kmp+zip" | "application/vnd.keyman.kmx" | "application/vnd.kidspiration" | "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.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.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-3mfdocument" | "application/vnd.ms-PrintDeviceCapabilities+xml" | "application/vnd.ms-PrintSchemaTicket+xml" | "application/vnd.ms-artgalry" | "application/vnd.ms-asf" | "application/vnd.ms-cab-compressed" | "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-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.music-niff" | "application/vnd.musician" | "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.nitro.rom" | "application/vnd.nintendo.snes.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.iSDS-radio-presets" | "application/vnd.nokia.iptv.config+xml" | "application/vnd.nokia.landmark+wbxml" | "application/vnd.nokia.landmark+xml" | "application/vnd.nokia.landmarkcollection+xml" | "application/vnd.nokia.n-gage.ac+xml" | "application/vnd.nokia.n-gage.data" | "application/vnd.nokia.n-gage.symbian.install (OBSOLETE; no replacement given)" | "application/vnd.nokia.ncd" | "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 (OBSOLETED in favor of application/vnd.oasis.opendocument.base)" | "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-scws-config" | "application/vnd.oma-scws-http-request" | "application/vnd.oma-scws-http-response" | "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.onepager" | "application/vnd.onepagertamp" | "application/vnd.onepagertamx" | "application/vnd.onepagertat" | "application/vnd.onepagertatp" | "application/vnd.onepagertatx" | "application/vnd.onvif.metadata" | "application/vnd.openblox.game+xml" | "application/vnd.openblox.game-binary" | "application/vnd.openeye.oeb" | "application/vnd.openstreetmap.data+xml" | "application/vnd.opentimestamps.ots" | "application/vnd.openvpi.dspx+json" | "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.presProps+xml" | "application/vnd.openxmlformats-officedocument.presentationml.presentation" | "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+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.slideUpdateInfo+xml" | "application/vnd.openxmlformats-officedocument.presentationml.slideshow" | "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+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.pmtiles" | "application/vnd.poc.group-advertisement+xml" | "application/vnd.pocketlearn" | "application/vnd.powerbuilder6" | "application/vnd.powerbuilder6-s" | "application/vnd.powerbuilder7" | "application/vnd.powerbuilder7-s" | "application/vnd.powerbuilder75" | "application/vnd.powerbuilder75-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.quobject-quoxdocument" | "application/vnd.radisys.moml+xml" | "application/vnd.radisys.msml+xml" | "application/vnd.radisys.msml-audit+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-conf+xml" | "application/vnd.radisys.msml-dialog+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.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.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.siren+json" | "application/vnd.sketchometry" | "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.superfile.super" | "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+xml" | "application/vnd.syncml.dm+wbxml" | "application/vnd.syncml.dm+xml" | "application/vnd.syncml.dm.notification" | "application/vnd.syncml.dmddf+wbxml" | "application/vnd.syncml.dmddf+xml" | "application/vnd.syncml.dmtnds+wbxml" | "application/vnd.syncml.dmtnds+xml" | "application/vnd.syncml.ds.notification" | "application/vnd.tableschema+json" | "application/vnd.tao.intent-module-archive" | "application/vnd.tcpdump.pcap" | "application/vnd.think-cell.ppttc+json" | "application/vnd.tmd.mediaflex.api+xml" | "application/vnd.tml" | "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.uic.osdm+json" | "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.list-wbxml" | "application/vnd.uplanet.listcmd" | "application/vnd.uplanet.listcmd-wbxml" | "application/vnd.uplanet.signal" | "application/vnd.uri-map" | "application/vnd.valve.source.material" | "application/vnd.vcx" | "application/vnd.vd-study" | "application/vnd.vectorworks" | "application/vnd.vel+json" | "application/vnd.veraison.tsm-report+cbor" | "application/vnd.veraison.tsm-report+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.vocalshaper.vsp4" | "application/vnd.vsf" | "application/vnd.wantverse" | "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+wbxml" | "application/vnd.wv.csp+xml" | "application/vnd.wv.ssp+xml" | "application/vnd.xacml+json" | "application/vnd.xara" | "application/vnd.xarin.cpj" | "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" | "application/vnd.yamaha.openscoreformat.osfpvg+xml" | "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 (OBSOLETED in favor of video/vnd.youtube.yt)" | "application/vnd.zul" | "application/vnd.zzazz.deck+xml" | "application/voicexml+xml" | "application/voucher-cms+json" | "application/voucher-jws+json" | "application/vp" | "application/vp+cose" | "application/vp+jwt" | "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+xml" | "application/xcon-conference-info-diff+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/AMR" | "audio/AMR-WB" | "audio/ATRAC-ADVANCED-LOSSLESS" | "audio/ATRAC-X" | "audio/ATRAC3" | "audio/BV16" | "audio/BV32" | "audio/CN" | "audio/DAT12" | "audio/DV" | "audio/DVI4" | "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/G711-0" | "audio/G719" | "audio/G722" | "audio/G7221" | "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/L16" | "audio/L20" | "audio/L24" | "audio/L8" | "audio/LPC" | "audio/MELP" | "audio/MELP1200" | "audio/MELP2400" | "audio/MELP600" | "audio/MP4A-LATM" | "audio/MPA" | "audio/PCMA" | "audio/PCMA-WB" | "audio/PCMU" | "audio/PCMU-WB" | "audio/QCELP" | "audio/RED" | "audio/SMV" | "audio/SMV-QCP" | "audio/SMV0" | "audio/TETRA_ACELP" | "audio/TETRA_ACELP_BB" | "audio/TSVCIS" | "audio/UEMCLIP" | "audio/VDVI" | "audio/VMR-WB" | "audio/aac" | "audio/ac3" | "audio/amr-wb+" | "audio/aptx" | "audio/asc" | "audio/basic" | "audio/clearmode" | "audio/dls" | "audio/dsr-es201108" | "audio/dsr-es202050" | "audio/dsr-es202211" | "audio/dsr-es202212" | "audio/eac3" | "audio/encaprtp" | "audio/example" | "audio/flac" | "audio/flexfec" | "audio/fwdred" | "audio/iLBC" | "audio/ip-mr_v2.5" | "audio/matroska" | "audio/mhas" | "audio/midi-clip" | "audio/mobile-xmf" | "audio/mp4" | "audio/mpa-robust" | "audio/mpeg" | "audio/mpeg4-generic" | "audio/ogg" | "audio/opus" | "audio/parityfec" | "audio/prs.sid" | "audio/raptorfec" | "audio/rtp-enc-aescm128" | "audio/rtp-midi" | "audio/rtploopback" | "audio/rtx" | "audio/scip" | "audio/sofa" | "audio/sp-midi" | "audio/speex" | "audio/t140c" | "audio/t38" | "audio/telephone-event" | "audio/tone" | "audio/ulpfec" | "audio/usac" | "audio/vnd.3gpp.iufp" | "audio/vnd.4SB" | "audio/vnd.CELP" | "audio/vnd.audiokoz" | "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 - DEPRECATED in favor of audio/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/hjif" | "haptics/hmpg" | "haptics/ivs" | "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 (OBSOLETE)" | "image/ief" | "image/j2c" | "image/jaii" | "image/jais" | "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.blockfact.facti" | "image/vnd.clip" | "image/vnd.cns.inf2" | "image/vnd.dece.graphic" | "image/vnd.djvu" | "image/vnd.dvb.subtitle" | "image/vnd.dwg" | "image/vnd.dxf" | "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.mozilla.apng" | "image/vnd.ms-modi" | "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" | "image/x-emf - DEPRECATED in favor of image/emf" | "image/x-wmf - DEPRECATED in favor of image/wmf" | "message/CPIM" | "message/bhttp" | "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 (OBSOLETED by [RFC5537])" | "message/ohttp-req" | "message/ohttp-res" | "message/partial" | "message/rfc822" | "message/s-http (OBSOLETE)" | "message/sip" | "message/sipfrag" | "message/tracking-status" | "message/vnd.si.simp (OBSOLETED by request)" | "message/vnd.wfa.wsc" | "model/3mf" | "model/JT" | "model/e57" | "model/example" | "model/gltf+json" | "model/gltf-binary" | "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+fastinfoset" | "model/x3d+xml" | "model/x3d-vrml" | "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/RED" | "text/SGML" | "text/cache-manifest" | "text/calendar" | "text/cql" | "text/cql-expression" | "text/cql-identifier" | "text/css" | "text/csv" | "text/csv-schema" | "text/directory - DEPRECATED by RFC6350" | "text/dns" | "text/ecmascript (OBSOLETED in favor of text/javascript)" | "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/rfc822-headers" | "text/richtext" | "text/rtf" | "text/rtp-enc-aescm128" | "text/rtploopback" | "text/rtx" | "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.DMClientScript" | "text/vnd.IPTC.NITF" | "text/vnd.IPTC.NewsML" | "text/vnd.a" | "text/vnd.abc" | "text/vnd.ascii-art" | "text/vnd.curl" | "text/vnd.debian.copyright" | "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.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 (OBSOLETED by request)" | "text/vnd.sosi" | "text/vnd.sun.j2me.app-descriptor" | "text/vnd.trolltech.linguist" | "text/vnd.typst" | "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/3gpp-tt" | "video/3gpp2" | "video/AV1" | "video/BMPEG" | "video/BT656" | "video/CelB" | "video/DV" | "video/FFV1" | "video/H261" | "video/H263" | "video/H263-1998" | "video/H263-2000" | "video/H264" | "video/H264-RCDO" | "video/H264-SVC" | "video/H265" | "video/H266" | "video/JPEG" | "video/MP1S" | "video/MP2P" | "video/MP2T" | "video/MP4V-ES" | "video/MPV" | "video/SMPTE292M" | "video/VP8" | "video/VP9" | "video/encaprtp" | "video/evc" | "video/example" | "video/flexfec" | "video/iso.segment" | "video/jpeg2000" | "video/jxsv" | "video/lottie+json" | "video/matroska" | "video/matroska-3d" | "video/mj2" | "video/mp4" | "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/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.planar" | "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.vivo" | "video/vnd.youtube.yt";
|
|
2
2
|
/**
|
|
3
3
|
* A content type that can be either one of the predefined `KnownContentType` values,
|
|
4
4
|
* or any other custom string.
|