import { cached } from '../util/core' const decode = decodeURIComponent const encode = encodeURIComponent export function parseQuery (query) { const res = {} query = query.trim().replace(/^(\?|#|&)/, '') if (!query) { return res } // Simple parse query.split('&').forEach(function (param) { const parts = param.replace(/\+/g, ' ').split('=') res[parts[0]] = parts[1] && decode(parts[1]) }) return res } export function stringifyQuery (obj, ignores = []) { const qs = [] for (const key in obj) { if (ignores.indexOf(key) > -1) continue qs.push( obj[key] ? `${encode(key)}=${encode(obj[key])}`.toLowerCase() : encode(key) ) } return qs.length ? `?${qs.join('&')}` : '' } export function getPath (...args) { return cleanPath(args.join('/')) } export const isAbsolutePath = cached(path => { return /(:|(\/{2}))/g.test(path) }) export const getParentPath = cached(path => { return /\/$/g.test(path) ? path : (path = path.match(/(\S*\/)[^\/]+$/)) ? path[1] : '' }) export const cleanPath = cached(path => { return path.replace(/^\/+/, '/').replace(/([^:])\/{2,}/g, '$1/') })