Cases variations of a string For any String that is composed of lower cased alphabetical characters, make a function that returns a list of all of it's variations, empty strings returns empty list

Test Cases

"" -&gt; []
"a" -&gt; ["a", "A"]
"ab" -&gt; ["ab", "Ab", "aB", "AB"]
"abc" -&gt; ["abc", "Abc", "aBc", "ABc", "abC", "AbC", "aBC", "ABC"]


This is Code-golf. Shortest code in bytes wins
JavaScript (Firefox 30-57), 75 bytes

f=([c,...s])=&gt;c?[for(t of s[0]?f(s):[''])for(d of c+c.toUpperCase())d+t]:[]


67 bytes if the empty string returns [""]:

f=([c,...s])=&gt;c?[for(t of f(s))for(d of c+c.toUpperCase())d+t]:['']