UNPKG

@graphql-codegen/typescript-graphql-apollo

Version:

GraphQL Code Generator plugin for generating a ready-to-use SDK based on apollo client and GraphQL operations

93 lines (92 loc) 4.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GraphQLApolloVisitor = void 0; const tslib_1 = require("tslib"); const auto_bind_1 = tslib_1.__importDefault(require("auto-bind")); const change_case_all_1 = require("change-case-all"); const graphql_1 = require("graphql"); const visitor_plugin_common_1 = require("@graphql-codegen/visitor-plugin-common"); class GraphQLApolloVisitor extends visitor_plugin_common_1.ClientSideBaseVisitor { constructor(schema, fragments, rawConfig) { super(schema, fragments, rawConfig, {}); this._operationsToInclude = []; (0, auto_bind_1.default)(this); const typeImport = this.config.useTypeImports ? 'import type' : 'import'; this._additionalImports.push(`${typeImport} { ApolloClient, QueryOptions, SubscriptionOptions, MutationOptions } from '@apollo/client';`); } OperationDefinition(node) { var _a; const operationName = (_a = node.name) === null || _a === void 0 ? void 0 : _a.value; if (!operationName) { // eslint-disable-next-line no-console console.warn(`Anonymous GraphQL operation was ignored in "typescript-graphql-request", please make sure to name your operation: `, (0, graphql_1.print)(node)); return null; } return super.OperationDefinition(node); } buildOperation(node, documentVariableName, operationType, operationResultType, operationVariablesTypes) { this._operationsToInclude.push({ node, documentVariableName, operationType, operationResultType, operationVariablesTypes, }); return null; } get sdkContent() { const sdkOperations = this._operationsToInclude.map(x => { const { documentVariableName } = x; const optionType = GraphQLApolloVisitor.getApolloOperationOptionType(x.operationType); const generics = [x.operationResultType, x.operationVariablesTypes]; const operationName = x.node.name.value; const genericParameter = x.operationType !== 'Mutation' ? [...generics].reverse() : [...generics]; // the reason we're reversing: https://github.com/apollographql/apollo-client/issues/8537 return `${(0, change_case_all_1.camelCase)(operationName)}${x.operationType}(options: Partial<${optionType}<${genericParameter.join(', ')}>>) { return client.${GraphQLApolloVisitor.getApolloOperation(x.operationType)}<${generics.join(', ')}>({...options, ${GraphQLApolloVisitor.getDocumentFieldName(x.operationType)}: ${documentVariableName}}) }`; }); return `export const getSdk = (client: ApolloClient<any>) => ({ ${sdkOperations.join(',\n')} }); export type SdkType = ReturnType<typeof getSdk> `; } static getDocumentFieldName(operationType) { switch (operationType) { case 'Subscription': return 'query'; case 'Mutation': return 'mutation'; case 'Query': return 'query'; default: throw new Error('unknown operation type: ' + operationType); } } static getApolloOperation(operationType) { switch (operationType) { case 'Subscription': return 'subscribe'; case 'Mutation': return 'mutate'; case 'Query': return 'query'; default: throw new Error('unknown operation type: ' + operationType); } } static getApolloOperationOptionType(operationType) { switch (operationType) { case 'Subscription': return 'SubscriptionOptions'; case 'Mutation': return 'MutationOptions'; case 'Query': return 'QueryOptions'; default: throw new Error('unknown operation type: ' + operationType); } } } exports.GraphQLApolloVisitor = GraphQLApolloVisitor;