From 31c4920d00f9450cea429f7e9cdbc8b70f8ef505 Mon Sep 17 00:00:00 2001 From: "Mr.Hope" Date: Fri, 21 Apr 2023 12:59:12 +0800 Subject: [PATCH 1/2] perf(shared): avoid using regexp match --- packages/shared/src/utils/ensureEndingSlash.ts | 2 +- packages/shared/src/utils/ensureLeadingSlash.ts | 2 +- packages/shared/src/utils/removeEndingSlash.ts | 3 ++- packages/shared/src/utils/removeLeadingSlash.ts | 2 +- packages/shared/src/utils/resolveRoutePathFromUrl.ts | 11 +++++++---- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/packages/shared/src/utils/ensureEndingSlash.ts b/packages/shared/src/utils/ensureEndingSlash.ts index f058fbf12e..678f3eeefc 100644 --- a/packages/shared/src/utils/ensureEndingSlash.ts +++ b/packages/shared/src/utils/ensureEndingSlash.ts @@ -2,4 +2,4 @@ * Ensure a url string to have ending slash / */ export const ensureEndingSlash = (str: string): string => - /(\.html|\/)$/.test(str) ? str : str + '/' + str[str.length - 1] === '/' || str.endsWith('.html') ? str : `${str}/` diff --git a/packages/shared/src/utils/ensureLeadingSlash.ts b/packages/shared/src/utils/ensureLeadingSlash.ts index b2446b63c3..1d574a86b4 100644 --- a/packages/shared/src/utils/ensureLeadingSlash.ts +++ b/packages/shared/src/utils/ensureLeadingSlash.ts @@ -2,4 +2,4 @@ * Ensure a url string to have leading slash / */ export const ensureLeadingSlash = (str: string): string => - str.replace(/^\/?/, '/') + str[0] === '/' ? str : `/${str}` diff --git a/packages/shared/src/utils/removeEndingSlash.ts b/packages/shared/src/utils/removeEndingSlash.ts index a8ab2a8c05..38c12f8fe4 100644 --- a/packages/shared/src/utils/removeEndingSlash.ts +++ b/packages/shared/src/utils/removeEndingSlash.ts @@ -1,4 +1,5 @@ /** * Remove ending slash / from a string */ -export const removeEndingSlash = (str: string): string => str.replace(/\/$/, '') +export const removeEndingSlash = (str: string): string => + str[str.length - 1] === '/' ? str.slice(0, -1) : str diff --git a/packages/shared/src/utils/removeLeadingSlash.ts b/packages/shared/src/utils/removeLeadingSlash.ts index 1fb2a9a949..227c1dff5f 100644 --- a/packages/shared/src/utils/removeLeadingSlash.ts +++ b/packages/shared/src/utils/removeLeadingSlash.ts @@ -2,4 +2,4 @@ * Remove leading slash / from a string */ export const removeLeadingSlash = (str: string): string => - str.replace(/^\//, '') + str[0] === '/' ? str.slice(1) : str diff --git a/packages/shared/src/utils/resolveRoutePathFromUrl.ts b/packages/shared/src/utils/resolveRoutePathFromUrl.ts index 3781f0828c..05553bd65f 100644 --- a/packages/shared/src/utils/resolveRoutePathFromUrl.ts +++ b/packages/shared/src/utils/resolveRoutePathFromUrl.ts @@ -1,6 +1,9 @@ -export const resolveRoutePathFromUrl = (url: string, base = '/'): string => - url +export const resolveRoutePathFromUrl = (url: string, base = '/'): string => { + const pathname = url // remove url origin .replace(/^(https?:)?\/\/[^/]*/, '') - // remove site base - .replace(new RegExp(`^${base}`), '/') + + return pathname.startsWith(base) + ? `/${pathname.slice(base.length)}` + : pathname +} From 1a0d7cfb171ca6d0dbf9d409bbb9f93b5157c18f Mon Sep 17 00:00:00 2001 From: "Mr.Hope" Date: Fri, 21 Apr 2023 13:00:21 +0800 Subject: [PATCH 2/2] chore: add comment --- packages/shared/src/utils/resolveRoutePathFromUrl.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/shared/src/utils/resolveRoutePathFromUrl.ts b/packages/shared/src/utils/resolveRoutePathFromUrl.ts index 05553bd65f..da25efd99c 100644 --- a/packages/shared/src/utils/resolveRoutePathFromUrl.ts +++ b/packages/shared/src/utils/resolveRoutePathFromUrl.ts @@ -3,6 +3,7 @@ export const resolveRoutePathFromUrl = (url: string, base = '/'): string => { // remove url origin .replace(/^(https?:)?\/\/[^/]*/, '') + // remove site base return pathname.startsWith(base) ? `/${pathname.slice(base.length)}` : pathname