updateD1Binding function

String updateD1Binding(
  1. String source, {
  2. required String binding,
  3. required String id,
  4. required String name,
})

対象bindingだけを更新し、既存の別bindingを保持する。

Implementation

String updateD1Binding(String source,
    {required String binding, required String id, required String name}) {
  final pattern = RegExp(r'"d1_databases"\s*:\s*(\[[\s\S]*?\])');
  final match = pattern.firstMatch(source);
  final entries =
      match == null ? <dynamic>[] : jsonDecode(match.group(1)!) as List;
  entries.removeWhere((e) => e["binding"] == binding);
  entries.add({"binding": binding, "database_id": id, "database_name": name});
  final property = '"d1_databases":${jsonEncode(entries)}';
  if (match != null) {
    return source.replaceRange(match.start, match.end, property);
  }
  return source.replaceFirst("{", "{$property,");
}