12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- import defined from './defined.js';
- import DeveloperError from './DeveloperError.js';
- import isArray from './isArray.js';
- /**
- * Parses a query string into an object, where the keys and values of the object are the
- * name/value pairs from the query string, decoded. If a name appears multiple times,
- * the value in the object will be an array of values.
- * @exports queryToObject
- *
- * @param {String} queryString The query string.
- * @returns {Object} An object containing the parameters parsed from the query string.
- *
- *
- * @example
- * var obj = Cesium.queryToObject('key1=some%20value&key2=a%2Fb&key3=x&key3=y');
- * // obj will be:
- * // {
- * // key1 : 'some value',
- * // key2 : 'a/b',
- * // key3 : ['x', 'y']
- * // }
- *
- * @see objectToQuery
- */
- function queryToObject(queryString) {
- //>>includeStart('debug', pragmas.debug);
- if (!defined(queryString)) {
- throw new DeveloperError('queryString is required.');
- }
- //>>includeEnd('debug');
- var result = {};
- if (queryString === '') {
- return result;
- }
- var parts = queryString.replace(/\+/g, '%20').split(/[&;]/);
- for (var i = 0, len = parts.length; i < len; ++i) {
- var subparts = parts[i].split('=');
- var name = decodeURIComponent(subparts[0]);
- var value = subparts[1];
- if (defined(value)) {
- value = decodeURIComponent(value);
- } else {
- value = '';
- }
- var resultValue = result[name];
- if (typeof resultValue === 'string') {
- // expand the single value to an array
- result[name] = [resultValue, value];
- } else if (isArray(resultValue)) {
- resultValue.push(value);
- } else {
- result[name] = value;
- }
- }
- return result;
- }
- export default queryToObject;
|