graphql#GraphQLCompositeType TypeScript Examples
The following examples show how to use
graphql#GraphQLCompositeType.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: index.ts From amplify-codegen with Apache License 2.0 | 6 votes |
compileFragment(fragmentDefinition: FragmentDefinitionNode): Fragment {
const fragmentName = fragmentDefinition.name.value;
const filePath = filePathForNode(fragmentDefinition);
const source = print(fragmentDefinition);
const type = typeFromAST(this.schema, fragmentDefinition.typeCondition) as GraphQLCompositeType;
return {
fragmentName,
filePath,
source,
type,
selectionSet: this.compileSelectionSet(fragmentDefinition.selectionSet, type),
};
}
Example #2
Source File: index.ts From amplify-codegen with Apache License 2.0 | 6 votes |
compileSelectionSet(
selectionSetNode: SelectionSetNode,
parentType: GraphQLCompositeType,
possibleTypes: GraphQLObjectType[] = this.possibleTypesForType(parentType),
visitedFragments: Set<string> = new Set(),
): SelectionSet {
return {
possibleTypes,
selections: selectionSetNode.selections
.map(selectionNode =>
wrapInBooleanConditionsIfNeeded(
this.compileSelection(selectionNode, parentType, possibleTypes, visitedFragments),
selectionNode,
possibleTypes,
),
)
.filter(x => x) as Selection[],
};
}
Example #3
Source File: graphql.ts From amplify-codegen with Apache License 2.0 | 6 votes |
/**
* Not exactly the same as the executor's definition of getFieldDef, in this
* statically evaluated environment we do not always have an Object type,
* and need to handle Interface and Union types.
*/
export function getFieldDef(
schema: GraphQLSchema,
parentType: GraphQLCompositeType,
fieldAST: FieldNode
): GraphQLField<any, any> | undefined {
const name = fieldAST.name.value;
if (name === SchemaMetaFieldDef.name && schema.getQueryType() === parentType) {
return SchemaMetaFieldDef;
}
if (name === TypeMetaFieldDef.name && schema.getQueryType() === parentType) {
return TypeMetaFieldDef;
}
if (
name === TypeNameMetaFieldDef.name &&
(parentType instanceof GraphQLObjectType || parentType instanceof GraphQLInterfaceType || parentType instanceof GraphQLUnionType)
) {
return TypeNameMetaFieldDef;
}
if (parentType instanceof GraphQLObjectType || parentType instanceof GraphQLInterfaceType) {
return parentType.getFields()[name];
}
return undefined;
}
Example #4
Source File: index.ts From amplify-codegen with Apache License 2.0 | 5 votes |
possibleTypesForType(type: GraphQLCompositeType): GraphQLObjectType[] {
if (isAbstractType(type)) {
return Array.from(this.schema.getPossibleTypes(type)) || [];
} else {
return [type];
}
}
Example #5
Source File: graphql.ts From amplify-codegen with Apache License 2.0 | 5 votes |
export function isTypeProperSuperTypeOf(schema: GraphQLSchema, maybeSuperType: GraphQLCompositeType, subType: GraphQLCompositeType) {
return (
isEqualType(maybeSuperType, subType) ||
(subType instanceof GraphQLObjectType && (isAbstractType(maybeSuperType) && schema.isPossibleType(maybeSuperType, subType)))
);
}
Example #6
Source File: index.ts From amplify-codegen with Apache License 2.0 | 4 votes |
compileSelection(
selectionNode: SelectionNode,
parentType: GraphQLCompositeType,
possibleTypes: GraphQLObjectType[],
visitedFragments: Set<string>,
): Selection | null {
switch (selectionNode.kind) {
case Kind.FIELD: {
const name = selectionNode.name.value;
const alias = selectionNode.alias ? selectionNode.alias.value : undefined;
const fieldDef = getFieldDef(this.schema, parentType, selectionNode);
if (!fieldDef) {
throw new GraphQLError(`Cannot query field "${name}" on type "${String(parentType)}"`, [selectionNode]);
}
const fieldType = fieldDef.type;
const unmodifiedFieldType = getNamedType(fieldType);
this.addTypeUsed(unmodifiedFieldType);
const { description, isDeprecated, deprecationReason } = fieldDef;
const responseKey = alias || name;
const args =
selectionNode.arguments && selectionNode.arguments.length > 0
? selectionNode.arguments.map(arg => {
const name = arg.name.value;
const argDef = fieldDef.args.find(argDef => argDef.name === arg.name.value);
return {
name,
value: valueFromValueNode(arg.value),
type: (argDef && argDef.type) || undefined,
};
})
: undefined;
let field: Field = {
kind: 'Field',
responseKey,
name,
alias,
args,
type: fieldType,
description: !isMetaFieldName(name) && description ? description : undefined,
isDeprecated,
deprecationReason: deprecationReason || undefined,
};
if (isCompositeType(unmodifiedFieldType)) {
const selectionSetNode = selectionNode.selectionSet;
if (!selectionSetNode) {
throw new GraphQLError(`Composite field "${name}" on type "${String(parentType)}" requires selection set`, [selectionNode]);
}
field.selectionSet = this.compileSelectionSet(selectionNode.selectionSet as SelectionSetNode, unmodifiedFieldType);
}
return field;
}
case Kind.INLINE_FRAGMENT: {
const typeNode = selectionNode.typeCondition;
const type = typeNode ? (typeFromAST(this.schema, typeNode) as GraphQLCompositeType) : parentType;
const possibleTypesForTypeCondition = this.possibleTypesForType(type).filter(type => possibleTypes.includes(type));
return {
kind: 'TypeCondition',
type,
selectionSet: this.compileSelectionSet(selectionNode.selectionSet, type, possibleTypesForTypeCondition),
};
}
case Kind.FRAGMENT_SPREAD: {
const fragmentName = selectionNode.name.value;
if (visitedFragments.has(fragmentName)) return null;
visitedFragments.add(fragmentName);
const fragmentSpread: FragmentSpread = {
kind: 'FragmentSpread',
fragmentName,
selectionSet: {
possibleTypes,
selections: [],
},
};
this.unresolvedFragmentSpreads.push(fragmentSpread);
return fragmentSpread;
}
}
}