visitInputObjectTypeDefinitionNode method

  1. @override
void visitInputObjectTypeDefinitionNode(
  1. InputObjectTypeDefinitionNode node
)

Visit InputObjectTypeDefinitionNode.

Implementation

@override
void visitInputObjectTypeDefinitionNode(InputObjectTypeDefinitionNode node) {
  inputObjects[node.name.value] = () {
    final name = ClassName(name: node.name.value);
    final nextContext = context.sameTypeWithNoPath(
      alias: name,
      ofUnion: Nullable<TypeDefinitionNode?>(null),
    );

    logFn(context, nextContext.align, '-> Input class');
    logFn(context, nextContext.align,
        '┌ ${nextContext.path}[${node.name.value}]');
    final properties = <ClassProperty>[];

    properties.addAll(node.fields.map((i) {
      final nextType =
          gql.getTypeByName(nextContext.typeDefinitionNodeVisitor, i.type);
      return createClassProperty(
        fieldName: ClassPropertyName(name: i.name.value),
        context: nextContext.nextTypeWithNoPath(
          nextType: node,
          nextClassName: ClassName(name: nextType.name.value),
          nextFieldName: ClassName(name: i.name.value),
          ofUnion: Nullable<TypeDefinitionNode?>(null),
        ),
        markAsUsed: false,
      );
    }));

    logFn(context, nextContext.align,
        '└ ${nextContext.path}[${node.name.value}]');
    logFn(context, nextContext.align,
        '<- Generated input class ${name.namePrintable}.');

    return ClassDefinition(
      isInput: true,
      name: name,
      properties: properties,
    );
  };
}