ilsanchez/simple-query-params

View on GitHub
src/utils.ts

Summary

Maintainability
A
30 mins
Test Coverage
import { QueryParamType, QueryParamRawType } from './query-params';
import { ARRAY_PARAMETER_JOIN_TOKEN } from './constants';

export const normalizeValue = (value: QueryParamType) => {
  if ('string' === typeof value) {
    return value;
  } else if ('number' === typeof value) {
    return value.toString();
  } else if (Array.isArray(value)) {
    return value.join(ARRAY_PARAMETER_JOIN_TOKEN);
  } else {
    throw new Error(
      'Invalid value for query param. It must be one of: "string" | "number" | "Array<string>"'
    );
  }
};

export const getUnderlyingType = (value: QueryParamType): QueryParamRawType => {
  if ('string' === typeof value) {
    if (value.includes(',')) {
      return 'array';
    } else if (Number(value)) {
      return 'number';
    }
    return 'string';
  } else if (Number(value)) {
    return 'number';
  } else {
    if (Array.isArray(value)) {
      return 'array';
    }
  }
  throw new Error(
    'Invalid value for query param. It must be one of: "string" | "number" | "Array<string>"'
  );
};