Infer the content-type of a HTTP Header for Deno, compatible with Browser. Based
on https://github.com/jshttp/type-is.
import { hasBody, is, typeofrequest } from "https://deno.land/x/type_is/mod.ts";Checks if the mediaType is one of the types. If the mediaType is invalid
or does not matches any of the types, then false is returned. Otherwise, a
string of the type that matched is returned.
The mediaType argument is expected to be a
media type string. The types argument
is an array of type strings.
Each type in the types array can be one of the following:
- A file extension name such as
json. This name will be returned if matched. - A mime type such as
application/json. - A mime type with a wildcard such as
*/*or*/jsonorapplication/*. The full mime type will be returned if matched. - A suffix such as
+json. This can be combined with a wildcard such as*/vnd+jsonorapplication/*+json. The full mime type will be returned if matched.
Some examples to illustrate the inputs and returned value:
const mediaType = "application/json";
is(mediaType, ["json"]); // => 'json'
is(mediaType, ["html", "json"]); // => 'json'
is(mediaType, ["application/*"]); // => 'application/json'
is(mediaType, ["application/json"]); // => 'application/json'
is(mediaType, ["html"]); // => falseChecks if the header is one of the types. If the header's request has no
body, even if there is a Content-Type header, then null is returned. If the
Content-Type header is invalid or does not matches any of the types, then
false is returned. Otherwise, a string of the type that matched is returned.
The header argument is expected to be a Deno's Headers, it should be
compatible with browser's Headers as well. The types argument is an array of
type strings.
Each type in the types array can be one of the following:
- A file extension name such as
json. This name will be returned if matched. - A mime type such as
application/json. - A mime type with a wildcard such as
*/*or*/jsonorapplication/*. The full mime type will be returned if matched. - A suffix such as
+json. This can be combined with a wildcard such as*/vnd+jsonorapplication/*+json. The full mime type will be returned if matched.
Some examples to illustrate the inputs and returned value:
const header = new Headers([["content-type", "application/json"]]);
typeis(header, ["json"]); // => "json"
typeis(header, ["html", "json"]); // => "json"
typeis(header, ["application/*"]); // => "application/json"
typeis(header, ["application/json"]); // => "application/json"
typeis(header, ["html"]); // => falseExample in Deno http server:
import { serve } from "https://deno.land/std/http/server.ts";
import { typeofrequest } from "https://raw.githubusercontent.com/ako-deno/type_is/master/mod.ts";
const server = serve("127.0.0.1:4500");
for await (const req of server) {
const isText = typeofrequest(req.headers, ["text/*"]);
const res = {
body: `you ${istext ? "sent" : "did not send"} me text`,
headers: new Headers(),
};
req.respond(res).catch(() => {});
}Returns a Boolean if the given header's request has a body, regardless of the
Content-Type header.
Having a body has no relation to how large the body is (it may be 0 bytes). This is similar to how file existence works. If a body does exist, then this indicates that there is data to read from the Deno's request stream.