public function generate($destinationDirectory)
    {
        $destinationDirectory = $destinationDirectory;

        $generatedPaths = [];

        $this->resolveAutomaticallyIgnoredPaths($destinationDirectory);

        foreach ($this->getPaths() as $pathKey => $path) {
            $fullPath = $destinationDirectory . DIRECTORY_SEPARATOR . $path['path'];

            if (!$this->shouldBeIgnored($path['path'])) {
                if ($path['type'] == 'dir') {
                    $this->fileSystem->makeDirectory($fullPath, 0755, true, true);
                } else {
                    // There are two steps here:
                    // 1st: Recursively create the directory structure for the file (it might not exist)
                    // 2nd: Create an empty file using `touch()` since we are guaranteed the directory structure exists.
                    $this->fileSystem->makeDirectory(dirname($fullPath), 0755, true, true);
                    touch($fullPath);
                }

                $generatedPaths[$pathKey] = ($path + ['full' => $fullPath]);
            }
        }

        $this->removeFilesAndDirectories($destinationDirectory);

        return $generatedPaths;
    }