UNPKG

3.72 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.GenericSdkVisitor = void 0;
4const tslib_1 = require("tslib");
5const visitor_plugin_common_1 = require("@graphql-codegen/visitor-plugin-common");
6const auto_bind_1 = tslib_1.__importDefault(require("auto-bind"));
7const graphql_1 = require("graphql");
8class GenericSdkVisitor extends visitor_plugin_common_1.ClientSideBaseVisitor {
9 constructor(schema, fragments, rawConfig) {
10 super(schema, fragments, rawConfig, {
11 usingObservableFrom: rawConfig.usingObservableFrom,
12 rawRequest: (0, visitor_plugin_common_1.getConfigValue)(rawConfig.rawRequest, false),
13 });
14 this._operationsToInclude = [];
15 (0, auto_bind_1.default)(this);
16 if (this.config.usingObservableFrom) {
17 this._additionalImports.push(this.config.usingObservableFrom);
18 }
19 const importType = this.config.useTypeImports ? 'import type' : 'import';
20 if (this.config.documentMode !== visitor_plugin_common_1.DocumentMode.string) {
21 this._additionalImports.push(`${importType} { DocumentNode${this.config.rawRequest ? ', ExecutionResult' : ''} } from 'graphql';`);
22 }
23 else if (this.config.rawRequest) {
24 this._additionalImports.push(`${importType} { ExecutionResult } from 'graphql';`);
25 }
26 }
27 buildOperation(node, documentVariableName, operationType, operationResultType, operationVariablesTypes) {
28 if (node.name == null) {
29 throw new Error("Plugin 'generic-sdk' cannot generate SDK for unnamed operation.\n\n" + (0, graphql_1.print)(node));
30 }
31 else {
32 this._operationsToInclude.push({
33 node,
34 documentVariableName,
35 operationType,
36 operationResultType,
37 operationVariablesTypes,
38 });
39 }
40 return null;
41 }
42 get sdkContent() {
43 const usingObservable = !!this.config.usingObservableFrom;
44 const allPossibleActions = this._operationsToInclude
45 .map(o => {
46 const optionalVariables = !o.node.variableDefinitions ||
47 o.node.variableDefinitions.length === 0 ||
48 o.node.variableDefinitions.every(v => v.type.kind !== graphql_1.Kind.NON_NULL_TYPE || v.defaultValue);
49 const returnType = usingObservable && o.operationType === 'Subscription' ? 'Observable' : 'Promise';
50 const resultData = this.config.rawRequest
51 ? `ExecutionResult<${o.operationResultType}, E>`
52 : o.operationResultType;
53 return `${o.node.name.value}(variables${optionalVariables ? '?' : ''}: ${o.operationVariablesTypes}, options?: C): ${returnType}<${resultData}> {
54 return requester<${o.operationResultType}, ${o.operationVariablesTypes}>(${o.documentVariableName}, variables, options);
55}`;
56 })
57 .map(s => (0, visitor_plugin_common_1.indentMultiline)(s, 2));
58 const documentNodeType = this.config.documentMode === visitor_plugin_common_1.DocumentMode.string ? 'string' : 'DocumentNode';
59 const resultData = this.config.rawRequest ? 'ExecutionResult<R, E>' : 'R';
60 const returnType = usingObservable
61 ? `Promise<${resultData}> & Observable<${resultData}>`
62 : `Promise<${resultData}>`;
63 return `export type Requester<C = {}, E = unknown> = <R, V>(doc: ${documentNodeType}, vars?: V, options?: C) => ${returnType}
64export function getSdk<C, E>(requester: Requester<C, E>) {
65 return {
66${allPossibleActions.join(',\n')}
67 };
68}
69export type Sdk = ReturnType<typeof getSdk>;`;
70 }
71}
72exports.GenericSdkVisitor = GenericSdkVisitor;