in src/build/BuildStep.php [61:114]
protected static function findSources(
string $root,
\ConstSet<string> $extensions,
): vec<string> {
$root = \realpath($root);
Log::i("\nFinding sources in %s", $root);
$index = self::getIndexFile($root);
if ($index !== null && \file_exists($index)) {
$files = JSON\decode_as_shape(
DirectoryIndex::class,
\file_get_contents($index),
)['files'];
Log::v(' (cached)');
return Vec\filter(
$files,
$f ==> C\any($extensions, $ext ==> Str\ends_with($f, '.'.$ext)),
);
}
$rdi = new \RecursiveDirectoryIterator(
$root,
\FilesystemIterator::CURRENT_AS_FILEINFO |
\FilesystemIterator::FOLLOW_SYMLINKS,
);
$rii = new \RecursiveIteratorIterator(
$rdi,
\RecursiveIteratorIterator::CHILD_FIRST,
);
$all_files = vec[];
$files = vec[];
foreach ($rii as $info) {
if (!$info->isFile()) {
continue;
}
$all_files[] = $info->getPathname();
if ($extensions->contains($info->getExtension())) {
$files[] = $info->getPathname();
Log::v('.');
}
}
if ($index !== null) {
if (!\file_exists(BuildPaths::DIR_INDEX_ROOT)) {
\mkdir(BuildPaths::DIR_INDEX_ROOT, 0755);
}
\file_put_contents(
$index,
JSON\encode_shape(DirectoryIndex::class, shape('files' => $all_files)),
);
}
return $files;
}