@lowerdeck/error 1.0.8 → 1.0.9

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lowerdeck/error",
3
- "version": "1.0.8",
3
+ "version": "1.0.9",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -25,7 +25,9 @@ export let badRequestError = createError({
25
25
  message: 'The request is invalid.'
26
26
  });
27
27
 
28
- export function notFoundError(p1: { entity: string; id?: string } & Partial<ErrorData<'not_found', 404>>): ReturnType<typeof createError>;
28
+ export function notFoundError(
29
+ p1: { entity: string; id?: string } & Partial<ErrorData<'not_found', 404>>
30
+ ): ReturnType<typeof createError>;
29
31
  export function notFoundError(p1: string, p2?: string | null): ReturnType<typeof createError>;
30
32
  export function notFoundError(p1: any, p2?: any): ReturnType<typeof createError> {
31
33
  let entity = typeof p1 == 'string' ? p1 : p1.entity;
package/src/error.test.ts CHANGED
@@ -20,7 +20,7 @@ describe('createError', () => {
20
20
  };
21
21
  let errorRecord = createError(data);
22
22
  let response = errorRecord.toResponse();
23
- expect(response).toEqual({ ...data, __typename: 'error', ok: false });
23
+ expect(response).toEqual({ ...data, object: 'error', ok: false });
24
24
  });
25
25
 
26
26
  test('should create an error record with a response function that can be extended', () => {
@@ -33,7 +33,7 @@ describe('createError', () => {
33
33
  let response = errorRecord({ hint: 'This is a hint' }).toResponse();
34
34
  expect(response).toEqual({
35
35
  ...data,
36
- __typename: 'error',
36
+ object: 'error',
37
37
  ok: false,
38
38
  hint: 'This is a hint'
39
39
  });
@@ -69,6 +69,6 @@ describe('ServiceError', () => {
69
69
  });
70
70
  let apiError = new ServiceError(errorRecord);
71
71
  let response = apiError.toResponse();
72
- expect(response).toEqual({ ...errorRecord.data, __typename: 'error', ok: false });
72
+ expect(response).toEqual({ ...errorRecord.data, object: 'error', ok: false });
73
73
  });
74
74
  });
package/src/error.ts CHANGED
@@ -8,31 +8,39 @@ export interface ErrorData<Code extends string, Status extends number> {
8
8
  [key: string]: any;
9
9
  }
10
10
 
11
+ export type ErrorRecordExtension<Code extends string, Status extends number> = <
12
+ NewCode extends string = Code
13
+ >(
14
+ extension?: Partial<ErrorData<NewCode, Status>>
15
+ ) => ErrorRecord<NewCode, Status>;
16
+
11
17
  export type ErrorRecord<Code extends string, Status extends number> = {
12
- __typename: 'error';
18
+ object: 'error';
13
19
  data: ErrorData<Code, Status>;
14
- toResponse: () => ErrorData<Code, Status> & { __typename: 'error'; ok: false };
15
- } & ((extension?: Partial<ErrorData<Code, Status>>) => ErrorRecord<Code, Status>);
20
+ toResponse: () => ErrorData<Code, Status> & { object: 'error'; ok: false };
21
+ } & ErrorRecordExtension<Code, Status>;
16
22
 
17
23
  export let createError = <Code extends string, Status extends number>(
18
24
  data: ErrorData<Code, Status>
19
25
  ): ErrorRecord<Code, Status> => {
20
26
  return Object.assign(
21
- (extension: Partial<ErrorData<Code, Status>> = {}): ErrorRecord<Code, Status> =>
27
+ <NewCode extends string = Code>(
28
+ extension: Partial<ErrorData<NewCode, Status>> = {}
29
+ ): ErrorRecord<NewCode, Status> =>
22
30
  createError({
23
31
  ...data,
24
32
  ...extension
25
- }),
33
+ }) as any,
26
34
  {
27
- __typename: 'error' as const,
35
+ object: 'error' as const,
28
36
  data,
29
- toResponse: () => ({ __typename: 'error' as const, ok: false as const, ...data })
37
+ toResponse: () => ({ object: 'error' as const, ok: false as const, ...data })
30
38
  }
31
- );
39
+ ) as any;
32
40
  };
33
41
 
34
42
  export class ServiceError<InnerError extends ErrorRecord<any, any>> extends Error {
35
- __typename = 'ServiceError' as const;
43
+ object = 'ServiceError' as const;
36
44
 
37
45
  private _parent: Error | null = null;
38
46
 
@@ -60,12 +68,12 @@ export class ServiceError<InnerError extends ErrorRecord<any, any>> extends Erro
60
68
  static fromResponse(raw: ErrorData<any, any>) {
61
69
  let data = raw;
62
70
  delete data.ok;
63
- delete data.__typename;
71
+ delete data.object;
64
72
 
65
73
  return new ServiceError(createError(data));
66
74
  }
67
75
  }
68
76
 
69
77
  export let isServiceError = (e: any): e is ServiceError<any> => {
70
- return e?.__typename === 'ServiceError' || e?.__typename === 'ErrorRecord';
78
+ return e?.object === 'ServiceError' || e?.object === 'ErrorRecord';
71
79
  };