Skip to content

Commit 486e1ea

Browse files
committed
feat: 支持工具函数Required
1 parent 4e51407 commit 486e1ea

File tree

5 files changed

+159
-3
lines changed

5 files changed

+159
-3
lines changed

jest/toolfn.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,26 @@ interface AAA {
33
b: string;
44
c: boolean;
55
}
6-
76
interface BBB {
87
a: number;
98
b?: string;
109
c: AAA,
1110
}
1211

12+
interface CCC {
13+
a?: number;
14+
b?: string;
15+
c?: boolean;
16+
}
17+
18+
interface DDD {
19+
a: number;
20+
b?: string;
21+
c: CCC,
22+
}
23+
24+
25+
1326
type ToolFn_1 = Omit<{ a: number; b: string; c: boolean }, 'b'>;
1427

1528
type ToolFn_2 = Omit<{ a: number; b: string; c: boolean }, 'b' | 'c'>;
@@ -84,3 +97,9 @@ type ToolFn_18 = Partial<AAA>;
8497
type ToolFn_19 = Partial<BBB>;
8598

8699
type ToolFn_20 = Partial<{ a: string, b: BBB }>;
100+
101+
type ToolFn_21 = Required<CCC>;
102+
103+
type ToolFn_22 = Required<DDD>;
104+
105+
type ToolFn_23 = Required<{ a?: string, b?: DDD }>;

src/__tests__/__snapshots__/toolfn.test.ts.snap

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,3 +289,120 @@ Object {
289289
"type": "object",
290290
}
291291
`;
292+
293+
exports[`工具函数Required_1 1`] = `
294+
Object {
295+
"additionalProperties": false,
296+
"properties": Object {
297+
"a": Object {
298+
"type": "number",
299+
},
300+
"b": Object {
301+
"type": "string",
302+
},
303+
"c": Object {
304+
"type": "boolean",
305+
},
306+
},
307+
"required": Array [
308+
"a",
309+
"b",
310+
"c",
311+
],
312+
"type": "object",
313+
}
314+
`;
315+
316+
exports[`工具函数Required_2 1`] = `
317+
Object {
318+
"additionalProperties": false,
319+
"definitions": Object {
320+
"CCC": Object {
321+
"additionalProperties": false,
322+
"properties": Object {
323+
"a": Object {
324+
"type": "number",
325+
},
326+
"b": Object {
327+
"type": "string",
328+
},
329+
"c": Object {
330+
"type": "boolean",
331+
},
332+
},
333+
"type": "object",
334+
},
335+
},
336+
"properties": Object {
337+
"a": Object {
338+
"type": "number",
339+
},
340+
"b": Object {
341+
"type": "string",
342+
},
343+
"c": Object {
344+
"$ref": "#/definitions/CCC",
345+
},
346+
},
347+
"required": Array [
348+
"a",
349+
"b",
350+
"c",
351+
],
352+
"type": "object",
353+
}
354+
`;
355+
356+
exports[`工具函数Required_3 1`] = `
357+
Object {
358+
"definitions": Object {
359+
"CCC": Object {
360+
"additionalProperties": false,
361+
"properties": Object {
362+
"a": Object {
363+
"type": "number",
364+
},
365+
"b": Object {
366+
"type": "string",
367+
},
368+
"c": Object {
369+
"type": "boolean",
370+
},
371+
},
372+
"type": "object",
373+
},
374+
"DDD": Object {
375+
"additionalProperties": false,
376+
"properties": Object {
377+
"a": Object {
378+
"type": "number",
379+
},
380+
"b": Object {
381+
"type": "string",
382+
},
383+
"c": Object {
384+
"$ref": "#/definitions/CCC",
385+
},
386+
},
387+
"required": Array [
388+
"a",
389+
"c",
390+
],
391+
"type": "object",
392+
},
393+
},
394+
"properties": Object {
395+
"a": Object {
396+
"type": "string",
397+
},
398+
"b": Object {
399+
"$ref": "#/definitions/DDD",
400+
},
401+
},
402+
"required": Array [
403+
"a",
404+
"b",
405+
],
406+
"type": "object",
407+
}
408+
`;

src/__tests__/toolfn.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,4 +101,16 @@ test('工具函数Partial_2', () => {
101101

102102
test('工具函数Partial_3', () => {
103103
expect(getSchema('ToolFn_20')).toMatchSnapshot();
104+
});
105+
106+
test('工具函数Required_1', () => {
107+
expect(getSchema('ToolFn_21')).toMatchSnapshot();
108+
});
109+
110+
test('工具函数Required_2', () => {
111+
expect(getSchema('ToolFn_22')).toMatchSnapshot();
112+
});
113+
114+
test('工具函数Required_3', () => {
115+
expect(getSchema('ToolFn_23')).toMatchSnapshot();
104116
});

src/get-jsonschema-from-data.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export default class genTypeSchema extends typescriptToFileDatas {
2020

2121
constructor() {
2222
super();
23-
this.tsTollFn = ['Omit', 'Pick', 'Record', 'Partial'];
23+
this.tsTollFn = ['Omit', 'Pick', 'Record', 'Partial', 'Required'];
2424
}
2525

2626
/**
@@ -479,6 +479,13 @@ export default class genTypeSchema extends typescriptToFileDatas {
479479
delete resType.required;
480480
return resType;
481481
}
482+
if (key === 'Required') {
483+
delete resType.required;
484+
if (resType.properties) {
485+
resType.required = Object.keys(resType.properties)
486+
}
487+
return resType;
488+
}
482489
}
483490
};
484491

@@ -550,6 +557,7 @@ export default class genTypeSchema extends typescriptToFileDatas {
550557
case 'Record':
551558
return RecordHandle(key, type, extra);
552559
case 'Partial':
560+
case 'Required':
553561
return PartialRequiredHandle(key, $ref ? { $ref } : items);
554562
default:
555563
item.items = items;

src/typescript-to-file-datas.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export default class typescriptToFileDatas {
3434
this.jsonData = {};
3535
this.cacheFiles = [];
3636
this.filterFiles = [];
37-
this.filterRefKeywords = ['Omit', 'Pick', 'Record', 'Partial', 'Array', 'Promise'];
37+
this.filterRefKeywords = ['Omit', 'Pick', 'Record', 'Partial', 'Required', 'Array', 'Promise'];
3838
}
3939

4040
/**

0 commit comments

Comments
 (0)