code: public static function toSafeTrace($error)
      {
          $trace = $error->getTrace();
  
          if (isset($trace[0]['function']) && isset($trace[0]['class']) &&
              // Remove invariant entries as they don't provide much value:
              ($trace[0]['class'] . '::' . $trace[0]['function'] === 'GraphQL\Utils\Utils::invariant')) {
              array_shift($trace);
          } elseif (! isset($trace[0]['file'])) {
              // Remove root call as it's likely error handler trace:
              array_shift($trace);
          }
  
          return array_map(
              static function ($err) {
                  $safeErr = array_intersect_key($err, ['file' => true, 'line' => true]);
  
                  if (isset($err['function'])) {
                      $func    = $err['function'];
                      $args    = ! empty($err['args']) ? array_map([self::class, 'printVar'], $err['args']) : [];
                      $funcStr = $func . '(' . implode(', ', $args) . ')';
  
                      if (isset($err['class'])) {
                          $safeErr['call'] = $err['class'] . '::' . $funcStr;
                      } else {
                          $safeErr['function'] = $funcStr;
                      }
                  }
  
                  return $safeErr;
              },
              $trace
          );
      }
docs: Returns error trace as serializable array
  
  @param Throwable $error
  
  @return mixed[]
  
  @api