Socket
Socket
Sign inDemoInstall

bent

Package Overview
Dependencies
Maintainers
1
Versions
66
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

bent - npm Package Compare versions

Comparing version 7.1.2 to 7.2.0

7

package.json
{
"name": "bent",
"version": "7.1.2",
"version": "7.2.0",
"description": "Functional HTTP client for Node.js w/ async/await.",

@@ -9,5 +9,6 @@ "main": "src/nodejs.js",

"lint": "standard",
"test:node": "hundreds mocha test/test-*.js",
"test:node": "hundreds mocha --timeout=5000 test/test-*.js",
"test:browser": "polendina --cleanup --service-worker --worker test/test-*.js",
"test": "npm run lint && npm run test:node && npm run test:browser"
"test": "npm run lint && npm run test:node && npm run test:browser",
"coverage": "nyc --reporter=html mocha test/test-*.js && npx http-server coverage"
},

@@ -14,0 +15,0 @@ "keywords": [],

@@ -35,2 +35,5 @@ # bent

In Node.js, we also add decoding methods that match the Fetch API (`.json()`,
`.text()` and `.arrayBuffer()`).
```javascript

@@ -42,2 +45,9 @@ const bent = require('bent')

let stream = await getStream('/json.api')
// status code
stream.status // 200
stream.statusCode // 200
// optionally decode
const obj = await stream.json()
// or
const str = await stream.text()
```

@@ -44,0 +54,0 @@

@@ -16,3 +16,11 @@ 'use strict'

this.res = res
this.responseBody = res.arrayBuffer()
this.json = res.json.bind(res)
this.text = res.text.bind(res)
this.arrayBuffer = res.arrayBuffer.bind(res)
let buffer
const get = () => {
if (!buffer) buffer = this.arrayBuffer()
return buffer
}
Object.defineProperty(this, 'responseBody', { get })
}

@@ -19,0 +27,0 @@ }

@@ -26,2 +26,3 @@ 'use strict'

ret.statusCode = resp.statusCode
ret.status = resp.statusCode
ret.statusMessage = resp.statusMessage

@@ -51,7 +52,11 @@ ret.headers = resp.headers

this.statusCode = res.statusCode
this.responseBody = new Promise((resolve) => {
const buffers = []
res.on('data', chunk => buffers.push(chunk))
res.on('end', () => resolve(Buffer.concat(buffers)))
})
this.json = res.json
this.text = res.text
this.arrayBuffer = res.arrayBuffer
let buffer
const get = () => {
if (!buffer) buffer = this.arrayBuffer()
return buffer
}
Object.defineProperty(this, 'responseBody', { get })
}

@@ -67,2 +72,24 @@ }

const decodings = res => {
let _buffer
res.arrayBuffer = () => {
if (!_buffer) {
_buffer = getBuffer(res)
return _buffer
} else {
throw new Error('body stream is locked')
}
}
res.text = () => res.arrayBuffer().then(buff => buff.toString())
res.json = async () => {
const str = await res.text()
try {
return JSON.parse(str)
} catch (e) {
e.message += `str"${str}"`
throw e
}
}
}
const mkrequest = (statusCodes, method, encoding, headers, baseurl) => (_url, body = null, _headers = {}) => {

@@ -100,2 +127,4 @@ _url = baseurl + (_url || '')

const req = h.request(request, async res => {
res = getResponse(res)
decodings(res)
res.status = res.statusCode

@@ -105,21 +134,12 @@ if (!statusCodes.has(res.statusCode)) {

}
res = getResponse(res)
if (!encoding) return resolve(res)
else {
const buff = await getBuffer(res)
/* istanbul ignore else */
if (encoding === 'buffer') {
resolve(buff)
resolve(res.arrayBuffer())
} else if (encoding === 'json') {
let ret
try {
ret = JSON.parse(buff.toString())
resolve(ret)
} catch (e) {
e.message += `str"${buff.toString()}"`
reject(e)
}
resolve(res.json())
} else if (encoding === 'string') {
resolve(buff.toString())
resolve(res.text())
}

@@ -126,0 +146,0 @@ }

@@ -49,2 +49,23 @@ /* globals atob, it */

test('double buffer decode', async () => {
const request = bent()
const resp = await request(u('/echo.js?body=ok'))
const validate = buff => {
if (buff instanceof ArrayBuffer) {
same(buff, enc('ok'))
} else {
same(buff, Buffer.from('ok'))
}
}
validate(await resp.arrayBuffer())
let threw = true
try {
await resp.arrayBuffer()
threw = false
} catch (e) {
if (!e.message.includes('body stream is locked')) throw e
}
assert.ok(threw)
})
test('basic json', async () => {

@@ -130,13 +151,19 @@ const request = bent('json')

let body
let _e
try {
await request(u('/echo.js?statusCode=500&body=ok'))
} catch (e) {
_e = e
body = e.responseBody
}
const buffer = await body
if (process.browser) {
same(decode(buffer), 'ok')
} else {
same(buffer.toString(), 'ok')
const validate = buffer => {
if (process.browser) {
same(decode(buffer), 'ok')
} else {
same(buffer.toString(), 'ok')
}
}
validate(await body)
// should be able to access again
validate(await _e.responseBody)
})

@@ -143,0 +170,0 @@

@@ -83,1 +83,19 @@ 'use strict'

})
const getError = async () => {
const r = bent(201)
try {
await r('https://echo-server.mikeal.now.sh/src/echo.js?body="asdf"')
throw new Error('Should have failed')
} catch (e) {
ttype(e, 'StatusError')
return e
}
}
test('error decodings', async () => {
let e = await getError()
same(await e.text(), '"asdf"')
e = await getError()
same(await e.json(), 'asdf')
})
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc