Skip to content

Commit 4296e36

Browse files
committed
fix: Fix the problem with untyped error
1 parent 13c682c commit 4296e36

File tree

8 files changed

+91
-48
lines changed

8 files changed

+91
-48
lines changed

src/visitor.ts

+10-4
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ const composeQueryHandler = (
5555

5656
codes.push(`use${pascalName}(${
5757
config.autogenKey ? '' : 'key: SWRKeyInterface, '
58-
}variables${optionalVariables}: ${variablesType}, config?: SWRConfigInterface<${responseType}>) {
59-
return useSWR<${responseType}>(${
58+
}variables${optionalVariables}: ${variablesType}, config?: SWRConfigInterface<${responseType}, ClientError>) {
59+
return useSWR<${responseType}, ClientError>(${
6060
config.autogenKey
6161
? `genKey<${variablesType}>('${pascalName}', variables)`
6262
: 'key'
@@ -66,8 +66,8 @@ const composeQueryHandler = (
6666
if (config.infinite) {
6767
codes.push(`use${pascalName}Infinite(${
6868
config.autogenKey ? '' : 'id: string, '
69-
}getKey: SWRInfiniteKeyLoader<${responseType}, ${variablesType}>, variables${optionalVariables}: ${variablesType}, config?: SWRInfiniteConfigInterface<${responseType}>) {
70-
return useSWRInfinite<${responseType}>(
69+
}getKey: SWRInfiniteKeyLoader<${responseType}, ${variablesType}>, variables${optionalVariables}: ${variablesType}, config?: SWRInfiniteConfigInterface<${responseType}, ClientError>) {
70+
return useSWRInfinite<${responseType}, ClientError>(
7171
utilsForInfinite.generateGetKey<${responseType}, ${variablesType}>(${
7272
config.autogenKey
7373
? `genKey<${variablesType}>('${pascalName}', variables)`
@@ -108,6 +108,12 @@ export class SWRVisitor extends ClientSideBaseVisitor<
108108

109109
autoBind(this)
110110

111+
const typeImport = this.config.useTypeImports ? 'import type' : 'import'
112+
113+
this._additionalImports.push(
114+
`${typeImport} { ClientError } from 'graphql-request/dist/types';`
115+
)
116+
111117
if (this.config.useTypeImports) {
112118
if (this._enabledInfinite) {
113119
this._additionalImports.push(

tests/outputs/autogenSWRKey.ts

+12-12
Original file line numberDiff line numberDiff line change
@@ -17,26 +17,26 @@ export function getSdkWithHooks(client: GraphQLClient, withWrapper: SdkFunctionW
1717
const genKey = <V extends Record<string, unknown> = Record<string, unknown>>(name: string, object: V = {} as V): SWRKeyInterface => [name, ...Object.keys(object).sort().map(key => object[key])];
1818
return {
1919
...sdk,
20-
useFeed(variables?: FeedQueryVariables, config?: SWRConfigInterface<FeedQuery>) {
21-
return useSWR<FeedQuery>(genKey<FeedQueryVariables>('Feed', variables), () => sdk.feed(variables), config);
20+
useFeed(variables?: FeedQueryVariables, config?: SWRConfigInterface<FeedQuery, ClientError>) {
21+
return useSWR<FeedQuery, ClientError>(genKey<FeedQueryVariables>('Feed', variables), () => sdk.feed(variables), config);
2222
},
23-
useFeed2(variables: Feed2QueryVariables, config?: SWRConfigInterface<Feed2Query>) {
24-
return useSWR<Feed2Query>(genKey<Feed2QueryVariables>('Feed2', variables), () => sdk.feed2(variables), config);
23+
useFeed2(variables: Feed2QueryVariables, config?: SWRConfigInterface<Feed2Query, ClientError>) {
24+
return useSWR<Feed2Query, ClientError>(genKey<Feed2QueryVariables>('Feed2', variables), () => sdk.feed2(variables), config);
2525
},
26-
useFeed2Infinite(getKey: SWRInfiniteKeyLoader<Feed2Query, Feed2QueryVariables>, variables: Feed2QueryVariables, config?: SWRInfiniteConfigInterface<Feed2Query>) {
27-
return useSWRInfinite<Feed2Query>(
26+
useFeed2Infinite(getKey: SWRInfiniteKeyLoader<Feed2Query, Feed2QueryVariables>, variables: Feed2QueryVariables, config?: SWRInfiniteConfigInterface<Feed2Query, ClientError>) {
27+
return useSWRInfinite<Feed2Query, ClientError>(
2828
utilsForInfinite.generateGetKey<Feed2Query, Feed2QueryVariables>(genKey<Feed2QueryVariables>('Feed2', variables), getKey),
2929
utilsForInfinite.generateFetcher<Feed2Query, Feed2QueryVariables>(sdk.feed2, variables),
3030
config);
3131
},
32-
useFeed3(variables?: Feed3QueryVariables, config?: SWRConfigInterface<Feed3Query>) {
33-
return useSWR<Feed3Query>(genKey<Feed3QueryVariables>('Feed3', variables), () => sdk.feed3(variables), config);
32+
useFeed3(variables?: Feed3QueryVariables, config?: SWRConfigInterface<Feed3Query, ClientError>) {
33+
return useSWR<Feed3Query, ClientError>(genKey<Feed3QueryVariables>('Feed3', variables), () => sdk.feed3(variables), config);
3434
},
35-
useFeed4(variables?: Feed4QueryVariables, config?: SWRConfigInterface<Feed4Query>) {
36-
return useSWR<Feed4Query>(genKey<Feed4QueryVariables>('Feed4', variables), () => sdk.feed4(variables), config);
35+
useFeed4(variables?: Feed4QueryVariables, config?: SWRConfigInterface<Feed4Query, ClientError>) {
36+
return useSWR<Feed4Query, ClientError>(genKey<Feed4QueryVariables>('Feed4', variables), () => sdk.feed4(variables), config);
3737
},
38-
useFeed4Infinite(getKey: SWRInfiniteKeyLoader<Feed4Query, Feed4QueryVariables>, variables?: Feed4QueryVariables, config?: SWRInfiniteConfigInterface<Feed4Query>) {
39-
return useSWRInfinite<Feed4Query>(
38+
useFeed4Infinite(getKey: SWRInfiniteKeyLoader<Feed4Query, Feed4QueryVariables>, variables?: Feed4QueryVariables, config?: SWRInfiniteConfigInterface<Feed4Query, ClientError>) {
39+
return useSWRInfinite<Feed4Query, ClientError>(
4040
utilsForInfinite.generateGetKey<Feed4Query, Feed4QueryVariables>(genKey<Feed4QueryVariables>('Feed4', variables), getKey),
4141
utilsForInfinite.generateFetcher<Feed4Query, Feed4QueryVariables>(sdk.feed4, variables),
4242
config);

tests/outputs/excludeQueries.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ export function getSdkWithHooks(client: GraphQLClient, withWrapper: SdkFunctionW
22
const sdk = getSdk(client, withWrapper);
33
return {
44
...sdk,
5-
useFeed(key: SWRKeyInterface, variables?: FeedQueryVariables, config?: SWRConfigInterface<FeedQuery>) {
6-
return useSWR<FeedQuery>(key, () => sdk.feed(variables), config);
5+
useFeed(key: SWRKeyInterface, variables?: FeedQueryVariables, config?: SWRConfigInterface<FeedQuery, ClientError>) {
6+
return useSWR<FeedQuery, ClientError>(key, () => sdk.feed(variables), config);
77
},
8-
useFeed4(key: SWRKeyInterface, variables?: Feed4QueryVariables, config?: SWRConfigInterface<Feed4Query>) {
9-
return useSWR<Feed4Query>(key, () => sdk.feed4(variables), config);
8+
useFeed4(key: SWRKeyInterface, variables?: Feed4QueryVariables, config?: SWRConfigInterface<Feed4Query, ClientError>) {
9+
return useSWR<Feed4Query, ClientError>(key, () => sdk.feed4(variables), config);
1010
}
1111
};
1212
}

tests/outputs/infinite.ts

+12-12
Original file line numberDiff line numberDiff line change
@@ -20,26 +20,26 @@ export function getSdkWithHooks(client: GraphQLClient, withWrapper: SdkFunctionW
2020
}
2121
return {
2222
...sdk,
23-
useFeed(key: SWRKeyInterface, variables?: FeedQueryVariables, config?: SWRConfigInterface<FeedQuery>) {
24-
return useSWR<FeedQuery>(key, () => sdk.feed(variables), config);
23+
useFeed(key: SWRKeyInterface, variables?: FeedQueryVariables, config?: SWRConfigInterface<FeedQuery, ClientError>) {
24+
return useSWR<FeedQuery, ClientError>(key, () => sdk.feed(variables), config);
2525
},
26-
useFeed2(key: SWRKeyInterface, variables: Feed2QueryVariables, config?: SWRConfigInterface<Feed2Query>) {
27-
return useSWR<Feed2Query>(key, () => sdk.feed2(variables), config);
26+
useFeed2(key: SWRKeyInterface, variables: Feed2QueryVariables, config?: SWRConfigInterface<Feed2Query, ClientError>) {
27+
return useSWR<Feed2Query, ClientError>(key, () => sdk.feed2(variables), config);
2828
},
29-
useFeed2Infinite(id: string, getKey: SWRInfiniteKeyLoader<Feed2Query, Feed2QueryVariables>, variables: Feed2QueryVariables, config?: SWRInfiniteConfigInterface<Feed2Query>) {
30-
return useSWRInfinite<Feed2Query>(
29+
useFeed2Infinite(id: string, getKey: SWRInfiniteKeyLoader<Feed2Query, Feed2QueryVariables>, variables: Feed2QueryVariables, config?: SWRInfiniteConfigInterface<Feed2Query, ClientError>) {
30+
return useSWRInfinite<Feed2Query, ClientError>(
3131
utilsForInfinite.generateGetKey<Feed2Query, Feed2QueryVariables>(id, getKey),
3232
utilsForInfinite.generateFetcher<Feed2Query, Feed2QueryVariables>(sdk.feed2, variables),
3333
config);
3434
},
35-
useFeed3(key: SWRKeyInterface, variables?: Feed3QueryVariables, config?: SWRConfigInterface<Feed3Query>) {
36-
return useSWR<Feed3Query>(key, () => sdk.feed3(variables), config);
35+
useFeed3(key: SWRKeyInterface, variables?: Feed3QueryVariables, config?: SWRConfigInterface<Feed3Query, ClientError>) {
36+
return useSWR<Feed3Query, ClientError>(key, () => sdk.feed3(variables), config);
3737
},
38-
useFeed4(key: SWRKeyInterface, variables?: Feed4QueryVariables, config?: SWRConfigInterface<Feed4Query>) {
39-
return useSWR<Feed4Query>(key, () => sdk.feed4(variables), config);
38+
useFeed4(key: SWRKeyInterface, variables?: Feed4QueryVariables, config?: SWRConfigInterface<Feed4Query, ClientError>) {
39+
return useSWR<Feed4Query, ClientError>(key, () => sdk.feed4(variables), config);
4040
},
41-
useFeed4Infinite(id: string, getKey: SWRInfiniteKeyLoader<Feed4Query, Feed4QueryVariables>, variables?: Feed4QueryVariables, config?: SWRInfiniteConfigInterface<Feed4Query>) {
42-
return useSWRInfinite<Feed4Query>(
41+
useFeed4Infinite(id: string, getKey: SWRInfiniteKeyLoader<Feed4Query, Feed4QueryVariables>, variables?: Feed4QueryVariables, config?: SWRInfiniteConfigInterface<Feed4Query, ClientError>) {
42+
return useSWRInfinite<Feed4Query, ClientError>(
4343
utilsForInfinite.generateGetKey<Feed4Query, Feed4QueryVariables>(id, getKey),
4444
utilsForInfinite.generateFetcher<Feed4Query, Feed4QueryVariables>(sdk.feed4, variables),
4545
config);

tests/outputs/mutations.ts

+8-8
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@ export function getSdkWithHooks(client: GraphQLClient, withWrapper: SdkFunctionW
22
const sdk = getSdk(client, withWrapper);
33
return {
44
...sdk,
5-
useFeed(key: SWRKeyInterface, variables?: FeedQueryVariables, config?: SWRConfigInterface<FeedQuery>) {
6-
return useSWR<FeedQuery>(key, () => sdk.feed(variables), config);
5+
useFeed(key: SWRKeyInterface, variables?: FeedQueryVariables, config?: SWRConfigInterface<FeedQuery, ClientError>) {
6+
return useSWR<FeedQuery, ClientError>(key, () => sdk.feed(variables), config);
77
},
8-
useFeed2(key: SWRKeyInterface, variables: Feed2QueryVariables, config?: SWRConfigInterface<Feed2Query>) {
9-
return useSWR<Feed2Query>(key, () => sdk.feed2(variables), config);
8+
useFeed2(key: SWRKeyInterface, variables: Feed2QueryVariables, config?: SWRConfigInterface<Feed2Query, ClientError>) {
9+
return useSWR<Feed2Query, ClientError>(key, () => sdk.feed2(variables), config);
1010
},
11-
useFeed3(key: SWRKeyInterface, variables?: Feed3QueryVariables, config?: SWRConfigInterface<Feed3Query>) {
12-
return useSWR<Feed3Query>(key, () => sdk.feed3(variables), config);
11+
useFeed3(key: SWRKeyInterface, variables?: Feed3QueryVariables, config?: SWRConfigInterface<Feed3Query, ClientError>) {
12+
return useSWR<Feed3Query, ClientError>(key, () => sdk.feed3(variables), config);
1313
},
14-
useFeed4(key: SWRKeyInterface, variables?: Feed4QueryVariables, config?: SWRConfigInterface<Feed4Query>) {
15-
return useSWR<Feed4Query>(key, () => sdk.feed4(variables), config);
14+
useFeed4(key: SWRKeyInterface, variables?: Feed4QueryVariables, config?: SWRConfigInterface<Feed4Query, ClientError>) {
15+
return useSWR<Feed4Query, ClientError>(key, () => sdk.feed4(variables), config);
1616
}
1717
};
1818
}

tests/outputs/rawRequest.ts

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
export function getSdkWithHooks(client: GraphQLClient, withWrapper: SdkFunctionWrapper = defaultWrapper) {
2+
const sdk = getSdk(client, withWrapper);
3+
return {
4+
...sdk,
5+
useFeed(key: SWRKeyInterface, variables?: FeedQueryVariables, config?: SWRConfigInterface<FeedQuery, ClientError>) {
6+
return useSWR<FeedQuery, ClientError>(key, () => sdk.feed(variables), config);
7+
},
8+
useFeed2(key: SWRKeyInterface, variables: Feed2QueryVariables, config?: SWRConfigInterface<Feed2Query, ClientError>) {
9+
return useSWR<Feed2Query, ClientError>(key, () => sdk.feed2(variables), config);
10+
},
11+
useFeed3(key: SWRKeyInterface, variables?: Feed3QueryVariables, config?: SWRConfigInterface<Feed3Query, ClientError>) {
12+
return useSWR<Feed3Query, ClientError>(key, () => sdk.feed3(variables), config);
13+
},
14+
useFeed4(key: SWRKeyInterface, variables?: Feed4QueryVariables, config?: SWRConfigInterface<Feed4Query, ClientError>) {
15+
return useSWR<Feed4Query, ClientError>(key, () => sdk.feed4(variables), config);
16+
}
17+
};
18+
}
19+
export type SdkWithHooks = ReturnType<typeof getSdkWithHooks>;

tests/outputs/straight.ts

+8-8
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@ export function getSdkWithHooks(client: GraphQLClient, withWrapper: SdkFunctionW
22
const sdk = getSdk(client, withWrapper);
33
return {
44
...sdk,
5-
useFeed(key: SWRKeyInterface, variables?: FeedQueryVariables, config?: SWRConfigInterface<FeedQuery>) {
6-
return useSWR<FeedQuery>(key, () => sdk.feed(variables), config);
5+
useFeed(key: SWRKeyInterface, variables?: FeedQueryVariables, config?: SWRConfigInterface<FeedQuery, ClientError>) {
6+
return useSWR<FeedQuery, ClientError>(key, () => sdk.feed(variables), config);
77
},
8-
useFeed2(key: SWRKeyInterface, variables: Feed2QueryVariables, config?: SWRConfigInterface<Feed2Query>) {
9-
return useSWR<Feed2Query>(key, () => sdk.feed2(variables), config);
8+
useFeed2(key: SWRKeyInterface, variables: Feed2QueryVariables, config?: SWRConfigInterface<Feed2Query, ClientError>) {
9+
return useSWR<Feed2Query, ClientError>(key, () => sdk.feed2(variables), config);
1010
},
11-
useFeed3(key: SWRKeyInterface, variables?: Feed3QueryVariables, config?: SWRConfigInterface<Feed3Query>) {
12-
return useSWR<Feed3Query>(key, () => sdk.feed3(variables), config);
11+
useFeed3(key: SWRKeyInterface, variables?: Feed3QueryVariables, config?: SWRConfigInterface<Feed3Query, ClientError>) {
12+
return useSWR<Feed3Query, ClientError>(key, () => sdk.feed3(variables), config);
1313
},
14-
useFeed4(key: SWRKeyInterface, variables?: Feed4QueryVariables, config?: SWRConfigInterface<Feed4Query>) {
15-
return useSWR<Feed4Query>(key, () => sdk.feed4(variables), config);
14+
useFeed4(key: SWRKeyInterface, variables?: Feed4QueryVariables, config?: SWRConfigInterface<Feed4Query, ClientError>) {
15+
return useSWR<Feed4Query, ClientError>(key, () => sdk.feed4(variables), config);
1616
}
1717
};
1818
}

tests/swr.spec.ts

+18
Original file line numberDiff line numberDiff line change
@@ -256,4 +256,22 @@ async function test() {
256256
const output = await validate(content, config, docs, schema, usage)
257257
expect(output).toContain(readOutput('autogenSWRKey'))
258258
})
259+
260+
it('Should work `rawRequest` option correctly', async () => {
261+
const config: PluginsConfig = {
262+
rawRequest: true,
263+
}
264+
const docs = [{ location: '', document: basicDoc }]
265+
266+
const content = (await plugin(schema, docs, config, {
267+
outputFile: 'graphql.ts',
268+
})) as Types.ComplexPluginOutput
269+
270+
const usage = basicUsage
271+
const output = await validate(content, config, docs, schema, usage)
272+
expect(output).toContain(
273+
"import { ClientError } from 'graphql-request/dist/types'"
274+
)
275+
expect(output).toContain(readOutput('rawRequest'))
276+
})
259277
})

0 commit comments

Comments
 (0)