Skip to content

Commit

Permalink
Explicitly uses user provided urls and paths without modification
Browse files Browse the repository at this point in the history
BREAKING CHANGE: leading/trailing slashes are not modified in urls and paths
  • Loading branch information
ygrishajev committed Jun 30, 2022
1 parent 7f76635 commit 98309fb
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 21 deletions.
4 changes: 2 additions & 2 deletions packages/toolkit/src/query/tests/errorHandling.test.tsx
Expand Up @@ -459,10 +459,10 @@ describe('error handling in a component', () => {
baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
endpoints: (build) => ({
update: build.mutation<typeof mockSuccessResponse, any>({
query: () => ({ url: 'success' }),
query: () => ({ url: '/success' }),
}),
failedUpdate: build.mutation<typeof mockSuccessResponse, any>({
query: () => ({ url: 'error' }),
query: () => ({ url: '/error' }),
}),
}),
})
Expand Down
2 changes: 1 addition & 1 deletion packages/toolkit/src/query/tests/queryFn.test.tsx
Expand Up @@ -319,7 +319,7 @@ describe('usage scenario tests', () => {
throw randomResult.error
}
const post = randomResult.data as Post
const result = await fetchWithBQ(`/post/${post.id}`)
const result = await fetchWithBQ(`post/${post.id}`)
return result.data
? { data: result.data as Post }
: { error: result.error as FetchBaseQueryError }
Expand Down
16 changes: 9 additions & 7 deletions packages/toolkit/src/query/tests/utils.test.ts
Expand Up @@ -75,29 +75,31 @@ describe('isDocumentVisible', () => {

describe('joinUrls', () => {
test('correctly joins variations of relative urls', () => {
expect(joinUrls('/api/', '/banana')).toBe('/api/banana')
expect(joinUrls('/api/', 'banana')).toBe('/api/banana')

expect(joinUrls('/api', 'banana')).toBe('/api/banana')
expect(joinUrls('/api', '/banana/')).toBe('/api/banana/')

expect(joinUrls('', '/banana')).toBe('/banana')
expect(joinUrls('', 'banana')).toBe('banana')

expect(joinUrls('/api', '?foo=bar')).toBe('/api?foo=bar')
})

test('correctly joins variations of absolute urls', () => {
expect(joinUrls('https://example.com/api', 'banana')).toBe(
'https://example.com/api/banana'
)
expect(joinUrls('https://example.com/api', '/banana')).toBe(
'https://example.com/api/banana'
)

expect(joinUrls('https://example.com/api/', 'banana')).toBe(
'https://example.com/api/banana'
)
expect(joinUrls('https://example.com/api/', '/banana/')).toBe(
'https://example.com/api/banana/'

expect(joinUrls('https://example.com/api/', '?foo=bar')).toBe(
'https://example.com/api/?foo=bar'
)

expect(joinUrls('https://example.com/api', '?foo=bar')).toBe(
'https://example.com/api?foo=bar'
)
})
})
Expand Down
13 changes: 2 additions & 11 deletions packages/toolkit/src/query/utils/joinUrls.ts
@@ -1,12 +1,6 @@
import { isAbsoluteUrl } from './isAbsoluteUrl'

const withoutTrailingSlash = (url: string) => url.replace(/\/$/, '')
const withoutLeadingSlash = (url: string) => url.replace(/^\//, '')

export function joinUrls(
base: string | undefined,
url: string | undefined
): string {
export function joinUrls(base?: string, url?: string): string {
if (!base) {
return url!
}
Expand All @@ -18,8 +12,5 @@ export function joinUrls(
return url
}

base = withoutTrailingSlash(base)
url = withoutLeadingSlash(url)

return `${base}/${url}`
return `${base}${url}`;
}

0 comments on commit 98309fb

Please sign in to comment.