| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- function encodePagePath(path) {
- const paths = path.split('/');
- paths.forEach((item, index) => {
- paths[index] = encodeURIComponent(item);
- });
- return paths.join('/');
- }
- function encodePagesPath(pages) {
- pages.forEach((page) => {
- if (!page.path) {
- return;
- }
- page.path = encodePagePath(page.path);
- });
- return pages;
- }
- function matchSlashes(path) {
- // https://regex101.com/r/Z21fEd/5
- return path.match(/^((\/+)?(.+?))(\/+)?$/);
- }
- function hasHeadingSlash(path) {
- const match = matchSlashes(path);
- return (match[2] != null);
- }
- function hasTrailingSlash(path) {
- const match = matchSlashes(path);
- return (match[4] != null);
- }
- function addHeadingSlash(path) {
- if (path === '/') {
- return path;
- }
- if (!hasHeadingSlash(path)) {
- return `/${path}`;
- }
- return path;
- }
- function addTrailingSlash(path) {
- if (path === '/') {
- return path;
- }
- if (!hasTrailingSlash(path)) {
- return `${path}/`;
- }
- return path;
- }
- function removeTrailingSlash(path) {
- if (path === '/') {
- return path;
- }
- const match = matchSlashes(path);
- return match[1];
- }
- function normalizePath(path) {
- const match = matchSlashes(path);
- if (match == null) {
- return '/';
- }
- return `/${match[3]}`;
- }
- module.exports = {
- encodePagePath,
- encodePagesPath,
- hasHeadingSlash,
- hasTrailingSlash,
- addHeadingSlash,
- addTrailingSlash,
- removeTrailingSlash,
- normalizePath,
- };
|