Skip to content

Commit 4903e48

Browse files
authored
Fix optional refs (#11)
1 parent 44e2a48 commit 4903e48

File tree

4 files changed

+39
-0
lines changed

4 files changed

+39
-0
lines changed

src/rules/require-openapi/rule.test.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ ruleTester.run(ruleName, rule, {
2323
test('optional-no-openapi'),
2424
test('reference'),
2525
test('object-shape-reference'),
26+
test('object-property-reference-optional'),
2627
],
2728
invalid: [
2829
{
@@ -37,5 +38,9 @@ ruleTester.run(ruleName, rule, {
3738
...test('object-extend'),
3839
errors: [{ messageId: 'open-api-required' }],
3940
},
41+
{
42+
...test('object-property-optional'),
43+
errors: [{ messageId: 'open-api-required' }],
44+
},
4045
],
4146
});

src/rules/require-openapi/rule.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,15 @@ export const rule: TSESLint.RuleModule<any, any> = createRule({
5151
return;
5252
}
5353

54+
if (
55+
type.name.startsWith('ZodOptional') &&
56+
node.value.type === 'CallExpression' &&
57+
node.value.callee.type === 'MemberExpression' &&
58+
node.value.callee.object.type === 'Identifier'
59+
) {
60+
return;
61+
}
62+
5463
const openApiCallExpression = findOpenApiCallExpression(node);
5564

5665
if (!openApiCallExpression) {
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { z } from 'zod';
2+
import { extendZodWithOpenApi } from 'zod-openapi';
3+
4+
extendZodWithOpenApi(z);
5+
6+
export const ZodObject = z
7+
.object({
8+
prop: z.string().optional(),
9+
})
10+
.openapi({ description: 'object description' });
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { z } from 'zod';
2+
import { extendZodWithOpenApi } from 'zod-openapi';
3+
4+
extendZodWithOpenApi(z);
5+
6+
/**
7+
* string description
8+
*/
9+
const ZodString = z.string().openapi({ description: 'string description' });
10+
11+
export const ZodObject = z
12+
.object({
13+
prop: ZodString.optional(),
14+
})
15+
.openapi({ description: 'object description' });

0 commit comments

Comments
 (0)