string/trainCase.ts

/** @module String */

import { isStr } from './isStr'

/**
 * Converts a string to train case, I.E. marginTop => margin-top.
 * @function
 * @param {String} string to be converted
 * @return {String} - string in train case format
 */
export const trainCase = <T extends string = string>(str: string): T =>
  ((isStr(str) &&
    str
      .split(/(?=[A-Z])|[\s_-]/gm)
      .join('-')
      .toLowerCase()) as T) || (str as T)