build method

  1. @override
  2. @mustCallSuper
FutureOr<void> build([
  1. BuildStep? buildStep
])

Generate fileMap from files under importPath.

Loads .json and .yaml files and skips others.

Implementation

@override
@mustCallSuper
FutureOr<void> build([final BuildStep? buildStep]) async {
  await super.build(buildStep);
  assetsMap.clear();
  assetsMap[''] = importPath;

  Iterable<String> baseSegments = split(canonicalize(importPath));
  final List<String> sameSegments = fileMap.keys.sameSegments.toList();
  if (!const IterableEquality<String>().equals(
    baseSegments,
    sameSegments.length > baseSegments.length
        ? sameSegments.sublist(0, baseSegments.length)
        : sameSegments,
  )) {
    baseSegments = const <String>[];
  }
  for (final String inputPath in fileMap.keys) {
    Map<String, Object?> nestedAssetsMap = assetsMap;
    final List<String> segments =
        split(inputPath).sublist(baseSegments.length);
    for (int index = 0; index < segments.length; index++) {
      final String segment = segments.elementAt(index);
      if (index == segments.length - 1) {
        nestedAssetsMap[segment] =
            posix.join(importPath, posix.joinAll(segments));
      } else {
        nestedAssetsMap.putIfAbsent(segment, () => <String, Object?>{});
        nestedAssetsMap = nestedAssetsMap[segment]! as Map<String, Object?>;
        if (!nestedAssetsMap.containsKey('')) {
          nestedAssetsMap[''] = posix.joinAll(<String>[
            importPath,
            ...segments.sublist(0, segments.length - index - 1)
          ]);
        }
      }
    }
  }
}