async copyTo(destination, src = this.files) {
        this.assets = this.assets || []

        let sourceFiles = await this.normalizeSourceFiles(src)
        let assets = [];

        // Copy an array of files to the destination file/directory
        // file -> file: no change in destination file name
        // directory -> file: this is an error
        // file -> directory: change name
        // directory -> directory: don't change name

        for (const file of sourceFiles) {
            const dest =
                file.isFile() &&
                destination.isDirectory() &&
                destination.name() !== file.name()
                    ? destination.append(file.name())
                    : destination;

            await file.copyToAsync(dest.path());

            // TODO: Can we remove this? It's sync and also just shouldn't be necessary
            dest.refresh();

            if (dest.isDirectory()) {
                assets.push(...(await dest.listContentsAsync({ hidden: false })));
            } else {
                assets.push(dest);
            }
        }

        this.assets = assets;
    }
Copy the src files to the given destination.

@param {File} destination
@param {string[]|File} [src]
@return {Promise<void>}