npm package: @libs/status
Description: http status code from Django REST framework
Author: TonyPythoneer
Latest version: 0.1.0

# Status

[![npm-v-badge][npm-v-badge]][npm-url] [![npm-dt-badge][npm-dt-badge]][npm-url] [![travis-ci-master-badge][travis-ci-master-badge]][travis-ci-url]

Using named status codes is more better than bare ones.

It continues using the good named style from [Django REST framework](https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/status.py)

```javascript
// bad part
/**
 * Although it's easy and straightforward to represent connotation
 * (used status code), it's lack of denotation (concrete message)
 * to represent itself.
 */
res.status(200);

// normal part
/**
 * Set status code to a constant but it's not clear
 * because it's only used by http.
 */
const OK = 200;
res.status(OK);  // OK is 200

// good part
/**
 * It's composed of status code and message as a named constant.
 * It has met `connotation` and `denotation`. Therefore, it's
 * very high readable!
 */
res.status(HTTP_200_OK);
```

## Installation

```bash
$ npm install @libs/status
```

## Usage & Example

```javascript
import * as status from '@libs/status';

res.status(status.HTTP_200_OK);
```

## APIs

### Validator

* `isInformational: (code: number) => boolean;`
* `isSuccess: (code: number) => boolean;`
* `isRedirect: (code: number) => boolean;`
* `isClientError: (code: number) => boolean;`
* `isServerError: (code: number) => boolean;`

### Constants

* `HTTP_100_CONTINUE = 100;`
* `HTTP_101_SWITCHING_PROTOCOLS = 101;`
* `HTTP_200_OK = 200;`
* `HTTP_201_CREATED = 201;`
* `HTTP_202_ACCEPTED = 202;`
* `HTTP_203_NON_AUTHORITATIVE_INFORMATION = 203;`
* `HTTP_204_NO_CONTENT = 204;`
* `HTTP_205_RESET_CONTENT = 205;`
* `HTTP_206_PARTIAL_CONTENT = 206;`
* `HTTP_207_MULTI_STATUS = 207;`
* `HTTP_300_MULTIPLE_CHOICES = 300;`
* `HTTP_301_MOVED_PERMANENTLY = 301;`
* `HTTP_302_FOUND = 302;`
* `HTTP_303_SEE_OTHER = 303;`
* `HTTP_304_NOT_MODIFIED = 304;`
* `HTTP_305_USE_PROXY = 305;`
* `HTTP_306_RESERVED = 306;`
* `HTTP_307_TEMPORARY_REDIRECT = 307;`
* `HTTP_400_BAD_REQUEST = 400;`
* `HTTP_401_UNAUTHORIZED = 401;`
* `HTTP_402_PAYMENT_REQUIRED = 402;`
* `HTTP_403_FORBIDDEN = 403;`
* `HTTP_404_NOT_FOUND = 404;`
* `HTTP_405_METHOD_NOT_ALLOWED = 405;`
* `HTTP_406_NOT_ACCEPTABLE = 406;`
* `HTTP_407_PROXY_AUTHENTICATION_REQUIRED = 407;`
* `HTTP_408_REQUEST_TIMEOUT = 408;`
* `HTTP_409_CONFLICT = 409;`
* `HTTP_410_GONE = 410;`
* `HTTP_411_LENGTH_REQUIRED = 411;`
* `HTTP_412_PRECONDITION_FAILED = 412;`
* `HTTP_413_REQUEST_ENTITY_TOO_LARGE = 413;`
* `HTTP_414_REQUEST_URI_TOO_LONG = 414;`
* `HTTP_415_UNSUPPORTED_MEDIA_TYPE = 415;`
* `HTTP_416_REQUESTED_RANGE_NOT_SATISFIABLE = 416;`
* `HTTP_417_EXPECTATION_FAILED = 417;`
* `HTTP_422_UNPROCESSABLE_ENTITY = 422;`
* `HTTP_423_LOCKED = 423;`
* `HTTP_424_FAILED_DEPENDENCY = 424;`
* `HTTP_428_PRECONDITION_REQUIRED = 428;`
* `HTTP_429_TOO_MANY_REQUESTS = 429;`
* `HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE = 431;`
* `HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS = 451;`
* `HTTP_500_INTERNAL_SERVER_ERROR = 500;`
* `HTTP_501_NOT_IMPLEMENTED = 501;`
* `HTTP_502_BAD_GATEWAY = 502;`
* `HTTP_503_SERVICE_UNAVAILABLE = 503;`
* `HTTP_504_GATEWAY_TIMEOUT = 504;`
* `HTTP_505_HTTP_VERSION_NOT_SUPPORTED = 505;`
* `HTTP_507_INSUFFICIENT_STORAGE = 507;`
* `HTTP_511_NETWORK_AUTHENTICATION_REQUIRED = 511;`


[travis-ci-master-badge]: https://api.travis-ci.org/at-libs/status.svg?branch=master
[travis-ci-url]: https://travis-ci.org/at-libs/status

[npm-v-badge]: https://img.shields.io/npm/v/@libs/status.svg
[npm-dt-badge]: https://img.shields.io/npm/dt/@libs/status.svg
[npm-url]: https://www.npmjs.com/package/@libs/status