uribuilder
Version:
URI builder and parser
63 lines (61 loc) • 2.34 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var instanceOf_1 = require("./instanceOf");
var UriQueryBuilder = (function () {
function UriQueryBuilder(model) {
this.model = model || {};
}
UriQueryBuilder.parse = function (query) {
var result = new UriQueryBuilder();
if (query.indexOf('?') > -1) {
query = query.split('?', 2)[1];
}
if (query.indexOf('#') > -1) {
query = query.split('#', 2)[0];
}
for (var _i = 0, _a = query.split('&'); _i < _a.length; _i++) {
var keyValue = _a[_i];
var pair = keyValue.split('=', 2).map(function (x) { return decodeURIComponent(x); });
var value = +pair[1];
if (isNaN(value)) {
value = pair[1];
}
if (result.model.hasOwnProperty(pair[0])) {
// is array
if (instanceOf_1.is(result.model[pair[0]], Array)) {
result.model[pair[0]].push(value);
}
else {
result.model[pair[0]] = [result.model[pair[0]]];
result.model[pair[0]].push(value);
}
}
else {
result.model[pair[0]] = value;
}
}
return result;
};
UriQueryBuilder.prototype.toString = function () {
var keyValueList = [];
for (var key in this.model) {
if (!this.model.hasOwnProperty(key)) {
continue;
}
var value = this.model[key];
if (instanceOf_1.is(value, Boolean) || instanceOf_1.is(value, Number) || instanceOf_1.is(value, String)) {
keyValueList.push(encodeURIComponent(key) + "=" + encodeURIComponent(value.toString()));
}
else if (instanceOf_1.is(value, Array)) {
for (var _i = 0, _a = value; _i < _a.length; _i++) {
var valueItem = _a[_i];
keyValueList.push(encodeURIComponent(key) + "=" + encodeURIComponent(valueItem.toString()));
}
}
}
return keyValueList.join('&');
};
return UriQueryBuilder;
}());
exports.UriQueryBuilder = UriQueryBuilder;
//# sourceMappingURL=uriQueryBuilder.js.map