{"version":3,"file":"UrlSearchParams.mjs","sourceRoot":"","sources":["../../src/UrlSearchParams.ts"],"names":[],"mappings":"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","sourcesContent":["import { Hash } from './interfaces';\nimport { duplicate } from './lang';\n\n/**\n * Object with string keys and string or string array values that describes a query string.\n */\nexport type ParamList = Hash<string | string[]>;\n\n/**\n * Parses a query string, returning a ParamList object.\n */\nfunction parseQueryString(input: string): ParamList {\n\tconst query: Hash<string[]> = {};\n\tconst splits = input.split('&');\n\n\tfor (let i = 0; i < splits.length; i++) {\n\t\tconst entry = splits[i];\n\t\tconst indexOfFirstEquals = entry.indexOf('=');\n\t\tlet key: string;\n\t\tlet value = '';\n\n\t\tif (indexOfFirstEquals >= 0) {\n\t\t\tkey = entry.slice(0, indexOfFirstEquals);\n\t\t\tvalue = entry.slice(indexOfFirstEquals + 1);\n\t\t} else {\n\t\t\tkey = entry;\n\t\t}\n\n\t\tkey = key ? decodeURIComponent(key) : '';\n\t\tvalue = value ? decodeURIComponent(value) : '';\n\n\t\tif (key in query) {\n\t\t\tquery[key].push(value);\n\t\t} else {\n\t\t\tquery[key] = [value];\n\t\t}\n\t}\n\treturn query;\n}\n\n/**\n * Represents a set of URL query search parameters.\n */\nexport default class UrlSearchParams {\n\t/**\n\t * Constructs a new UrlSearchParams from a query string, an object of parameters and values, or another\n\t * UrlSearchParams.\n\t */\n\tconstructor(input?: string | ParamList | UrlSearchParams) {\n\t\tlet list: ParamList = {};\n\n\t\tif (input instanceof UrlSearchParams) {\n\t\t\t// Copy the incoming UrlSearchParam's internal list\n\t\t\tlist = <ParamList>duplicate(input._list);\n\t\t} else if (typeof input === 'object') {\n\t\t\t// Copy the incoming object, assuming its property values are either arrays or strings\n\t\t\tlist = {};\n\t\t\tfor (const key in input) {\n\t\t\t\tconst value = (<ParamList>input)[key];\n\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\tlist[key] = value.length ? value.slice() : [''];\n\t\t\t\t} else if (value == null) {\n\t\t\t\t\tlist[key] = [''];\n\t\t\t\t} else {\n\t\t\t\t\tlist[key] = [<string>value];\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (typeof input === 'string') {\n\t\t\t// Parse the incoming string as a query string\n\t\t\tlist = parseQueryString(input);\n\t\t}\n\n\t\tthis._list = list as Hash<string[] | undefined>;\n\t}\n\n\t/**\n\t * Maps property keys to arrays of values. The value for any property that has been set will be an array containing\n\t * at least one item. Properties that have been deleted will have a value of 'undefined'.\n\t */\n\tprotected readonly _list: Hash<string[] | undefined>;\n\n\t/**\n\t * Appends a new value to the set of values for a key.\n\t * @param key The key to add a value for\n\t * @param value The value to add\n\t */\n\tappend(key: string, value: string): void {\n\t\tif (!this.has(key)) {\n\t\t\tthis.set(key, value);\n\t\t} else {\n\t\t\tconst values = this._list[key];\n\t\t\tif (values) {\n\t\t\t\tvalues.push(value);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Deletes all values for a key.\n\t * @param key The key whose values are to be removed\n\t */\n\tdelete(key: string): void {\n\t\t// Set to undefined rather than deleting the key, for better consistency across browsers.\n\t\t// If a deleted key is re-added, most browsers put it at the end of iteration order, but IE maintains\n\t\t// its original position.  This approach maintains the original position everywhere.\n\t\tthis._list[key] = undefined;\n\t}\n\n\t/**\n\t * Returns the first value associated with a key.\n\t * @param key The key to return the first value for\n\t * @return The first string value for the key\n\t */\n\tget(key: string): string | undefined {\n\t\tif (!this.has(key)) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst value = this._list[key];\n\t\treturn value ? value[0] : undefined;\n\t}\n\n\t/**\n\t * Returns all the values associated with a key.\n\t * @param key The key to return all values for\n\t * @return An array of strings containing all values for the key\n\t */\n\tgetAll(key: string): string[] | undefined {\n\t\tif (!this.has(key)) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn this._list[key];\n\t}\n\n\t/**\n\t * Returns true if a key has been set to any value, false otherwise.\n\t * @param key The key to test for existence\n\t * @return A boolean indicating if the key has been set\n\t */\n\thas(key: string): boolean {\n\t\treturn Array.isArray(this._list[key]);\n\t}\n\n\t/**\n\t * Returns an array of all keys which have been set.\n\t * @return An array of strings containing all keys set in the UrlSearchParams instance\n\t */\n\tkeys(): string[] {\n\t\tconst keys: string[] = [];\n\n\t\tfor (const key in this._list) {\n\t\t\tif (this.has(key)) {\n\t\t\t\tkeys.push(key);\n\t\t\t}\n\t\t}\n\n\t\treturn keys;\n\t}\n\n\t/**\n\t * Sets the value associated with a key.\n\t * @param key The key to set the value of\n\t */\n\tset(key: string, value: string): void {\n\t\tthis._list[key] = [value];\n\t}\n\n\t/**\n\t * Returns this object's data as an encoded query string.\n\t * @return A string in application/x-www-form-urlencoded format containing all of the set keys/values\n\t */\n\ttoString(): string {\n\t\tconst query: string[] = [];\n\n\t\tfor (const key in this._list) {\n\t\t\tif (!this.has(key)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst values = this._list[key];\n\t\t\tif (values) {\n\t\t\t\tconst encodedKey = encodeURIComponent(key);\n\t\t\t\tfor (let i = 0; i < values.length; i++) {\n\t\t\t\t\tquery.push(encodedKey + (values[i] ? '=' + encodeURIComponent(values[i]) : ''));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn query.join('&');\n\t}\n}\n"]}