у меня есть вот такой код 
import { IPoint } from '../models/infrastucture/point';
import { ConnectionShift } from '../constants';

/**
 * Возможные типы связей
 */
export enum ConnectionTypes {
  Straight,
  ThreeSegments,
  Overlapping,
  RightBracket,
  LeftBracket,
  TopBracket,
  BottomBracket,
}

/**
 * Определяет тип связи
 *
 * @param sourceConnectorPoint — координаты коннектора-источника
 * @param targetConnectorPoint — координаты коннектора-приемника
 * @param sourceObject — информация об объекте-источнике
 * @param targetObject — информация об объекте-приемнике
 * @returns тип связи
 */
export const getConnectionType = (
  sourceConnectorPoint: IPoint,
  targetConnectorPoint: IPoint,
  sourceObject: { x: number; y: number; width: number; height: number; id: string | number },
  targetObject: { x: number; y: number; width: number; height: number; id: string | number },
): ConnectionTypes | null => {
  // Если коннекторы смотрят в разные стороны
  if (
    (sourceObject.x < sourceConnectorPoint.x && Math.abs(targetObject.x - targetConnectorPoint.x) < 25) ||
    (Math.abs(sourceConnectorPoint.x - sourceObject.x) < 25 && targetObject.x < targetConnectorPoint.x)
  ) {
    //Если они друг напротив друга
    if (
      (sourceObject.x < sourceConnectorPoint.x &&
        sourceConnectorPoint.x < targetConnectorPoint.x &&
        targetConnectorPoint.x < targetObject.x) ||
      (targetObject.x < targetConnectorPoint.x &&
        targetConnectorPoint.x < sourceConnectorPoint.x &&
        sourceConnectorPoint.x < sourceObject.x)
    ) {
      // Если объекты на одном уровне (связь — прямая линия)
      if (sourceConnectorPoint.y === targetConnectorPoint.y) {
        return ConnectionTypes.Straight;
      }
    }
    // Если примитивы "спиной" друг к другу
    else {
      // Если объекты на одном уровне
      // Если объекты на разных уровнях, но по вертикали между ними нет свободного расстояния
      // Связь — верхняя или нижняя скобка
      if (
        sourceConnectorPoint.y === targetConnectorPoint.y ||
        (sourceObject.y + sourceObject.height >= targetObject.y &&
          sourceObject.y + sourceObject.height <= targetObject.y + targetObject.height) ||
        (targetObject.y + targetObject.height >= sourceObject.y &&
          targetObject.y + targetObject.height <= sourceObject.y + sourceObject.height)
      ) {
        const targetY =
          Math.min(sourceObject.y, targetObject.y) > ConnectionShift
            ? Math.min(sourceObject.y, targetObject.y) - ConnectionShift
            : Math.max(sourceObject.y + sourceObject.height, targetObject.y + targetObject.height) + ConnectionShift;

        return sourceConnectorPoint.y < targetY ? ConnectionTypes.BottomBracket : ConnectionTypes.TopBracket;
      }
    }

    // Если между объектами есть расстояние (связь из трех отрезков)
    if (
      (sourceObject.x < sourceConnectorPoint.x &&
        sourceConnectorPoint.x < targetConnectorPoint.x &&
        targetConnectorPoint.x < targetObject.x) ||
      (targetObject.x < targetConnectorPoint.x &&
        targetConnectorPoint.x < sourceConnectorPoint.x &&
        sourceConnectorPoint.x < sourceObject.x)
    ) {
      return ConnectionTypes.ThreeSegments;
    }

    // Если объекты расположены внахлест (связь из 5 отрезков)
    if (
      (sourceObject.x < sourceConnectorPoint.x &&
        sourceConnectorPoint.x > targetConnectorPoint.x &&
        targetConnectorPoint.x < targetObject.x) ||
      (targetObject.x < targetConnectorPoint.x &&
        targetConnectorPoint.x > sourceConnectorPoint.x &&
        sourceConnectorPoint.x < sourceObject.x)
    ) {
      return ConnectionTypes.Overlapping;
    }
  }

  // Если коннекторы направлены в одну сторону
  else {
    // Если объекты расположены на одном уровне
    if (
      (sourceConnectorPoint.y > targetObject.y && sourceConnectorPoint.y < targetObject.y + targetObject.height) ||
      (targetConnectorPoint.y > sourceObject.y && targetConnectorPoint.y < sourceObject.y + sourceObject.height)
    ) {
      // Вертикальная линия выше наивысшего или ниже нижайшего из двух примитивов
      const targetY =
        Math.min(sourceObject.y, targetObject.y) > ConnectionShift
          ? Math.min(sourceObject.y, targetObject.y) + ConnectionShift
          : Math.max(sourceObject.y + sourceObject.height, targetObject.y + targetObject.height) - ConnectionShift;
      return sourceConnectorPoint.y < targetY ? ConnectionTypes.BottomBracket : ConnectionTypes.TopBracket;
    }

    // Если объекты расположены на разном уровне
    else {
      // Горизонтальная линия длиной до целевого коннектора
      const targetX =
        sourceConnectorPoint.x < sourceObject.x
          ? Math.min(sourceConnectorPoint.x, targetConnectorPoint.x)
          : Math.max(sourceConnectorPoint.x, targetConnectorPoint.x);

      return sourceConnectorPoint.x < targetX ? ConnectionTypes.LeftBracket : ConnectionTypes.RightBracket;
    }
  }
  return null;
};

export const getConnectionTypeByPoints = (points: number[]): ConnectionTypes => {};


мне надо дописать функию определения типа связи по точкам 
если что точки это просто массив чисел, первое из них это х, второе у и так далее