'use strict'; function preserveCamelCase(str) { var isLastCharLower = false; for (var i = 0; i < str.length; i++) { var c = str.charAt(i); if (isLastCharLower && (/[a-zA-Z]/).test(c) && c.toUpperCase() === c) { str = str.substr(0, i) + '-' + str.substr(i); isLastCharLower = false; i++; } else { isLastCharLower = (c.toLowerCase() === c); } } return str; } module.exports = function () { var str = [].map.call(arguments, function (str) { return str.trim(); }).filter(function (str) { return str.length; }).join('-'); if (!str.length) { return ''; } if (str.length === 1) { return str; } if (!(/[_.\- ]+/).test(str)) { if (str === str.toUpperCase()) { return str.toLowerCase(); } if (str[0] !== str[0].toLowerCase()) { return str[0].toLowerCase() + str.slice(1); } return str; } str = preserveCamelCase(str); return str .replace(/^[_.\- ]+/, '') .toLowerCase() .replace(/[_.\- ]+(\w|$)/g, function (m, p1) { return p1.toUpperCase(); }); };