Skip to content

Commit fe7c912

Browse files
author
Tim Keir
committed
Disallow self referencing deps
1 parent 031b5da commit fe7c912

File tree

4 files changed

+54
-3
lines changed

4 files changed

+54
-3
lines changed

.yarn/versions/1157e53a.yml

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
releases:
2+
"@yarnpkg/builder": patch
3+
"@yarnpkg/cli": patch
4+
"@yarnpkg/core": patch
5+
"@yarnpkg/doctor": patch
6+
"@yarnpkg/extensions": patch
7+
"@yarnpkg/nm": patch
8+
"@yarnpkg/plugin-compat": patch
9+
"@yarnpkg/plugin-constraints": patch
10+
"@yarnpkg/plugin-dlx": patch
11+
"@yarnpkg/plugin-essentials": patch
12+
"@yarnpkg/plugin-exec": patch
13+
"@yarnpkg/plugin-file": patch
14+
"@yarnpkg/plugin-git": patch
15+
"@yarnpkg/plugin-github": patch
16+
"@yarnpkg/plugin-http": patch
17+
"@yarnpkg/plugin-init": patch
18+
"@yarnpkg/plugin-interactive-tools": patch
19+
"@yarnpkg/plugin-link": patch
20+
"@yarnpkg/plugin-nm": patch
21+
"@yarnpkg/plugin-npm": patch
22+
"@yarnpkg/plugin-npm-cli": patch
23+
"@yarnpkg/plugin-pack": patch
24+
"@yarnpkg/plugin-patch": patch
25+
"@yarnpkg/plugin-pnp": patch
26+
"@yarnpkg/plugin-pnpm": patch
27+
"@yarnpkg/plugin-stage": patch
28+
"@yarnpkg/plugin-typescript": patch
29+
"@yarnpkg/plugin-version": patch
30+
"@yarnpkg/plugin-workspace-tools": patch
31+
"@yarnpkg/pnpify": patch
32+
"@yarnpkg/sdks": patch

packages/acceptance-tests/pkg-tests-specs/sources/commands/add.test.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -549,9 +549,8 @@ describe(`Commands`, () => {
549549
await run(`add`, `no-deps`);
550550

551551
await expect(xfs.readJsonPromise(ppath.join(path, Filename.manifest))).resolves.toMatchObject({
552-
dependencies: {
553-
[`no-deps`]: `^2.0.0`,
554-
},
552+
// Note that Manifest.exportTo disallows depending on self
553+
dependencies: {},
555554
});
556555
}),
557556
);

packages/yarnpkg-core/sources/Manifest.ts

+9
Original file line numberDiff line numberDiff line change
@@ -871,6 +871,9 @@ export class Manifest {
871871
data.dependencies = Object.assign({}, ...structUtils.sortDescriptors(regularDependencies).map(dependency => {
872872
return {[structUtils.stringifyIdent(dependency)]: dependency.range};
873873
}));
874+
if (data.name && data.dependencies[data.name]) {
875+
delete data.dependencies[data.name];
876+
}
874877
} else {
875878
delete data.dependencies;
876879
}
@@ -887,6 +890,9 @@ export class Manifest {
887890
data.devDependencies = Object.assign({}, ...structUtils.sortDescriptors(this.devDependencies.values()).map(dependency => {
888891
return {[structUtils.stringifyIdent(dependency)]: dependency.range};
889892
}));
893+
if (data.name && data.devDependencies[data.name]) {
894+
delete data.devDependencies[data.name];
895+
}
890896
} else {
891897
delete data.devDependencies;
892898
}
@@ -895,6 +901,9 @@ export class Manifest {
895901
data.peerDependencies = Object.assign({}, ...structUtils.sortDescriptors(this.peerDependencies.values()).map(dependency => {
896902
return {[structUtils.stringifyIdent(dependency)]: dependency.range};
897903
}));
904+
if (data.name && data.peerDependencies[data.name]) {
905+
delete data.peerDependencies[data.name];
906+
}
898907
} else {
899908
delete data.peerDependencies;
900909
}

packages/yarnpkg-core/tests/Manifest.test.ts

+11
Original file line numberDiff line numberDiff line change
@@ -54,5 +54,16 @@ describe(`Manifest`, () => {
5454
const manifest = Manifest.fromText(`{ "name": "name", "bin": { "bin1": " ", "bin2": "./bin2.js" } }`);
5555
expect(manifest.exportTo({}).bin).toEqual({bin2: `./bin2.js`});
5656
});
57+
58+
it(`should remove dependency if referencing itself`, () => {
59+
const deps = `{ "bar": "^1.0.0", "foo": "^1.2.0" }`;
60+
const manifest = Manifest.fromText(`
61+
{ "name": "foo", "dependencies": ${deps}, "devDependencies": ${deps}, "peerDependencies": ${deps} }
62+
`);
63+
const exportedManifest = manifest.exportTo({});
64+
expect(exportedManifest.dependencies).toEqual({bar: `^1.0.0`});
65+
expect(exportedManifest.devDependencies).toEqual({bar: `^1.0.0`});
66+
expect(exportedManifest.peerDependencies).toEqual({bar: `^1.0.0`});
67+
});
5768
});
5869
});

0 commit comments

Comments
 (0)