diff --git a/src/core/router/history/base.js b/src/core/router/history/base.js index 268cbb1f4..352aa0f03 100644 --- a/src/core/router/history/base.js +++ b/src/core/router/history/base.js @@ -1,10 +1,10 @@ import { + cleanPath, getPath, isAbsolutePath, - stringifyQuery, - cleanPath, replaceSlug, resolvePath, + stringifyQuery, } from '../util.js'; import { noop } from '../../util/core.js'; @@ -32,11 +32,19 @@ export class History { } #getFileName(path, ext) { - return new RegExp(`\\.(${ext.replace(/^\./, '')}|html)$`, 'g').test(path) - ? path - : /\/$/g.test(path) - ? `${path}README${ext}` - : `${path}${ext}`; + const [basePath, query] = path.split('?'); + + const hasValidExt = new RegExp(`\\.(${ext.replace(/^\./, '')}|html)$`).test( + basePath, + ); + + const updatedPath = hasValidExt + ? basePath + : /\/$/g.test(basePath) + ? `${basePath}README${ext}` + : `${basePath}${ext}`; + + return query ? `${updatedPath}?${query}` : updatedPath; } getBasePath() { diff --git a/test/unit/router-history-base.test.js b/test/unit/router-history-base.test.js index a486ed2db..58ff08246 100644 --- a/test/unit/router-history-base.test.js +++ b/test/unit/router-history-base.test.js @@ -66,4 +66,35 @@ describe('router/history/base', () => { expect(url).toBe('/README'); }); }); + + // getFile test + // --------------------------------------------------------------------------- + describe('getFile', () => { + // Tests + // ------------------------------------------------------------------------- + test('path is url', () => { + const file = history.getFile('https://some/raw/url/README.md'); + + expect(file).toBe('https://some/raw/url/README.md'); + }); + test('path is url, but ext is .html', () => { + const file = history.getFile('https://foo.com/index.html'); + + expect(file).toBe('https://foo.com/index.html'); + }); + test('path is url, but with parameters', () => { + const file = history.getFile( + 'https://some/raw/url/README.md?token=Mytoken', + ); + + expect(file).toBe('https://some/raw/url/README.md?token=Mytoken'); + }); + test('path is url, but ext is different', () => { + history = new MockHistory({ ext: '.ext' }); + + const file = history.getFile('https://some/raw/url/README.md'); + + expect(file).toBe('https://some/raw/url/README.md.ext'); + }); + }); });