.then((json) => {
     if (!options.preferDownloaded) {
         assignWith(packageJson, json, (objValue, srcValue) => objValue === undefined ? srcValue : objValue);
     } else {
         Object.assign(packageJson, json);
     }
 })
    .tap((downloadedPackageJson) => {
        if (!options.preferDownloaded) {
            assignWith(packageJson, downloadedPackageJson, (objValue, srcValue) => objValue === undefined ? srcValue : objValue);
        } else {
            Object.assign(packageJson, omit(downloadedPackageJson, 'name'));
        }

        return writeFile(target, JSON.stringify(packageJson, null, 2));
    });