/
errors.ts
46 lines (36 loc) · 1.19 KB
/
errors.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
import * as ts from '@terascope/utils';
import ajv from 'ajv';
export function getErrorMessages(errors: ErrorLike[]): string {
return errors.filter(Boolean).map(getErrorMessage).join(',');
}
export function throwValidationError(errors: ErrorLike[] | null | undefined): string | null {
if (errors == null) return null;
if (!errors.length) return null;
const errorMsg = getErrorMessages(errors);
const error = new ts.TSError(errorMsg, {
statusCode: 400,
});
Error.captureStackTrace(error, throwValidationError);
throw error;
}
export function getErrorMessage(err: ErrorLike): string {
const defaultErrorMsg = 'Unknown Error';
if (err && ts.isString(err)) {
return err;
}
const message: string = ts.get(err, ['message']) || ts.get(err, ['msg'], defaultErrorMsg);
const prefix = ts.get(err, ['dataPath']);
return `${prefix ? `${prefix} ` : ''}${message}`;
}
export function getErrorType(err: unknown): string {
return ts.get(err, ['error', 'type'], '');
}
export type ErrorLike =
| {
message?: string;
msg?: string;
statusCode?: number;
status?: number;
}
| ajv.ErrorObject
| string;