Skip to content

Commit 2202fa0

Browse files
authored
Merge pull request #1728 from inversify/feat/add-swagger-ui-provider
Add 3.2 Swagger UI provider
2 parents fdd9173 + 1d010dc commit 2202fa0

20 files changed

+3992
-395
lines changed

.changeset/eager-adults-fail.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@inversifyjs/http-open-api": patch
3+
---
4+
5+
- Updated `mergeOpenApiTypeSchema` to properly handle property schema metadata edge case

.changeset/metal-worms-know.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@inversifyjs/http-open-api": minor
3+
---
4+
5+
- Added 3.2 `SwaggerUiProvider`
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import { describe, expectTypeOf, it } from 'vitest';
2+
3+
import {
4+
type OpenApi3Dot2OperationObject,
5+
type OpenApi3Dot2PathItemObject,
6+
} from '@inversifyjs/open-api-types/v3Dot2';
7+
8+
import { type FilteredByValueType } from './FilteredByValueType.js';
9+
10+
// eslint-disable-next-line vitest/prefer-describe-function-title
11+
describe('FilteredByValueType', () => {
12+
describe('having an object with optional properties of mixed types', () => {
13+
interface TestObject {
14+
bar?: number;
15+
baz?: string;
16+
foo?: string;
17+
record?: Record<string, string>;
18+
}
19+
20+
describe('when used with string as value type', () => {
21+
it('should only include keys with matching value type', () => {
22+
expectTypeOf<
23+
keyof FilteredByValueType<TestObject, string>
24+
>().toEqualTypeOf<'baz' | 'foo'>();
25+
});
26+
});
27+
});
28+
29+
describe('having OpenApi3Dot2PathItemObject', () => {
30+
describe('when used with OpenApi3Dot2OperationObject as value type', () => {
31+
it('should only include HTTP method keys', () => {
32+
expectTypeOf<
33+
keyof FilteredByValueType<
34+
OpenApi3Dot2PathItemObject,
35+
OpenApi3Dot2OperationObject
36+
>
37+
>().toEqualTypeOf<
38+
| 'delete'
39+
| 'get'
40+
| 'head'
41+
| 'options'
42+
| 'patch'
43+
| 'post'
44+
| 'put'
45+
| 'query'
46+
| 'trace'
47+
>();
48+
});
49+
50+
it('should not include additionalOperations', () => {
51+
expectTypeOf<
52+
FilteredByValueType<
53+
OpenApi3Dot2PathItemObject,
54+
OpenApi3Dot2OperationObject
55+
>
56+
>().not.toHaveProperty('additionalOperations');
57+
});
58+
});
59+
});
60+
});
Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
export type FilteredByValueType<TObject, TType> = {
2-
[TKey in keyof TObject as TObject[TKey] extends TType | undefined
3-
? TKey
4-
: never]: TObject[TKey] extends TType | undefined ? TObject[TKey] : never;
2+
[TKey in keyof TObject as NonNullable<TObject[TKey]> extends TType
3+
? string extends keyof NonNullable<TObject[TKey]>
4+
? string extends keyof TType
5+
? TKey
6+
: never
7+
: TKey
8+
: never]: TObject[TKey];
59
};

0 commit comments

Comments
 (0)