UNPKG

@angular/build

Version:

Official build system for Angular

122 lines 3.91 kB
"use strict"; /** * @license * Copyright Google LLC All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.dev/license */ Object.defineProperty(exports, "__esModule", { value: true }); exports.stripTrailingSlash = stripTrailingSlash; exports.stripLeadingSlash = stripLeadingSlash; exports.addLeadingSlash = addLeadingSlash; exports.addTrailingSlash = addTrailingSlash; exports.joinUrlParts = joinUrlParts; /** * Removes the trailing slash from a URL if it exists. * * @param url - The URL string from which to remove the trailing slash. * @returns The URL string without a trailing slash. * * @example * ```js * stripTrailingSlash('path/'); // 'path' * stripTrailingSlash('/path'); // '/path' * stripTrailingSlash('/'); // '/' * stripTrailingSlash(''); // '' * ``` */ function stripTrailingSlash(url) { // Check if the last character of the URL is a slash return url.length > 1 && url.at(-1) === '/' ? url.slice(0, -1) : url; } /** * Removes the leading slash from a URL if it exists. * * @param url - The URL string from which to remove the leading slash. * @returns The URL string without a leading slash. * * @example * ```js * stripLeadingSlash('/path'); // 'path' * stripLeadingSlash('/path/'); // 'path/' * stripLeadingSlash('/'); // '/' * stripLeadingSlash(''); // '' * ``` */ function stripLeadingSlash(url) { // Check if the first character of the URL is a slash return url.length > 1 && url[0] === '/' ? url.slice(1) : url; } /** * Adds a leading slash to a URL if it does not already have one. * * @param url - The URL string to which the leading slash will be added. * @returns The URL string with a leading slash. * * @example * ```js * addLeadingSlash('path'); // '/path' * addLeadingSlash('/path'); // '/path' * ``` */ function addLeadingSlash(url) { // Check if the URL already starts with a slash return url[0] === '/' ? url : `/${url}`; } /** * Adds a trailing slash to a URL if it does not already have one. * * @param url - The URL string to which the trailing slash will be added. * @returns The URL string with a trailing slash. * * @example * ```js * addTrailingSlash('path'); // 'path/' * addTrailingSlash('path/'); // 'path/' * ``` */ function addTrailingSlash(url) { // Check if the URL already end with a slash return url.at(-1) === '/' ? url : `${url}/`; } /** * Joins URL parts into a single URL string. * * This function takes multiple URL segments, normalizes them by removing leading * and trailing slashes where appropriate, and then joins them into a single URL. * * @param parts - The parts of the URL to join. Each part can be a string with or without slashes. * @returns The joined URL string, with normalized slashes. * * @example * ```js * joinUrlParts('path/', '/to/resource'); // '/path/to/resource' * joinUrlParts('/path/', 'to/resource'); // '/path/to/resource' * joinUrlParts('http://localhost/path/', 'to/resource'); // 'http://localhost/path/to/resource' * joinUrlParts('', ''); // '/' * ``` */ function joinUrlParts(...parts) { const normalizeParts = []; for (const part of parts) { if (part === '') { // Skip any empty parts continue; } let normalizedPart = part; if (part[0] === '/') { normalizedPart = normalizedPart.slice(1); } if (part.at(-1) === '/') { normalizedPart = normalizedPart.slice(0, -1); } if (normalizedPart !== '') { normalizeParts.push(normalizedPart); } } const protocolMatch = normalizeParts.length && /^https?:\/\//.test(normalizeParts[0]); const joinedParts = normalizeParts.join('/'); return protocolMatch ? joinedParts : addLeadingSlash(joinedParts); } //# sourceMappingURL=url.js.map