UNPKG

node-libcurl

Version:

The fastest http(s) client (and much more) for Node.js - Node.js bindings for libcurl

76 lines (63 loc) 1.75 kB
/** * Copyright (c) Jonathan Cardoso Machado. All Rights Reserved. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ /** * Whe data parsing is enabled on the {@link "Curl".Curl} instance, the headers parameter passed * to the `end` event's callback will be one array of this type. * @public */ export type HeaderInfo = { result?: { version: string code: number reason: string } } & { 'Set-Cookie'?: string[] } & { [headerKey: string]: string } /** * Parses the headers that were stored while * the request was being processed. * * @internal */ export function parseHeaders(headersString: string): HeaderInfo[] { const headers = headersString.split(/\r?\n|\r/g) const len = headers.length const result = [] let isStatusLine = true let currHeaders: HeaderInfo = {} for (let i = 0; i < len; i += 1) { // status line if (isStatusLine) { const header = headers[i].split(' ') currHeaders.result = { version: header.shift() || '', code: parseInt(header.shift() || '0', 10), reason: header.join(' '), } isStatusLine = false continue } // Empty string means empty line, which means another header group if (headers[i] === '') { result.push(currHeaders) currHeaders = {} isStatusLine = true continue } const header = headers[i].split(/:\s(.+)/) if (header[0].toUpperCase() === 'SET-COOKIE') { if (!currHeaders['Set-Cookie']) { currHeaders['Set-Cookie'] = [] } currHeaders['Set-Cookie'].push(header[1]) } else { currHeaders[header[0]] = header[1] } } return result }