Spaces:
Runtime error
Runtime error
| const assert = require('assert') | |
| const { | |
| ResponseStatusCodeError | |
| } = require('../core/errors') | |
| const { toUSVString } = require('../core/util') | |
| async function getResolveErrorBodyCallback ({ callback, body, contentType, statusCode, statusMessage, headers }) { | |
| assert(body) | |
| let chunks = [] | |
| let limit = 0 | |
| for await (const chunk of body) { | |
| chunks.push(chunk) | |
| limit += chunk.length | |
| if (limit > 128 * 1024) { | |
| chunks = null | |
| break | |
| } | |
| } | |
| if (statusCode === 204 || !contentType || !chunks) { | |
| process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ''}`, statusCode, headers)) | |
| return | |
| } | |
| try { | |
| if (contentType.startsWith('application/json')) { | |
| const payload = JSON.parse(toUSVString(Buffer.concat(chunks))) | |
| process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ''}`, statusCode, headers, payload)) | |
| return | |
| } | |
| if (contentType.startsWith('text/')) { | |
| const payload = toUSVString(Buffer.concat(chunks)) | |
| process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ''}`, statusCode, headers, payload)) | |
| return | |
| } | |
| } catch (err) { | |
| // Process in a fallback if error | |
| } | |
| process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ''}`, statusCode, headers)) | |
| } | |
| module.exports = { getResolveErrorBodyCallback } | |