@eleva-io/erp-sdk 0.1.143 → 0.1.145
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/errors/errors.d.ts +5 -16
- package/dist/cjs/errors/errors.d.ts.map +1 -1
- package/dist/cjs/errors/errors.js +84 -35
- package/dist/cjs/errors/errors.js.map +1 -1
- package/dist/cjs/errors/errors.spec.js +40 -40
- package/dist/cjs/errors/errors.spec.js.map +1 -1
- package/dist/cjs/errors/errors_remote.d.ts.map +1 -1
- package/dist/cjs/errors/errors_remote.js +1 -8
- package/dist/cjs/errors/errors_remote.js.map +1 -1
- package/dist/cjs/errors/errors_remote.spec.js +17 -32
- package/dist/cjs/errors/errors_remote.spec.js.map +1 -1
- package/dist/esm/errors/errors.d.ts +5 -16
- package/dist/esm/errors/errors.d.ts.map +1 -1
- package/dist/esm/errors/errors.js +84 -35
- package/dist/esm/errors/errors.js.map +1 -1
- package/dist/esm/errors/errors.spec.js +40 -40
- package/dist/esm/errors/errors.spec.js.map +1 -1
- package/dist/esm/errors/errors_remote.d.ts.map +1 -1
- package/dist/esm/errors/errors_remote.js +1 -8
- package/dist/esm/errors/errors_remote.js.map +1 -1
- package/dist/esm/errors/errors_remote.spec.js +17 -32
- package/dist/esm/errors/errors_remote.spec.js.map +1 -1
- package/package.json +1 -1
|
@@ -23,73 +23,60 @@ const validBody = {
|
|
|
23
23
|
describe('RemoteElevaError', () => {
|
|
24
24
|
describe('constructor', () => {
|
|
25
25
|
it('is an instance of Error, ElevaError and RemoteElevaError', () => {
|
|
26
|
-
const error =
|
|
26
|
+
const error = errors_remote_1.RemoteElevaError.from({ code: _1.ERROR_CODES.INTERNAL_SERVER_ERROR }, request, response);
|
|
27
27
|
expect(error).toBeInstanceOf(Error);
|
|
28
28
|
expect(error).toBeInstanceOf(_1.ElevaError);
|
|
29
29
|
expect(error).toBeInstanceOf(errors_remote_1.RemoteElevaError);
|
|
30
30
|
});
|
|
31
31
|
it('sets name to "RemoteElevaError"', () => {
|
|
32
|
-
const error =
|
|
32
|
+
const error = errors_remote_1.RemoteElevaError.from({ code: _1.ERROR_CODES.INTERNAL_SERVER_ERROR }, request, response);
|
|
33
33
|
expect(error.name).toBe('RemoteElevaError');
|
|
34
34
|
});
|
|
35
35
|
it('exposes request and response as readonly properties', () => {
|
|
36
|
-
const error =
|
|
36
|
+
const error = errors_remote_1.RemoteElevaError.from({ code: _1.ERROR_CODES.INTERNAL_SERVER_ERROR }, request, response);
|
|
37
37
|
expect(error.request).toBe(request);
|
|
38
38
|
expect(error.response).toBe(response);
|
|
39
39
|
});
|
|
40
40
|
it('inherits code, kind, status and message from the catalog', () => {
|
|
41
|
-
const error =
|
|
41
|
+
const error = errors_remote_1.RemoteElevaError.from({
|
|
42
42
|
code: _1.ERROR_CODES.NOT_FOUND,
|
|
43
|
-
|
|
44
|
-
request,
|
|
45
|
-
response,
|
|
46
|
-
});
|
|
43
|
+
}, request, response);
|
|
47
44
|
expect(error.code).toBe(_1.ERROR_CODES.NOT_FOUND);
|
|
48
45
|
expect(error.kind).toBe(_1.ErrorKind.DOMAIN);
|
|
49
46
|
expect(error.status).toBe(404);
|
|
50
47
|
});
|
|
51
48
|
it('forwards cause to the underlying Error', () => {
|
|
52
49
|
const cause = new Error('network timeout');
|
|
53
|
-
const error =
|
|
50
|
+
const error = errors_remote_1.RemoteElevaError.from({ code: _1.ERROR_CODES.INTERNAL_SERVER_ERROR }, request, response, cause);
|
|
54
51
|
expect(error.cause).toBe(cause);
|
|
55
52
|
});
|
|
56
53
|
});
|
|
57
54
|
describe('is()', () => {
|
|
58
55
|
it('returns true when the code matches', () => {
|
|
59
|
-
const error =
|
|
56
|
+
const error = errors_remote_1.RemoteElevaError.from({
|
|
60
57
|
code: _1.ERROR_CODES.NOT_FOUND,
|
|
61
|
-
|
|
62
|
-
request,
|
|
63
|
-
response,
|
|
64
|
-
});
|
|
58
|
+
}, request, response);
|
|
65
59
|
expect(error.is(_1.ERROR_CODES.NOT_FOUND)).toBe(true);
|
|
66
60
|
});
|
|
67
61
|
it('returns false when the code does not match', () => {
|
|
68
|
-
const error =
|
|
62
|
+
const error = errors_remote_1.RemoteElevaError.from({
|
|
69
63
|
code: _1.ERROR_CODES.NOT_FOUND,
|
|
70
|
-
|
|
71
|
-
request,
|
|
72
|
-
response,
|
|
73
|
-
});
|
|
64
|
+
}, request, response);
|
|
74
65
|
expect(error.is(_1.ERROR_CODES.CONFLICT)).toBe(false);
|
|
75
66
|
});
|
|
76
67
|
it('narrows details to the matching code', () => {
|
|
77
|
-
const err =
|
|
68
|
+
const err = errors_remote_1.RemoteElevaError.from({
|
|
78
69
|
code: _1.ERROR_CODES.NOT_FOUND,
|
|
79
70
|
details: { entity: 'User' },
|
|
80
|
-
|
|
81
|
-
response,
|
|
82
|
-
});
|
|
71
|
+
}, request, response);
|
|
83
72
|
const entity = err.is(_1.ERROR_CODES.NOT_FOUND) ? err.details.entity : null;
|
|
84
73
|
expect(entity).toBe('User');
|
|
85
74
|
});
|
|
86
75
|
it('preserves request and response on the narrowed type', () => {
|
|
87
|
-
const err =
|
|
76
|
+
const err = errors_remote_1.RemoteElevaError.from({
|
|
88
77
|
code: _1.ERROR_CODES.NOT_FOUND,
|
|
89
78
|
details: { entity: 'User' },
|
|
90
|
-
|
|
91
|
-
response,
|
|
92
|
-
});
|
|
79
|
+
}, request, response);
|
|
93
80
|
expect(err.is(_1.ERROR_CODES.NOT_FOUND)).toBe(true);
|
|
94
81
|
expect(err.request).toBe(request);
|
|
95
82
|
expect(err.response).toBe(response);
|
|
@@ -103,12 +90,10 @@ describe('RemoteElevaError', () => {
|
|
|
103
90
|
});
|
|
104
91
|
describe('toJSON()', () => {
|
|
105
92
|
it('includes all ElevaError fields plus request and response', () => {
|
|
106
|
-
const error =
|
|
93
|
+
const error = errors_remote_1.RemoteElevaError.from({
|
|
107
94
|
code: _1.ERROR_CODES.NOT_FOUND,
|
|
108
95
|
details: { entity: 'User' },
|
|
109
|
-
|
|
110
|
-
response,
|
|
111
|
-
});
|
|
96
|
+
}, request, response);
|
|
112
97
|
const json = error.toJSON();
|
|
113
98
|
expect(json.code).toBe(_1.ERROR_CODES.NOT_FOUND);
|
|
114
99
|
expect(json.kind).toBe(_1.ErrorKind.DOMAIN);
|
|
@@ -118,7 +103,7 @@ describe('RemoteElevaError', () => {
|
|
|
118
103
|
expect(json.response).toBe(response);
|
|
119
104
|
});
|
|
120
105
|
it('toString serializes request and response', () => {
|
|
121
|
-
const error =
|
|
106
|
+
const error = errors_remote_1.RemoteElevaError.from({ code: _1.ERROR_CODES.INTERNAL_SERVER_ERROR }, request, response);
|
|
122
107
|
const parsed = JSON.parse(error.toString());
|
|
123
108
|
expect(parsed.request.path).toBe('/api/users/1');
|
|
124
109
|
expect(parsed.response.status).toBe(404);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors_remote.spec.js","sourceRoot":"","sources":["../../../src/errors/errors_remote.spec.ts"],"names":[],"mappings":";;AAAA,wBAAsD;AACtD,mDAAiF;AAEjF,MAAM,OAAO,GAAkB;IAC7B,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,EAAE,aAAa,EAAE,cAAc,EAAE;IAC1C,IAAI,EAAE,cAAc;IACpB,IAAI,EAAE,SAAS;CAChB,CAAA;AAED,MAAM,QAAQ,GAAmB;IAC/B,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;IAC/C,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE;CAC/E,CAAA;AAED,MAAM,SAAS,GAAG;IAChB,IAAI,EAAE,cAAW,CAAC,SAAS;IAC3B,IAAI,EAAE,YAAS,CAAC,MAAM;IACtB,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,gBAAgB;IACzB,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;CAC5B,CAAA;AAED,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;YAClE,MAAM,KAAK,GAAG,
|
|
1
|
+
{"version":3,"file":"errors_remote.spec.js","sourceRoot":"","sources":["../../../src/errors/errors_remote.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { ErrorKind } from './catalog_types';
|
|
|
4
4
|
import { BASE_ERROR_CODES } from './catalog_base';
|
|
5
5
|
import { API_ERROR_CODES } from './catalog_api';
|
|
6
6
|
export interface ElevaErrorJSON<C extends ErrorCode = ErrorCode> {
|
|
7
|
-
code: C;
|
|
7
|
+
code: C | string;
|
|
8
8
|
kind: ErrorKind;
|
|
9
9
|
status: number;
|
|
10
10
|
message: string;
|
|
@@ -15,17 +15,11 @@ export interface ElevaErrorResponse<C extends ErrorCode = ErrorCode> {
|
|
|
15
15
|
message: ElevaErrorJSON<C>['message'];
|
|
16
16
|
details?: ElevaErrorJSON<C>['details'];
|
|
17
17
|
}
|
|
18
|
-
export type ElevaErrorArgs<C extends ErrorCode> = {
|
|
19
|
-
code: C;
|
|
20
|
-
message?: string;
|
|
18
|
+
export type ElevaErrorArgs<C extends ErrorCode> = ElevaErrorJSON<C> & {
|
|
21
19
|
cause?: unknown;
|
|
22
|
-
}
|
|
23
|
-
details?: ErrorDetails<C>;
|
|
24
|
-
} : {
|
|
25
|
-
details: ErrorDetails<C>;
|
|
26
|
-
});
|
|
20
|
+
};
|
|
27
21
|
export declare class ElevaError<C extends ErrorCode = ErrorCode> extends Error {
|
|
28
|
-
readonly code: C;
|
|
22
|
+
readonly code: C | string;
|
|
29
23
|
readonly kind: ErrorKind;
|
|
30
24
|
readonly status: number;
|
|
31
25
|
readonly details: ErrorDetails<C>;
|
|
@@ -34,12 +28,7 @@ export declare class ElevaError<C extends ErrorCode = ErrorCode> extends Error {
|
|
|
34
28
|
toJSON(): ElevaErrorJSON<C>;
|
|
35
29
|
toString(): string;
|
|
36
30
|
toResponse(): ElevaErrorResponse<C>;
|
|
37
|
-
protected static _parsePayload(value: unknown):
|
|
38
|
-
code: ErrorCode;
|
|
39
|
-
details: unknown;
|
|
40
|
-
message: string;
|
|
41
|
-
cause?: unknown;
|
|
42
|
-
};
|
|
31
|
+
protected static _parsePayload(value: unknown): ElevaErrorArgs<ErrorCode>;
|
|
43
32
|
static parse(value: unknown): ElevaError<ErrorCode>;
|
|
44
33
|
static fromZodError<T>(error: z.ZodError<T>): ElevaError<BASE_ERROR_CODES.VALIDATION>;
|
|
45
34
|
static validation(args: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/errors/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAA+B,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAA;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/errors/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAA+B,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAA;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAe/C,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IAC7D,IAAI,EAAE,CAAC,GAAG,MAAM,CAAA;IAChB,IAAI,EAAE,SAAS,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAA;CACzB;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IACjE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IAC/B,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IACrC,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;CACvC;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,SAAS,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG;IACpE,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAsBD,qBAAa,UAAU,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,CAAE,SAAQ,KAAK;IACpE,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,CAAA;IAEzB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IAExB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IAEvB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAA;gBAErB,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;IAcnC,EAAE,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC;IAIvD,MAAM,IAAI,cAAc,CAAC,CAAC,CAAC;IAU3B,QAAQ,IAAI,MAAM;IAIlB,UAAU,IAAI,kBAAkB,CAAC,CAAC,CAAC;IAgBnC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC;IA8BzE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC;IAInD,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC;IAcrF,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE;QACtB,MAAM,EAAE,YAAY,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAA;QAC3D,OAAO,CAAC,EAAE,MAAM,CAAA;KACjB,GAAG,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC;IAO3C,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE;QACxB,KAAK,EAAE,YAAY,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAA;QAClE,OAAO,CAAC,EAAE,MAAM,CAAA;KACjB,GAAG,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC;IAI3C,MAAM,CAAC,UAAU,CACf,IAAI,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,YAAY,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAA;KAAO,GACpF,UAAU,CAAC,gBAAgB,CAAC,WAAW,CAAC;IAO3C,MAAM,CAAC,cAAc,CACnB,IAAI,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,YAAY,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAA;KAAO,GACvF,UAAU,CAAC,gBAAgB,CAAC,cAAc,CAAC;IAO9C,MAAM,CAAC,YAAY,CACjB,IAAI,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,YAAY,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAA;KAAO,GACrF,UAAU,CAAC,gBAAgB,CAAC,YAAY,CAAC;IAO5C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,UAAU,CAAC,gBAAgB,CAAC,SAAS,CAAC;IAOnG,MAAM,CAAC,aAAa,CAClB,IAAI,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,YAAY,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAA;KAAO,GACvF,UAAU,CAAC,gBAAgB,CAAC,cAAc,CAAC;IAO9C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE;QACpB,OAAO,EAAE,YAAY,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAA;QAChD,OAAO,CAAC,EAAE,MAAM,CAAA;KACjB,GAAG,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IAOzC,MAAM,CAAC,IAAI,CACT,IAAI,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;KAAO,GAC7E,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC;IAOpC,MAAM,CAAC,mBAAmB,CACxB,IAAI,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,YAAY,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAA;KAAO,GAC7F,UAAU,CAAC,gBAAgB,CAAC,oBAAoB,CAAC;IAOpD,MAAM,CAAC,kBAAkB,CACvB,IAAI,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,YAAY,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAA;KAAO,GAC5F,UAAU,CAAC,gBAAgB,CAAC,mBAAmB,CAAC;IAOnD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,UAAU,CAAC,gBAAgB,CAAC,eAAe,CAAC;IAO9G,MAAM,CAAC,QAAQ,CACb,IAAI,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,YAAY,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAA;KAAO,GAC/G,UAAU,CAAC,gBAAgB,CAAC,qBAAqB,CAAC;IAQrD,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE;QAC5B,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,OAAO,EAAE,YAAY,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAA;KACzD,GAAG,UAAU,CAAC,eAAe,CAAC,iBAAiB,CAAC;CAMlD"}
|
|
@@ -4,26 +4,39 @@ import { ErrorKind } from './catalog_types';
|
|
|
4
4
|
import { BASE_ERROR_CODES } from './catalog_base';
|
|
5
5
|
import { API_ERROR_CODES } from './catalog_api';
|
|
6
6
|
const errorSchema = z.object({
|
|
7
|
-
code: z.
|
|
8
|
-
kind: z.
|
|
9
|
-
status: z.number(),
|
|
10
|
-
message: z.string(),
|
|
11
|
-
details: z.unknown().
|
|
7
|
+
code: z.string(),
|
|
8
|
+
kind: z.string().optional(),
|
|
9
|
+
status: z.number().optional(),
|
|
10
|
+
message: z.string().optional(),
|
|
11
|
+
details: z.unknown().optional(),
|
|
12
|
+
/** @deprecated Use `details` instead */
|
|
13
|
+
errors: z.unknown().optional(),
|
|
12
14
|
});
|
|
15
|
+
const KNOWN_CODES = new Set(Object.keys(ERROR_CODES));
|
|
16
|
+
const VALID_KINDS = new Set(Object.values(ErrorKind));
|
|
17
|
+
const _newElevaErrorFromCode = (code, args) => {
|
|
18
|
+
const entry = ERRORS_CATALOG[code];
|
|
19
|
+
return new ElevaError({
|
|
20
|
+
code,
|
|
21
|
+
kind: entry.kind,
|
|
22
|
+
status: entry.status,
|
|
23
|
+
details: args.details ?? {},
|
|
24
|
+
message: args.message || entry.message,
|
|
25
|
+
cause: args.cause,
|
|
26
|
+
});
|
|
27
|
+
};
|
|
13
28
|
export class ElevaError extends Error {
|
|
14
29
|
code;
|
|
15
30
|
kind;
|
|
16
31
|
status;
|
|
17
32
|
details;
|
|
18
33
|
constructor(args) {
|
|
19
|
-
|
|
20
|
-
const message = args.message ?? entry.message;
|
|
21
|
-
super(message, { cause: args.cause });
|
|
34
|
+
super(args.message, { cause: args.cause });
|
|
22
35
|
this.name = 'ElevaError';
|
|
23
36
|
this.code = args.code;
|
|
24
|
-
this.kind =
|
|
25
|
-
this.status =
|
|
26
|
-
this.details = args.details
|
|
37
|
+
this.kind = args.kind;
|
|
38
|
+
this.status = args.status;
|
|
39
|
+
this.details = args.details;
|
|
27
40
|
if (Error.captureStackTrace) {
|
|
28
41
|
Error.captureStackTrace(this, this.constructor);
|
|
29
42
|
}
|
|
@@ -59,18 +72,31 @@ export class ElevaError extends Error {
|
|
|
59
72
|
static _parsePayload(value) {
|
|
60
73
|
const result = errorSchema.safeParse(value);
|
|
61
74
|
if (!result.success) {
|
|
75
|
+
const code = ERROR_CODES.INTERNAL_SERVER_ERROR;
|
|
76
|
+
const entry = ERRORS_CATALOG[code];
|
|
62
77
|
return {
|
|
63
|
-
code
|
|
64
|
-
|
|
78
|
+
code,
|
|
79
|
+
kind: entry.kind,
|
|
80
|
+
status: entry.status,
|
|
65
81
|
message: `Failed to parse error payload: ${result.error.message}`,
|
|
82
|
+
details: {},
|
|
66
83
|
cause: value,
|
|
67
84
|
};
|
|
68
85
|
}
|
|
69
|
-
|
|
86
|
+
const code = result.data.code;
|
|
87
|
+
const isKnownCode = KNOWN_CODES.has(code);
|
|
88
|
+
const isValidKind = !!result.data.kind && VALID_KINDS.has(result.data.kind);
|
|
89
|
+
const entry = isKnownCode ? ERRORS_CATALOG[code] : ERRORS_CATALOG[ERROR_CODES.INTERNAL_SERVER_ERROR];
|
|
90
|
+
return {
|
|
91
|
+
code,
|
|
92
|
+
kind: isValidKind ? result.data.kind : entry.kind,
|
|
93
|
+
status: result.data.status ?? entry.status,
|
|
94
|
+
message: result.data.message ?? entry.message,
|
|
95
|
+
details: (result.data.details ?? result.data.errors ?? {}),
|
|
96
|
+
};
|
|
70
97
|
}
|
|
71
98
|
static parse(value) {
|
|
72
|
-
|
|
73
|
-
return new ElevaError({ code, details: details, message, cause });
|
|
99
|
+
return new ElevaError(ElevaError._parsePayload(value));
|
|
74
100
|
}
|
|
75
101
|
static fromZodError(error) {
|
|
76
102
|
const errors = error.issues.map((issue) => {
|
|
@@ -85,8 +111,7 @@ export class ElevaError extends Error {
|
|
|
85
111
|
return ElevaError.validation({ errors, message: error.message });
|
|
86
112
|
}
|
|
87
113
|
static validation(args) {
|
|
88
|
-
return
|
|
89
|
-
code: BASE_ERROR_CODES.VALIDATION,
|
|
114
|
+
return _newElevaErrorFromCode(BASE_ERROR_CODES.VALIDATION, {
|
|
90
115
|
details: { errors: args.errors },
|
|
91
116
|
message: args.message,
|
|
92
117
|
});
|
|
@@ -95,52 +120,76 @@ export class ElevaError extends Error {
|
|
|
95
120
|
return ElevaError.validation({ errors: [args.error], message: args.message });
|
|
96
121
|
}
|
|
97
122
|
static badRequest(args = {}) {
|
|
98
|
-
return
|
|
123
|
+
return _newElevaErrorFromCode(BASE_ERROR_CODES.BAD_REQUEST, {
|
|
124
|
+
details: args.details ?? {},
|
|
125
|
+
message: args.message,
|
|
126
|
+
});
|
|
99
127
|
}
|
|
100
128
|
static authentication(args = {}) {
|
|
101
|
-
return
|
|
129
|
+
return _newElevaErrorFromCode(BASE_ERROR_CODES.AUTHENTICATION, {
|
|
130
|
+
details: args.details ?? {},
|
|
131
|
+
message: args.message,
|
|
132
|
+
});
|
|
102
133
|
}
|
|
103
134
|
static unauthorized(args = {}) {
|
|
104
|
-
return
|
|
135
|
+
return _newElevaErrorFromCode(BASE_ERROR_CODES.UNAUTHORIZED, {
|
|
136
|
+
details: args.details ?? {},
|
|
137
|
+
message: args.message,
|
|
138
|
+
});
|
|
105
139
|
}
|
|
106
140
|
static notFound(args) {
|
|
107
|
-
return
|
|
141
|
+
return _newElevaErrorFromCode(BASE_ERROR_CODES.NOT_FOUND, {
|
|
142
|
+
details: { entity: args.entity },
|
|
143
|
+
message: args.message,
|
|
144
|
+
});
|
|
108
145
|
}
|
|
109
146
|
static notAcceptable(args = {}) {
|
|
110
|
-
return
|
|
147
|
+
return _newElevaErrorFromCode(BASE_ERROR_CODES.NOT_ACCEPTABLE, {
|
|
148
|
+
details: args.details ?? {},
|
|
149
|
+
message: args.message,
|
|
150
|
+
});
|
|
111
151
|
}
|
|
112
152
|
static conflict(args) {
|
|
113
|
-
return
|
|
153
|
+
return _newElevaErrorFromCode(BASE_ERROR_CODES.CONFLICT, {
|
|
154
|
+
details: args.details,
|
|
155
|
+
message: args.message,
|
|
156
|
+
});
|
|
114
157
|
}
|
|
115
158
|
static gone(args = {}) {
|
|
116
|
-
return
|
|
159
|
+
return _newElevaErrorFromCode(BASE_ERROR_CODES.GONE, {
|
|
160
|
+
details: args.details ?? {},
|
|
161
|
+
message: args.message,
|
|
162
|
+
});
|
|
117
163
|
}
|
|
118
164
|
static unprocessableEntity(args = {}) {
|
|
119
|
-
return
|
|
165
|
+
return _newElevaErrorFromCode(BASE_ERROR_CODES.UNPROCESSABLE_ENTITY, {
|
|
166
|
+
details: args.details ?? {},
|
|
167
|
+
message: args.message,
|
|
168
|
+
});
|
|
120
169
|
}
|
|
121
170
|
static serviceUnavailable(args = {}) {
|
|
122
|
-
return
|
|
171
|
+
return _newElevaErrorFromCode(BASE_ERROR_CODES.SERVICE_UNAVAILABLE, {
|
|
172
|
+
details: args.details ?? {},
|
|
173
|
+
message: args.message,
|
|
174
|
+
});
|
|
123
175
|
}
|
|
124
176
|
static mandatoryField(args) {
|
|
125
|
-
return
|
|
126
|
-
code: BASE_ERROR_CODES.MANDATORY_FIELD,
|
|
177
|
+
return _newElevaErrorFromCode(BASE_ERROR_CODES.MANDATORY_FIELD, {
|
|
127
178
|
details: { field: args.field },
|
|
128
179
|
message: args.message,
|
|
129
180
|
});
|
|
130
181
|
}
|
|
131
182
|
static internal(args = {}) {
|
|
132
|
-
return
|
|
133
|
-
|
|
183
|
+
return _newElevaErrorFromCode(BASE_ERROR_CODES.INTERNAL_SERVER_ERROR, {
|
|
184
|
+
details: args.details ?? {},
|
|
134
185
|
message: args.message,
|
|
135
186
|
cause: args.cause,
|
|
136
|
-
details: args.details,
|
|
137
187
|
});
|
|
138
188
|
}
|
|
139
189
|
static forbiddenContact(args) {
|
|
140
|
-
return
|
|
141
|
-
code: API_ERROR_CODES.FORBIDDEN_CONTACT,
|
|
142
|
-
message: args.message,
|
|
190
|
+
return _newElevaErrorFromCode(API_ERROR_CODES.FORBIDDEN_CONTACT, {
|
|
143
191
|
details: args.details,
|
|
192
|
+
message: args.message,
|
|
144
193
|
});
|
|
145
194
|
}
|
|
146
195
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/errors/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,cAAc,EAAE,WAAW,EAAgC,MAAM,WAAW,CAAA;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAE/C,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/errors/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,70 +8,70 @@ const conflictDetails = [{ key: 'email', value: 'already@taken.com', cause: 'dup
|
|
|
8
8
|
describe('ElevaError', () => {
|
|
9
9
|
describe('constructor', () => {
|
|
10
10
|
it('is an instance of Error and ElevaError', () => {
|
|
11
|
-
const error =
|
|
11
|
+
const error = ElevaError.internal({});
|
|
12
12
|
expect(error).toBeInstanceOf(Error);
|
|
13
13
|
expect(error).toBeInstanceOf(ElevaError);
|
|
14
14
|
});
|
|
15
15
|
it('sets name to "ElevaError"', () => {
|
|
16
|
-
const error =
|
|
16
|
+
const error = ElevaError.internal({});
|
|
17
17
|
expect(error.name).toBe('ElevaError');
|
|
18
18
|
});
|
|
19
19
|
it('picks kind, status and default message from the catalog', () => {
|
|
20
|
-
const error =
|
|
20
|
+
const error = ElevaError.internal({});
|
|
21
21
|
expect(error.code).toBe(ERROR_CODES.INTERNAL_SERVER_ERROR);
|
|
22
22
|
expect(error.kind).toBe(ErrorKind.SYSTEM);
|
|
23
23
|
expect(error.status).toBe(500);
|
|
24
24
|
expect(error.message).toBe('Internal server error');
|
|
25
25
|
});
|
|
26
26
|
it('uses a custom message when provided', () => {
|
|
27
|
-
const error =
|
|
27
|
+
const error = ElevaError.internal({ message: 'Something blew up' });
|
|
28
28
|
expect(error.message).toBe('Something blew up');
|
|
29
29
|
});
|
|
30
30
|
it('exposes structured details (VALIDATION)', () => {
|
|
31
|
-
const error =
|
|
31
|
+
const error = ElevaError.validation(validationDetails);
|
|
32
32
|
expect(error.details).toEqual(validationDetails);
|
|
33
33
|
});
|
|
34
34
|
it('exposes structured details (NOT_FOUND)', () => {
|
|
35
|
-
const error =
|
|
35
|
+
const error = ElevaError.notFound(notFoundDetails);
|
|
36
36
|
expect(error.details).toEqual(notFoundDetails);
|
|
37
37
|
});
|
|
38
38
|
it('exposes structured details (CONFLICT)', () => {
|
|
39
|
-
const error =
|
|
39
|
+
const error = ElevaError.conflict({ details: conflictDetails });
|
|
40
40
|
expect(error.details).toEqual(conflictDetails);
|
|
41
41
|
});
|
|
42
42
|
it('allows omitting details for codes with fully optional shapes', () => {
|
|
43
|
-
const error =
|
|
43
|
+
const error = ElevaError.unauthorized({});
|
|
44
44
|
expect(error.code).toBe(ERROR_CODES.UNAUTHORIZED);
|
|
45
45
|
expect(error.details).toEqual({});
|
|
46
46
|
});
|
|
47
47
|
it('forwards cause to the underlying Error', () => {
|
|
48
48
|
const cause = new Error('boom');
|
|
49
|
-
const error =
|
|
49
|
+
const error = ElevaError.internal({ cause });
|
|
50
50
|
expect(error.cause).toBe(cause);
|
|
51
51
|
});
|
|
52
52
|
it('captures a stack trace', () => {
|
|
53
|
-
const error =
|
|
53
|
+
const error = ElevaError.internal({});
|
|
54
54
|
expect(error.stack).toMatch(/ElevaError/);
|
|
55
55
|
});
|
|
56
56
|
});
|
|
57
57
|
describe('is()', () => {
|
|
58
58
|
it('returns true when the code matches', () => {
|
|
59
|
-
const error =
|
|
59
|
+
const error = ElevaError.notFound(notFoundDetails);
|
|
60
60
|
expect(error.is(ERROR_CODES.NOT_FOUND)).toBe(true);
|
|
61
61
|
});
|
|
62
62
|
it('returns false when the code does not match', () => {
|
|
63
|
-
const error =
|
|
63
|
+
const error = ElevaError.notFound(notFoundDetails);
|
|
64
64
|
expect(error.is(ERROR_CODES.CONFLICT)).toBe(false);
|
|
65
65
|
});
|
|
66
66
|
it('narrows details to the matching code', () => {
|
|
67
|
-
const err =
|
|
67
|
+
const err = ElevaError.notFound(notFoundDetails);
|
|
68
68
|
const entity = err.is(ERROR_CODES.NOT_FOUND) ? err.details.entity : null;
|
|
69
69
|
expect(entity).toBe('User');
|
|
70
70
|
});
|
|
71
71
|
});
|
|
72
72
|
describe('toJSON() / toString()', () => {
|
|
73
73
|
it('toJSON returns a plain object with all fields', () => {
|
|
74
|
-
const error =
|
|
74
|
+
const error = ElevaError.validation(validationDetails);
|
|
75
75
|
expect(error.toJSON()).toEqual({
|
|
76
76
|
code: ERROR_CODES.VALIDATION,
|
|
77
77
|
kind: ErrorKind.DOMAIN,
|
|
@@ -81,7 +81,7 @@ describe('ElevaError', () => {
|
|
|
81
81
|
});
|
|
82
82
|
});
|
|
83
83
|
it('toString returns a JSON string equivalent to toJSON()', () => {
|
|
84
|
-
const error =
|
|
84
|
+
const error = ElevaError.validation(validationDetails);
|
|
85
85
|
expect(error.toString()).toBe(JSON.stringify(error.toJSON()));
|
|
86
86
|
});
|
|
87
87
|
});
|
|
@@ -89,8 +89,6 @@ describe('ElevaError', () => {
|
|
|
89
89
|
it('reconstructs an ElevaError from a valid response body', () => {
|
|
90
90
|
const body = {
|
|
91
91
|
code: ERROR_CODES.VALIDATION,
|
|
92
|
-
kind: ErrorKind.DOMAIN,
|
|
93
|
-
status: 400,
|
|
94
92
|
message: 'Validation error',
|
|
95
93
|
details: validationDetails,
|
|
96
94
|
};
|
|
@@ -100,37 +98,39 @@ describe('ElevaError', () => {
|
|
|
100
98
|
expect(error.message).toBe('Validation error');
|
|
101
99
|
expect(error.details).toEqual(validationDetails);
|
|
102
100
|
});
|
|
103
|
-
it('
|
|
104
|
-
const
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
};
|
|
101
|
+
it('derives kind and status from the catalog when not provided', () => {
|
|
102
|
+
const error = ElevaError.parse({ code: ERROR_CODES.NOT_FOUND, message: 'Not found' });
|
|
103
|
+
expect(error.kind).toBe(ErrorKind.DOMAIN);
|
|
104
|
+
expect(error.status).toBe(404);
|
|
105
|
+
});
|
|
106
|
+
it('uses kind and status from the payload when provided', () => {
|
|
107
|
+
const body = { code: ERROR_CODES.NOT_FOUND, kind: ErrorKind.SYSTEM, status: 503, message: 'Override' };
|
|
111
108
|
const error = ElevaError.parse(body);
|
|
112
|
-
expect(error.
|
|
109
|
+
expect(error.kind).toBe(ErrorKind.SYSTEM);
|
|
110
|
+
expect(error.status).toBe(503);
|
|
113
111
|
});
|
|
114
|
-
it('falls back to
|
|
115
|
-
const
|
|
112
|
+
it('falls back to catalog message when message is not provided', () => {
|
|
113
|
+
const error = ElevaError.parse({ code: ERROR_CODES.NOT_FOUND });
|
|
114
|
+
expect(error.message).toBe('Not found');
|
|
115
|
+
});
|
|
116
|
+
it('preserves uncatalogued codes and their message as-is', () => {
|
|
117
|
+
const body = { code: 'SOME_NEW_CODE', message: 'Something went wrong on the server' };
|
|
116
118
|
const error = ElevaError.parse(body);
|
|
117
|
-
expect(error.code).toBe(
|
|
118
|
-
expect(error.
|
|
119
|
+
expect(error.code).toBe('SOME_NEW_CODE');
|
|
120
|
+
expect(error.message).toBe('Something went wrong on the server');
|
|
119
121
|
});
|
|
120
|
-
it('falls back to INTERNAL_SERVER_ERROR
|
|
121
|
-
const body = { code: '
|
|
122
|
+
it('falls back to INTERNAL_SERVER_ERROR kind and status for uncatalogued codes', () => {
|
|
123
|
+
const body = { code: 'SOME_NEW_CODE', message: 'New error type' };
|
|
122
124
|
const error = ElevaError.parse(body);
|
|
123
|
-
expect(error.
|
|
124
|
-
expect(error.
|
|
125
|
+
expect(error.kind).toBe(ErrorKind.SYSTEM);
|
|
126
|
+
expect(error.status).toBe(500);
|
|
125
127
|
});
|
|
126
|
-
it('falls back to INTERNAL_SERVER_ERROR
|
|
127
|
-
const
|
|
128
|
+
it('falls back to INTERNAL_SERVER_ERROR on malformed payloads', () => {
|
|
129
|
+
const body = 'not an object';
|
|
130
|
+
const error = ElevaError.parse(body);
|
|
128
131
|
expect(error.code).toBe(ERROR_CODES.INTERNAL_SERVER_ERROR);
|
|
129
|
-
expect(error.cause).toBe('boom');
|
|
130
|
-
});
|
|
131
|
-
it('builds a diagnostic message from the ZodError on failure', () => {
|
|
132
|
-
const error = ElevaError.parse('boom');
|
|
133
132
|
expect(error.message).toMatch(/^Failed to parse error payload:/);
|
|
133
|
+
expect(error.cause).toBe(body);
|
|
134
134
|
});
|
|
135
135
|
});
|
|
136
136
|
describe('fromZodError()', () => {
|