@terminus/ngx-tools
Version:
[![CircleCI][circle-badge]][circle-link] [![codecov][codecov-badge]][codecov-project] [![semantic-release][semantic-release-badge]][semantic-release] [![MIT License][license-image]][license-url] <br> [![NPM version][npm-version-image]][npm-url] [![Github
82 lines • 9.19 kB
JavaScript
/*
* 'Inspired' by https://github.com/sindresorhus/camelcase
*/
/**
* Function that preserves camel case
*
* @param input - The string input
* @returns The adjusted string
*/
function preserveCamelCase(input) {
let isLastCharLower = false;
let isLastCharUpper = false;
let isLastLastCharUpper = false;
for (let i = 0; i < input.length; i++) {
const c = input[i];
if (isLastCharLower && /[a-zA-Z]/.test(c) && c.toUpperCase() === c) {
input = `${input.slice(0, i)}-${input.slice(i)}`;
isLastCharLower = false;
isLastLastCharUpper = isLastCharUpper;
isLastCharUpper = true;
i++;
}
else if (isLastCharUpper && isLastLastCharUpper && /[a-zA-Z]/.test(c) && c.toLowerCase() === c) {
input = `${input.slice(0, i - 1)}-${input.slice(i - 1)}`;
isLastLastCharUpper = isLastCharUpper;
isLastCharUpper = false;
isLastCharLower = true;
}
else {
isLastCharLower = c.toLowerCase() === c;
isLastLastCharUpper = isLastCharUpper;
isLastCharUpper = c.toUpperCase() === c;
}
}
return input;
}
/**
* Post process a conversion into PascalCase if necessary
*
* @param x - The string
* @param pascalCase - A boolean representing if the string should be converted to PascalCase
* @returns The final string
*/
const postProcess = (x, pascalCase) => (pascalCase ? x.charAt(0).toUpperCase() + x.slice(1) : x);
const ɵ0 = postProcess;
/**
* Convert a string to camelCase
*
* @param input - The string to convert
* @param pascalCase - A boolean representing if the string should be converted to PascalCase
* @returns The camelCase version of the string
*
* @example
* toCamelCase('MY_TEXT') // Returns: `myText`
* toCamelCase('MY_TEXT', true) // Returns: `MyText`
*/
export function toCamelCase(input, pascalCase = false) {
if (!input) {
return undefined;
}
// Trim whitespace
input = input.trim();
// Test for a single character
if (input.length === 1) {
return pascalCase ? input.toUpperCase() : input.toLowerCase();
}
// Test if we are dealing with a single lowercased word
if (/^[a-z\d]+$/.test(input)) {
return postProcess(input, pascalCase);
}
// Test if there are any uppercase
if (input !== input.toLowerCase()) {
input = preserveCamelCase(input);
}
input = input
.replace(/^[_.\- ]+/, '')
.toLowerCase()
.replace(/[_.\- ]+(\w|$)/g, (m, p1) => p1.toUpperCase());
return postProcess(input, pascalCase);
}
export { ɵ0 };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG8tY2FtZWwtY2FzZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B0ZXJtaW51cy9uZ3gtdG9vbHMvdXRpbGl0aWVzLyIsInNvdXJjZXMiOlsidG8tY2FtZWwtY2FzZS90by1jYW1lbC1jYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBR0g7Ozs7O0dBS0c7QUFDSCxTQUFTLGlCQUFpQixDQUFDLEtBQWE7SUFDdEMsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQzVCLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztJQUM1QixJQUFJLG1CQUFtQixHQUFHLEtBQUssQ0FBQztJQUVoQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNyQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbkIsSUFBSSxlQUFlLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ2xFLEtBQUssR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqRCxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLG1CQUFtQixHQUFHLGVBQWUsQ0FBQztZQUN0QyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLENBQUMsRUFBRSxDQUFDO1NBQ0w7YUFBTSxJQUFJLGVBQWUsSUFBSSxtQkFBbUIsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDaEcsS0FBSyxHQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDekQsbUJBQW1CLEdBQUcsZUFBZSxDQUFDO1lBQ3RDLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDeEIsZUFBZSxHQUFHLElBQUksQ0FBQztTQUN4QjthQUFNO1lBQ0wsZUFBZSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDeEMsbUJBQW1CLEdBQUcsZUFBZSxDQUFDO1lBQ3RDLGVBQWUsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3pDO0tBQ0Y7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFHRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFdBQVcsR0FDZixDQUFDLENBQVMsRUFBRSxVQUFtQixFQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFHeEc7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBYSxFQUFFLFVBQVUsR0FBRyxLQUFLO0lBQzNELElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDVixPQUFPLFNBQVMsQ0FBQztLQUNsQjtJQUVELGtCQUFrQjtJQUNsQixLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBRXJCLDhCQUE4QjtJQUM5QixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3RCLE9BQU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztLQUMvRDtJQUVELHVEQUF1RDtJQUN2RCxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDNUIsT0FBTyxXQUFXLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0tBQ3ZDO0lBRUQsa0NBQWtDO0lBQ2xDLElBQUksS0FBSyxLQUFLLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRTtRQUNqQyxLQUFLLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDbEM7SUFFRCxLQUFLLEdBQUcsS0FBSztTQUNWLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1NBQ3hCLFdBQVcsRUFBRTtTQUNiLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBRW5FLE9BQU8sV0FBVyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqICdJbnNwaXJlZCcgYnkgaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9jYW1lbGNhc2VcbiAqL1xuXG5cbi8qKlxuICogRnVuY3Rpb24gdGhhdCBwcmVzZXJ2ZXMgY2FtZWwgY2FzZVxuICpcbiAqIEBwYXJhbSBpbnB1dCAtIFRoZSBzdHJpbmcgaW5wdXRcbiAqIEByZXR1cm5zIFRoZSBhZGp1c3RlZCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gcHJlc2VydmVDYW1lbENhc2UoaW5wdXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCBpc0xhc3RDaGFyTG93ZXIgPSBmYWxzZTtcbiAgbGV0IGlzTGFzdENoYXJVcHBlciA9IGZhbHNlO1xuICBsZXQgaXNMYXN0TGFzdENoYXJVcHBlciA9IGZhbHNlO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjID0gaW5wdXRbaV07XG5cbiAgICBpZiAoaXNMYXN0Q2hhckxvd2VyICYmIC9bYS16QS1aXS8udGVzdChjKSAmJiBjLnRvVXBwZXJDYXNlKCkgPT09IGMpIHtcbiAgICAgIGlucHV0ID0gYCR7aW5wdXQuc2xpY2UoMCwgaSl9LSR7aW5wdXQuc2xpY2UoaSl9YDtcbiAgICAgIGlzTGFzdENoYXJMb3dlciA9IGZhbHNlO1xuICAgICAgaXNMYXN0TGFzdENoYXJVcHBlciA9IGlzTGFzdENoYXJVcHBlcjtcbiAgICAgIGlzTGFzdENoYXJVcHBlciA9IHRydWU7XG4gICAgICBpKys7XG4gICAgfSBlbHNlIGlmIChpc0xhc3RDaGFyVXBwZXIgJiYgaXNMYXN0TGFzdENoYXJVcHBlciAmJiAvW2EtekEtWl0vLnRlc3QoYykgJiYgYy50b0xvd2VyQ2FzZSgpID09PSBjKSB7XG4gICAgICBpbnB1dCA9IGAke2lucHV0LnNsaWNlKDAsIGkgLSAxKX0tJHtpbnB1dC5zbGljZShpIC0gMSl9YDtcbiAgICAgIGlzTGFzdExhc3RDaGFyVXBwZXIgPSBpc0xhc3RDaGFyVXBwZXI7XG4gICAgICBpc0xhc3RDaGFyVXBwZXIgPSBmYWxzZTtcbiAgICAgIGlzTGFzdENoYXJMb3dlciA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzTGFzdENoYXJMb3dlciA9IGMudG9Mb3dlckNhc2UoKSA9PT0gYztcbiAgICAgIGlzTGFzdExhc3RDaGFyVXBwZXIgPSBpc0xhc3RDaGFyVXBwZXI7XG4gICAgICBpc0xhc3RDaGFyVXBwZXIgPSBjLnRvVXBwZXJDYXNlKCkgPT09IGM7XG4gICAgfVxuICB9XG4gIHJldHVybiBpbnB1dDtcbn1cblxuXG4vKipcbiAqIFBvc3QgcHJvY2VzcyBhIGNvbnZlcnNpb24gaW50byBQYXNjYWxDYXNlIGlmIG5lY2Vzc2FyeVxuICpcbiAqIEBwYXJhbSB4IC0gVGhlIHN0cmluZ1xuICogQHBhcmFtIHBhc2NhbENhc2UgLSBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIGlmIHRoZSBzdHJpbmcgc2hvdWxkIGJlIGNvbnZlcnRlZCB0byBQYXNjYWxDYXNlXG4gKiBAcmV0dXJucyBUaGUgZmluYWwgc3RyaW5nXG4gKi9cbmNvbnN0IHBvc3RQcm9jZXNzID1cbiAgKHg6IHN0cmluZywgcGFzY2FsQ2FzZTogYm9vbGVhbik6IHN0cmluZyA9PiAocGFzY2FsQ2FzZSA/IHguY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB4LnNsaWNlKDEpIDogeCk7XG5cblxuLyoqXG4gKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGNhbWVsQ2FzZVxuICpcbiAqIEBwYXJhbSBpbnB1dCAtIFRoZSBzdHJpbmcgdG8gY29udmVydFxuICogQHBhcmFtIHBhc2NhbENhc2UgLSBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIGlmIHRoZSBzdHJpbmcgc2hvdWxkIGJlIGNvbnZlcnRlZCB0byBQYXNjYWxDYXNlXG4gKiBAcmV0dXJucyBUaGUgY2FtZWxDYXNlIHZlcnNpb24gb2YgdGhlIHN0cmluZ1xuICpcbiAqIEBleGFtcGxlXG4gKiB0b0NhbWVsQ2FzZSgnTVlfVEVYVCcpICAgICAgIC8vIFJldHVybnM6IGBteVRleHRgXG4gKiB0b0NhbWVsQ2FzZSgnTVlfVEVYVCcsIHRydWUpIC8vIFJldHVybnM6IGBNeVRleHRgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0NhbWVsQ2FzZShpbnB1dDogc3RyaW5nLCBwYXNjYWxDYXNlID0gZmFsc2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIWlucHV0KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIFRyaW0gd2hpdGVzcGFjZVxuICBpbnB1dCA9IGlucHV0LnRyaW0oKTtcblxuICAvLyBUZXN0IGZvciBhIHNpbmdsZSBjaGFyYWN0ZXJcbiAgaWYgKGlucHV0Lmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBwYXNjYWxDYXNlID8gaW5wdXQudG9VcHBlckNhc2UoKSA6IGlucHV0LnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICAvLyBUZXN0IGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBzaW5nbGUgbG93ZXJjYXNlZCB3b3JkXG4gIGlmICgvXlthLXpcXGRdKyQvLnRlc3QoaW5wdXQpKSB7XG4gICAgcmV0dXJuIHBvc3RQcm9jZXNzKGlucHV0LCBwYXNjYWxDYXNlKTtcbiAgfVxuXG4gIC8vIFRlc3QgaWYgdGhlcmUgYXJlIGFueSB1cHBlcmNhc2VcbiAgaWYgKGlucHV0ICE9PSBpbnB1dC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgaW5wdXQgPSBwcmVzZXJ2ZUNhbWVsQ2FzZShpbnB1dCk7XG4gIH1cblxuICBpbnB1dCA9IGlucHV0XG4gICAgLnJlcGxhY2UoL15bXy5cXC0gXSsvLCAnJylcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC9bXy5cXC0gXSsoXFx3fCQpL2csIChtLCBwMTogc3RyaW5nKSA9PiBwMS50b1VwcGVyQ2FzZSgpKTtcblxuICByZXR1cm4gcG9zdFByb2Nlc3MoaW5wdXQsIHBhc2NhbENhc2UpO1xufVxuIl19