UNPKG

locutus

Version:

Locutus other languages' standard libraries to JavaScript for fun and educational purposes

41 lines (40 loc) 1.48 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ParseQuery = ParseQuery; const QueryUnescape_ts_1 = require("./QueryUnescape.js"); function ParseQuery(query) { // discuss at: https://locutus.io/golang/url/ParseQuery // parity verified: Go 1.23 // original by: Kevin van Zonneveld (https://kvz.io) // note 1: Parses URL-encoded key/value pairs into arrays per key. // example 1: ParseQuery('a=1&b=2&b=3') // returns 1: {a: ['1'], b: ['2', '3']} // example 2: ParseQuery('q=go+lang&x=%2B') // returns 2: {q: ['go lang'], x: ['+']} // example 3: ParseQuery('empty=&flag') // returns 3: {empty: [''], flag: ['']} const raw = String(query); if (raw === '') { return {}; } const out = {}; const pairs = raw.split('&'); for (const pair of pairs) { if (pair === '') { continue; } const separator = pair.indexOf('='); const keyRaw = separator >= 0 ? pair.slice(0, separator) : pair; const valueRaw = separator >= 0 ? pair.slice(separator + 1) : ''; const key = (0, QueryUnescape_ts_1.QueryUnescape)(keyRaw); const value = (0, QueryUnescape_ts_1.QueryUnescape)(valueRaw); const existing = out[key]; if (existing) { existing.push(value); } else { out[key] = [value]; } } return out; }