(directory: string, options: FileOptions)
| 61 | } |
| 62 | |
| 63 | function getFileList(directory: string, options: FileOptions) { |
| 64 | return Effect.gen(function*() { |
| 65 | const fs = yield* FileSystem.FileSystem |
| 66 | const path = yield* Path.Path |
| 67 | const files = yield* Effect.orDie(fs.readDirectory(directory)).pipe( |
| 68 | // Always prepend the `".."` option to the file list but allow it |
| 69 | // to be filtered out if the user so desires |
| 70 | Effect.map((files) => ["..", ...files]) |
| 71 | ) |
| 72 | return yield* Effect.filter(files, (file) => { |
| 73 | const result = options.filter(file) |
| 74 | const userDefinedFilter = Effect.isEffect(result) |
| 75 | ? result |
| 76 | : Effect.succeed(result) |
| 77 | const directoryFilter = options.type === "directory" |
| 78 | ? Effect.map( |
| 79 | Effect.orDie(fs.stat(path.join(directory, file))), |
| 80 | (info) => info.type === "Directory" |
| 81 | ) |
| 82 | : Effect.succeed(true) |
| 83 | return Effect.zipWith(userDefinedFilter, directoryFilter, (a, b) => a && b) |
| 84 | }, { concurrency: files.length }) |
| 85 | }) |
| 86 | } |
| 87 | |
| 88 | function handleClear(options: FileOptions) { |
| 89 | return (state: State, _: Prompt.Prompt.Action<State, string>) => { |
no test coverage detected