CreateOptions.parse constructor

CreateOptions.parse(
  1. List<String> args
)

Parses the args that follow the create command. Reads a --from-json file from disk if given (missing files are reported and ignored).

Implementation

factory CreateOptions.parse(List<String> args) {
  var kind = '';
  var name = '';
  var path = 'lib/presentation';
  var force = false;
  var dryRun = false;
  var withTest = false;
  String? fieldsRaw;
  String? jsonSample;

  for (var i = 0; i < args.length; i++) {
    final arg = args[i];
    if (arg.contains(':') && !arg.startsWith('-') && kind.isEmpty) {
      final idx = arg.indexOf(':');
      kind = arg.substring(0, idx).trim();
      name = arg.substring(idx + 1).trim();
      continue;
    }
    switch (arg) {
      case '--path':
        if (i + 1 < args.length) path = args[++i];
        break;
      case '--fields':
        if (i + 1 < args.length) fieldsRaw = args[++i];
        break;
      case '--json':
        if (i + 1 < args.length) jsonSample = args[++i];
        break;
      case '--from-json':
        if (i + 1 < args.length) jsonSample = _readJsonFile(args[++i]);
        break;
      case '--with-test':
        withTest = true;
        break;
      case '--force':
      case '-f':
        force = true;
        break;
      case '--dry-run':
      case '-n':
        dryRun = true;
        break;
      default:
        if (arg.startsWith('--path=')) {
          path = arg.substring('--path='.length);
        } else if (arg.startsWith('--fields=')) {
          fieldsRaw = arg.substring('--fields='.length);
        } else if (arg.startsWith('--json=')) {
          jsonSample = arg.substring('--json='.length);
        } else if (arg.startsWith('--from-json=')) {
          jsonSample = _readJsonFile(arg.substring('--from-json='.length));
        }
        break;
    }
  }

  return CreateOptions(
    kind: kind,
    name: name,
    path: path,
    force: force,
    dryRun: dryRun,
    withTest: withTest,
    fields: parseFields(fieldsRaw),
    jsonSample: jsonSample,
  );
}