exportJson static method

Map<String, dynamic> exportJson(
  1. Map<String, Table> tables
)

Exports all tables as a JSON-serialisable map.

Implementation

static Map<String, dynamic> exportJson(Map<String, Table> tables) {
  final result = <String, dynamic>{};
  result['_meta'] = {
    'version': 1,
    'exportedAt': DateTime.now().toIso8601String(),
    'tables': tables.length,
  };
  final tableMap = <String, dynamic>{};
  for (final entry in tables.entries) {
    final table = entry.value;
    final colDefs = table.schema.columns.map((c) {
      final def = <String, dynamic>{
        'name': c.name,
        'type': c.type.name,
        'notNull': c.constraints.notNull,
        'primaryKey': c.constraints.primaryKey,
        'unique': c.constraints.unique,
        'autoIncrement': c.constraints.autoIncrement,
      };
      if (c.constraints.hasDefault) {
        def['default'] = c.constraints.defaultValue;
      }
      if (c.constraints.foreignKeyTable != null) {
        def['fkTable'] = c.constraints.foreignKeyTable;
        def['fkColumn'] = c.constraints.foreignKeyColumn;
      }
      return def;
    }).toList();
    final rows = table
        .scan()
        .map((r) => Map<String, dynamic>.from(r.values))
        .toList();
    tableMap[entry.key] = {
      'schema': {'tableName': table.schema.tableName, 'columns': colDefs},
      'rows': rows,
    };
  }
  result['tables'] = tableMap;
  return result;
}