54 lines
1.7 KiB
Plaintext
54 lines
1.7 KiB
Plaintext
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
/* istanbul ignore file: deprecated */
|
|
const url_1 = require("url");
|
|
const keys = [
|
|
'protocol',
|
|
'host',
|
|
'hostname',
|
|
'port',
|
|
'pathname',
|
|
'search'
|
|
];
|
|
exports.default = (origin, options) => {
|
|
var _a, _b;
|
|
if (options.path) {
|
|
if (options.pathname) {
|
|
throw new TypeError('Parameters `path` and `pathname` are mutually exclusive.');
|
|
}
|
|
if (options.search) {
|
|
throw new TypeError('Parameters `path` and `search` are mutually exclusive.');
|
|
}
|
|
if (options.searchParams) {
|
|
throw new TypeError('Parameters `path` and `searchParams` are mutually exclusive.');
|
|
}
|
|
}
|
|
if (options.search && options.searchParams) {
|
|
throw new TypeError('Parameters `search` and `searchParams` are mutually exclusive.');
|
|
}
|
|
if (!origin) {
|
|
if (!options.protocol) {
|
|
throw new TypeError('No URL protocol specified');
|
|
}
|
|
origin = `${options.protocol}//${(_b = (_a = options.hostname) !== null && _a !== void 0 ? _a : options.host) !== null && _b !== void 0 ? _b : ''}`;
|
|
}
|
|
const url = new url_1.URL(origin);
|
|
if (options.path) {
|
|
const searchIndex = options.path.indexOf('?');
|
|
if (searchIndex === -1) {
|
|
options.pathname = options.path;
|
|
}
|
|
else {
|
|
options.pathname = options.path.slice(0, searchIndex);
|
|
options.search = options.path.slice(searchIndex + 1);
|
|
}
|
|
delete options.path;
|
|
}
|
|
for (const key of keys) {
|
|
if (options[key]) {
|
|
url[key] = options[key].toString();
|
|
}
|
|
}
|
|
return url;
|
|
};
|