11import { Buffer } from 'buffer' ;
2- import * as stream from 'stream' ;
32import * as fs from 'fs' ;
43import * as net from "net" ;
54import * as tls from "tls" ;
@@ -18,21 +17,17 @@ import { Mutex } from 'async-mutex';
1817import { ErrorLike , isErrorLike , UnreachableCheck } from '@httptoolkit/util' ;
1918
2019import {
21- Destination ,
2220 InitiatedRequest ,
2321 OngoingRequest ,
2422 CompletedRequest ,
2523 OngoingResponse ,
2624 CompletedResponse ,
2725 TlsHandshakeFailure ,
2826 ClientError ,
29- TimingEvents ,
30- OngoingBody ,
3127 WebSocketMessage ,
3228 WebSocketClose ,
3329 TlsPassthroughEvent ,
3430 RuleEvent ,
35- RawTrailers ,
3631 RawPassthroughEvent ,
3732 RawPassthroughDataEvent ,
3833 RawHeaders ,
@@ -51,17 +46,7 @@ import { RequestRule, RequestRuleData } from "../rules/requests/request-rule";
5146import { ServerMockedEndpoint } from "./mocked-endpoint" ;
5247import { createComboServer } from "./http-combo-server" ;
5348import { filter } from "../util/promise" ;
54- import { Mutable } from "../util/type-utils" ;
55- import { makePropertyWritable } from "../util/util" ;
5649
57- import {
58- isAbsoluteUrl ,
59- getPathFromAbsoluteUrl ,
60- getHostFromAbsoluteUrl ,
61- getDestination ,
62- normalizeHost ,
63- } from "../util/url" ;
64- import { isIP } from "../util/ip-utils" ;
6550import {
6651 buildRawSocketEventData ,
6752 buildTlsSocketEventData ,
@@ -72,15 +57,12 @@ import {
7257import {
7358 ClientErrorInProgress ,
7459 LastHopEncrypted ,
75- LastTunnelAddress ,
7660 TlsSetupCompleted ,
7761 SocketMetadata ,
7862 TlsMetadata ,
79- SocketTimingInfo
8063} from '../util/socket-extensions' ;
8164import { getSocketMetadataTags , getSocketMetadataFromProxyAuth } from '../util/socket-metadata'
8265import {
83- parseRequestBody ,
8466 waitForCompletedRequest ,
8567 trackResponse ,
8668 waitForCompletedResponse ,
@@ -94,9 +76,7 @@ import {
9476} from "../util/request-utils" ;
9577import { asBuffer } from "../util/buffer-utils" ;
9678import {
97- getHeaderValue ,
9879 pairFlatRawHeaders ,
99- rawHeadersToObject
10080} from "../util/header-utils" ;
10181import { AbortError } from "../rules/requests/request-step-impls" ;
10282import { WebSocketRuleData , WebSocketRule } from "../rules/websockets/websocket-rule" ;
@@ -391,13 +371,9 @@ export class MockttpServer extends AbstractMockttp implements Mockttp {
391371
392372 setImmediate ( ( ) => {
393373 const initiatedReq = buildInitiatedRequest ( request ) ;
394- emitter . emit ( 'request-initiated' , Object . assign (
395- initiatedReq ,
396- {
397- timingEvents : _ . clone ( initiatedReq . timingEvents ) ,
398- tags : _ . clone ( initiatedReq . tags )
399- }
400- ) ) ;
374+ initiatedReq . timingEvents = { ...initiatedReq . timingEvents } ;
375+ initiatedReq . tags = initiatedReq . tags . slice ( ) ;
376+ emitter . emit ( 'request-initiated' , initiatedReq ) ;
401377 } ) ;
402378 }
403379
@@ -407,13 +383,9 @@ export class MockttpServer extends AbstractMockttp implements Mockttp {
407383 waitForCompletedRequest ( request )
408384 . then ( ( completedReq : CompletedRequest ) => {
409385 setImmediate ( ( ) => {
410- emitter . emit ( 'request' , Object . assign (
411- completedReq ,
412- {
413- timingEvents : _ . clone ( completedReq . timingEvents ) ,
414- tags : _ . clone ( completedReq . tags )
415- }
416- ) ) ;
386+ completedReq . timingEvents = { ...completedReq . timingEvents } ;
387+ completedReq . tags = completedReq . tags . slice ( ) ;
388+ emitter . emit ( 'request' , completedReq ) ;
417389 } ) ;
418390 } )
419391 . catch ( console . error ) ;
@@ -424,13 +396,9 @@ export class MockttpServer extends AbstractMockttp implements Mockttp {
424396
425397 setImmediate ( ( ) => {
426398 const initiatedRes = buildInitiatedResponse ( response ) ;
427- emitter . emit ( 'response-initiated' , Object . assign (
428- initiatedRes ,
429- {
430- timingEvents : _ . clone ( initiatedRes . timingEvents ) ,
431- tags : _ . clone ( initiatedRes . tags )
432- }
433- ) ) ;
399+ initiatedRes . timingEvents = { ...initiatedRes . timingEvents } ;
400+ initiatedRes . tags = initiatedRes . tags . slice ( ) ;
401+ emitter . emit ( 'response-initiated' , initiatedRes ) ;
434402 } ) ;
435403 }
436404
@@ -440,10 +408,9 @@ export class MockttpServer extends AbstractMockttp implements Mockttp {
440408 waitForCompletedResponse ( response )
441409 . then ( ( res : CompletedResponse ) => {
442410 setImmediate ( ( ) => {
443- emitter . emit ( 'response' , Object . assign ( res , {
444- timingEvents : _ . clone ( res . timingEvents ) ,
445- tags : _ . clone ( res . tags )
446- } ) ) ;
411+ res . timingEvents = { ...res . timingEvents } ;
412+ res . tags = res . tags . slice ( ) ;
413+ emitter . emit ( 'response' , res ) ;
447414 } ) ;
448415 } )
449416 . catch ( console . error ) ;
@@ -455,10 +422,9 @@ export class MockttpServer extends AbstractMockttp implements Mockttp {
455422 waitForCompletedRequest ( request )
456423 . then ( ( completedReq : CompletedRequest ) => {
457424 setImmediate ( ( ) => {
458- emitter . emit ( 'websocket-request' , Object . assign ( completedReq , {
459- timingEvents : _ . clone ( completedReq . timingEvents ) ,
460- tags : _ . clone ( completedReq . tags )
461- } ) ) ;
425+ completedReq . timingEvents = { ...completedReq . timingEvents } ;
426+ completedReq . tags = completedReq . tags . slice ( ) ;
427+ emitter . emit ( 'websocket-request' , completedReq ) ;
462428 } ) ;
463429 } )
464430 . catch ( console . error ) ;
@@ -470,8 +436,8 @@ export class MockttpServer extends AbstractMockttp implements Mockttp {
470436 setImmediate ( ( ) => {
471437 emitter . emit ( 'websocket-accepted' , {
472438 ...response ,
473- timingEvents : _ . clone ( response . timingEvents ) ,
474- tags : _ . clone ( response . tags )
439+ timingEvents : { ... response . timingEvents } ,
440+ tags : response . tags . slice ( )
475441 } ) ;
476442 } ) ;
477443 }
@@ -603,9 +569,9 @@ export class MockttpServer extends AbstractMockttp implements Mockttp {
603569 private async announceAbortAsync ( emitter : EventEmitter , request : OngoingRequest , abortError ?: ErrorLike ) {
604570 setImmediate ( ( ) => {
605571 const req = buildInitiatedRequest ( request ) ;
572+ req . timingEvents = { ...req . timingEvents } ;
573+ req . tags = req . tags . slice ( ) ;
606574 emitter . emit ( 'abort' , Object . assign ( req , {
607- timingEvents : _ . clone ( req . timingEvents ) ,
608- tags : _ . clone ( req . tags ) ,
609575 error : abortError ? {
610576 name : abortError . name ,
611577 code : abortError . code ,
@@ -891,7 +857,8 @@ export class MockttpServer extends AbstractMockttp implements Mockttp {
891857 // There are no incomplete & matching rules! One last option: if the last matching rule is
892858 // maybe-incomplete (i.e. default completion status but has seen >0 requests) then it should
893859 // match anyway. This allows us to add rules and have the last repeat indefinitely.
894- const lastMatchingRule = _ . last ( await filter ( rulesMatches , m => m . match ) ) ?. rule ;
860+ const matchingRules = await filter ( rulesMatches , m => m . match ) ;
861+ const lastMatchingRule = matchingRules [ matchingRules . length - 1 ] ?. rule ;
895862 if ( ! lastMatchingRule || lastMatchingRule . isComplete ( ) ) continue ; // On to lower priority matches
896863 // Otherwise, must be a rule with isComplete === null, i.e. no specific completion check:
897864 else return lastMatchingRule ;
0 commit comments