Merge pull request #793 from todesstoss/fix-get-ref-on-encoded-ref-path

Fix getRef on encoded  path, issue: https://github.com/ferdikoomen/op…
This commit is contained in:
Ferdi Koomen 2021-09-27 18:47:27 +02:00 committed by GitHub
commit 4f056c64aa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 0 deletions

View File

@ -34,4 +34,28 @@ describe('getRef', () => {
type: 'integer',
});
});
it('should produce correct result for encoded ref path', () => {
expect(
getRef(
{
openapi: '3.0',
info: {
title: 'dummy',
version: '1.0',
},
paths: {
'/api/user/{id}': {
description: 'This is an Example path',
},
},
},
{
$ref: '#/paths/~1api~1user~1%7Bid%7D',
}
)
).toEqual({
description: 'This is an Example path',
});
});
});

View File

@ -1,6 +1,9 @@
import type { OpenApi } from '../interfaces/OpenApi';
import type { OpenApiReference } from '../interfaces/OpenApiReference';
const escapedSlash = /~1/g;
const escapedTilde = /~0/g;
export function getRef<T>(openApi: OpenApi, item: T & OpenApiReference): T {
if (item.$ref) {
// Fetch the paths to the definitions, this converts:
@ -14,6 +17,7 @@ export function getRef<T>(openApi: OpenApi, item: T & OpenApiReference): T {
// if we cannot find it, then we throw an error.
let result: any = openApi;
paths.forEach((path: string): void => {
path = decodeURIComponent(path.replace(escapedSlash, '/').replace(escapedTilde, '~'));
if (result.hasOwnProperty(path)) {
result = result[path];
} else {