text: 'use strict'
  
  const permutate = (aString) => {
    if (typeof aString !== 'string' || !aString) {
      throw new Error('The arg must be a valid, non empty string')
    }
    const characters = aString.split('')
    let permutations = [[characters.shift()]]
    while (characters.length) {
      const currentCharacter = characters.shift()
      permutations = calculateCurrentCharacterPermutation(permutations, currentCharacter)
    }
    return permutations
      .map(character => character.join(''))
      .filter((item, index, self) => (self.indexOf(item) === index))
      .sort()
  }
  
  const calculateCurrentCharacterPermutation = (allPermutations, currentCharacter) => {
    const currentPermutations = []
    allPermutations.map(permutation => {
      let index = 0
      while (index <= permutation.length) {
        const tmp = [...permutation]
        tmp.splice(index, 0, currentCharacter)
        currentPermutations.push(tmp)
        index++
      }
    })
    return currentPermutations
  }
  
  export { permutate }
  