Codebase list node-decamelize / 5b708e57-26e2-4a8f-81d2-dbb7492667e2/main index.js
5b708e57-26e2-4a8f-81d2-dbb7492667e2/main

Tree @5b708e57-26e2-4a8f-81d2-dbb7492667e2/main (Download .tar.gz)

index.js @5b708e57-26e2-4a8f-81d2-dbb7492667e2/mainraw · history · blame

'use strict';

module.exports = (text, separator = '_') => {
	if (!(typeof text === 'string' && typeof separator === 'string')) {
		throw new TypeError('The `text` and `separator` arguments should be of type `string`');
	}

	return text
		.replace(/([\p{Lowercase_Letter}\d])(\p{Uppercase_Letter})/gu, `$1${separator}$2`)
		.replace(/(\p{Uppercase_Letter}+)(\p{Uppercase_Letter}\p{Lowercase_Letter}+)/gu, `$1${separator}$2`)
		.toLowerCase();
};