build method
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)
]);
}
}
}
}
}