(logger: Logger, roots: string[], excludedFolders: string[], options: { sort?: boolean; requirePubspec?: boolean, searchDepth: number, onlyWorkspaceRoots?: boolean }, token: MyCancellationToken)
| 338 | // - have a project create trigger file |
| 339 | // - are the Flutter repo root |
| 340 | export async function findProjectFolders(logger: Logger, roots: string[], excludedFolders: string[], options: { sort?: boolean; requirePubspec?: boolean, searchDepth: number, onlyWorkspaceRoots?: boolean }, token: MyCancellationToken): Promise<string[]> { |
| 341 | const dartToolFolderName = `${path.sep}.dart_tool${path.sep}`; |
| 342 | |
| 343 | let previousLevelFolders = roots.slice(); |
| 344 | let allPossibleFolders = previousLevelFolders.slice(); |
| 345 | // Start at 1, as we already added the roots. |
| 346 | const searchDepth = options.onlyWorkspaceRoots ? 1 : options.searchDepth; |
| 347 | for (let i = 1; i < searchDepth; i++) { |
| 348 | let nextLevelFolders: string[] = []; |
| 349 | for (const folder of previousLevelFolders) { |
| 350 | if (token.isCancellationRequested) |
| 351 | break; |
| 352 | nextLevelFolders = nextLevelFolders.concat(await getChildFolders(logger, folder)); |
| 353 | } |
| 354 | |
| 355 | allPossibleFolders = allPossibleFolders.concat(nextLevelFolders); |
| 356 | previousLevelFolders = nextLevelFolders; |
| 357 | } |
| 358 | |
| 359 | allPossibleFolders = allPossibleFolders |
| 360 | .filter((f) => !f.includes(dartToolFolderName) && excludedFolders.every((ef) => !isWithinPathOrEqual(f, ef))); |
| 361 | |
| 362 | const projectFolderPromises = allPossibleFolders.map(async (folder) => ({ |
| 363 | exists: options?.requirePubspec |
| 364 | ? await hasPubspecAsync(folder) |
| 365 | : options.onlyWorkspaceRoots || await hasPubspecAsync(folder) || await hasCreateTriggerFileAsync(folder) || await isFlutterRepoAsync(folder), |
| 366 | folder, |
| 367 | })); |
| 368 | const projectFoldersChecks = await Promise.all(projectFolderPromises); |
| 369 | const projectFolders = projectFoldersChecks |
| 370 | .filter((res) => res.exists) |
| 371 | .map((res) => res.folder); |
| 372 | |
| 373 | return options?.sort |
| 374 | ? sortBy(projectFolders, (p) => p.toLowerCase()) |
| 375 | : projectFolders; |
| 376 | } |
| 377 | |
| 378 | export function getSdkVersion(logger: Logger, { sdkRoot }: { sdkRoot?: string }): string | undefined { |
| 379 | if (!sdkRoot) |
no test coverage detected