8000 Address comments · JavaScriptExpert/rushstack@9e57d0f · GitHub
[go: up one dir, main page]

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 9e57d0f

Browse files
committed
Address comments
1 parent b6e64e8 commit 9e57d0f

File tree

5 files changed

+158
-57
lines changed

5 files changed

+158
-57
lines changed

apps/rush-lib/src/api/RushConfiguration.ts

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ export type PnpmStoreOptions = 'local' | 'global';
109109
* Options for the package manager.
110110
* @public
111111
*/
112-
export interface IPackageManagerOptions {
112+
export interface IPackageManagerOptionsBase {
113113
/**
114114
* Enviroment variables for the package manager
115115
*/
@@ -134,11 +134,18 @@ export interface IEnvironmentVariable {
134134
override?: boolean; //
135135
}
136136

137+
/**
138+
* Options that are only used when the NPM package manager is selected.
139+
* @public
140+
*/
141+
export interface INpmOptions extends IPackageManagerOptionsBase {
142+
}
143+
137144
/**
138145
* Part of IRushConfigurationJson.
139146
* @internal
140147
*/
141-
export interface IPnpmOptionsJson {
148+
export interface IPnpmOptionsJson extends IPackageManagerOptionsBase {
142149
/**
143150
* The store resolution method for PNPM to use
144151
*/
@@ -156,7 +163,7 @@ export interface IPnpmOptionsJson {
156163
/**
157164
* Part of IRushConfigurationJson.
158165
*/
159-
export interface IYarnOptionsJson {
166+
export interface IYarnOptionsJson extends IPackageManagerOptionsBase {
160167
ignoreEngines?: boolean;
161168
}
162169

@@ -189,7 +196,7 @@ export interface IRushConfigurationJson {
189196
projects: IRushConfigurationProjectJson[];
190197
eventHooks?: IEventHooksJson;
191198
hotfixChangeEnabled?: boolean;
192-
packageManagerOptions?: IPackageManagerOptions;
199+
npmOptions?: INpmOptions;
193200
pnpmOptions?: IPnpmOptionsJson;
194201
yarnOptions?: IYarnOptionsJson;
195202
ensureConsistentVersions?: boolean;
@@ -221,7 +228,7 @@ export interface ICurrentVariantJson {
221228
*
222229
* @public
223230
*/
224-
export class PnpmOptionsConfiguration {
231+
export class PnpmOptionsConfiguration implements IPackageManagerOptionsBase {
225232
/**
226233
* The method used to resolve the store used by PNPM.
227234
*
@@ -268,6 +275,13 @@ export class PnpmOptionsConfiguration {
268275
*/
269276
public readonly resolutionStrategy: ResolutionStrategy;
270277

278+
/**
279+
* Enviroment variables for the package manager
280+
*/
281+
public readonly environmentVariables?: {
282+
[environmentVariableName: string]: IEnvironmentVariable;
283+
}
284+
271285
/** @internal */
272286
public constructor(json: IPnpmOptionsJson, commonTempFolder: string) {
273287
this.pnpmStore = json.pnpmStore || 'local';
@@ -280,6 +294,7 @@ export class PnpmOptionsConfiguration {
280294
}
281295
this.strictPeerDependencies = !!json.strictPeerDependencies;
282296
this.resolutionStrategy = json.resolutionStrategy || 'fewer-dependencies';
297+
this.environmentVariables = json.environmentVariables;
283298
}
284299
}
285300

@@ -302,9 +317,17 @@ export class YarnOptionsConfiguration {
302317
*/
303318
public readonly ignoreEngines: boolean;
304319

320+
/**
321+
* Enviroment variables for the package manager
322+
*/
323+
public readonly environmentVariables?: {
324+
[environmentVariableName: string]: IEnvironmentVariable;
325+
}
326+
305327
/** @internal */
306328
public constructor(json: IYarnOptionsJson) {
307329
this.ignoreEngines = !!json.ignoreEngines;
330+
this.environmentVariables = json.environmentVariables;
308331
}
309332
}
310333

@@ -381,8 +404,7 @@ export class RushConfiguration {
381404
private _repositoryDefaultBranch: string;
382405
private _repositoryDefaultRemote: string;
383406

384-
private _packageManagerOptions?: IPackageManagerOptions;
385-
407+
private _npmOptions?: INpmOptions;
386408
private _pnpmOptions: PnpmOptionsConfiguration;
387409
private _yarnOptions: YarnOptionsConfiguration;
388410

@@ -481,7 +503,7 @@ export class RushConfiguration {
481503
+ ` and ${packageManagerFields[1]} `);
482504
}
483505

484-
this._packageManagerOptions = rushConfigurationJson.packageManagerOptions;
506+
this._npmOptions = rushConfigurationJson.npmOptions;
485507

486508
if (this._packageManager === 'npm') {
487509
this._packageManagerToolVersion = rushConfigurationJson.npmVersion!;
@@ -1059,10 +1081,10 @@ export class RushConfiguration {
10591081
}
10601082

10611083
/**
1062-
* {@inheritDoc IPackageManagerOptions}
1084+
* {@inheritDoc INpmOptions}
10631085
*/
1064-
public get packageManagerOptions(): IPackageManagerOptions | undefined {
1065-
return this._packageManagerOptions;
1086+
public get npmOptions(): INpmOptions | undefined {
1087+
return this._npmOptions;
10661088
}
10671089

10681090
/**

apps/rush-lib/src/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@ export {
1515
ITryFindRushJsonLocationOptions,
1616
ResolutionStrategy,
1717
PnpmOptionsConfiguration,
18-
IPackageManagerOptions,
18+
IPackageManagerOptionsBase,
1919
IEnvironmentVariable,
20+
INpmOptions,
2021
IPnpmOptionsJson as _IPnpmOptionsJson,
2122
PnpmStoreOptions,
2223
YarnOptionsConfiguration

apps/rush-lib/src/logic/InstallManager.ts

Lines changed: 73 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ import { Git } from '../logic/Git';
3636
import { LastInstallFlag } from '../api/LastInstallFlag';
3737
import { LinkManagerFactory } from '../logic/LinkManagerFactory';
3838
import { PurgeManager } from './PurgeManager';
39-
import { RushConfiguration, ICurrentVariantJson } from '../api/RushConfiguration';
39+
import { RushConfiguration, ICurr F987 entVariantJson, IEnvironmentVariable } from '../api/RushConfiguration';
4040
import { RushConfigurationProject } from '../api/RushConfigurationProject';
4141
import { RushConstants } from '../logic/RushConstants';
4242
import { ShrinkwrapFileFactory } from '../logic/ShrinkwrapFileFactory';
@@ -903,44 +903,37 @@ export class InstallManager {
903903
// Example: "C:\MyRepo\common\temp\npm-local\node_modules\.bin\npm"
904904
const packageManagerFilename: string = this._rushConfiguration.packageManagerToolFilename;
905905

906-
const packageManagerEnv: NodeJS.ProcessEnv = process.env;
907-
908-
if (
909-
this._rushConfiguration.packageManagerOptions &&
910-
this._rushConfiguration.packageManagerOptions.environmentVariables
911-
) {
912-
for (const envVar in this._rushConfiguration.packageManagerOptions.environmentVariables) {
913-
if ({}.hasOwnProperty.call(this._rushConfiguration.packageManagerOptions.environmentVariables, envVar)) {
914-
let setEnvironmentVariable: boolean = true;
915-
const envVarValueInRushConfig: string =
916-
this._rushConfiguration.packageManagerOptions.environmentVariables[envVar].value;
917-
918-
console.log(`\nProcessing definition for environment variable: ${envVar}`);
919-
920-
if (process.env[envVar]) {
921-
setEnvironmentVariable = false;
922-
console.log(colors.yellow(`WARNING: Environment variable already defined on the device:`));
923-
console.log(` Name: ${envVar}`);
924-
console.log(` Value set on the device: ${process.env[envVar]}`);
925-
console.log(` Value set in Rush config: ${envVarValueInRushConfig}`);
926-
if (
927-
this._rushConfiguration.packageManagerOptions.environmentVariables[envVar].override &&
928-
this._rushConfiguration.packageManagerOptions.environmentVariables[envVar].override === true
929-
) {
930-
setEnvironmentVariable = true;
931-
console.log(colors.yellow(`WARNING: Overriding the environment variable with the value set in Rush config.`));
932-
} else {
933-
console.log(colors.yellow(`WARNING: Not overriding the value of the environment variable.`));
934-
}
935-
}
906+
let packageManagerEnv: NodeJS.ProcessEnv = process.env;
936907

937-
if (setEnvironmentVariable === true) {
938-
console.log(`Setting environment variable for package manager.`);
939-
console.log(` Name: ${envVar}`);
940-
console.log(` Value: ${envVarValueInRushConfig}`);
941-
packageManagerEnv[envVar] = envVarValueInRushConfig;
942-
}
943-
}
908+
if (this._rushConfiguration.packageManager === 'npm') {
909+
if (
910+
this._rushConfiguration.npmOptions &&
911+
this._rushConfiguration.npmOptions.environmentVariables
912+
) {
913+
packageManagerEnv = InstallManager._mergeEnvironmentVariables(
914+
packageManagerEnv,
915+
this._rushConfiguration.npmOptions.environmentVariables
916+
);
917+
}
918+
} else if (this._rushConfiguration.packageManager === 'pnpm') {
919+
if (
920+
this._rushConfiguration.pnpmOptions &&
921+
this._rushConfiguration.pnpmOptions.environmentVariables
922+
) {
923+
packageManagerEnv = InstallManager._mergeEnvironmentVariables(
924+
packageManagerEnv,
925+
this._rushConfiguration.pnpmOptions.environmentVariables
926+
);
927+
}
928+
} else if (this._rushConfiguration.packageManager === 'yarn') {
929+
if (
930+
this._rushConfiguration.yarnOptions &&
931+
this._rushConfiguration.yarnOptions.environmentVariables
932+
) {
933+
packageManagerEnv = InstallManager._mergeEnvironmentVariables(
934+
packageManagerEnv,
935+
this._rushConfiguration.yarnOptions.environmentVariables
936+
);
944937
}
945938
}
946939

@@ -1076,6 +1069,48 @@ export class InstallManager {
10761069
});
10771070
}
10781071

1072+
private static _mergeEnvironmentVariables(
1073+
baseEnv: NodeJS.ProcessEnv,
1074+
environmentVariables: { [environmentVariableName: string]: IEnvironmentVariable; } | undefined
1075+
): NodeJS.ProcessEnv {
1076+
const packageManagerEnv: NodeJS.ProcessEnv = baseEnv;
1077+
1078+
if (environmentVariables) {
1079+
for (const envVar in environmentVariables) {
1080+
if ({}.hasOwnProperty.call(environmentVariables, envVar)) {
1081+
let setEnvironmentVariable: boolean = true;
1082+
console.log(`\nProcessing definition for environment variable: ${envVar}`);
1083+
1084+
if (process.env[envVar]) {
1085+
setEnvironmentVariable = false;
1086+
console.log(colors.yellow(`WARNING: Environment variable already defined on the device:`));
1087+
console.log(` Name: ${envVar}`);
1088+
console.log(` Value set on the device: ${process.env[envVar]}`);
1089+
console.log(` Value set in Rush config: ${environmentVariables[envVar].value}`);
1090+
1091+
if (environmentVariables[envVar].override &&
1092+
environmentVariables[envVar].override === true) {
1093+
setEnvironmentVariable = true;
1094+
console.log(colors.yellow(`WARNING: Overriding the environment variable with the value set in Rush config.`));
1095+
}
1096+
else {
1097+
console.log(colors.yellow(`WARNING: Not overriding the value of the environment variable.`));
1098+
}
1099+
}
1100+
1101+
if (setEnvironmentVariable === true) {
1102+
console.log(`Setting environment variable for package manager.`);
1103+
console.log(` Name: ${envVar}`);
1104+
console.log(` Value: ${environmentVariables[envVar].value}`);
1105+
packageManagerEnv[envVar] = environmentVariables[envVar].value;
1106+
}
1107+
}
1108+
}
1109+
}
1110+
1111+
return packageManagerEnv;
1112+
}
1113+
10791114
private _checkIfReleaseIsPublished(): Promise<boolean> {
10801115
return Promise.resolve().then(() => {
10811116
const lastCheckFile: string = path.join(this._rushGlobalFolder.nodeSpecificPath,

apps/rush-lib/src/schemas/rush.schema.json

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@
4848
"description": "Allows creation of hotfix changes. This feature is experimental so it is disabled by default. If this is set, \"rush change\" only allows a \"hotfix\" change type to be specified. This change type will be used when publishing subsequent changes from the monorepo.",
4949
"type": "boolean"
5050
},
51-
"packageManagerOptions": {
52-
"description": "Options that apply to the package manager.",
51+
"npmOptions": {
52+
"description": "Options that are only used when the NPM pacakge manager is selected.",
5353
"type": "object",
5454
"properties": {
5555
"environmentVariables": {
@@ -68,7 +68,8 @@
6868
"additionalProperties": false
6969
}
7070
}
71-
}
71+
},
72+
"additionalProperties": false
7273
},
7374
"pnpmOptions": {
7475
"description": "Options that are only used when the PNPM pacakge manager is selected.",
@@ -93,6 +94,22 @@
9394
"fewer-dependencies",
9495
"fast"
9596
]
97+
},
98+
"environmentVariables": {
99+
"description": "Enviroment variables for the package manager",
100+
"type": "object",
101+
"additionalProperties": {
102+
"type": "object",
103+
"properties": {
104+
"value": {
105+
"type": "string"
106+
},
107+
"override": {
108+
"type": "boolean"
109+
}
110+
},
111+
"additionalProperties": false
112+
}
96113
}
97114
},
98115
"additionalProperties": false
@@ -104,6 +121,22 @@
104121
"ignoreEngines": {
105122
"description": "If true, then Rush will add the \"--ignore-engines\" option when invoking Yarn. * This allows \"rush install\" to succeed if there are dependencies with engines defined in package.json which do not match the current environment. The default value is false.",
106123
"type": "boolean"
124+
},
125+
"environmentVariables": {
126+
"description": "Enviroment variables for the package manager",
127+
"type": "object",
128+
"additionalProperties": {
129+
"type": "object",
130+
"properties": {
131+
"value": {
132+
"type": "string"
133+
},
134+
"override": {
135+
"type": "boolean"
136+
}
137+
},
138+
"additionalProperties": false
139+
}
107140
}
108141
},
109142
"additionalProperties": false

common/reviews/api/rush-lib.api.md

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -152,14 +152,18 @@ export class IndividualVersionPolicy extends VersionPolicy {
152152
}
153153

154154
// @public
155-
export interface IPackageManagerOptions {
155+
export interface INpmOptions extends IPackageManagerOptionsBase {
156+
}
157+
158+
// @public
159+
export interface IPackageManagerOptionsBase {
156160
environmentVariables?: {
157161
[environmentVariableName: string]: IEnvironmentVariable;
158162
};
159163
}
160164

161165
// @internal
162-
export interface _IPnpmOptionsJson {
166+
export interface _IPnpmOptionsJson extends IPackageManagerOptionsBase {
163167
pnpmStore?: PnpmStoreOptions;
164168
resolutionStrategy?: ResolutionStrategy;
165169
strictPeerDependencies?: boolean;
@@ -250,9 +254,12 @@ export abstract class PackageManager {
250254
export type PackageManagerName = 'pnpm' | 'npm' | 'yarn';
251255

252256
// @public
253-
export class PnpmOptionsConfiguration {
257+
export class PnpmOptionsConfiguration implements IPackageManagerOptionsBase {
254258
// @internal
255259
constructor(json: _IPnpmOptionsJson, commonTempFolder: string);
260+
readonly environmentVariables?: {
261+
[environmentVariableName: string]: IEnvironmentVariable;
262+
};
256263
readonly pnpmStore: PnpmStoreOptions;
257264
readonly pnpmStorePath: string;
258265
readonly resolutionStrategy: ResolutionStrategy;
@@ -306,9 +313,9 @@ export class RushConfiguration {
306313
// (undocumented)
307314
static loadFromDefaultLocation(options?: ITryFindRushJsonLocationOptions): RushConfiguration;
308315
readonly npmCacheFolder: string;
316+
readonly npmOptions: INpmOptions | undefined;
309317
readonly npmTmpFolder: string;
310318
readonly packageManager: PackageManagerName;
311-
readonly packageManagerOptions: IPackageManagerOptions | undefined;
312319
readonly packageManagerToolFilename: string;
313320
readonly packageManagerToolVersion: string;
314321
// @beta
@@ -425,6 +432,9 @@ export class YarnOptionsConfiguration {
425432
//
426433
// @internal
427434
constructor(json: IYarnOptionsJson);
435+
readonly environmentVariables?: {
436+
[environmentVariableName: string]: IEnvironmentVariable;
< 4D15 /code>
437+
};
428438
readonly ignoreEngines: boolean;
429439
}
430440

0 commit comments

Comments
 (0)
0