UNPKG

5.75 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.GraphQLRequestClientFetcher = void 0;
4const variables_generator_js_1 = require("./variables-generator.js");
5class GraphQLRequestClientFetcher {
6 constructor(visitor) {
7 this.visitor = visitor;
8 }
9 generateFetcherImplementaion() {
10 return `
11function fetcher<TData, TVariables extends { [key: string]: any }>(client: GraphQLClient, query: string, variables?: TVariables, requestHeaders?: RequestInit['headers']) {
12 return async (): Promise<TData> => client.request({
13 document: query,
14 variables,
15 requestHeaders
16 });
17}`;
18 }
19 generateInfiniteQueryHook(node, documentVariableName, operationName, operationResultType, operationVariablesTypes, hasRequiredVariables) {
20 const variables = (0, variables_generator_js_1.generateQueryVariablesSignature)(hasRequiredVariables, operationVariablesTypes);
21 const typeImport = this.visitor.config.useTypeImports ? 'import type' : 'import';
22 this.visitor.imports.add(`${typeImport} { GraphQLClient } from 'graphql-request';`);
23 const hookConfig = this.visitor.queryMethodMap;
24 this.visitor.reactQueryHookIdentifiersInUse.add(hookConfig.infiniteQuery.hook);
25 this.visitor.reactQueryOptionsIdentifiersInUse.add(hookConfig.infiniteQuery.options);
26 const options = `options?: ${hookConfig.infiniteQuery.options}<${operationResultType}, TError, TData>`;
27 return `export const useInfinite${operationName} = <
28 TData = ${operationResultType},
29 TError = ${this.visitor.config.errorType}
30 >(
31 pageParamKey: keyof ${operationVariablesTypes},
32 client: GraphQLClient,
33 ${variables},
34 ${options},
35 headers?: RequestInit['headers']
36 ) =>
37 ${hookConfig.infiniteQuery.hook}<${operationResultType}, TError, TData>(
38 ${(0, variables_generator_js_1.generateInfiniteQueryKey)(node, hasRequiredVariables)},
39 (metaData) => fetcher<${operationResultType}, ${operationVariablesTypes}>(client, ${documentVariableName}, {...variables, ...(metaData.pageParam ? {[pageParamKey]: metaData.pageParam} : {})}, headers)(),
40 options
41 );`;
42 }
43 generateQueryHook(node, documentVariableName, operationName, operationResultType, operationVariablesTypes, hasRequiredVariables) {
44 const variables = (0, variables_generator_js_1.generateQueryVariablesSignature)(hasRequiredVariables, operationVariablesTypes);
45 const typeImport = this.visitor.config.useTypeImports ? 'import type' : 'import';
46 this.visitor.imports.add(`${typeImport} { GraphQLClient } from 'graphql-request';`);
47 this.visitor.imports.add(`${typeImport} { RequestInit } from 'graphql-request/dist/types.dom';`);
48 const hookConfig = this.visitor.queryMethodMap;
49 this.visitor.reactQueryHookIdentifiersInUse.add(hookConfig.query.hook);
50 this.visitor.reactQueryOptionsIdentifiersInUse.add(hookConfig.query.options);
51 const options = `options?: ${hookConfig.query.options}<${operationResultType}, TError, TData>`;
52 return `export const use${operationName} = <
53 TData = ${operationResultType},
54 TError = ${this.visitor.config.errorType}
55 >(
56 client: GraphQLClient,
57 ${variables},
58 ${options},
59 headers?: RequestInit['headers']
60 ) =>
61 ${hookConfig.query.hook}<${operationResultType}, TError, TData>(
62 ${(0, variables_generator_js_1.generateQueryKey)(node, hasRequiredVariables)},
63 fetcher<${operationResultType}, ${operationVariablesTypes}>(client, ${documentVariableName}, variables, headers),
64 options
65 );`;
66 }
67 generateMutationHook(node, documentVariableName, operationName, operationResultType, operationVariablesTypes, hasRequiredVariables) {
68 const variables = `variables?: ${operationVariablesTypes}`;
69 const typeImport = this.visitor.config.useTypeImports ? 'import type' : 'import';
70 this.visitor.imports.add(`${typeImport} { GraphQLClient } from 'graphql-request';`);
71 const hookConfig = this.visitor.queryMethodMap;
72 this.visitor.reactQueryHookIdentifiersInUse.add(hookConfig.mutation.hook);
73 this.visitor.reactQueryOptionsIdentifiersInUse.add(hookConfig.mutation.options);
74 const options = `options?: ${hookConfig.mutation.options}<${operationResultType}, TError, ${operationVariablesTypes}, TContext>`;
75 return `export const use${operationName} = <
76 TError = ${this.visitor.config.errorType},
77 TContext = unknown
78 >(
79 client: GraphQLClient,
80 ${options},
81 headers?: RequestInit['headers']
82 ) =>
83 ${hookConfig.mutation.hook}<${operationResultType}, TError, ${operationVariablesTypes}, TContext>(
84 ${(0, variables_generator_js_1.generateMutationKey)(node)},
85 (${variables}) => fetcher<${operationResultType}, ${operationVariablesTypes}>(client, ${documentVariableName}, variables, headers)(),
86 options
87 );`;
88 }
89 generateFetcherFetch(node, documentVariableName, operationName, operationResultType, operationVariablesTypes, hasRequiredVariables) {
90 const variables = (0, variables_generator_js_1.generateQueryVariablesSignature)(hasRequiredVariables, operationVariablesTypes);
91 const typeImport = this.visitor.config.useTypeImports ? 'import type' : 'import';
92 this.visitor.imports.add(`${typeImport} { RequestInit } from 'graphql-request/dist/types.dom';`);
93 return `\nuse${operationName}.fetcher = (client: GraphQLClient, ${variables}, headers?: RequestInit['headers']) => fetcher<${operationResultType}, ${operationVariablesTypes}>(client, ${documentVariableName}, variables, headers);`;
94 }
95}
96exports.GraphQLRequestClientFetcher = GraphQLRequestClientFetcher;