UNPKG

@lylajs/core

Version:

67 lines (66 loc) 2.17 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.headersKeyToLowerCase = exports.mergeOptions = exports.mergeHeaders = exports.mergeUrl = void 0; function mergeUrl(baseUrl, relativeUrl) { if (isAbsoluteUrl(relativeUrl)) { return relativeUrl; } return relativeUrl ? baseUrl.replace(/\/+$/, '') + '/' + relativeUrl.replace(/^\/+/, '') : baseUrl; } exports.mergeUrl = mergeUrl; function isAbsoluteUrl(url) { // A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL). // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed // by any combination of letters, digits, plus, period, or hyphen. return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url); } function isObject(value) { return value && typeof value === 'object'; } function mergeHeaders(target, source) { if (!source) return target; for (const [key, value] of Object.entries(source)) { if (value === undefined) { delete target[key]; } else { target[key.toLowerCase()] = typeof value === 'string' ? value : `${value}`; } } return target; } exports.mergeHeaders = mergeHeaders; function mergeOptions(...sources) { let merged = {}; for (const source of sources) { if (Array.isArray(source)) { if (!Array.isArray(merged)) { merged = []; } merged.push(...source); } else if (isObject(source)) { for (let [key, value] of Object.entries(source)) { if (isObject(value) && key in merged) { value = mergeOptions(merged[key], value); } merged[key] = value; } } } return merged; } exports.mergeOptions = mergeOptions; function headersKeyToLowerCase(_headers) { if (!_headers) return {}; const headers = {}; for (const key in _headers) { headers[key.toLowerCase()] = _headers[key]; } return headers; } exports.headersKeyToLowerCase = headersKeyToLowerCase;