typeDefinitionCode method
Implementation
String typeDefinitionCode() {
final hasTypeParams = typeParams.isNotEmpty;
final _typeParamsStr = typeParams.map((e) {
final _t = e.displayName;
return 'GraphQLType<$_t, Object> ${ReCase(_t).camelCase}$graphqlTypeSuffix,';
}).join();
final _type =
'GraphQL${isInput ? 'Input' : ''}ObjectType<$typeName${_typeList()}>';
final _typeNoExt = 'GraphQL${isInput ? 'Input' : ''}ObjectType<$typeName>';
final _cacheGetter = hasTypeParams ? '_$fieldName.value[__name]' : null;
final _genericSerializer = hasTypeParams && hasFromJson;
final body = '''
{
final __name = ${hasTypeParams ? 'name ?? ' : ''}'$graphQLTypeName';
${hasTypeParams ? 'if ($_cacheGetter != null) return $_cacheGetter! as $_type;' : ''}
final __$fieldName = ${expression().accept(DartEmitter())};
${_genericSerializer ? _setGenericSerializer() : ''}
${hasTypeParams ? '$_cacheGetter = __$fieldName;' : 'setValue(__$fieldName);'}
__$fieldName.fields.addAll(${literalList(
() {
// deduplicate field names
final _getters = <String>{};
final _names = <String>{};
return fields
.where((e) =>
_getters.add(e.getter) &&
(_names.add(e.name) || e.fieldAnnot.name != null) &&
e.fieldAnnot.omit != true)
.map((e) => e.expression(isInput: isInput));
}(),
).accept(DartEmitter())},);
return __$fieldName;
}''';
if (hasTypeParams) {
return '''
${_genericSerializer ? 'final ${ReCase(typeName).camelCase}SerdeCtx = SerdeCtx();' : ''}
final _$fieldName = HotReloadableDefinition<Map<String, $_typeNoExt>>((_) => {});
/// Auto-generated from [$typeName].
$_type $fieldName${_typeList(ext: true)}($_typeParamsStr {String? name,}) $body
''';
} else {
return '''
final _$fieldName = HotReloadableDefinition<$_type>((setValue) $body);
/// Auto-generated from [$typeName].
$_type get $fieldName => _$fieldName.value;
''';
}
}