http-tag
Version:
Simplified Writing Of HTTP Message Text
68 lines (53 loc) • 2.19 kB
Markdown
# HTTPTag
## Description
The **HTTPTag** is a Template literal tag to easily write HTTP Message texts.
```javascript
const HTTPTag = require('http-tag')
const xHeader = 'Custom-Header'
socket.write(
HTTPTag`
GET / HTTP/1.1
X-Header: ${xHeader}
`
)
```
## Installation
Simple as: `npm install --save http-tag`
## Usage
Well, as you see above, its very simple to use:
```javascript
HTTPTag`
GET / HTTP/1.1
X-Header: ${xHeader}
`
```
You dont need to manually handle **CR** and **LF** characters before **end of
heade** (start of body) section of a message.
Before **End Of A Message Head**, all global CRLF, CR and LF characters, i.e. that are not provided as
**expressions** to tagged template, will be replaced with a CRLF each, including their trailing spaces
(**considered only sequences of ' ' characters**).
Leading [Whitespace Characters][mdn_whitespace] - `\n, \r \t ' ' ...`
of a hall string will be trimed:
```javascript
HTTPTag`
\r\n \t // this will be trimed
HTTP/1.1 200 OK
`
```
Note that We do not handle exactly the format of **HTTP Messages**, instead we support
its light-writing, so the comments above considered as valid input.
As Globaly all CR's and LF's before **end of a message head** will be replaced by CRLF's, you need a way
to also pass this characters **Without Any Modification** to the HTTP message head section, and maybe also some trailing spaces,
for this scenario you need to pass them in expressions to tagged template:
```javascript
HTTPTag`
GET / HTTP/1.1
${' ' + 'This CR will not be merged with followed by \n character: \r'}
`
```
This Tagged Templates **MUST** conform to [Rules Of Escape Sequences][mdn_template_literal_escape_rules] defined for Template Literals,
otherwise **SyntaxError** will be thrown.
And Finally if after processing of a string the **end of a head** section is not
encountered, we will add final CRLF(**s**) for you.
[mdn_template_literal_escape_rules]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#tagged_templates_and_escape_sequences
[mdn_whitespace]: https://developer.mozilla.org/en-US/docs/Glossary/Whitespace