@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
JavaScript
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;
;