graphql-composer
Version:
Create your GraphQL API using composition!
79 lines • 2.2 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.UnionType = void 0;
const graphql_1 = require("graphql");
const __1 = require("../../..");
const GQLAnyType_1 = require("../GQLAnyType");
class UnionType extends GQLAnyType_1.GQLAnyType {
constructor(name, ...types) {
super(name);
this._types = [];
this._typeResolver = this.defaultTypeResolver.bind(this);
this.setTypes(...types);
}
get types() {
return this._types;
}
get typeResolver() {
return this._typeResolver;
}
static create(name, ...types) {
return new UnionType(name, ...types);
}
/**
* Set the union type resolver
* @param typeResolver the type resolver function
*/
setTypeResolver(typeResolver) {
this._typeResolver = typeResolver;
return this;
}
/**
* Set the types of the union
* @param types The types of the union
*/
setTypes(...types) {
this._types = types;
return this;
}
/**
* Add some types to the union
* @param types The types to add
*/
addTypes(...types) {
return this.setTypes(...this._types, ...types);
}
/**
* Remove some types to the union
* @param types The types to remove
*/
removeTypes(...types) {
return this.setTypes(...__1.ArrayHelper.remove(types, this._types));
}
/**
* Copy the UnionType
*/
copy() {
return UnionType.create(this.name)
.addTypes(...this._types)
.setExtensions(this.extensions)
.setDirectives(...this.directives);
}
build() {
this._built = new graphql_1.GraphQLUnionType({
name: this.name,
resolveType: this._typeResolver,
description: this._description,
types: () => {
return this._types.map((t) => t.built);
},
extensions: this.extensions,
});
return this.built;
}
defaultTypeResolver(obj) {
return __1.TypeResolver.resolve(obj, this._types);
}
}
exports.UnionType = UnionType;
//# sourceMappingURL=UnionType.js.map