UNPKG

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