-
Notifications
You must be signed in to change notification settings - Fork 30
/
httpRegionUtils.ts
90 lines (84 loc) · 3.06 KB
/
httpRegionUtils.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import { HookCancel } from 'hookpoint';
import * as models from '../models';
import { createResponseProxy } from './requestClientUtils';
import { cloneResponse } from './requestUtils';
import { isString } from './stringUtils';
export function getDisplayName(httpRegion?: models.HttpRegion, defaultName = 'global'): string {
if (httpRegion) {
if (isString(httpRegion.metaData.title)) {
return httpRegion.metaData.title;
}
if (isString(httpRegion.metaData.name)) {
return httpRegion.metaData.name;
}
if (httpRegion.request?.url) {
let indexQuery = httpRegion.request.url.indexOf('?');
if (indexQuery < 0) {
indexQuery = httpRegion.request.url.length;
}
const line =
httpRegion.symbol.children?.find?.(obj => obj.kind === models.HttpSymbolKind.requestLine)?.startLine ||
httpRegion.symbol.startLine;
return `${httpRegion.request.method} ${httpRegion.request.url.slice(0, indexQuery)} (line: ${line + 1})`;
}
}
return defaultName;
}
export function getRegionDescription(httpRegion: models.HttpRegion, defaultName = '-'): string {
if (isString(httpRegion.metaData.description)) {
return httpRegion.metaData.description;
}
if (httpRegion.request?.url) {
return `${httpRegion.request.method} ${httpRegion.request.url}`;
}
return defaultName;
}
export async function logResponse(
response: models.HttpResponse,
context: models.ProcessorContext
): Promise<models.HttpResponse | undefined> {
const clone = cloneResponse(response);
const regionResult = await context.hooks.responseLogging.trigger(createResponseProxy(clone), context);
if (regionResult === HookCancel) {
return undefined;
}
if (!context.httpRegion.metaData.noLog && context.logResponse) {
await context.logResponse(clone, context.httpRegion);
}
return clone;
}
export async function executeGlobalScripts(context: {
variables: models.Variables;
httpFile: models.HttpFile;
options: Record<string, unknown>;
}): Promise<boolean> {
for (const httpRegion of context.httpFile.globalHttpRegions) {
if (!(await httpRegion.execute(context))) {
return false;
}
}
return true;
}
export function addHttpFileRequestClientHooks(
requestClientHooks: models.RequestClientHooks,
httpFile: models.HttpFile
): models.RequestClientHooks {
return {
onRequest: httpFile.hooks.onRequest.merge(
...httpFile.globalHttpRegions.map(obj => obj.hooks.onRequest),
requestClientHooks.onRequest
) as models.OnRequestHook,
onResponse: httpFile.hooks.onResponse.merge(
requestClientHooks.onResponse,
...httpFile.globalHttpRegions.map(obj => obj.hooks.onResponse)
) as models.OnResponseHook,
onStreaming: httpFile.hooks.onStreaming.merge(
requestClientHooks.onStreaming,
...httpFile.globalHttpRegions.map(obj => obj.hooks.onStreaming)
) as models.OnStreaming,
responseLogging: httpFile.hooks.responseLogging.merge(
requestClientHooks.responseLogging,
...httpFile.globalHttpRegions.map(obj => obj.hooks.responseLogging)
) as models.ResponseLoggingHook,
};
}