docs: function (source) {
      if (source instanceof Object) return parseObject(source)
  
      if (source === "") return undefined
  
      if (source.substring(0, 1) === "/")
        return parse.array(source)
  
      if (source === "*")
        return new WildcardValue
  
      if (source.substring(0, 1) === "[" &&
          source.substring(source.length - 1, source.length) === "]")
        return parse.array(source.substring(1, source.length - 1))
  
      if (source.substring(0, 1) === "<" &&
          source.substring(source.length - 1, source.length) === ">")
        return new TypedValue(source.substring(1, source.length - 1))
  
      if (source.substring(0, 1) === "(" &&
          source.substring(source.length - 1, source.length) === ")")
        return parse.object(source.substring(1, source.length - 1))
  
      if (( source.substring(0, 1) === '"' &&
            source.substring(source.length - 1, source.length) === '"') ||
          ( source.substring(0, 1) === "'" &&
            source.substring(source.length - 1, source.length) === "'"))
        return source
          .substring(1, source.length - 1)
          .split("\\\\")
          .map(function (chunk) { return chunk.replace("\\", "") })
          .join("\\")
  
      if (source === "true") return true
  
      if (source === "false") return false
  
      if (!isNaN(source)) return parseFloat(source)
  
      if (source.indexOf(":") > -1) return parse.object(source)
  
      return source
    }