@astrojs/starlight
Version:
Build beautiful, high-performance documentation websites with Astro
59 lines (50 loc) • 1.89 kB
text/typescript
/** Ensure the passed path starts with a leading slash. */
export function ensureLeadingSlash(href: string): string {
if (href[0] !== '/') href = '/' + href;
return href;
}
/** Ensure the passed path ends with a trailing slash. */
export function ensureTrailingSlash(href: string): string {
if (href[href.length - 1] !== '/') href += '/';
return href;
}
/** Ensure the passed path starts and ends with slashes. */
export function ensureLeadingAndTrailingSlashes(href: string): string {
href = ensureLeadingSlash(href);
href = ensureTrailingSlash(href);
return href;
}
/** Ensure the passed path does not start with a leading slash. */
export function stripLeadingSlash(href: string) {
if (href[0] === '/') href = href.slice(1);
return href;
}
/** Ensure the passed path does not end with a trailing slash. */
export function stripTrailingSlash(href: string) {
if (href[href.length - 1] === '/') href = href.slice(0, -1);
return href;
}
/** Ensure the passed path does not start and end with slashes. */
export function stripLeadingAndTrailingSlashes(href: string): string {
href = stripLeadingSlash(href);
href = stripTrailingSlash(href);
return href;
}
/** Remove the extension from a path. */
export function stripHtmlExtension(path: string) {
const pathWithoutTrailingSlash = stripTrailingSlash(path);
return pathWithoutTrailingSlash.endsWith('.html') ? pathWithoutTrailingSlash.slice(0, -5) : path;
}
/** Add '.html' extension to a path. */
export function ensureHtmlExtension(path: string) {
path = stripLeadingAndTrailingSlashes(path);
if (!path.endsWith('.html')) {
path = path ? path + '.html' : '/index.html';
}
return ensureLeadingSlash(path);
}
/** Remove the extension from a path. */
export function stripExtension(path: string) {
const periodIndex = path.lastIndexOf('.');
return path.slice(0, periodIndex > -1 ? periodIndex : undefined);
}