seed method

Future<void> seed(
  1. List<Object> seeders
)

Runs seeders (seeders or the names they're registered under), for setUp. Throws when one fails.

The runs are recorded like seed in metro live, so seed:rollback <name> undoes them.

Implementation

Future<void> seed(List<Object> seeders) async {
  final Map<String, Seeder Function()> registered = Nylo.isInitialized()
      ? Nylo.instance.getSeeders()
      : const {};
  final List<Seeder> resolved = [
    for (final Object seeder in seeders)
      switch (seeder) {
        final Seeder instance => instance,
        final String name when registered[name] != null =>
          registered[name]!(),
        _ => throw PlaybookFailure('There\'s no seeder called "$seeder".'),
      },
  ];
  for (final SeedRun run in await SeedRecorder.upAll(resolved)) {
    if (run.failed) {
      throw PlaybookFailure('Seeding ${run.name} failed: ${run.error}');
    }
  }
}