UNPKG

@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
/* * '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