schemaToSource function
Converts a schema AST back into schema.prisma source text.
Implementation
String schemaToSource(SchemaDocument schema) {
final buffer = StringBuffer();
void writeSpacerIfNeeded() {
if (buffer.isNotEmpty) {
buffer.writeln();
}
}
for (final datasource in schema.datasources) {
writeSpacerIfNeeded();
buffer.writeln('datasource ${datasource.name} {');
for (final entry in datasource.properties.entries) {
buffer.writeln(' ${entry.key} = ${entry.value}');
}
buffer.writeln('}');
}
for (final generator in schema.generators) {
writeSpacerIfNeeded();
buffer.writeln('generator ${generator.name} {');
for (final entry in generator.properties.entries) {
buffer.writeln(' ${entry.key} = ${entry.value}');
}
buffer.writeln('}');
}
for (final definition in schema.enums) {
writeSpacerIfNeeded();
buffer.writeln('enum ${definition.name} {');
for (final value in definition.values) {
buffer.writeln(' $value');
}
for (final attribute in definition.attributes) {
buffer.writeln(' ${modelAttributeToSource(attribute)}');
}
buffer.writeln('}');
}
for (final model in schema.models) {
writeSpacerIfNeeded();
buffer.writeln('model ${model.name} {');
for (final field in model.fields) {
final rawType = field.isList
? '${field.type}[]'
: field.isNullable
? '${field.type}?'
: field.type;
final attributes = field.attributes.map(attributeToSource).join(' ');
if (attributes.isEmpty) {
buffer.writeln(' ${field.name} $rawType');
} else {
buffer.writeln(' ${field.name} $rawType $attributes');
}
}
for (final attribute in model.attributes) {
buffer.writeln(' ${modelAttributeToSource(attribute)}');
}
buffer.writeln('}');
}
return buffer.toString();
}