Skip to content

Commit

Permalink
Allow publishing if availability check fails (#490)
Browse files Browse the repository at this point in the history
  • Loading branch information
terenceodonoghue committed Feb 6, 2020
1 parent 607e5c1 commit ccdb8a5
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 4 deletions.
4 changes: 2 additions & 2 deletions source/cli.js
Expand Up @@ -91,11 +91,11 @@ updateNotifier({pkg: cli.pkg}).notify();
...cli.flags
};

const isAvailable = flags.publish ? await isPackageNameAvailable(pkg) : false;
const availability = await isPackageNameAvailable(pkg);

const version = cli.input.length > 0 ? cli.input[0] : false;

const options = await ui({...flags, exists: !isAvailable, version}, pkg);
const options = await ui({...flags, availability, version}, pkg);

if (!options.confirm) {
process.exit(0);
Expand Down
13 changes: 12 additions & 1 deletion source/npm/util.js
Expand Up @@ -84,13 +84,24 @@ exports.prereleaseTags = async packageName => {

exports.isPackageNameAvailable = async pkg => {
const args = [pkg.name];
const availability = {
isAvailable: false,
isUnknown: false
};

if (exports.isExternalRegistry(pkg)) {
args.push({
registryUrl: pkg.publishConfig.registry
});
}

return npmName(...args);
try {
availability.isAvailable = await npmName(...args) || false;
} catch {
availability.isUnknown = true;
}

return availability;
};

exports.isExternalRegistry = pkg => typeof pkg.publishConfig === 'object' && typeof pkg.publishConfig.registry === 'string';
Expand Down
19 changes: 18 additions & 1 deletion source/ui.js
Expand Up @@ -137,7 +137,7 @@ module.exports = async (options, pkg) => {
{
type: 'confirm',
name: 'publishScoped',
when: isScoped(pkg.name) && !options.exists && options.publish && !pkg.private,
when: isScoped(pkg.name) && !options.availability.isAvailable && !options.availability.isUnknown && options.publish && !pkg.private,
message: `This scoped repo ${chalk.bold.magenta(pkg.name)} hasn't been published. Do you want to publish it publicly?`,
default: false
}
Expand Down Expand Up @@ -170,6 +170,23 @@ module.exports = async (options, pkg) => {
}
}

if (options.availability.isUnknown) {
const answers = await inquirer.prompt([{
type: 'confirm',
name: 'confirm',
when: isScoped(pkg.name) && options.publish && !pkg.private,
message: `Failed to check availability of scoped repo name ${chalk.bold.magenta(pkg.name)}. Do you want to try and publish it anyway?`,
default: false
}]);

if (!answers.confirm) {
return {
...options,
...answers
};
}
}

const answers = await inquirer.prompt(prompts);

return {
Expand Down

0 comments on commit ccdb8a5

Please sign in to comment.