HookStepModel.fromYaml constructor

HookStepModel.fromYaml(
  1. Map<String, dynamic> yamlMap
)

Implementation

factory HookStepModel.fromYaml(Map<String, dynamic> yamlMap) {
  if (yamlMap['name'] == null || yamlMap['command'] == null) {
    final missing = <String>[];
    if (yamlMap['name'] == null) missing.add('name');
    if (yamlMap['command'] == null) missing.add('command');
    throw ArgumentError(
        'Hook step missing required field(s): ${missing.join(', ')}');
  }

  Map<String, String>? envMap;
  if (yamlMap['env'] != null) {
    try {
      envMap = Map<String, String>.from(
        (yamlMap['env'] as Map)
            .map((k, v) => MapEntry(k.toString(), v.toString())),
      );
    } catch (_) {
      print(
          '⚠️  [hooks step "${yamlMap['name']}"] Invalid env format. Ignoring env.');
    }
  }

  int? timeout;
  if (yamlMap['timeout'] != null) {
    timeout = yamlMap['timeout'] is int
        ? yamlMap['timeout'] as int
        : int.tryParse(yamlMap['timeout'].toString());
    if (timeout != null && timeout <= 0) timeout = null;
  }

  return HookStepModel(
    name: yamlMap['name'].toString(),
    command: yamlMap['command'].toString(),
    env: envMap,
    workingDirectory: yamlMap['working_directory']?.toString(),
    timeout: timeout,
    allowFailure: yamlMap['allow_failure'] == true,
    description: yamlMap['description']?.toString(),
  );
}