From f62f6006c85260b4a4ba93540e265700b37a73f8 Mon Sep 17 00:00:00 2001 From: David Michon Date: Thu, 29 Aug 2024 18:04:02 +0000 Subject: [PATCH] [rush-resolver-cache] Fix Windows compatibility --- .../resolver-cache-windows_2024-08-29-18-03.json | 10 ++++++++++ .../src/computeResolverCacheFromLockfileAsync.ts | 14 ++++++-------- .../computeResolverCacheFromLockfileAsync.test.ts | 8 +++++--- 3 files changed, 21 insertions(+), 11 deletions(-) create mode 100644 common/changes/@microsoft/rush/resolver-cache-windows_2024-08-29-18-03.json diff --git a/common/changes/@microsoft/rush/resolver-cache-windows_2024-08-29-18-03.json b/common/changes/@microsoft/rush/resolver-cache-windows_2024-08-29-18-03.json new file mode 100644 index 00000000000..bf08fe697ac --- /dev/null +++ b/common/changes/@microsoft/rush/resolver-cache-windows_2024-08-29-18-03.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@microsoft/rush", + "comment": "Fix Windows compatibility for `@rushstack/rush-resolver-cache-plugin`.", + "type": "none" + } + ], + "packageName": "@microsoft/rush" +} \ No newline at end of file diff --git a/rush-plugins/rush-resolver-cache-plugin/src/computeResolverCacheFromLockfileAsync.ts b/rush-plugins/rush-resolver-cache-plugin/src/computeResolverCacheFromLockfileAsync.ts index e28b336533f..f53225ed40c 100644 --- a/rush-plugins/rush-resolver-cache-plugin/src/computeResolverCacheFromLockfileAsync.ts +++ b/rush-plugins/rush-resolver-cache-plugin/src/computeResolverCacheFromLockfileAsync.ts @@ -144,14 +144,12 @@ export interface IComputeResolverCacheFromLockfileOptions { export async function computeResolverCacheFromLockfileAsync( params: IComputeResolverCacheFromLockfileOptions ): Promise { - const { - workspaceRoot, - commonPrefixToTrim, - platformInfo, - projectByImporterPath, - lockfile, - afterExternalPackagesAsync - } = params; + const { platformInfo, projectByImporterPath, lockfile, afterExternalPackagesAsync } = params; + // Needs to be normalized to `/` for path.posix.join to work correctly + const workspaceRoot: string = params.workspaceRoot.replace(/\\/g, '/'); + // Needs to be normalized to `/` for path.posix.join to work correctly + const commonPrefixToTrim: string = params.commonPrefixToTrim.replace(/\\/g, '/'); + const contexts: Map = new Map(); const missingOptionalDependencies: Set = new Set(); diff --git a/rush-plugins/rush-resolver-cache-plugin/src/test/computeResolverCacheFromLockfileAsync.test.ts b/rush-plugins/rush-resolver-cache-plugin/src/test/computeResolverCacheFromLockfileAsync.test.ts index 3aa7334fd1f..fbf067869da 100644 --- a/rush-plugins/rush-resolver-cache-plugin/src/test/computeResolverCacheFromLockfileAsync.test.ts +++ b/rush-plugins/rush-resolver-cache-plugin/src/test/computeResolverCacheFromLockfileAsync.test.ts @@ -23,13 +23,15 @@ interface ITestCase { const TEST_CASES: readonly ITestCase[] = [ { + // Validate with POSIX-style path inputs workspaceRoot: '/$root/common/temp/build-tests', commonPrefixToTrim: '/$root/', lockfileName: 'build-tests-subspace.yaml' }, { - workspaceRoot: '/$root/common/temp/default', - commonPrefixToTrim: '/$root/', + // Validate that it works with Windows-style path inputs + workspaceRoot: '\\$root\\common\\temp\\default', + commonPrefixToTrim: '\\$root\\', lockfileName: 'default-subspace.yaml' }, { @@ -105,7 +107,7 @@ describe(computeResolverCacheFromLockfileAsync.name, () => { for (const importerPath of lockfile.importers.keys()) { const remainder: string = importerPath.slice(importerPath.lastIndexOf('../') + 3); projectByImporterPath.setItem(importerPath, { - projectFolder: `${commonPrefixToTrim}${remainder}`, + projectFolder: `${commonPrefixToTrim.replace(/\\/g, '/')}${remainder}`, packageJson: { name: `@local/${remainder.replace(/\//g, '+')}` }