inserturlparams
Version:
Insert dynamic data into url path params
79 lines • 2.47 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const Errors = {
IncorrectNumOfParams: 'Supplied number of params does not match number ' +
'of url params',
UrlNotAStr: 'Url must be a string',
ParamInvalid: 'Invalid param value. Must be a primitive type',
};
function formatUrl(url, pathParams) {
if (typeof url !== 'string') {
throw Error(Errors.UrlNotAStr);
}
return _insertPathParams(url, pathParams);
}
function _insertPathParams(url, pathParamsArg) {
if (pathParamsArg === '') {
return url;
}
let pathParams;
if (!!pathParamsArg && typeof pathParamsArg === 'object') {
pathParams = pathParamsArg;
}
else {
pathParams = [pathParamsArg];
}
let paramArrIdx = 0;
let paramEnd = -1;
let i = 0;
while (i < url.length) {
if (url[i] === '/' && url[i + 1] === ':') {
let urlEndReached = false;
for (let j = i + 2; j < url.length; j++) {
if (j === url.length - 1) {
urlEndReached = true;
}
if (url[j] === '/' || urlEndReached) {
paramEnd = j;
break;
}
}
const j = (urlEndReached ? paramEnd + 1 : paramEnd), paramKey = url.slice(i + 2, j);
let val;
if (Array.isArray(pathParams)) {
val = pathParams[paramArrIdx++];
}
else {
val = pathParams[paramKey];
}
if (val === '') {
val = ':' + paramKey;
}
if (!_checkPathParamValid(val)) {
throw Error(Errors.ParamInvalid);
}
else {
val = String(val);
}
const urlRemaining = (urlEndReached ? '' : url.slice(paramEnd));
url = (url.slice(0, i + 1) + val + urlRemaining);
i = (i + val.length + 1);
}
else {
i++;
}
}
if (Array.isArray(pathParams) && (paramArrIdx !== pathParams.length)) {
throw Error(Errors.IncorrectNumOfParams);
}
return url;
}
function _checkPathParamValid(val) {
return (val === undefined ||
val === null ||
typeof val === 'string' ||
typeof val === 'number' ||
typeof val === 'boolean');
}
exports.default = formatUrl;
//# sourceMappingURL=formatUrl.js.map