UNPKG

inserturlparams

Version:
79 lines 2.47 kB
"use strict"; 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