From f022eb602de7103ed550ba02426a8f605d118d55 Mon Sep 17 00:00:00 2001 From: Austin Fahsl Date: Mon, 7 Nov 2022 12:15:45 -0500 Subject: [PATCH] fix(publish): support inconsistent workspace prefix usage (#3413) --- commands/publish/index.js | 27 +++++++++-------- ...lerna-publish-npm-workspace-prefix.spec.ts | 29 +++++++++++++++++-- 2 files changed, 41 insertions(+), 15 deletions(-) diff --git a/commands/publish/index.js b/commands/publish/index.js index 78ae12f42f0..9ca6b16d404 100644 --- a/commands/publish/index.js +++ b/commands/publish/index.js @@ -565,19 +565,22 @@ class PublishCommand extends Command { return pMap(updatesWithWorkspaceLinks, (node) => { for (const [depName, resolved] of node.localDependencies) { - let depVersion; - let savePrefix; - if (resolved.workspaceAlias) { - depVersion = this.updatesVersions.get(depName) || this.packageGraph.get(depName).pkg.version; - savePrefix = resolved.workspaceAlias === "*" ? "" : resolved.workspaceAlias; - } else { - const specMatch = resolved.workspaceSpec.match(/^workspace:([~^]?)(.*)/); - savePrefix = specMatch[1]; - depVersion = specMatch[2]; + // only update local dependencies with workspace: links + if (resolved.workspaceSpec) { + let depVersion; + let savePrefix; + if (resolved.workspaceAlias) { + depVersion = this.updatesVersions.get(depName) || this.packageGraph.get(depName).pkg.version; + savePrefix = resolved.workspaceAlias === "*" ? "" : resolved.workspaceAlias; + } else { + const specMatch = resolved.workspaceSpec.match(/^workspace:([~^]?)(.*)/); + savePrefix = specMatch[1]; + depVersion = specMatch[2]; + } + + // it no longer matters if we mutate the shared Package instance + node.pkg.updateLocalDependency(resolved, depVersion, savePrefix, { retainWorkspacePrefix: false }); } - - // it no longer matters if we mutate the shared Package instance - node.pkg.updateLocalDependency(resolved, depVersion, savePrefix, { retainWorkspacePrefix: false }); } // writing changes to disk handled in serializeChanges() diff --git a/e2e/tests/lerna-publish/lerna-publish-npm-workspace-prefix.spec.ts b/e2e/tests/lerna-publish/lerna-publish-npm-workspace-prefix.spec.ts index ae12a831647..5eab1730a6d 100644 --- a/e2e/tests/lerna-publish/lerna-publish-npm-workspace-prefix.spec.ts +++ b/e2e/tests/lerna-publish/lerna-publish-npm-workspace-prefix.spec.ts @@ -38,6 +38,7 @@ describe("lerna-publish-workspace-prefix", () => { await fixture.lerna("create test-workspace-exact -y"); await fixture.lerna("create test-workspace-compat -y"); await fixture.lerna("create test-workspace-approx -y"); + await fixture.lerna("create test-no-workspace-prefix -y"); await fixture.lerna("create test-main -y"); await fixture.updateJson(`packages/test-main/package.json`, (json) => ({ @@ -50,6 +51,7 @@ describe("lerna-publish-workspace-prefix", () => { "test-workspace-exact": `workspace:0.0.0`, "test-workspace-compat": `workspace:^0.0.0`, "test-workspace-approx": `workspace:~0.0.0`, + "test-no-workspace-prefix": `^0.0.0`, }, })); @@ -75,8 +77,9 @@ describe("lerna-publish-workspace-prefix", () => { expect(replaceVersion(output.combinedOutput)).toMatchInlineSnapshot(` lerna notice cli v999.9.9-e2e.0 - Found 7 packages to publish: + Found 8 packages to publish: - test-main => XX.XX.XX + - test-no-workspace-prefix => XX.XX.XX - test-workspace-alias-caret => XX.XX.XX - test-workspace-alias-star => XX.XX.XX - test-workspace-alias-tilde => XX.XX.XX @@ -88,9 +91,26 @@ describe("lerna-publish-workspace-prefix", () => { lerna info publish Publishing packages to npm... lerna notice Skipping all user and access validation due to third-party registry lerna notice Make sure you're authenticated properly ¯\\_(ツ)_/¯ - lerna WARN ENOLICENSE Packages test-main, test-workspace-alias-caret, test-workspace-alias-star, test-workspace-alias-tilde, test-workspace-approx, test-workspace-compat, and test-workspace-exact are missing a license. + lerna WARN ENOLICENSE Packages test-main, test-no-workspace-prefix, test-workspace-alias-caret, test-workspace-alias-star, test-workspace-alias-tilde, test-workspace-approx, test-workspace-compat, and test-workspace-exact are missing a license. lerna WARN ENOLICENSE One way to fix this is to add a LICENSE.md file to the root of this repository. lerna WARN ENOLICENSE See https://choosealicense.com for additional guidance. + lerna success published test-no-workspace-prefix XX.XX.XX + lerna notice + lerna notice 📦 test-no-workspace-prefix@XX.XX.XX + lerna notice === Tarball Contents === + lerna notice XXXB lib/test-no-workspace-prefix.js + lerna notice XXXB package.json + lerna notice XXXB README.md + lerna notice === Tarball Details === + lerna notice name: test-no-workspace-prefix + lerna notice version: XX.XX.XX + lerna notice filename: test-no-workspace-prefix-XX.XX.XX.tgz + lerna notice package size: XXXB + lerna notice unpacked size: XXXB + lerna notice shasum: {FULL_COMMIT_SHA} + lerna notice integrity: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + lerna notice total files: 3 + lerna notice lerna success published test-workspace-alias-caret XX.XX.XX lerna notice lerna notice 📦 test-workspace-alias-caret@XX.XX.XX @@ -212,13 +232,14 @@ describe("lerna-publish-workspace-prefix", () => { lerna notice Successfully published: - test-main@XX.XX.XX + - test-no-workspace-prefix@XX.XX.XX - test-workspace-alias-caret@XX.XX.XX - test-workspace-alias-star@XX.XX.XX - test-workspace-alias-tilde@XX.XX.XX - test-workspace-approx@XX.XX.XX - test-workspace-compat@XX.XX.XX - test-workspace-exact@XX.XX.XX - lerna success published 7 packages + lerna success published 8 packages `); @@ -242,6 +263,8 @@ describe("lerna-publish-workspace-prefix", () => { await unpublish("test-workspace-exact"); await unpublish("test-workspace-compat"); await unpublish("test-workspace-approx"); + await unpublish("test-no-workspace-prefix"); + await unpublish("test-main"); }); }); });