@goa/type-is
v1.0.2
Published
[fork] Infer the content-type of a request Written In ES6 And Optimised With JavaScript Compiler.
Downloads
18
Readme
@goa/type-is
@goa/type-is
is a fork of Infer the content-type of a request Written In ES6 And Optimised With JavaScript Compiler.
yarn add @goa/type-is
Table Of Contents
- Table Of Contents
- API
typeis(request: http.IncomingMessage, types: string|Array<string>, ...types: string): ?string|boolean
hasBody(request: http.IncomingMessage): boolean
is(mediaType: string, types: string|Array<string>, ...types: string): ?string|boolean
- Copyright
API
The package is available by importing its default and named functions:
import typeis, { hasBody } from '@goa/type-is'
typeis(
request: http.IncomingMessage,
types: string|Array<string>,
...types: string,
): ?string|boolean
Checks if the request
is one of the types. If the 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 request
argument is expected to be a Node.js HTTP request. 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.
import typeis from '@goa/type-is'
const req = {
headers: {
'content-length': 10,
'content-type': 'application/json',
},
}
log(typeis(req, ['json']))
log(typeis(req, ['html', 'json']))
log(typeis(req, ['application/*']))
log(typeis(req, ['application/json']))
// pass types as variable arguments
log(typeis(req, 'text/html', 'application/json'))
log(typeis(req, ['html']))
json
json
application/json
application/json
application/json
false
hasBody(
request: http.IncomingMessage,
): boolean
Returns a Boolean if the given 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.
import { hasBody } from '@goa/type-is'
log(hasBody({ headers: {
'content-length': 10,
'content-type': 'application/json' },
}))
log(hasBody({ headers: {
'transfer-encoding': 'utf-8' },
}))
log(hasBody({ headers: {
'content-type': 'application/json' },
}))
true
true
false
is(
mediaType: string,
types: string|Array<string>,
...types: string,
): ?string|boolean
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 follows the same rules as described in the typeis
section.
import { is } from '@goa/type-is'
const mediaType = 'application/json'
log(is(mediaType, ['json']))
log(is(mediaType, ['html', 'json']))
log(is(mediaType, ['application/*']))
log(is(mediaType, ['application/json']))
// pass types as variable arguments
log(is(mediaType, 'text/html', 'application/json'))
log(is(mediaType, ['html']))
json
json
application/json
application/json
application/json
false
Copyright
Original Work by Jonathan Ong, Douglas Christopher Wilson and contributors.