function getWildCards(key, _cache = {}) {
  let paths = ''
  if (_cache[key]) return _cache[key]
  const parts = key.split(DOT)
  const hasStar = key.indexOf(STAR) > -1
  const hasDotStar = hasStar && key.charAt(key.length - 2) === DOT
  const wildCards = [STAR, key] // Match * and key by default
  /* Add prefix */
  if (hasStar && !hasDotStar) {
    wildCards.push(key.slice(0, key.length -1))
  }
  for (let x = 0; x < parts.length; x++) {
    const notLast = parts.length !== x + 1
    const ending = (hasStar && !notLast) ? '' : STAR
    paths = paths + (x ? DOT : '') + parts[x]
    /* If not last item, compose wildcards from path */
    const one = paths + DOT + ending
    if (notLast && !has(wildCards, one)) wildCards.push(one)
    /* Has star & ends with dot .* */
    const two = paths + ending
    if (!hasDotStar && !has(wildCards, two)) wildCards.push(two)
  }
  return _cache[key] = wildCards
}
Get all possible path matches from key
@param {*} key 
@param {*} _cache 
@returns {Array<string>}