Files
2025-07-19 19:59:04 +08:00

51 lines
2.0 KiB
JavaScript

"use strict";
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.addTrailingSlash = addTrailingSlash;
exports.default = applyTrailingSlash;
exports.addLeadingSlash = addLeadingSlash;
exports.removeTrailingSlash = removeTrailingSlash;
const stringUtils_1 = require("./stringUtils");
function addTrailingSlash(str) {
return str.endsWith('/') ? str : `${str}/`;
}
// Trailing slash handling depends in some site configuration options
function applyTrailingSlash(path, options) {
const { trailingSlash, baseUrl } = options;
if (path.startsWith('#')) {
// Never apply trailing slash to an anchor link
return path;
}
function handleTrailingSlash(str, trailing) {
return trailing ? addTrailingSlash(str) : removeTrailingSlash(str);
}
// undefined = legacy retrocompatible behavior
if (typeof trailingSlash === 'undefined') {
return path;
}
// The trailing slash should be handled before the ?search#hash !
const [pathname] = path.split(/[#?]/);
// Never transform '/' to ''
// Never remove the baseUrl trailing slash!
// If baseUrl = /myBase/, we want to emit /myBase/index.html and not
// /myBase.html! See https://github.com/facebook/docusaurus/issues/5077
const shouldNotApply = pathname === '/' || pathname === baseUrl;
const newPathname = shouldNotApply
? pathname
: handleTrailingSlash(pathname, trailingSlash);
return path.replace(pathname, newPathname);
}
/** Appends a leading slash to `str`, if one doesn't exist. */
function addLeadingSlash(str) {
return (0, stringUtils_1.addPrefix)(str, '/');
}
/** Removes the trailing slash from `str`. */
function removeTrailingSlash(str) {
return (0, stringUtils_1.removeSuffix)(str, '/');
}
//# sourceMappingURL=applyTrailingSlash.js.map