getExtensions function

Map<String, List<Tuple2<String, Map<String, dynamic>>>> getExtensions(
  1. Map<String, dynamic> tokens, {
  2. required BuilderConfig config,
})

Returns a map consisting of all available extensions.

The data is formatted as followed:

{
  extensionName: [
    [
      extensionProperty1,
      {
        value: #000000,
        type: color
      }
    ],
     [
      extensionProperty2,
      {
        value: #ffffff,
        type: color
      }
    ]
  ]
}

Implementation

Map<String, List<Tuple2<String, Map<String, dynamic>>>> getExtensions(
  Map<String, dynamic> tokens, {
  required BuilderConfig config,
}) {
  Map<String, List<Tuple2<String, Map<String, dynamic>>>> extensions = {};

  final tokenSets = getTokenSets(
    tokens,
    includeDefaultSet: true,
    config: config,
  );
  for (final tokenSet in tokenSets) {
    final setData = tokens[tokenSet] as Map<String, dynamic>;
    final setDataKeys = setData.keys.toList()..remove('sys');
    for (final key in setDataKeys) {
      if (!extensions.keys.contains(key)) {
        final extension = setData[key] as Map<String, dynamic>;
        // Only create an extension when the key does not have an value and
        // therefore is a group.
        if (!extension.containsKey('value')) {
          extensions[key] = extension.keys
              .map((e) => Tuple2(e, setData[key][e] as Map<String, dynamic>))
              .toList();
        }
      }
    }
  }

  return extensions;
}