UNPKG

7.83 kBSource Map (JSON)View Raw
1{"version":3,"file":"RushVersionSelector.js","sourceRoot":"","sources":["../src/RushVersionSelector.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\r\n// See LICENSE in the project root for license information.\r\n\r\nimport * as path from 'path';\r\nimport * as semver from 'semver';\r\n\r\nimport { LockFile } from '@microsoft/node-core-library';\r\nimport { Utilities } from '@microsoft/rush-lib/lib/utilities/Utilities';\r\nimport {\r\n _LastInstallFlag,\r\n _RushGlobalFolder,\r\n ILaunchOptions\r\n} from '@microsoft/rush-lib';\r\n\r\nimport { RushCommandSelector } from './RushCommandSelector';\r\nimport { MinimalRushConfiguration } from './MinimalRushConfiguration';\r\n\r\nconst MAX_INSTALL_ATTEMPTS: number = 3;\r\n\r\nexport class RushVersionSelector {\r\n private _rushGlobalFolder: _RushGlobalFolder;\r\n private _currentPackageVersion: string;\r\n\r\n public constructor(currentPackageVersion: string) {\r\n this._rushGlobalFolder = new _RushGlobalFolder();\r\n this._currentPackageVersion = currentPackageVersion;\r\n }\r\n\r\n public ensureRushVersionInstalled(\r\n version: string,\r\n configuration: MinimalRushConfiguration | undefined,\r\n executeOptions: ILaunchOptions\r\n ): Promise<void> {\r\n\r\n const isLegacyRushVersion: boolean = semver.lt(version, '4.0.0');\r\n const expectedRushPath: string = path.join(this._rushGlobalFolder.nodeSpecificPath, `rush-${version}`);\r\n\r\n const installMarker: _LastInstallFlag = new _LastInstallFlag(\r\n expectedRushPath,\r\n { node: process.versions.node }\r\n );\r\n\r\n let installPromise: Promise<void> = Promise.resolve();\r\n\r\n if (!installMarker.isValid()) {\r\n installPromise = installPromise.then(() => {\r\n // Need to install Rush\r\n console.log(`Rush version ${version} is not currently installed. Installing...`);\r\n\r\n const resourceName: string = `rush-${version}`;\r\n\r\n console.log(`Trying to acquire lock for ${resourceName}`);\r\n\r\n return LockFile.acquire(expectedRushPath, resourceName)\r\n .then((lock: LockFile) => {\r\n\r\n if (installMarker.isValid()) {\r\n console.log('Another process performed the installation.');\r\n } else {\r\n Utilities.installPackageInDirectory({\r\n directory: expectedRushPath,\r\n packageName: isLegacyRushVersion ? '@microsoft/rush' : '@microsoft/rush-lib',\r\n version: version,\r\n tempPackageTitle: 'rush-local-install',\r\n maxInstallAttempts: MAX_INSTALL_ATTEMPTS,\r\n // This is using a local configuration to install a package in a shared global location.\r\n // Generally that's a bad practice, but in this case if we can successfully install\r\n // the package at all, we can reasonably assume it's good for all the repositories.\r\n // In particular, we'll assume that two different NPM registries cannot have two\r\n // different implementations of the same version of the same package.\r\n // This was needed for: https://github.com/microsoft/rushstack/issues/691\r\n commonRushConfigFolder: configuration ? configuration.commonRushConfigFolder : undefined,\r\n suppressOutput: true\r\n });\r\n\r\n console.log(`Successfully installed Rush version ${version} in ${expectedRushPath}.`);\r\n\r\n // If we've made it here without exception, write the flag file\r\n installMarker.create();\r\n\r\n lock.release();\r\n }\r\n });\r\n });\r\n }\r\n\r\n return installPromise.then(() => {\r\n if (semver.lt(version, '3.0.20')) {\r\n // In old versions, requiring the entry point invoked the command-line parser immediately,\r\n // so fail if \"rushx\" was used\r\n RushCommandSelector.failIfNotInvokedAsRush(version);\r\n require(path.join(\r\n expectedRushPath,\r\n 'node_modules',\r\n '@microsoft',\r\n 'rush',\r\n 'lib',\r\n 'rush'\r\n ));\r\n } else if (semver.lt(version, '4.0.0')) {\r\n // In old versions, requiring the entry point invoked the command-line parser immediately,\r\n // so fail if \"rushx\" was used\r\n RushCommandSelector.failIfNotInvokedAsRush(version);\r\n require(path.join(\r\n expectedRushPath,\r\n 'node_modules',\r\n '@microsoft',\r\n 'rush',\r\n 'lib',\r\n 'start'\r\n ));\r\n } else {\r\n // For newer rush-lib, RushCommandSelector can test whether \"rushx\" is supported or not\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires\r\n const rushCliEntrypoint: { } = require(path.join(\r\n expectedRushPath,\r\n 'node_modules',\r\n '@microsoft',\r\n 'rush-lib',\r\n 'lib',\r\n 'index'\r\n ));\r\n RushCommandSelector.execute(this._currentPackageVersion, rushCliEntrypoint, executeOptions);\r\n }\r\n });\r\n }\r\n}\r\n"]}
\No newline at end of file