From fc72dd0b7e503c07e4788ebb7af6fb790c714035 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Thu, 7 Jul 2022 17:35:50 +0200 Subject: [PATCH] fix(withoutBase): preserve leading slash resolves #64 --- src/utils.ts | 7 ++++--- test/base.test.ts | 4 +++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/utils.ts b/src/utils.ts index dfc1193..bb706db 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -77,10 +77,11 @@ export function withoutBase (input: string, base: string) { return input } const _base = withoutTrailingSlash(base) - if (input.startsWith(_base)) { - return input.substr(_base.length) || '/' + if (!input.startsWith(_base)) { + return input } - return input + const trimmed = input.substring(_base.length) + return trimmed[0] === '/' ? trimmed : ('/' + trimmed) } export function withQuery (input: string, query: QueryObject): string { diff --git a/test/base.test.ts b/test/base.test.ts index 2bfbdb8..661471b 100644 --- a/test/base.test.ts +++ b/test/base.test.ts @@ -31,7 +31,9 @@ describe('withoutBase', () => { { base: '/base', input: '/base/a', out: '/a' }, { base: '/base/', input: '/base/a', out: '/a' }, { base: '/base/a/', input: '/base/a', out: '/' }, - { base: '/', input: '/test/', out: '/test/' } + { base: '/', input: '/test/', out: '/test/' }, + { base: '/', input: '/?test', out: '/?test' }, + { base: '/api', input: '/api?test', out: '/?test' } ] for (const t of tests) {