writeDraft method

Directory writeDraft({
  1. required PostgresqlMigrationDraft draft,
  2. required String directoryPath,
})

Writes a draft to a migration directory on disk.

Implementation

Directory writeDraft({
  required PostgresqlMigrationDraft draft,
  required String directoryPath,
}) {
  final root = Directory(directoryPath)..createSync(recursive: true);
  final migrationDir = Directory(
    '${root.path}${Platform.pathSeparator}${draft.name}',
  )..createSync(recursive: true);

  File(
    '${migrationDir.path}${Platform.pathSeparator}migration.sql',
  ).writeAsStringSync(draft.sqlScript);
  File(
    '${migrationDir.path}${Platform.pathSeparator}metadata.txt',
  ).writeAsStringSync(
    metadataText(
      name: draft.name,
      generatedAt: draft.generatedAt,
      statementCount: draft.plan.statements.length,
      warningCount: draft.plan.warnings.length,
      rebuildRequired: draft.plan.requiresRebuild,
      provider: PostgresqlMigrationRunner.providerName,
      checksum: draft.checksum,
    ),
  );
  File(
    '${migrationDir.path}${Platform.pathSeparator}before.prisma',
  ).writeAsStringSync(draft.beforeSchema);
  File(
    '${migrationDir.path}${Platform.pathSeparator}after.prisma',
  ).writeAsStringSync(draft.afterSchema);

  if (draft.plan.warnings.isNotEmpty) {
    File(
      '${migrationDir.path}${Platform.pathSeparator}warnings.txt',
    ).writeAsStringSync('${draft.plan.warnings.join('\n')}\n');
  }

  updateMigrationManifest(root.path);

  return migrationDir;
}