thoov/mock-socket

View on GitHub
src/helpers/protocol-verification.js

Summary

Maintainability
A
0 mins
Test Coverage
import { ERROR_PREFIX } from '../constants';

export default function protocolVerification(protocols = []) {
  if (!Array.isArray(protocols) && typeof protocols !== 'string') {
    throw new SyntaxError(`${ERROR_PREFIX.CONSTRUCTOR_ERROR} The subprotocol '${protocols.toString()}' is invalid.`);
  }

  if (typeof protocols === 'string') {
    protocols = [protocols];
  }

  const uniq = protocols
    .map(p => ({ count: 1, protocol: p }))
    .reduce((a, b) => {
      a[b.protocol] = (a[b.protocol] || 0) + b.count;
      return a;
    }, {});

  const duplicates = Object.keys(uniq).filter(a => uniq[a] > 1);

  if (duplicates.length > 0) {
    throw new SyntaxError(`${ERROR_PREFIX.CONSTRUCTOR_ERROR} The subprotocol '${duplicates[0]}' is duplicated.`);
  }

  return protocols;
}