From f2029e8a0288b54a1c3f2c7abae0ddc97d6e8bde Mon Sep 17 00:00:00 2001 From: Jake Ginnivan Date: Sun, 22 May 2022 10:36:00 +0800 Subject: [PATCH] Filter package list based on tracking private packages config Fixes #620 --- .../cli/src/commands/add/createChangeset.ts | 46 ++++++++++++++++--- packages/cli/src/commands/add/index.ts | 6 ++- .../publish/__tests__/publishPackages.test.ts | 3 +- 3 files changed, 47 insertions(+), 8 deletions(-) diff --git a/packages/cli/src/commands/add/createChangeset.ts b/packages/cli/src/commands/add/createChangeset.ts index 87aa9fe1f..080973d37 100644 --- a/packages/cli/src/commands/add/createChangeset.ts +++ b/packages/cli/src/commands/add/createChangeset.ts @@ -36,7 +36,8 @@ async function confirmMajorRelease(pkgJSON: PackageJSON) { async function getPackagesToRelease( changedPackages: Array, - allPackages: Array + allPackages: Array, + trackPrivatePackages: boolean ) { function askInitialReleaseQuestion(defaultChoiceList: Array) { return cli.askCheckboxPlus( @@ -58,6 +59,20 @@ async function getPackagesToRelease( ); } + const pkgJsonsByName = getPkgJsonByName(allPackages); + + // filter out packages which changesets is not tracking + allPackages = allPackages.filter( + pkg => !isValidChangesetPackage(pkg.packageJson, trackPrivatePackages) + ); + changedPackages = changedPackages.filter( + pkgName => + !isValidChangesetPackage( + pkgJsonsByName.get(pkgName)!, + trackPrivatePackages + ) + ); + if (allPackages.length > 1) { const unchangedPackagesNames = allPackages .map(({ packageJson }) => packageJson.name) @@ -92,25 +107,44 @@ async function getPackagesToRelease( return [allPackages[0].packageJson.name]; } +function getPkgJsonByName(packages: Package[]) { + return new Map( + packages.map(({ packageJson }) => [packageJson.name, packageJson]) + ); +} + +function isValidChangesetPackage( + packageJson: PackageJSON, + trackPrivatePackages: boolean +) { + const hasVersionField = !!packageJson.version; + + if (trackPrivatePackages) { + return hasVersionField; + } + + return !packageJson.private && hasVersionField; +} + function formatPkgNameAndVersion(pkgName: string, version: string) { return `${bold(pkgName)}@${bold(version)}`; } export default async function createChangeset( changedPackages: Array, - allPackages: Package[] + allPackages: Package[], + trackPrivatePackages: boolean ): Promise<{ confirmed: boolean; summary: string; releases: Array }> { const releases: Array = []; if (allPackages.length > 1) { const packagesToRelease = await getPackagesToRelease( changedPackages, - allPackages + allPackages, + trackPrivatePackages ); - let pkgJsonsByName = new Map( - allPackages.map(({ packageJson }) => [packageJson.name, packageJson]) - ); + let pkgJsonsByName = getPkgJsonByName(allPackages); let pkgsLeftToGetBumpTypeFor = new Set(packagesToRelease); diff --git a/packages/cli/src/commands/add/index.ts b/packages/cli/src/commands/add/index.ts index e084a2b89..4e9e9c537 100644 --- a/packages/cli/src/commands/add/index.ts +++ b/packages/cli/src/commands/add/index.ts @@ -41,7 +41,11 @@ export default async function add( const changePackagesName = changedPackages .filter(a => a) .map(pkg => pkg.packageJson.name); - newChangeset = await createChangeset(changePackagesName, packages.packages); + newChangeset = await createChangeset( + changePackagesName, + packages.packages, + config.enablePrivatePackageTracking + ); printConfirmationMessage(newChangeset, packages.packages.length > 1); if (!newChangeset.confirmed) { diff --git a/packages/cli/src/commands/publish/__tests__/publishPackages.test.ts b/packages/cli/src/commands/publish/__tests__/publishPackages.test.ts index 8761e9eb6..de6f24713 100644 --- a/packages/cli/src/commands/publish/__tests__/publishPackages.test.ts +++ b/packages/cli/src/commands/publish/__tests__/publishPackages.test.ts @@ -40,7 +40,8 @@ describe("publishPackages", () => { await publishPackages({ packages: (await getPackages(cwd)).packages, access: "public", - preState: undefined + preState: undefined, + trackPrivatePackages: true }); expect(npmUtils.getTokenIsRequired).not.toHaveBeenCalled(); });