fix: correct URLs of OperationModel servers for static site generation (#2081)

Co-authored-by: paza0322 <pavel.zagorodniuk@netcracker.com>
This commit is contained in:
Pavel Zagorodnyuk 2022-07-22 18:33:58 +03:00 committed by GitHub
parent d7a1ec11d4
commit b1afd08bcf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 3 deletions

View File

@ -425,6 +425,24 @@ describe('Utils', () => {
expect(res).toEqual([{ url: 'https://base.com/sandbox/test', description: 'test' }]);
});
it('should remove query string and hash from url', () => {
const originalWindow = { ...window };
const windowSpy: jest.SpyInstance = jest.spyOn(global, 'window', 'get');
windowSpy.mockImplementation(() => ({
...originalWindow,
location: {
...originalWindow.location,
href: 'https://base.com/subpath/?param=value#tag',
},
}));
const res = normalizeServers(undefined, [
{
url: 'sandbox/test',
},
]);
expect(res).toEqual([{ url: 'https://base.com/subpath/sandbox/test', description: '' }]);
});
it('should expand variables', () => {
const servers = normalizeServers('', [
{

View File

@ -179,10 +179,11 @@ export function titleize(text: string) {
return text.charAt(0).toUpperCase() + text.slice(1);
}
export function removeQueryString(serverUrl: string): string {
export function removeQueryStringAndHash(serverUrl: string): string {
try {
const url = parseURL(serverUrl);
url.search = '';
url.hash = '';
return url.toString();
} catch (e) {
// when using with redoc-cli serverUrl can be empty resulting in crash

View File

@ -16,7 +16,7 @@ import {
Referenced,
} from '../types';
import { IS_BROWSER } from './dom';
import { isNumeric, removeQueryString, resolveUrl, isArray, isBoolean } from './helpers';
import { isNumeric, removeQueryStringAndHash, resolveUrl, isArray, isBoolean } from './helpers';
function isWildcardStatusCode(statusCode: string | number): statusCode is string {
return typeof statusCode === 'string' && /\dxx/i.test(statusCode);
@ -606,7 +606,7 @@ export function normalizeServers(
return href.endsWith('.html') ? dirname(href) : href;
};
const baseUrl = specUrl === undefined ? removeQueryString(getHref()) : dirname(specUrl);
const baseUrl = specUrl === undefined ? removeQueryStringAndHash(getHref()) : dirname(specUrl);
if (servers.length === 0) {
// Behaviour defined in OpenAPI spec: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#openapi-object