From 8c4a0be8aedb33f0876408842cd9ddfccad8aa9d Mon Sep 17 00:00:00 2001 From: James Maher Date: Tue, 30 Jul 2024 11:44:59 -0400 Subject: [PATCH 1/5] prevent decoupled workspace dependencies --- .../installManager/WorkspaceInstallManager.ts | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/libraries/rush-lib/src/logic/installManager/WorkspaceInstallManager.ts b/libraries/rush-lib/src/logic/installManager/WorkspaceInstallManager.ts index 2c94c5d8b4d..0d62e7d4fea 100644 --- a/libraries/rush-lib/src/logic/installManager/WorkspaceInstallManager.ts +++ b/libraries/rush-lib/src/logic/installManager/WorkspaceInstallManager.ts @@ -279,7 +279,25 @@ export class WorkspaceInstallManager extends BaseInstallManager { shrinkwrapIsUpToDate = false; continue; } - } else if (dependencySpecifier.specifierType === DependencySpecifierType.Workspace) { + } else if ( + dependencySpecifier.specifierType === DependencySpecifierType.Workspace && + rushProject.decoupledLocalDependencies.has(name) + ) { + // If the dependency is a local project that is decoupled, then we need to ensure that it is not specified + // as a workspace project. If it is, then we need to update the package.json to remove the workspace notation. + // eslint-disable-next-line no-console + console.log(); + // eslint-disable-next-line no-console + console.log( + Colorize.red( + `"${rushProject.packageName}" depends on package ${name}@${version}, but also lists it in` + + `its "decoupledLocalDependencies" array. Either update the host project's package.json to use ` + + `a version from an external feed instead of "workspace:" notation, or remove the dependency from the ` + + `host project's "decoupledLocalDependencies" array in rush.json.` + ) + ); + throw new AlreadyReportedError(); + } else if (!rushProject.decoupledLocalDependencies.has(name)) { // Already specified as a local project. Allow the package manager to validate this continue; } From d53197e40b30a336317377a1e370b7253f7f3c75 Mon Sep 17 00:00:00 2001 From: James Maher Date: Tue, 30 Jul 2024 11:46:32 -0400 Subject: [PATCH 2/5] Rush change --- ...ent-decoupled-workspace-deps_2024-07-30-15-46.json | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 common/changes/@microsoft/rush/jmaher-prevent-decoupled-workspace-deps_2024-07-30-15-46.json diff --git a/common/changes/@microsoft/rush/jmaher-prevent-decoupled-workspace-deps_2024-07-30-15-46.json b/common/changes/@microsoft/rush/jmaher-prevent-decoupled-workspace-deps_2024-07-30-15-46.json new file mode 100644 index 00000000000..7b0f969a184 --- /dev/null +++ b/common/changes/@microsoft/rush/jmaher-prevent-decoupled-workspace-deps_2024-07-30-15-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "prevent workspace deps in decoupledLocalDependencies", + "type": "none", + "packageName": "@microsoft/rush" + } + ], + "packageName": "@microsoft/rush", + "email": "jamesmaher-dd@users.noreply.github.com" +} \ No newline at end of file From 6d4106b07215fad3148dcefc546c53db24f2946a Mon Sep 17 00:00:00 2001 From: James Maher <86268546+jamesmaher-dd@users.noreply.github.com> Date: Mon, 5 Aug 2024 23:59:38 -0400 Subject: [PATCH 3/5] Update common/changes/@microsoft/rush/jmaher-prevent-decoupled-workspace-deps_2024-07-30-15-46.json Co-authored-by: Ian Clanton-Thuon --- ...maher-prevent-decoupled-workspace-deps_2024-07-30-15-46.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/changes/@microsoft/rush/jmaher-prevent-decoupled-workspace-deps_2024-07-30-15-46.json b/common/changes/@microsoft/rush/jmaher-prevent-decoupled-workspace-deps_2024-07-30-15-46.json index 7b0f969a184..605eef1e917 100644 --- a/common/changes/@microsoft/rush/jmaher-prevent-decoupled-workspace-deps_2024-07-30-15-46.json +++ b/common/changes/@microsoft/rush/jmaher-prevent-decoupled-workspace-deps_2024-07-30-15-46.json @@ -1,7 +1,7 @@ { "changes": [ { - "comment": "prevent workspace deps in decoupledLocalDependencies", + "comment": "Emit an error if a `workspace:` specifier is used in a dependency that is listed in `decoupledLocalDependencies`.", "type": "none", "packageName": "@microsoft/rush" } From 42d018fcf969a26eff3061d796bc92e707de8404 Mon Sep 17 00:00:00 2001 From: James Maher <86268546+jamesmaher-dd@users.noreply.github.com> Date: Mon, 5 Aug 2024 23:59:54 -0400 Subject: [PATCH 4/5] Update libraries/rush-lib/src/logic/installManager/WorkspaceInstallManager.ts Co-authored-by: Ian Clanton-Thuon --- .../src/logic/installManager/WorkspaceInstallManager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/rush-lib/src/logic/installManager/WorkspaceInstallManager.ts b/libraries/rush-lib/src/logic/installManager/WorkspaceInstallManager.ts index 0d62e7d4fea..d0095292b32 100644 --- a/libraries/rush-lib/src/logic/installManager/WorkspaceInstallManager.ts +++ b/libraries/rush-lib/src/logic/installManager/WorkspaceInstallManager.ts @@ -290,7 +290,7 @@ export class WorkspaceInstallManager extends BaseInstallManager { // eslint-disable-next-line no-console console.log( Colorize.red( - `"${rushProject.packageName}" depends on package ${name}@${version}, but also lists it in` + + `"${rushProject.packageName}" depends on package ${name}@${version}, but also lists it in ` + `its "decoupledLocalDependencies" array. Either update the host project's package.json to use ` + `a version from an external feed instead of "workspace:" notation, or remove the dependency from the ` + `host project's "decoupledLocalDependencies" array in rush.json.` From f45ffff8e9c0eaff7b2c28cf65773a04ad806516 Mon Sep 17 00:00:00 2001 From: James Maher Date: Wed, 7 Aug 2024 10:28:19 -0400 Subject: [PATCH 5/5] PR Feedback --- .../installManager/WorkspaceInstallManager.ts | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/libraries/rush-lib/src/logic/installManager/WorkspaceInstallManager.ts b/libraries/rush-lib/src/logic/installManager/WorkspaceInstallManager.ts index d0095292b32..b8ded542f8a 100644 --- a/libraries/rush-lib/src/logic/installManager/WorkspaceInstallManager.ts +++ b/libraries/rush-lib/src/logic/installManager/WorkspaceInstallManager.ts @@ -285,16 +285,11 @@ export class WorkspaceInstallManager extends BaseInstallManager { ) { // If the dependency is a local project that is decoupled, then we need to ensure that it is not specified // as a workspace project. If it is, then we need to update the package.json to remove the workspace notation. - // eslint-disable-next-line no-console - console.log(); - // eslint-disable-next-line no-console - console.log( - Colorize.red( - `"${rushProject.packageName}" depends on package ${name}@${version}, but also lists it in ` + - `its "decoupledLocalDependencies" array. Either update the host project's package.json to use ` + - `a version from an external feed instead of "workspace:" notation, or remove the dependency from the ` + - `host project's "decoupledLocalDependencies" array in rush.json.` - ) + this._terminal.writeWarningLine( + `"${rushProject.packageName}" depends on package ${name}@${version}, but also lists it in ` + + `its "decoupledLocalDependencies" array. Either update the host project's package.json to use ` + + `a version from an external feed instead of "workspace:" notation, or remove the dependency from the ` + + `host project's "decoupledLocalDependencies" array in rush.json.` ); throw new AlreadyReportedError(); } else if (!rushProject.decoupledLocalDependencies.has(name)) {