type_is
Infer the content-type of a HTTP Header for Deno, compatible with Browser. Based on https://github.com/jshttp/type-is
.
API
import { is, typeofrequest, hasBody } from "https://raw.githubusercontent.com/ako-deno/type_is/master/mod.ts";
is(mediaType: string, types?: string[]): boolean | string
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*/json
orapplication/*
. The full mime type will be returned if matched. - A suffix such as
+json
. This can be combined with a wildcard such as*/vnd+json
orapplication/*+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']) // => false
typeofrequest(header: Headers, types?: string[]): null | boolean | string
Checks 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*/json
orapplication/*
. The full mime type will be returned if matched. - A suffix such as
+json
. This can be combined with a wildcard such as*/vnd+json
orapplication/*+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"]) // => false
Example 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(() => {});
}
hasBody(header: Headers): boolean
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 Node.js request stream.