Skip to content

Commit

Permalink
Filter package list based on tracking private packages config
Browse files Browse the repository at this point in the history
Fixes #620
  • Loading branch information
JakeGinnivan committed May 22, 2022
1 parent af77a33 commit f2029e8
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 8 deletions.
46 changes: 40 additions & 6 deletions packages/cli/src/commands/add/createChangeset.ts
Expand Up @@ -36,7 +36,8 @@ async function confirmMajorRelease(pkgJSON: PackageJSON) {

async function getPackagesToRelease(
changedPackages: Array<string>,
allPackages: Array<Package>
allPackages: Array<Package>,
trackPrivatePackages: boolean
) {
function askInitialReleaseQuestion(defaultChoiceList: Array<any>) {
return cli.askCheckboxPlus(
Expand All @@ -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)
Expand Down Expand Up @@ -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<string>,
allPackages: Package[]
allPackages: Package[],
trackPrivatePackages: boolean
): Promise<{ confirmed: boolean; summary: string; releases: Array<Release> }> {
const releases: Array<Release> = [];

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);

Expand Down
6 changes: 5 additions & 1 deletion packages/cli/src/commands/add/index.ts
Expand Up @@ -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) {
Expand Down
Expand Up @@ -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();
});
Expand Down

0 comments on commit f2029e8

Please sign in to comment.