Skip to content

Commit

Permalink
Moves ClientRequest utilities into their own directory
Browse files Browse the repository at this point in the history
  • Loading branch information
kettanaito committed Jul 14, 2020
1 parent 6dfc3ad commit e781074
Show file tree
Hide file tree
Showing 8 changed files with 49 additions and 50 deletions.
58 changes: 11 additions & 47 deletions src/http/ClientRequest/ClientRequestOverride.ts
Original file line number Diff line number Diff line change
@@ -1,56 +1,20 @@
import { inherits } from 'util'
import { Socket as NetworkSocket } from 'net'
import http, {
IncomingMessage,
ClientRequest,
request,
OutgoingHttpHeaders,
} from 'http'
import http, { IncomingMessage, ClientRequest } from 'http'
import { until } from '@open-draft/until'
import { HeadersObject, reduceHeadersObject } from 'headers-utils'
import { RequestMiddleware, InterceptedRequest } from '../../glossary'
import { DEFAULT_PATH } from '../../utils/getUrlByRequestOptions'
import { Socket } from './Socket'
import { normalizeHttpRequestParams } from './normalizeHttpRequestParams'
import { normalizeHttpRequestEndParams } from './normalizeHttpRequestEndParams'

const createDebug = require('debug')

function bodyBufferToString(buffer: Buffer): string {
const utfEncodedBuffer = buffer.toString('utf8')
const bufferCopy = Buffer.from(utfEncodedBuffer)
const isUtf8 = bufferCopy.equals(buffer)

return isUtf8 ? utfEncodedBuffer : buffer.toString('hex')
}

function concatChunkToBuffer(
chunk: string | Buffer,
buffer: Buffer[]
): Buffer[] {
if (!Buffer.isBuffer(chunk)) {
chunk = Buffer.from(chunk)
}

return buffer.concat(chunk)
}

function inheritHeaders(
req: ClientRequest,
headers: OutgoingHttpHeaders | undefined
): void {
// Cannot write request headers once already written,
// or when no headers are given.
if (req.headersSent || !headers) {
return
}
/* Utils */
import { DEFAULT_PATH } from '../../utils/getUrlByRequestOptions'
import { bodyBufferToString } from './utils/bodyBufferToString'
import { concatChunkToBuffer } from './utils/concatChunkToBuffer'
import { inheritRequestHeaders } from './utils/inheritRequestHeaders'
import { normalizeHttpRequestParams } from './utils/normalizeHttpRequestParams'
import { normalizeHttpRequestEndParams } from './utils/normalizeHttpRequestEndParams'

Object.entries(headers).forEach(([name, value]) => {
if (value != null) {
req.setHeader(name, value)
}
})
}
const createDebug = require('debug')

export function createClientRequestOverrideClass(
middleware: RequestMiddleware,
Expand All @@ -75,7 +39,7 @@ export function createClientRequestOverrideClass(
http.OutgoingMessage.call(this)

// Propagate options headers to the request instance.
inheritHeaders(this, options.headers)
inheritRequestHeaders(this, options.headers)

const socket = (new Socket(options, {
usesHttps,
Expand Down Expand Up @@ -309,7 +273,7 @@ export function createClientRequestOverrideClass(

// Propagate headers set after `ClientRequest` is constructed
// onto the original request instance.
inheritHeaders(req, outHeaders)
inheritRequestHeaders(req, outHeaders)

// Propagate a request body buffer written via `req.write()`
// to the original request.
Expand Down
7 changes: 7 additions & 0 deletions src/http/ClientRequest/utils/bodyBufferToString.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export function bodyBufferToString(buffer: Buffer): string {
const utfEncodedBuffer = buffer.toString('utf8')
const bufferCopy = Buffer.from(utfEncodedBuffer)
const isUtf8 = bufferCopy.equals(buffer)

return isUtf8 ? utfEncodedBuffer : buffer.toString('hex')
}
10 changes: 10 additions & 0 deletions src/http/ClientRequest/utils/concatChunkToBuffer.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
export function concatChunkToBuffer(
chunk: string | Buffer,
buffer: Buffer[]
): Buffer[] {
if (!Buffer.isBuffer(chunk)) {
chunk = Buffer.from(chunk)
}

return buffer.concat(chunk)
}
18 changes: 18 additions & 0 deletions src/http/ClientRequest/utils/inheritRequestHeaders.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { ClientRequest, OutgoingHttpHeaders } from 'http'

export function inheritRequestHeaders(
req: ClientRequest,
headers: OutgoingHttpHeaders | undefined
): void {
// Cannot write request headers once already written,
// or when no headers are given.
if (req.headersSent || !headers) {
return
}

Object.entries(headers).forEach(([name, value]) => {
if (value != null) {
req.setHeader(name, value)
}
})
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { RequestOptions } from 'https'
import { HttpRequestCallback, RequestSelf } from '../../glossary'
import { getRequestOptionsByUrl } from '../../utils/getRequestOptionsByUrl'
import { getUrlByRequestOptions } from '../../utils/getUrlByRequestOptions'
import { HttpRequestCallback, RequestSelf } from '../../../glossary'
import { getRequestOptionsByUrl } from '../../../utils/getRequestOptionsByUrl'
import { getUrlByRequestOptions } from '../../../utils/getUrlByRequestOptions'

const debug = require('debug')('http normalizeHttpRequestParams')

Expand Down

0 comments on commit e781074

Please sign in to comment.