@uppy/utils
Version:
Shared utility functions for Uppy Core and plugins maintained by the Uppy team.
36 lines (35 loc) • 1.16 kB
text/typescript
/**
* Recursive function, calls the original callback() when the directory is entirely parsed.
*/
export default function getFilesAndDirectoriesFromDirectory(
directoryReader: FileSystemDirectoryReader,
oldEntries: FileSystemEntry[],
logDropError: (error?: unknown) => void,
{ onSuccess }: { onSuccess: (newEntries: FileSystemEntry[]) => void },
): void {
directoryReader.readEntries(
(entries) => {
const newEntries = [...oldEntries, ...entries]
// According to the FileSystem API spec, getFilesAndDirectoriesFromDirectory()
// must be called until it calls the onSuccess with an empty array.
if (entries.length) {
queueMicrotask(() => {
getFilesAndDirectoriesFromDirectory(
directoryReader,
newEntries,
logDropError,
{ onSuccess },
)
})
// Done iterating this particular directory
} else {
onSuccess(newEntries)
}
},
// Make sure we resolve on error anyway, it's fine if only one directory couldn't be parsed!
(error) => {
logDropError(error)
onSuccess(oldEntries)
},
)
}