Skip to content

Commit 02db160

Browse files
Blaszlukebatchelor
authored andcommitted
Update workspace versions when running bolt add on an existing dependency in the project root (#251)
* Update workspace versions when running bolt add on an existing dependency in the project root * Fix flow errors
1 parent e14ceda commit 02db160

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

src/utils/__tests__/addDependenciesToPackages.test.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,52 @@ describe('utils/addDependenciesToPackages', () => {
142142
expect(pkg.getDependencyVersionRange('project-only-dep')).toEqual('^1.0.0');
143143
});
144144

145+
test('should update all package dependencies when run from project root', async () => {
146+
let cwd = f.copy('package-with-external-deps-installed');
147+
let project = await Project.init(cwd);
148+
let packages = await project.getPackages();
149+
let fooPkg = project.getPackageByName(packages, 'foo');
150+
let barPkg = project.getPackageByName(packages, 'bar');
151+
if (!fooPkg || !barPkg) {
152+
// This check is required to satisfy flow
153+
throw new Error('missing packages');
154+
}
155+
156+
expect(project.pkg.getDependencyVersionRange('global-dep')).toEqual(
157+
'^1.0.0'
158+
);
159+
expect(fooPkg.getDependencyVersionRange('global-dep')).toEqual('^1.0.0');
160+
expect(barPkg.getDependencyVersionRange('global-dep')).toEqual('^1.0.0');
161+
162+
expect(project.pkg.getDependencyVersionRange('foo-dep')).toEqual('^1.0.0');
163+
expect(fooPkg.getDependencyVersionRange('foo-dep')).toEqual('^1.0.0');
164+
expect(barPkg.getDependencyVersionRange('foo-dep')).toEqual(null);
165+
166+
await addDependenciesToPackage(project, project.pkg, [
167+
{ name: 'global-dep', version: '^1.1.0' },
168+
{ name: 'foo-dep', version: '^1.2.0' }
169+
]);
170+
171+
// Refetch packages as their config will be stale
172+
packages = await project.getPackages();
173+
fooPkg = project.getPackageByName(packages, 'foo');
174+
barPkg = project.getPackageByName(packages, 'bar');
175+
if (!fooPkg || !barPkg) {
176+
// This check is required to satisfy flow
177+
throw new Error('missing packages');
178+
}
179+
180+
expect(project.pkg.getDependencyVersionRange('global-dep')).toEqual(
181+
'^1.1.0'
182+
);
183+
expect(fooPkg.getDependencyVersionRange('global-dep')).toEqual('^1.1.0');
184+
expect(barPkg.getDependencyVersionRange('global-dep')).toEqual('^1.1.0');
185+
186+
expect(project.pkg.getDependencyVersionRange('foo-dep')).toEqual('^1.2.0');
187+
expect(fooPkg.getDependencyVersionRange('foo-dep')).toEqual('^1.2.0');
188+
expect(barPkg.getDependencyVersionRange('foo-dep')).toEqual(null);
189+
});
190+
145191
test('should be able to add packages with tagged versions (without specifying)', async () => {
146192
let cwd = f.copy('package-with-external-deps-installed');
147193
let project = await Project.init(cwd);

src/utils/addDependenciesToPackages.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { BoltError } from './errors';
1010
import * as logger from './logger';
1111
import * as yarn from './yarn';
1212
import symlinkPackageDependencies from './symlinkPackageDependencies';
13+
import updateWorkspaceDependencies from '../functions/updateWorkspaceDependencies';
1314

1415
export default async function addDependenciesToPackage(
1516
project: Project,
@@ -43,6 +44,15 @@ export default async function addDependenciesToPackage(
4344
messages.cannotInstallWorkspaceInProject(internalDeps[0].name)
4445
);
4546
}
47+
48+
// Update all workspace versions
49+
const depsToUpgrade = externalDeps.reduce((prev, dep) => {
50+
prev[dep.name] = dep.version;
51+
return prev;
52+
}, {});
53+
await updateWorkspaceDependencies(depsToUpgrade, {
54+
cwd: project.pkg.dir
55+
});
4656
return true;
4757
}
4858

0 commit comments

Comments
 (0)