buildUrlParamObj.js

/**
 * Builds an object composed of all query params in a specified URL.
 * @example <caption>Builds a params object from a URL</caption>
 * var { buildUrlParamObj } = require('@bowtie/utils')
 *
 * var url = 'www.example.com/something?key1=value1&key2=value2'
 * var paramChar = "?"
 * var result = buildUrlParamObj(url, paramChar)
 * console.log(result)
 * // { key1: "value1", key2: "value2" }
 * @example <caption>Build a params object from a URL with a custom paramChar</caption>
 * var { buildUrlParamObj } = require('@bowtie/utils')
 *
 * var url = 'www.example.com/something#key1=value1&key2=value2'
 * var paramChar = '#'
 * console.log( buildUrlParamObj(url, paramChar) )
 * // { key1: "value1", key2: "value2" }
 * @param {string} url - Url containing params
 * @param {string} paramChar - The character that indicates the start of the query parameters
 * @returns {object} - Returns an object with the query params and their associated values.
 */

const buildUrlParamObj = (url, paramChar) => {
  if (!url.includes(paramChar)) {
    throw Error(`The ${paramChar} paramChar does not exist in the Url. Please choose a character that indicates the beginning of the param queries.`)
  }

  const query = url.substr(url.indexOf(paramChar) + 1)
  const queryParams = query.split('&')
  let paramsObj = {}

  queryParams.forEach(p => {
    const param = p.split('=')

    if (param.length === 2) {
      paramsObj[param[0]] = param[1]
    } else if (param.length === 1) {
      paramsObj[param[0]] = true
    } else if (!param.length) {
      return false
    }
  })

  return paramsObj
}

module.exports = buildUrlParamObj