@beamf/graphql-schema-typescript
Advanced tools
Comparing version 1.2.0 to 1.2.1
@@ -29,9 +29,11 @@ export interface GenerateTypescriptOptions { | ||
contextType?: string; | ||
/** Name of your graphql RootValue type. Default to `any` if not specified */ | ||
rootValueType?: string; | ||
/** | ||
* You can either make your graphql context type global, so that the generated file can link to it, | ||
* You can either make your graphql context / root value type global, so that the generated file can link to it, | ||
* or provide an import statement to be injected via this option | ||
*/ | ||
importContext?: string; | ||
headerStatements?: string; | ||
}; | ||
} | ||
export declare const defaultOptions: GenerateTypescriptOptions; |
@@ -8,3 +8,4 @@ "use strict"; | ||
contextType: 'any', | ||
rootValueType: 'any', | ||
}, | ||
}; |
@@ -16,2 +16,3 @@ import { IntrospectionQuery } from 'graphql/utilities/introspectionQuery'; | ||
protected contextType: string; | ||
protected rootValueType: string; | ||
constructor(options: GenerateTypescriptOptions); | ||
@@ -31,4 +32,4 @@ generate(introspectionResult: IntrospectionQuery): Promise<GenerateResolversResult>; | ||
*/ | ||
private generateObjectResolver(gqlType, allGQLTypes); | ||
private generateObjectFieldResolver(objectType, field); | ||
private generateObjectResolver(gqlType, allGQLTypes, rootTypeNames); | ||
private generateObjectFieldResolver(objectType, field, parentTypeName); | ||
} |
@@ -50,10 +50,14 @@ "use strict"; | ||
this.contextType = options.resolver.contextType; | ||
if (options.resolver.importContext) { | ||
this.importHeader.push(options.resolver.importContext); | ||
if (options.resolver.headerStatements) { | ||
this.importHeader.push(options.resolver.headerStatements); | ||
} | ||
} | ||
if (!this.contextType || this.contextType === 'any') { | ||
this.contextType = 'Ctx'; | ||
this.importHeader.push('export type Ctx = any'); | ||
this.contextType = 'Context'; | ||
this.importHeader.push('export type Context = any'); | ||
} | ||
if (!this.rootValueType || this.rootValueType === 'any') { | ||
this.rootValueType = 'RootValue'; | ||
this.importHeader.push('export type RootValue = any'); | ||
} | ||
} | ||
@@ -63,3 +67,3 @@ ResolversGenerator.prototype.generate = function (introspectionResult) { | ||
var _this = this; | ||
var gqlTypes, hasCustomScalar; | ||
var gqlTypes, hasCustomScalar, schema, rootTypeNames; | ||
return __generator(this, function (_a) { | ||
@@ -106,2 +110,8 @@ gqlTypes = introspectionResult.__schema.types.filter(function (type) { return !utils_1.isBuiltinType(type); }); | ||
]; | ||
schema = introspectionResult.__schema; | ||
rootTypeNames = [ | ||
schema.queryType.name, | ||
schema.mutationType && schema.mutationType.name, | ||
schema.subscriptionType && schema.subscriptionType.name, | ||
].filter(function (n) { return n != null; }); | ||
gqlTypes.forEach(function (type) { | ||
@@ -113,5 +123,5 @@ switch (type.kind) { | ||
// this.generateObjectModel(type, gqlTypes) | ||
return _this.generateObjectResolver(type, gqlTypes); | ||
return _this.generateObjectResolver(type, gqlTypes, rootTypeNames); | ||
case 'INTERFACE': | ||
_this.generateObjectResolver(type, gqlTypes); | ||
_this.generateObjectResolver(type, gqlTypes, rootTypeNames); | ||
return _this.generateResolveTypeResolver(type); | ||
@@ -157,3 +167,3 @@ // TODO: Right now GraphQL implements interface info is lost in typescript | ||
*/ | ||
ResolversGenerator.prototype.generateObjectResolver = function (gqlType, allGQLTypes) { | ||
ResolversGenerator.prototype.generateObjectResolver = function (gqlType, allGQLTypes, rootTypeNames) { | ||
var _this = this; | ||
@@ -165,3 +175,4 @@ var extendTypes = gqlType.kind === 'OBJECT' ? gqlType.interfaces.map(function (i) { return i.name; }) : []; | ||
}, []); | ||
var typeName = "" + this.options.typePrefix + gqlType.name; | ||
var isRootType = rootTypeNames.indexOf(gqlType.name) !== -1; | ||
var typeName = isRootType ? this.rootValueType : "" + this.options.typePrefix + gqlType.name; | ||
var typeResolversName = typeName + "Resolvers"; | ||
@@ -175,3 +186,3 @@ var typeResolverBody = []; | ||
} | ||
var res = _this.generateObjectFieldResolver(gqlType, field); | ||
var res = _this.generateObjectFieldResolver(gqlType, field, typeName); | ||
typeResolverBody.push.apply(typeResolverBody, res.typeResolverBody); | ||
@@ -205,5 +216,4 @@ fieldResolversTypeDefs.push.apply(fieldResolversTypeDefs, res.fieldResolversTypeDefs); | ||
}; | ||
ResolversGenerator.prototype.generateObjectFieldResolver = function (objectType, field) { | ||
ResolversGenerator.prototype.generateObjectFieldResolver = function (objectType, field, parentTypeName) { | ||
var _this = this; | ||
var parentTypeName = "" + this.options.typePrefix + objectType.name; | ||
var typeResolverBody = []; | ||
@@ -210,0 +220,0 @@ var fieldResolversTypeDefs = []; |
{ | ||
"name": "@beamf/graphql-schema-typescript", | ||
"version": "1.2.0", | ||
"version": "1.2.1", | ||
"description": "Generate TypeScript from GraphQL's schema type definitions", | ||
@@ -5,0 +5,0 @@ "main": "./lib/index.js", |
231753
6403