-
Notifications
You must be signed in to change notification settings - Fork 0
/
error.ts
131 lines (107 loc) · 3.54 KB
/
error.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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/*
Test Automation (No submodules)
SDKs (no submodules) to test automation workflows.
The version of the OpenAPI document: 1.0.0
NOTE: This file is auto generated by Konfig (https://konfigthis.com).
*/
import type { AxiosError } from "axios";
/**
* This class provides a wrapper for network errors when making requests to Test Automation (No submodules)
*/
export class AutomationTestWithSubmoduleError extends Error {
/**
* The response body
*/
readonly responseBody: unknown;
/**
* The error code provided from the underlying "axios" library which can be
* more descriptive than the HTTP status descriptions.
*/
readonly code?: string;
/**
* The status code from the response.
* For explanations, refer to https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
*/
readonly status?: number;
/**
* The status text from the response.
* For explanations, refer to https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
*/
readonly statusText?: string;
/**
* The URL that the original request was sent to
*/
readonly url?: string;
/**
* HTTP request method (see https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods)
*/
readonly method?: string;
constructor(axiosError: AxiosError, responseBody: unknown, headers: unknown) {
const message = axiosError.message + "\nRESPONSE HEADERS:\n" + JSON.stringify(headers, null, 2);
super(message);
this.name = "AutomationTestWithSubmoduleError";
this.code = axiosError.code;
this.method = axiosError.config?.method?.toUpperCase();
this.url = axiosError.config?.url;
this.status = axiosError.response?.status;
this.statusText = axiosError.response?.statusText;
this.responseBody = responseBody;
}
toJSON() {
return {
name: this.name,
message: this.message,
method: this.method,
url: this.url,
code: this.code,
status: this.status,
statusText: this.statusText,
responseBody: this.responseBody,
};
}
}
export async function readableStreamToString(stream: ReadableStream) {
// Step 1: Create a new TextDecoder
const decoder = new TextDecoder();
// Step 2: Create a new ReadableStreamDefaultReader
const reader = stream.getReader();
// Step 3: Initialize an empty string to hold the result
let result = "";
try {
while (true) {
// Step 4: Read data from the stream
const { done, value } = await reader.read();
// If there is no more data to read, break the loop
if (done) break;
// Convert the chunk of data to a string using the TextDecoder
const chunk = decoder.decode(value, { stream: true });
// Concatenate the chunk to the result
result += chunk;
}
} finally {
// Step 5: Release the ReadableStreamDefaultReader when done or in case of an error
reader.releaseLock();
}
// Return the final result as a string
return result;
}
export function parseIfJson(input: unknown): object | unknown {
if (typeof input !== "string") {
// If the input is not a string, return the original input
return input;
}
try {
// Attempt to parse the input as JSON
const parsedJSON = JSON.parse(input);
// Check if the parsed result is an object (not an array or primitive value)
if (typeof parsedJSON === "object" && parsedJSON !== null) {
return parsedJSON;
} else {
// Return the original input if the parsed result is not an object
return input;
}
} catch (error) {
// Return the original input if parsing fails (invalid JSON)
return input;
}
}