@angular/http
Version:
Angular - the http service
226 lines • 7.3 kB
JavaScript
/**
* @license undefined
* Copyright Google Inc. All Rights Reserved.
* *
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
* @param {?=} rawParams
* @return {?}
*/
function paramParser(rawParams) {
if (rawParams === void 0) { rawParams = ''; }
var /** @type {?} */ map = new Map();
if (rawParams.length > 0) {
var /** @type {?} */ params = rawParams.split('&');
params.forEach(function (param) {
var /** @type {?} */ eqIdx = param.indexOf('=');
var _a = eqIdx == -1 ? [param, ''] : [param.slice(0, eqIdx), param.slice(eqIdx + 1)], key = _a[0], val = _a[1];
var /** @type {?} */ list = map.get(key) || [];
list.push(val);
map.set(key, list);
});
}
return map;
}
/**
* *
*/
export var QueryEncoder = (function () {
function QueryEncoder() {
}
/**
* @param {?} k
* @return {?}
*/
QueryEncoder.prototype.encodeKey = function (k) { return standardEncoding(k); };
/**
* @param {?} v
* @return {?}
*/
QueryEncoder.prototype.encodeValue = function (v) { return standardEncoding(v); };
return QueryEncoder;
}());
/**
* @param {?} v
* @return {?}
*/
function standardEncoding(v) {
return encodeURIComponent(v)
.replace(/%40/gi, '@')
.replace(/%3A/gi, ':')
.replace(/%24/gi, '$')
.replace(/%2C/gi, ',')
.replace(/%3B/gi, ';')
.replace(/%2B/gi, '+')
.replace(/%3D/gi, '=')
.replace(/%3F/gi, '?')
.replace(/%2F/gi, '/');
}
/**
* Map-like representation of url search parameters, based on
* [URLSearchParams](https://url.spec.whatwg.org/#urlsearchparams) in the url living standard,
* with several extensions for merging URLSearchParams objects:
* - setAll()
* - appendAll()
* - replaceAll()
* *
* This class accepts an optional second parameter of ${@link QueryEncoder},
* which is used to serialize parameters before making a request. By default,
* `QueryEncoder` encodes keys and values of parameters using `encodeURIComponent`,
* and then un-encodes certain characters that are allowed to be part of the query
* according to IETF RFC 3986: https://tools.ietf.org/html/rfc3986.
* *
* These are the characters that are not encoded: `! $ \' ( ) * + , ; A 9 - . _ ~ ? /`
* *
* If the set of allowed query characters is not acceptable for a particular backend,
* `QueryEncoder` can be subclassed and provided as the 2nd argument to URLSearchParams.
* *
* ```
* import {URLSearchParams, QueryEncoder} from '@angular/http';
* class MyQueryEncoder extends QueryEncoder {
* encodeKey(k: string): string {
* return myEncodingFunction(k);
* }
* *
* encodeValue(v: string): string {
* return myEncodingFunction(v);
* }
* }
* *
* let params = new URLSearchParams('', new MyQueryEncoder());
* ```
*/
export var URLSearchParams = (function () {
/**
* @param {?=} rawParams
* @param {?=} queryEncoder
*/
function URLSearchParams(rawParams, queryEncoder) {
if (rawParams === void 0) { rawParams = ''; }
if (queryEncoder === void 0) { queryEncoder = new QueryEncoder(); }
this.rawParams = rawParams;
this.queryEncoder = queryEncoder;
this.paramsMap = paramParser(rawParams);
}
/**
* @return {?}
*/
URLSearchParams.prototype.clone = function () {
var /** @type {?} */ clone = new URLSearchParams('', this.queryEncoder);
clone.appendAll(this);
return clone;
};
/**
* @param {?} param
* @return {?}
*/
URLSearchParams.prototype.has = function (param) { return this.paramsMap.has(param); };
/**
* @param {?} param
* @return {?}
*/
URLSearchParams.prototype.get = function (param) {
var /** @type {?} */ storedParam = this.paramsMap.get(param);
return Array.isArray(storedParam) ? storedParam[0] : null;
};
/**
* @param {?} param
* @return {?}
*/
URLSearchParams.prototype.getAll = function (param) { return this.paramsMap.get(param) || []; };
/**
* @param {?} param
* @param {?} val
* @return {?}
*/
URLSearchParams.prototype.set = function (param, val) {
if (val === void 0 || val === null) {
this.delete(param);
return;
}
var /** @type {?} */ list = this.paramsMap.get(param) || [];
list.length = 0;
list.push(val);
this.paramsMap.set(param, list);
};
/**
* @param {?} searchParams
* @return {?}
*/
URLSearchParams.prototype.setAll = function (searchParams) {
var _this = this;
searchParams.paramsMap.forEach(function (value, param) {
var /** @type {?} */ list = _this.paramsMap.get(param) || [];
list.length = 0;
list.push(value[0]);
_this.paramsMap.set(param, list);
});
};
/**
* @param {?} param
* @param {?} val
* @return {?}
*/
URLSearchParams.prototype.append = function (param, val) {
if (val === void 0 || val === null)
return;
var /** @type {?} */ list = this.paramsMap.get(param) || [];
list.push(val);
this.paramsMap.set(param, list);
};
/**
* @param {?} searchParams
* @return {?}
*/
URLSearchParams.prototype.appendAll = function (searchParams) {
var _this = this;
searchParams.paramsMap.forEach(function (value, param) {
var /** @type {?} */ list = _this.paramsMap.get(param) || [];
for (var /** @type {?} */ i = 0; i < value.length; ++i) {
list.push(value[i]);
}
_this.paramsMap.set(param, list);
});
};
/**
* @param {?} searchParams
* @return {?}
*/
URLSearchParams.prototype.replaceAll = function (searchParams) {
var _this = this;
searchParams.paramsMap.forEach(function (value, param) {
var /** @type {?} */ list = _this.paramsMap.get(param) || [];
list.length = 0;
for (var /** @type {?} */ i = 0; i < value.length; ++i) {
list.push(value[i]);
}
_this.paramsMap.set(param, list);
});
};
/**
* @return {?}
*/
URLSearchParams.prototype.toString = function () {
var _this = this;
var /** @type {?} */ paramsList = [];
this.paramsMap.forEach(function (values, k) {
values.forEach(function (v) { return paramsList.push(_this.queryEncoder.encodeKey(k) + '=' + _this.queryEncoder.encodeValue(v)); });
});
return paramsList.join('&');
};
/**
* @param {?} param
* @return {?}
*/
URLSearchParams.prototype.delete = function (param) { this.paramsMap.delete(param); };
return URLSearchParams;
}());
function URLSearchParams_tsickle_Closure_declarations() {
/** @type {?} */
URLSearchParams.prototype.paramsMap;
/** @type {?} */
URLSearchParams.prototype.rawParams;
/** @type {?} */
URLSearchParams.prototype.queryEncoder;
}
//# sourceMappingURL=url_search_params.js.map