Files
osr-mono/packages/osr-cli-commons/lib/scheme.js
T
2025-01-29 17:48:22 +01:00

50 lines
4.4 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseURL = exports.escapeFirstUrlSegment = void 0;
const escapeFirstUrlSegment = (url) => {
const schemeEndIndex = url.indexOf('://') + 3;
const restOfUrl = url.slice(schemeEndIndex);
const questionMarkIndex = restOfUrl.indexOf('?');
if (questionMarkIndex !== -1) {
const firstSegment = restOfUrl.slice(0, questionMarkIndex);
const escapedFirstSegment = encodeURIComponent(firstSegment);
return url.slice(0, schemeEndIndex) + escapedFirstSegment + restOfUrl.slice(questionMarkIndex);
}
else {
const escapedFirstSegment = encodeURIComponent(restOfUrl);
return url.slice(0, schemeEndIndex) + escapedFirstSegment;
}
};
exports.escapeFirstUrlSegment = escapeFirstUrlSegment;
const parseURL = (url) => {
const trimmedUrl = (0, exports.escapeFirstUrlSegment)(url.trim());
//const urlPattern = /^([a-zA-Z][a-zA-Z\d+.-]*):\/\/([^\/\s?#]*)([^\s?#]*)?(\?[^#\s]*)?(#[^\s]*)?$/;
const urlPattern = /([a-zA-Z]{2,20}):\/\/([\w_-]+(?:(?:\.[\w_-]+)?))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?/igm;
const match = trimmedUrl.match(urlPattern);
if (!match) {
return null;
}
// Destructure the match groups
const [, scheme, host, path, queryString, fragment] = match;
// Parse query string if present
const query = {};
if (queryString) {
queryString
.substring(1)
.split("&")
.forEach((param) => {
const [key, value] = param.split("=");
query[decodeURIComponent(key)] = value ? decodeURIComponent(value) : "";
});
}
// Return the parsed URL as an object
return {
scheme,
host: host || undefined,
path: path || undefined,
query: Object.keys(query).length > 0 ? query : undefined,
fragment: fragment ? fragment.substring(1) : undefined,
};
};
exports.parseURL = parseURL;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xpYi9zY2hlbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBT08sTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEdBQVcsRUFBVSxFQUFFO0lBQ3pELE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDNUMsTUFBTSxpQkFBaUIsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWpELElBQUksaUJBQWlCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMzQixNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQzNELE1BQU0sbUJBQW1CLEdBQUcsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0QsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsR0FBRyxtQkFBbUIsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDbkcsQ0FBQztTQUFNLENBQUM7UUFDSixNQUFNLG1CQUFtQixHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFELE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLEdBQUcsbUJBQW1CLENBQUM7SUFDOUQsQ0FBQztBQUNMLENBQUMsQ0FBQTtBQWJZLFFBQUEscUJBQXFCLHlCQWFqQztBQUNNLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBVyxFQUFvQixFQUFFO0lBQ3RELE1BQU0sVUFBVSxHQUFHLElBQUEsNkJBQXFCLEVBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7SUFDcEQsb0dBQW9HO0lBQ3BHLE1BQU0sVUFBVSxHQUFHLDBGQUEwRixDQUFBO0lBQzdHLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDMUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1QsT0FBTyxJQUFJLENBQUE7SUFDZixDQUFDO0lBRUQsK0JBQStCO0lBQy9CLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUE7SUFFM0QsZ0NBQWdDO0lBQ2hDLE1BQU0sS0FBSyxHQUEyQixFQUFFLENBQUE7SUFDeEMsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNkLFdBQVc7YUFDTixTQUFTLENBQUMsQ0FBQyxDQUFDO2FBQ1osS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUNWLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2YsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM1RSxDQUFDLENBQUMsQ0FBQTtJQUNWLENBQUM7SUFFRCxxQ0FBcUM7SUFDckMsT0FBTztRQUNILE1BQU07UUFDTixJQUFJLEVBQUUsSUFBSSxJQUFJLFNBQVM7UUFDdkIsSUFBSSxFQUFFLElBQUksSUFBSSxTQUFTO1FBQ3ZCLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUztRQUN4RCxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO0tBQ3pELENBQUE7QUFDTCxDQUFDLENBQUE7QUFoQ1ksUUFBQSxRQUFRLFlBZ0NwQiJ9