parseIndexOptions function

Map<String, Object> parseIndexOptions(
  1. Object fieldOrSpec
)

Implementation

Map<String, Object> parseIndexOptions(Object fieldOrSpec) {
  var fieldHash = <String, Object>{};
  var indexes = <String>[];
  Iterable? keys;

// Get all the fields accordingly
  if (fieldOrSpec is String) {
// 'type'
    indexes.add(_fieldIndexName(fieldOrSpec, '1'));
    fieldHash[fieldOrSpec] = 1;
  } else if (fieldOrSpec is List) {
    for (Object object in fieldOrSpec) {
      if (object is String) {
// [{location:'2d'}, 'type']
        indexes.add(_fieldIndexName(object, '1'));
        fieldHash[object] = 1;
      } else if (object is List) {
// [['location', '2d'],['type', 1]]
        indexes.add(
            _fieldIndexName(object[0] as String, (object[1] ?? '1') as String));
        fieldHash[object[0]] = object[1] ?? '1';
      } else if (object is Map) {
// [{location:'2d'}, {type:1}]
        keys = object.keys;
        for (String key in keys) {
          indexes.add(_fieldIndexName(key, object[key] as String));
          fieldHash[key] = object[key];
        }
      } else {
// undefined (ignore)
      }
    }
  } else if (fieldOrSpec is Map) {
// {location:'2d', type:1}
    keys = fieldOrSpec.keys;
    for (String key in keys) {
      var indexDirection = '${fieldOrSpec[key]}';
      indexes.add(_fieldIndexName(key, indexDirection));
      fieldHash[key] = fieldOrSpec[key];
    }
  }

  return {
    keyName: indexes.join('_'),
    if (keys != null) keyKeys: keys,
    keyFieldHash: fieldHash
  };
}