@sap_oss/odata-library
Version:
OData client for testing Netweawer OData services.
96 lines (85 loc) • 2.32 kB
JavaScript
;
const _ = require("lodash");
const { URL } = require("url");
/**
* Add addtional search part to the url
*
* @example
*
* let updatedUrl = appendSearch("https://localhost/", "foo=2");
* updatedUrl === "https://localhost/?foo=2";
*
* @param {String} inputUrl url for adding new search parameters
* @param {String} additionalSearch string which contains search parameters for adding
*
* @return {String} updated url
*/
function appendSearch(inputUrl, additionalSearch) {
let url = new URL(inputUrl);
if (!_.isString(additionalSearch)) {
throw new Error(
`Invalid additionalSearch parameter ${additionalSearch} to append search.`
);
}
if (additionalSearch) {
let searchPrefix = url.search ? url.search + "&" : "?";
url.search = searchPrefix + additionalSearch;
}
return url.toString();
}
/**
* Append "/" to the beginning of the path (could be
* use out of url handling also)
*
* @example
*
* absolutizePath("foo"); //=> "/foo"
* absolutizePath("/foo/bar"); //=> "/foo/bar"
* absolutizePath("//foo/bar"); //=> "/foo/bar"
*
* @param {String} path content
*
* @return {String} absolutized path
*/
function absolutizePath(path) {
var retval = path;
if (_.isString(path)) {
retval = "/" + path.replace(/^\/*/, "");
}
return retval;
}
module.exports = {
base(inputUrl) {
var url = new URL(inputUrl);
return `${url.protocol}//${url.host}${
!url.pathname || url.pathname === "/" ? "/" : absolutizePath(url.pathname)
}`;
},
normalize(input, base) {
var urlBase = new URL(base);
var urlInput = new URL(input, base);
var basePath = urlBase.pathname;
var inputPath = urlInput.pathname;
if (
_.isString(basePath) &&
basePath.substring(basePath.length - 1) === "/"
) {
basePath = basePath.substring(0, basePath.length - 1);
}
if (_.isString(inputPath) && inputPath.substring(0, 1) === "/") {
inputPath = inputPath.substring(1);
}
urlInput.pathname = basePath + "/" + inputPath;
return urlInput.href;
},
username(inputUrl) {
var url = new URL(inputUrl);
return url.username;
},
password(inputUrl) {
var url = new URL(inputUrl);
return url.password;
},
appendSearch: appendSearch,
absolutizePath: absolutizePath,
};