UNPKG

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