lib.strings: init toCamelCase

This commit is contained in:
Heitor Augusto
2025-04-27 18:21:10 -03:00
parent 24249d45f7
commit 24e8a790b7
3 changed files with 80 additions and 0 deletions

View File

@@ -1500,6 +1500,63 @@ rec {
addContextFrom str (toUpper firstChar + toLower rest)
);
/**
Converts a string to camelCase. Handles snake_case, PascalCase,
kebab-case strings as well as strings delimited by spaces.
# Inputs
`string`
: The string to convert to camelCase
# Type
```
toCamelCase :: string -> string
```
# Examples
:::{.example}
## `lib.strings.toCamelCase` usage example
```nix
toCamelCase "hello-world"
=> "helloWorld"
toCamelCase "hello_world"
=> "helloWorld"
toCamelCase "hello world"
=> "helloWorld"
toCamelCase "HelloWorld"
=> "helloWorld"
```
:::
*/
toCamelCase =
str:
lib.throwIfNot (isString str) "toCamelCase does only accepts string values, but got ${typeOf str}" (
let
separators = splitStringBy (
prev: curr:
elem curr [
"-"
"_"
" "
]
) false str;
parts = lib.flatten (
map (splitStringBy (
prev: curr: match "[a-z]" prev != null && match "[A-Z]" curr != null
) true) separators
);
first = if length parts > 0 then toLower (head parts) else "";
rest = if length parts > 1 then map toSentenceCase (tail parts) else [ ];
in
concatStrings (map (addContextFrom str) ([ first ] ++ rest))
);
/**
Appends string context from string like object `src` to `target`.