UNPKG

can

Version:

MIT-licensed, client-side, JavaScript framework that makes building rich web applications easy.

45 lines (44 loc) 1.63 kB
/*! * CanJS - 2.3.34 * http://canjs.com/ * Copyright (c) 2018 Bitovi * Mon, 30 Apr 2018 20:56:51 GMT * Licensed MIT */ /*can@2.3.34#util/string/deparam/deparam*/ define([ 'can/util/library', 'can/util/string' ], function (can) { var digitTest = /^\d+$/, keyBreaker = /([^\[\]]+)|(\[\])/g, paramTest = /([^?#]*)(#.*)?$/, prep = function (str) { return decodeURIComponent(str.replace(/\+/g, ' ')); }; can.extend(can, { deparam: function (params) { var data = {}, pairs, lastPart; if (params && paramTest.test(params)) { pairs = params.split('&'); can.each(pairs, function (pair) { var parts = pair.split('='), key = prep(parts.shift()), value = prep(parts.join('=')), current = data; if (key) { parts = key.match(keyBreaker); for (var j = 0, l = parts.length - 1; j < l; j++) { if (!current[parts[j]]) { current[parts[j]] = digitTest.test(parts[j + 1]) || parts[j + 1] === '[]' ? [] : {}; } current = current[parts[j]]; } lastPart = parts.pop(); if (lastPart === '[]') { current.push(value); } else { current[lastPart] = value; } } }); } return data; } }); return can; });