Skip to content

Commit 0a27f89

Browse files
committed
test: 支持指定 axios 类型导入文件
1 parent 039d16d commit 0a27f89

File tree

4 files changed

+87
-33
lines changed

4 files changed

+87
-33
lines changed

test/example-dest/2.0/pet-store.ts

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,26 @@
55
* @description This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.
66
*/
77

8-
import axios from "axios";
9-
import type {AxiosRequestConfig, AxiosPromise} from "axios";
8+
import {axios as axios} from "axios";
9+
import {type AxiosRequestConfig as AxiosRequestConfig} from "axios";
10+
import {type AxiosPromise as AxiosPromise} from "axios";
1011

1112

1213

1314
// helpers --- start
15+
type OneOf<T extends unknown[]> = T extends [infer A, ...infer B] ? A | OneOf<B> : never;
16+
type AllOf<T extends unknown[]> = T extends [infer A, ...infer B] ? A & AllOf<B> : unknown;
1417
type AnyOf<T extends unknown[]> = T extends [infer A, ...infer B] ? A | AnyOf<B> | (A & AnyOf<B>) : never;
1518
type UnknownObject = Record<string, unknown>;
1619
type DeepGet<O, K> = K extends [infer P, ...infer R]
17-
? O extends Record<string, unknown> | Array<unknown>
18-
? P extends keyof O
19-
? R['length'] extends 0
20-
? O[P]
21-
: DeepGet<NonNullable<O[P]>, R>
22-
: never
23-
: never
24-
: never;
20+
? O extends Record<string, any> | Array<any>
21+
? P extends keyof O
22+
? R['length'] extends 0
23+
? O[P]
24+
: DeepGet<NonNullable<O[P]>, R>
25+
: never
26+
: never
27+
: never;
2528
// helpers --- end
2629

2730

test/example-dest/3.0/pet-store.ts

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,26 @@
1212
* - [The source API definition for the Pet Store](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/resources/openapi.yaml)
1313
*/
1414

15-
import axios from "axios";
16-
import type {AxiosRequestConfig, AxiosPromise} from "axios";
15+
import {axios as axios} from "axios";
16+
import {type AxiosRequestConfig as AxiosRequestConfig} from "axios";
17+
import {type AxiosPromise as AxiosPromise} from "axios";
1718

1819

1920

2021
// helpers --- start
22+
type OneOf<T extends unknown[]> = T extends [infer A, ...infer B] ? A | OneOf<B> : never;
23+
type AllOf<T extends unknown[]> = T extends [infer A, ...infer B] ? A & AllOf<B> : unknown;
2124
type AnyOf<T extends unknown[]> = T extends [infer A, ...infer B] ? A | AnyOf<B> | (A & AnyOf<B>) : never;
2225
type UnknownObject = Record<string, unknown>;
2326
type DeepGet<O, K> = K extends [infer P, ...infer R]
24-
? O extends Record<string, unknown> | Array<unknown>
25-
? P extends keyof O
26-
? R['length'] extends 0
27-
? O[P]
28-
: DeepGet<NonNullable<O[P]>, R>
29-
: never
30-
: never
31-
: never;
27+
? O extends Record<string, any> | Array<any>
28+
? P extends keyof O
29+
? R['length'] extends 0
30+
? O[P]
31+
: DeepGet<NonNullable<O[P]>, R>
32+
: never
33+
: never
34+
: never;
3235
// helpers --- end
3336

3437

test/example-dest/3.1/pet-store.ts

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,26 @@
99
* @see {@link http://swagger.io Find out more about Swagger}
1010
*/
1111

12-
import axios from "axios";
13-
import type {AxiosRequestConfig, AxiosPromise} from "axios";
12+
import {axios as axios} from "axios";
13+
import {type AxiosRequestConfig as AxiosRequestConfig} from "axios";
14+
import {type AxiosPromise as AxiosPromise} from "axios";
1415

1516

1617

1718
// helpers --- start
19+
type OneOf<T extends unknown[]> = T extends [infer A, ...infer B] ? A | OneOf<B> : never;
20+
type AllOf<T extends unknown[]> = T extends [infer A, ...infer B] ? A & AllOf<B> : unknown;
1821
type AnyOf<T extends unknown[]> = T extends [infer A, ...infer B] ? A | AnyOf<B> | (A & AnyOf<B>) : never;
1922
type UnknownObject = Record<string, unknown>;
2023
type DeepGet<O, K> = K extends [infer P, ...infer R]
21-
? O extends Record<string, unknown> | Array<unknown>
22-
? P extends keyof O
23-
? R['length'] extends 0
24-
? O[P]
25-
: DeepGet<NonNullable<O[P]>, R>
26-
: never
27-
: never
28-
: never;
24+
? O extends Record<string, any> | Array<any>
25+
? P extends keyof O
26+
? R['length'] extends 0
27+
? O[P]
28+
: DeepGet<NonNullable<O[P]>, R>
29+
: never
30+
: never
31+
: never;
2932
// helpers --- end
3033

3134

test/printer/config.test.ts renamed to test/printer/options.test.ts

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ it('axios 模块导入名称默认', () => {
1919
hideHelpers: true,
2020
})).toMatchInlineSnapshot(`
2121
"import {axios as axios} from "axios";
22-
import type {AxiosRequestConfig, AxiosPromise} from "axios";
22+
import {type AxiosRequestConfig as AxiosRequestConfig} from "axios";
23+
import {type AxiosPromise as AxiosPromise} from "axios";
2324
2425
2526
/**
@@ -55,7 +56,8 @@ it('axios 模块导入名称指定', () => {
5556
hideHelpers: true,
5657
})).toMatchInlineSnapshot(`
5758
"import {axios2 as axios} from "axios";
58-
import type {AxiosRequestConfig, AxiosPromise} from "axios";
59+
import {type AxiosRequestConfig as AxiosRequestConfig} from "axios";
60+
import {type AxiosPromise as AxiosPromise} from "axios";
5961
6062
6163
/**
@@ -91,7 +93,50 @@ it('axios 默认导入名称为空', () => {
9193
hideHelpers: true,
9294
})).toMatchInlineSnapshot(`
9395
"import axios from "axios";
94-
import type {AxiosRequestConfig, AxiosPromise} from "axios";
96+
import {type AxiosRequestConfig as AxiosRequestConfig} from "axios";
97+
import {type AxiosPromise as AxiosPromise} from "axios";
98+
99+
100+
/**
101+
* @param [config] request config
102+
*/
103+
export async function get_2(config?:AxiosRequestConfig): AxiosPromise<unknown> {
104+
return axios({
105+
method: "get",
106+
url: \`/\`,
107+
...config
108+
});
109+
}"
110+
`);
111+
});
112+
113+
it('axios 模块和类型指定文件', () => {
114+
const printer = new Printer({
115+
openapi: '3.1.0',
116+
info: {
117+
title: 'test',
118+
version: '1.0.0',
119+
},
120+
paths: {
121+
'/': {
122+
get: {},
123+
},
124+
},
125+
}, {
126+
axiosImportName: 'axios2',
127+
axiosImportFile: '/a/b/request.ts',
128+
axiosRequestConfigTypeName: 'AxiosRequestConfig2',
129+
axiosResponseTypeName: 'AxiosPromise2',
130+
axiosTypeImportFile: '/a/c/request-types.ts',
131+
});
132+
expect(printer.print({
133+
file: '/a/d/my-api.ts',
134+
hideInfo: true,
135+
hideHelpers: true,
136+
})).toMatchInlineSnapshot(`
137+
"import {axios2 as axios} from "../b/request.ts";
138+
import {type AxiosRequestConfig2 as AxiosRequestConfig} from "../c/request-types.ts";
139+
import {type AxiosPromise2 as AxiosPromise} from "../c/request-types.ts";
95140
96141
97142
/**

0 commit comments

Comments
 (0)