Skip to content

Commit 5aa226f

Browse files
Deduplicate packageManager creation (#735)
1 parent aa03498 commit 5aa226f

File tree

7 files changed

+25
-15
lines changed

7 files changed

+25
-15
lines changed

source/cli-implementation.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import logSymbols from 'log-symbols';
55
import meow from 'meow';
66
import updateNotifier from 'update-notifier';
77
import {gracefulExit} from 'exit-hook';
8+
import {getPackageManagerConfig} from './package-manager/index.js';
89
import config from './config.js';
910
import * as util from './util.js';
1011
import * as git from './git-util.js';
@@ -106,7 +107,7 @@ updateNotifier({pkg: cli.pkg}).notify();
106107

107108
/** @typedef {Awaited<ReturnType<typeof getOptions>>['options']} Options */
108109

109-
export async function getOptions() {
110+
async function getOptions() {
110111
const {package_, rootDirectory} = await util.readPackage(cli.flags.contents);
111112

112113
const localConfig = await config(rootDirectory);
@@ -124,6 +125,12 @@ export async function getOptions() {
124125
package_.packageManager = flags.packageManager;
125126
}
126127

128+
const packageManager = getPackageManagerConfig(rootDirectory, package_);
129+
130+
if (packageManager.throwOnExternalRegistry && npm.isExternalRegistry(package_)) {
131+
throw new Error(`External registry is not yet supported with ${packageManager.id}.`);
132+
}
133+
127134
const runPublish = !flags.releaseDraftOnly && flags.publish && !package_.private;
128135

129136
const availability = runPublish ? await npm.isPackageNameAvailable(package_) : {
@@ -138,13 +145,18 @@ export async function getOptions() {
138145

139146
const options = await ui({
140147
...flags,
148+
packageManager,
141149
runPublish,
142150
availability,
143151
version,
144152
branch,
145153
}, {package_, rootDirectory});
146154

147-
return {options, rootDirectory, package_};
155+
return {
156+
options: {...options, packageManager},
157+
rootDirectory,
158+
package_,
159+
};
148160
}
149161

150162
try {

source/index.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import {getPackagePublishArguments} from './npm/publish.js';
1818
import enable2fa, {getEnable2faArguments} from './npm/enable-2fa.js';
1919
import handleNpmError from './npm/handle-npm-error.js';
2020
import releaseTaskHelper from './release-task-helper.js';
21-
import {findLockfile, getPackageManagerConfig, printCommand} from './package-manager/index.js';
21+
import {findLockfile, printCommand} from './package-manager/index.js';
2222
import * as util from './util.js';
2323
import * as git from './git-util.js';
2424
import * as npm from './npm/util.js';
@@ -36,9 +36,7 @@ const exec = (command, arguments_, options) => {
3636
@param {import('./cli-implementation.js').Options} options
3737
@param {{package_: import('read-pkg').NormalizedPackageJson; rootDirectory: string}} context
3838
*/
39-
const np = async (input = 'patch', options, {package_, rootDirectory}) => {
40-
const packageManager = getPackageManagerConfig(rootDirectory, package_);
41-
39+
const np = async (input = 'patch', {packageManager, ...options}, {package_, rootDirectory}) => {
4240
// TODO: Remove sometime far in the future
4341
if (options.skipCleanup) {
4442
options.cleanup = false;

source/ui.js

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import {htmlEscape} from 'escape-goat';
55
import isScoped from 'is-scoped';
66
import isInteractive from 'is-interactive';
77
import {execa} from 'execa';
8-
import {getPackageManagerConfig} from './package-manager/index.js';
98
import Version, {SEMVER_INCREMENTS} from './version.js';
109
import * as util from './util.js';
1110
import * as git from './git-util.js';
@@ -125,17 +124,11 @@ const checkNewFilesAndDependencies = async (package_, rootDirectory) => {
125124
@param {import('./cli-implementation.js').CLI['flags']} options
126125
@param {{package_: import('read-pkg').NormalizedPackageJson; rootDirectory: string}} context
127126
*/
128-
const ui = async (options, {package_, rootDirectory}) => {
127+
const ui = async ({packageManager, ...options}, {package_, rootDirectory}) => { // eslint-disable-line complexity
129128
const oldVersion = package_.version;
130129
const extraBaseUrls = ['gitlab.com'];
131130
const repoUrl = package_.repository && githubUrlFromGit(package_.repository.url, {extraBaseUrls});
132131

133-
const packageManager = getPackageManagerConfig(rootDirectory, package_);
134-
135-
if (packageManager.throwOnExternalRegistry && npm.isExternalRegistry(package_)) {
136-
throw new Error(`External registry is not yet supported with ${packageManager.id}.`);
137-
}
138-
139132
const {stdout: registryUrl} = await execa(...packageManager.getRegistryCommand);
140133
const releaseBranch = options.branch;
141134

test/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
import test from 'ava';
22
import sinon from 'sinon';
33
import esmock from 'esmock';
4+
import {npmConfig as packageManager} from '../source/package-manager/configs.js';
45
import * as util from '../source/util.js';
56
import np from '../source/index.js';
67

78
const defaultOptions = {
89
cleanup: true,
910
tests: true,
1011
publish: true,
12+
packageManager,
1113
runPublish: true,
1214
availability: {
1315
isAvailable: false,

test/ui/new-files-dependencies.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {execa} from 'execa';
44
import {removePackageDependencies, updatePackage} from 'write-package';
55
import stripAnsi from 'strip-ansi';
66
import {readPackage} from 'read-pkg';
7+
import {npmConfig as packageManager} from '../../source/package-manager/configs.js';
78
import {createIntegrationTest} from '../_helpers/integration-test.js';
89
import {mockInquirer} from '../_helpers/mock-inquirer.js';
910

@@ -52,7 +53,7 @@ const createFixture = test.macro(async (t, package_, commands, expected) => {
5253
},
5354
});
5455

55-
await ui({runPublish: true, version: 'major', yarn: false}, {package_, rootDirectory: temporaryDirectory});
56+
await ui({runPublish: true, version: 'major', packageManager}, {package_, rootDirectory: temporaryDirectory});
5657
const logs = logsArray.join('').split('\n').map(log => stripAnsi(log));
5758

5859
const {unpublished, firstTime, dependencies} = expected;

test/ui/prompts/tags.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import test from 'ava';
22
import sinon from 'sinon';
3+
import {npmConfig as packageManager} from '../../../source/package-manager/configs.js';
34
import {npPackage} from '../../../source/util.js';
45
import {mockInquirer} from '../../_helpers/mock-inquirer.js';
56

@@ -25,6 +26,7 @@ const testUi = test.macro(async (t, {version, tags, answers}, assertions) => {
2526
});
2627

2728
const results = await ui({
29+
packageManager,
2830
runPublish: true,
2931
availability: {},
3032
}, {

test/ui/prompts/version.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import test from 'ava';
22
import sinon from 'sinon';
3+
import {npmConfig as packageManager} from '../../../source/package-manager/configs.js';
34
import {mockInquirer} from '../../_helpers/mock-inquirer.js';
45

56
const testUi = test.macro(async (t, {version, answers}, assertions) => {
@@ -20,6 +21,7 @@ const testUi = test.macro(async (t, {version, answers}, assertions) => {
2021
});
2122

2223
const results = await ui({
24+
packageManager,
2325
runPublish: false,
2426
availability: {},
2527
}, {

0 commit comments

Comments
 (0)