File size: 1,066 Bytes
d9494a5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import { isDefined } from 'twenty-shared/utils';

import {
  FlatEntityMapsException,
  flatEntityMapsExceptionContextSchema,
  type FlatEntityMapsExceptionContext,
} from 'src/engine/metadata-modules/flat-entity/exceptions/flat-entity-maps.exception';

const hasFlatEntityIdentifier = (
  context: FlatEntityMapsExceptionContext,
): boolean => isDefined(context.universalIdentifier) || isDefined(context.id);

export const getFlatEntityMapsExceptionContext = (
  error: unknown,
): FlatEntityMapsExceptionContext | undefined => {
  if (error instanceof FlatEntityMapsException) {
    return isDefined(error.context) && hasFlatEntityIdentifier(error.context)
      ? error.context
      : undefined;
  }

  if (isDefined(error) && typeof error === 'object' && 'context' in error) {
    const parsedContext = flatEntityMapsExceptionContextSchema.safeParse(
      (error as { context?: unknown }).context,
    );

    return parsedContext.success && hasFlatEntityIdentifier(parsedContext.data)
      ? parsedContext.data
      : undefined;
  }

  return undefined;
};