Skip to content

Commit

Permalink
fix: Completely ignore peerDependencies during publish
Browse files Browse the repository at this point in the history
Changes to a peer version range are always semver major, and should be as broad as possible.

refs lerna#1018
  • Loading branch information
evocateur committed Jan 9, 2018
1 parent b3ed534 commit 431aa4e
Show file tree
Hide file tree
Showing 8 changed files with 93 additions and 53 deletions.
2 changes: 1 addition & 1 deletion src/VersionSerializer.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ export default class VersionSerializer {
constructor({ graphDependencies, versionParser }) {
this._graphDependencies = graphDependencies;
this._versionParser = versionParser;
this._dependenciesKeys = ["dependencies", "devDependencies", "peerDependencies"];
this._dependenciesKeys = ["dependencies", "devDependencies"];
this._strippedPrefixes = new Map();
}

Expand Down
1 change: 0 additions & 1 deletion src/commands/PublishCommand.js
Original file line number Diff line number Diff line change
Expand Up @@ -584,7 +584,6 @@ export default class PublishCommand extends Command {
// update pkg dependencies
this.updatePackageDepsObject(pkg, "dependencies", exact);
this.updatePackageDepsObject(pkg, "devDependencies", exact);
this.updatePackageDepsObject(pkg, "peerDependencies", exact);

// exec preversion script
this.runSyncScriptInPackage(pkg, "preversion");
Expand Down
4 changes: 2 additions & 2 deletions test/Package.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ describe("Package", () => {
scripts: { "my-script": "echo 'hello world'" },
dependencies: { "my-dependency": "^1.0.0" },
devDependencies: { "my-dev-dependency": "^1.0.0" },
peerDependencies: { "my-peer-dependency": "^1.0.0" }
peerDependencies: { "my-peer-dependency": ">=1.0.0" }
},
"/path/to/package"
);
Expand Down Expand Up @@ -75,7 +75,7 @@ describe("Package", () => {

describe("get .peerDependencies", () => {
it("should return the peerDependencies", () => {
expect(pkg.peerDependencies).toEqual({ "my-peer-dependency": "^1.0.0" });
expect(pkg.peerDependencies).toEqual({ "my-peer-dependency": ">=1.0.0" });
});
});

Expand Down
3 changes: 1 addition & 2 deletions test/PackageGraph.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ describe("PackageGraph", () => {
scripts: { "my-script": "echo 'hello world'" },
dependencies: { "my-dependency": "^1.0.0" },
devDependencies: { "my-dev-dependency": "^1.0.0" },
peerDependencies: { "my-peer-dependency": "^1.0.0" }
},
"/path/to/package1"
),
Expand All @@ -33,7 +32,7 @@ describe("PackageGraph", () => {
scripts: { "my-script": "echo 'hello world'" },
dependencies: { "my-dependency": "^1.0.0" },
devDependencies: { "my-package-1": dependencyVersion },
peerDependencies: { "my-peer-dependency": "^1.0.0" }
peerDependencies: { "my-package-1": ">=1.0.0" }
},
"/path/to/package2"
)
Expand Down
4 changes: 4 additions & 0 deletions test/PublishCommand.js
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,10 @@ describe("PublishCommand", () => {
expect(updatedPackageJSON("package-3").devDependencies).toMatchObject({
"package-2": "^1.0.1",
});
// peerDependencies are _never_ modified automatically
expect(updatedPackageJSON("package-3").peerDependencies).toMatchObject({
"package-2": "^1.0.0",
});
expect(updatedPackageJSON("package-4").dependencies).toMatchObject({
"package-1": "^0.0.0",
});
Expand Down
125 changes: 80 additions & 45 deletions test/VersionSerializer.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import VersionSerializer from "../src/VersionSerializer";
log.level = "silent";

describe("VersionSerializer", () => {

let serializer;

beforeEach(() => {
Expand All @@ -29,7 +28,6 @@ describe("VersionSerializer", () => {
});

describe("deserialize", () => {

it("should use version parser for inter-package dependencies only", () => {
const mockParser = {
parseVersion: jest.fn().mockReturnValue({
Expand All @@ -48,11 +46,16 @@ describe("VersionSerializer", () => {
const pkg = {
name: "my-package-1",
version: "1.0.0",
bin: "bin.js",
scripts: { "my-script": "echo 'hello world'" },
dependencies: { "my-dependency": "^1.0.0" },
devDependencies: { "my-package-2": "^1.0.0" },
peerDependencies: { "my-package-3": "^1.0.0" }
dependencies: {
"my-dependency": "^1.0.0",
},
devDependencies: {
"my-package-2": "^1.0.0",
"my-package-3": "^1.0.0",
},
peerDependencies: {
"my-package-3": ">=1.0.0",
}
};

serializer.deserialize(pkg);
Expand All @@ -62,12 +65,16 @@ describe("VersionSerializer", () => {
it("should not touch versions parser does not recognize", () => {
const pkg = {
name: "my-package-1",
version: "1.0.0",
bin: "bin.js",
scripts: { "my-script": "echo 'hello world'" },
dependencies: { "my-dependency": "^1.0.0" },
devDependencies: { "my-package-2": "^1.0.0" },
peerDependencies: { "my-package-3": "^1.0.0" }
dependencies: {
"my-dependency": "^1.0.0",
},
devDependencies: {
"my-package-2": "^1.0.0",
"my-package-3": "^1.0.0",
},
peerDependencies: {
"my-package-3": ">=1.0.0",
}
};

expect(serializer.deserialize(pkg)).toEqual(pkg);
Expand All @@ -77,69 +84,97 @@ describe("VersionSerializer", () => {
expect(serializer.deserialize({
name: "my-package-1",
version: "1.0.0",
bin: "bin.js",
scripts: { "my-script": "echo 'hello world'" },
dependencies: { "my-dependency": "dont-touch-this#1.0.0" },
devDependencies: { "my-package-2": "bbb#1.0.0" },
peerDependencies: { "my-package-3": "ccc#1.0.0" }
dependencies: {
"my-dependency": "dont-touch-this#1.0.0",
},
devDependencies: {
"my-package-2": "bbb#1.0.0",
"my-package-3": "ccc#1.0.0",
},
peerDependencies: {
"my-package-3": ">=1.0.0",
}
})).toEqual({
name: "my-package-1",
version: "1.0.0",
bin: "bin.js",
scripts: { "my-script": "echo 'hello world'" },
dependencies: { "my-dependency": "dont-touch-this#1.0.0" },
devDependencies: { "my-package-2": "1.0.0" },
peerDependencies: { "my-package-3": "1.0.0" }
dependencies: {
"my-dependency": "dont-touch-this#1.0.0",
},
devDependencies: {
"my-package-2": "1.0.0",
"my-package-3": "1.0.0",
},
peerDependencies: {
"my-package-3": ">=1.0.0",
}
});
});
});

describe("serialize", () => {

it("should not touch versions parser does not recognize", () => {
const pkg = {
name: "my-package-1",
version: "1.0.0",
bin: "bin.js",
scripts: { "my-script": "echo 'hello world'" },
dependencies: { "my-dependency": "^1.0.0" },
devDependencies: { "my-package-2": "^1.0.0" },
peerDependencies: { "my-package-3": "^1.0.0" }
dependencies: {
"my-dependency": "^1.0.0",
},
devDependencies: {
"my-package-2": "^1.0.0",
"my-package-3": "^1.0.0",
},
peerDependencies: {
"my-package-3": ">=1.0.0",
}
};

expect(serializer.serialize(pkg)).toEqual(pkg);
});

it("should write back version strings transformed by deserialize", () => {

// since serializer is stateful, version prefixes will be stored in its state
serializer.deserialize({
name: "my-package-1",
version: "1.0.0",
bin: "bin.js",
scripts: { "my-script": "echo 'hello world'" },
dependencies: { "my-dependency": "dont-touch-this#1.0.0" },
devDependencies: { "my-package-2": "bbb#1.0.0" },
peerDependencies: { "my-package-3": "ccc#1.0.0" }
dependencies: {
"my-dependency": "dont-touch-this#1.0.0",
},
devDependencies: {
"my-package-2": "bbb#1.0.0",
"my-package-3": "ccc#1.0.0",
},
peerDependencies: {
"my-package-3": ">=1.0.0",
}
})

// the preserved prefixes should be written back
expect(serializer.serialize({
name: "my-package-1",
version: "1.0.0",
bin: "bin.js",
scripts: { "my-script": "echo 'hello world'" },
dependencies: { "my-dependency": "dont-touch-this#1.0.0" },
devDependencies: { "my-package-2": "1.0.0" },
peerDependencies: { "my-package-3": "1.0.0" }
dependencies: {
"my-dependency": "dont-touch-this#1.0.0",
},
devDependencies: {
"my-package-2": "1.0.0",
"my-package-3": "1.0.0",
},
peerDependencies: {
"my-package-3": ">=1.0.0",
}
})).toEqual({
name: "my-package-1",
version: "1.0.0",
bin: "bin.js",
scripts: { "my-script": "echo 'hello world'" },
dependencies: { "my-dependency": "dont-touch-this#1.0.0" },
devDependencies: { "my-package-2": "bbb#1.0.0" },
peerDependencies: { "my-package-3": "ccc#1.0.0" }
dependencies: {
"my-dependency": "dont-touch-this#1.0.0",
},
devDependencies: {
"my-package-2": "bbb#1.0.0",
"my-package-3": "ccc#1.0.0",
},
peerDependencies: {
"my-package-3": ">=1.0.0",
}
});
});
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "package-1",
"version": "1.0.0",
"peerDependencies": {
"external": "^1.0.0",
"package-2": "^1.0.0"
"external": "^1.0.0 || ^2.0.0",
"package-2": ">=1.0.0"
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
{
"name": "package-3",
"version": "1.0.0",
"peerDependencies": {
"package-2": "^1.0.0"
},
"devDependencies": {
"package-2": "^1.0.0"
}
Expand Down

0 comments on commit 431aa4e

Please sign in to comment.