1.0.2 • Published 5 years ago

@goa/type-is v1.0.2

Weekly downloads
5
License
MIT
Repository
github
Last release
5 years ago

@goa/type-is

npm version

@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

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 or application/*. 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 or application/*+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.


1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago