1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.GenericSdkVisitor = void 0;
|
4 | const tslib_1 = require("tslib");
|
5 | const visitor_plugin_common_1 = require("@graphql-codegen/visitor-plugin-common");
|
6 | const auto_bind_1 = tslib_1.__importDefault(require("auto-bind"));
|
7 | const graphql_1 = require("graphql");
|
8 | class 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}
|
64 | export function getSdk<C, E>(requester: Requester<C, E>) {
|
65 | return {
|
66 | ${allPossibleActions.join(',\n')}
|
67 | };
|
68 | }
|
69 | export type Sdk = ReturnType<typeof getSdk>;`;
|
70 | }
|
71 | }
|
72 | exports.GenericSdkVisitor = GenericSdkVisitor;
|