@deltares/fews-pi-requests
Version:
Library for making requests to the FEWS PI webservice
40 lines • 1.52 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.splitUrl = void 0;
const duplicates_js_1 = require("./duplicates.js");
function mostFrequentParameter(url) {
const duplicateEntries = (0, duplicates_js_1.duplicates)(Array.from(url.searchParams.keys()));
const keys = Array.from(duplicateEntries.keys());
let max = 0;
let split = keys[0];
for (const [key, value] of duplicateEntries) {
if (value > max) {
max = value;
split = key;
}
}
return split;
}
function splitUrl(url, maxLength = 2000, parameter) {
if (url.toString().length <= maxLength)
return [url];
const baseUrl = new URL(url.toString());
const split = parameter !== undefined ? parameter : mostFrequentParameter(url);
baseUrl.searchParams.delete(split);
const urls = [];
let newUrl = new URL(baseUrl.toString());
for (const value of url.searchParams.getAll(split)) {
if (newUrl.toString().length + split.length + value.length + 2 > maxLength) {
urls.push(new URL(newUrl.toString()));
newUrl = new URL(baseUrl.toString());
}
newUrl.searchParams.append(split, value);
if (newUrl.toString().length > maxLength) {
throw new Error(`Cannot split url by query parameter '${split}' to be shorter than ${maxLength} <= ${newUrl.toString()}.`);
}
}
urls.push(newUrl);
return urls;
}
exports.splitUrl = splitUrl;
//# sourceMappingURL=splitUrl.js.map