open static method
Lists dir (regular files only; symbolic links are refused as unsafe).
Implementation
static Future<DirectoryDomeContainer> open(
Directory dir, {
DomeLimits limits = const DomeLimits(),
}) async {
final root = dir.absolute.path;
final list = <DomeEntryInfo>[];
await for (final e in dir.list(recursive: true, followLinks: false)) {
if (e is Link) {
throw ValidationException(
e.path.substring(root.length + 1),
'symbolic link in a .dome',
);
}
if (e is! File) continue;
final rel = e.absolute.path
.substring(root.length + 1)
.replaceAll(Platform.pathSeparator, '/');
final bad = badEntryPath(rel);
if (bad != null) {
throw ValidationException(rel, 'unsafe entry path: $bad');
}
list.add(DomeEntryInfo(rel, await e.length(), stored: true));
if (list.length > limits.maxEntries) {
throw PayloadTooLargeException(
'more than ${limits.maxEntries} entries',
);
}
}
list.sort((a, b) => a.path.compareTo(b.path));
return DirectoryDomeContainer._(root, List.unmodifiable(list));
}