@thisisagile/easy-express 8.41.12 → 8.42.0

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.
@@ -4,4 +4,4 @@ export declare class AuthError extends Error {
4
4
  constructor({ name, status }: HttpStatus);
5
5
  }
6
6
  export declare const authError: (status: HttpStatus) => AuthError;
7
- export declare const isAuthError: (e?: unknown) => boolean;
7
+ export declare const isAuthError: (e?: unknown) => e is AuthError;
@@ -1 +1 @@
1
- {"version":3,"file":"AuthError.js","sourceRoot":"","sources":["../../src/express/AuthError.ts"],"names":[],"mappings":";;;AAAA,4CAAwD;AAExD,MAAa,SAAU,SAAQ,KAAK;IAGlC,YAAY,EAAE,IAAI,EAAE,MAAM,EAAc;QACtC,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AARD,8BAQC;AAEM,MAAM,SAAS,GAAG,CAAC,MAAkB,EAAa,EAAE,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;AAArE,QAAA,SAAS,aAA4D;AAE3E,MAAM,WAAW,GAAG,CAAC,CAAW,EAAW,EAAE,CAAC,IAAA,cAAO,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,qBAAqB,CAAC;AAAvF,QAAA,WAAW,eAA4E"}
1
+ {"version":3,"file":"AuthError.js","sourceRoot":"","sources":["../../src/express/AuthError.ts"],"names":[],"mappings":";;;AAAA,4CAAwD;AAExD,MAAa,SAAU,SAAQ,KAAK;IAGlC,YAAY,EAAE,IAAI,EAAE,MAAM,EAAc;QACtC,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AARD,8BAQC;AAEM,MAAM,SAAS,GAAG,CAAC,MAAkB,EAAa,EAAE,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;AAArE,QAAA,SAAS,aAA4D;AAE3E,MAAM,WAAW,GAAG,CAAC,CAAW,EAAkB,EAAE,CAAC,IAAA,cAAO,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,qBAAqB,CAAC;AAA9F,QAAA,WAAW,eAAmF"}
@@ -8,20 +8,23 @@ const toResponse = (status, errors = []) => ({
8
8
  body: easy_1.rest.toError(status, errors),
9
9
  });
10
10
  const toBody = ({ origin, options }) => {
11
- return (0, easy_1.choose)(origin)
12
- .case(o => (0, AuthError_1.isAuthError)(o), o => toResponse((0, easy_1.toHttpStatus)(o.status), [(0, easy_1.toResult)(o.message)]))
11
+ return ((0, easy_1.choose)(origin)
12
+ .type(AuthError_1.isAuthError, ae => toResponse((0, easy_1.toHttpStatus)(ae.status), [(0, easy_1.toResult)(ae.message)]))
13
13
  .case(o => easy_1.Exception.DoesNotExist.equals(o), (o) => toResponse(options?.onNotFound ?? easy_1.HttpStatus.NotFound, [(0, easy_1.toResult)(o.reason ?? o.message)]))
14
- .case(o => (0, easy_1.isError)(o), (o) => toResponse(easy_1.HttpStatus.InternalServerError, [(0, easy_1.toResult)(o.message)]))
15
- .case(o => (0, easy_1.isResults)(o), (o) => toResponse(options?.onError ?? easy_1.HttpStatus.BadRequest, o.results))
16
- .case(o => (0, easy_1.isResponse)(o), (o) => toResponse(easy_1.HttpStatus.InternalServerError, o.body.error?.errors))
17
- .case(o => (0, easy_1.isException)(o), (o) => toResponse(options?.onError ?? easy_1.HttpStatus.BadRequest, [(0, easy_1.toResult)(o.reason ?? o.message)]))
18
- .case(o => (0, easy_1.isText)(o), (o) => toResponse(options?.onError ?? easy_1.HttpStatus.BadRequest, [(0, easy_1.toResult)((0, easy_1.asString)(o))]))
19
- .else(() => toResponse(easy_1.HttpStatus.InternalServerError, [(0, easy_1.toResult)('Unknown error')]));
14
+ .type(easy_1.isError, e => toResponse(easy_1.HttpStatus.InternalServerError, [(0, easy_1.toResult)(e.message)]))
15
+ .type(easy_1.isResults, r => toResponse(options?.onError ?? easy_1.HttpStatus.BadRequest, r.results))
16
+ .type(easy_1.isResponse, r => toResponse(easy_1.HttpStatus.InternalServerError, r.body.error?.errors))
17
+ .type(easy_1.isException, e => toResponse(options?.onError ?? easy_1.HttpStatus.BadRequest, [(0, easy_1.toResult)(e.reason ?? e.message)]))
18
+ .type(easy_1.isText, t => toResponse(options?.onError ?? easy_1.HttpStatus.BadRequest, [(0, easy_1.toResult)((0, easy_1.asString)(t))]))
19
+ .else(() => toResponse(easy_1.HttpStatus.InternalServerError, [(0, easy_1.toResult)('Unknown error')])));
20
20
  };
21
21
  const error = (e, req, res, _next) => {
22
+ let response;
22
23
  (0, easy_1.tryTo)(() => (0, easy_1.toOriginatedError)(e))
23
24
  .map(oe => toBody(oe))
25
+ .accept(r => (response = r))
24
26
  .accept(r => (easy_1.ctx.request.lastError = r.status.isServerError ? r.body.error?.errors[0]?.message : undefined))
27
+ .recover(() => response)
25
28
  .accept(r => res.status(r.status.status).json(r.body));
26
29
  };
27
30
  exports.error = error;
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorHandler.js","sourceRoot":"","sources":["../../src/express/ErrorHandler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ErrorHandler.js","sourceRoot":"","sources":["../../src/express/ErrorHandler.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thisisagile/easy-express",
3
- "version": "8.41.12",
3
+ "version": "8.42.0",
4
4
  "description": "Straightforward library for building domain-driven microservice architectures",
5
5
  "author": "Sander Hoogendoorn",
6
6
  "license": "MIT",
@@ -31,7 +31,7 @@
31
31
  "access": "public"
32
32
  },
33
33
  "devDependencies": {
34
- "@thisisagile/easy-test": "8.41.12",
34
+ "@thisisagile/easy-test": "8.42.0",
35
35
  "@types/cls-hooked": "^4.3.3",
36
36
  "@types/form-urlencoded": "^4.4.0",
37
37
  "@types/jsonwebtoken": "^8.5.8",
@@ -41,7 +41,7 @@
41
41
  "@types/validator": "^13.7.1"
42
42
  },
43
43
  "dependencies": {
44
- "@thisisagile/easy": "8.41.12",
44
+ "@thisisagile/easy": "8.42.0",
45
45
  "@types/express": "^4.17.13",
46
46
  "cls-hooked": "^4.2.2",
47
47
  "express": "^4.17.1",
@@ -12,4 +12,4 @@ export class AuthError extends Error {
12
12
 
13
13
  export const authError = (status: HttpStatus): AuthError => new AuthError(status);
14
14
 
15
- export const isAuthError = (e?: unknown): boolean => isError(e) && e.name === 'AuthenticationError';
15
+ export const isAuthError = (e?: unknown): e is AuthError => isError(e) && e.name === 'AuthenticationError';
@@ -15,7 +15,6 @@ import {
15
15
  Response,
16
16
  rest,
17
17
  Result,
18
- Results,
19
18
  toHttpStatus,
20
19
  toOriginatedError,
21
20
  toResult,
@@ -28,45 +27,32 @@ const toResponse = (status: HttpStatus, errors: Result[] = []): Response => ({
28
27
  });
29
28
 
30
29
  const toBody = ({ origin, options }: OriginatedError): Response => {
31
- return choose<Response, any>(origin)
32
- .case(
33
- o => isAuthError(o),
34
- o => toResponse(toHttpStatus(o.status), [toResult(o.message)])
35
- )
36
- .case(
37
- o => Exception.DoesNotExist.equals(o),
38
- (o: Exception) => toResponse(options?.onNotFound ?? HttpStatus.NotFound, [toResult(o.reason ?? o.message)])
39
- )
40
- .case(
30
+ return (
31
+ choose<Response, any>(origin)
32
+ .type(isAuthError, ae => toResponse(toHttpStatus(ae.status), [toResult(ae.message)]))
33
+ .case(
34
+ o => Exception.DoesNotExist.equals(o),
35
+ (o: Exception) => toResponse(options?.onNotFound ?? HttpStatus.NotFound, [toResult(o.reason ?? o.message)])
36
+ )
41
37
  // This service breaks with an error
42
- o => isError(o),
43
- (o: Error) => toResponse(HttpStatus.InternalServerError, [toResult(o.message)])
44
- )
45
- .case(
38
+ .type(isError, e => toResponse(HttpStatus.InternalServerError, [toResult(e.message)]))
46
39
  // This service fails
47
- o => isResults(o),
48
- (o: Results) => toResponse(options?.onError ?? HttpStatus.BadRequest, o.results)
49
- )
50
- .case(
40
+ .type(isResults, r => toResponse(options?.onError ?? HttpStatus.BadRequest, r.results))
51
41
  // Underlying service fails
52
- o => isResponse(o),
53
- (o: Response) => toResponse(HttpStatus.InternalServerError, o.body.error?.errors)
54
- )
55
- .case(
56
- o => isException(o),
57
- (o: Exception) => toResponse(options?.onError ?? HttpStatus.BadRequest, [toResult(o.reason ?? o.message)])
58
- )
59
- .case(
42
+ .type(isResponse, r => toResponse(HttpStatus.InternalServerError, r.body.error?.errors))
43
+ .type(isException, e => toResponse(options?.onError ?? HttpStatus.BadRequest, [toResult(e.reason ?? e.message)]))
60
44
  // This service fails with a string
61
- o => isText(o),
62
- (o: Response) => toResponse(options?.onError ?? HttpStatus.BadRequest, [toResult(asString(o))])
63
- )
64
- .else(() => toResponse(HttpStatus.InternalServerError, [toResult('Unknown error')]));
45
+ .type(isText, t => toResponse(options?.onError ?? HttpStatus.BadRequest, [toResult(asString(t))]))
46
+ .else(() => toResponse(HttpStatus.InternalServerError, [toResult('Unknown error')]))
47
+ );
65
48
  };
66
49
 
67
50
  export const error = (e: Error, req: express.Request, res: express.Response, _next: express.NextFunction): void => {
51
+ let response: Response;
68
52
  tryTo(() => toOriginatedError(e))
69
53
  .map(oe => toBody(oe))
54
+ .accept(r => (response = r))
70
55
  .accept(r => (ctx.request.lastError = r.status.isServerError ? r.body.error?.errors[0]?.message : undefined))
56
+ .recover(() => response)
71
57
  .accept(r => res.status(r.status.status).json(r.body));
72
58
  };