Skip to content

Commit 1300bc8

Browse files
Copiloticlanton
andcommitted
Address @dmichon-msft feedback: make env configurable, use slice, and named regex groups
Co-authored-by: iclanton <5010588+iclanton@users.noreply.github.com>
1 parent 383d111 commit 1300bc8

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

libraries/rush-lib/src/utilities/npmrcUtilities.ts

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,16 @@ function _trimNpmrcFile(
3030
| 'linesToPrepend'
3131
| 'supportEnvVarFallbackSyntax'
3232
| 'filterNpmIncompatibleProperties'
33+
| 'env'
3334
>
3435
): string {
3536
const {
3637
sourceNpmrcPath,
3738
linesToPrepend,
3839
linesToAppend,
3940
supportEnvVarFallbackSyntax,
40-
filterNpmIncompatibleProperties
41+
filterNpmIncompatibleProperties,
42+
env = process.env
4143
} = options;
4244
const combinedNpmrcFromCache: string | undefined = _combinedNpmrcMap.get(sourceNpmrcPath);
4345
if (combinedNpmrcFromCache !== undefined) {
@@ -61,7 +63,7 @@ function _trimNpmrcFile(
6163

6264
const resultLines: string[] = trimNpmrcFileLines(
6365
npmrcFileLines,
64-
process.env,
66+
env,
6567
supportEnvVarFallbackSyntax,
6668
filterNpmIncompatibleProperties
6769
);
@@ -110,6 +112,15 @@ const NPM_INCOMPATIBLE_REGISTRY_SCOPED_PROPERTIES: Set<string> = new Set([
110112
*/
111113
const PROPERTY_NAME_REGEX: RegExp = /^([^=\[\s]+)/;
112114

115+
/**
116+
* Regular expression to extract environment variable names and optional fallback values.
117+
* Matches patterns like:
118+
* nameString -> group 1: nameString, group 2: undefined
119+
* nameString-fallbackString -> group 1: nameString, group 2: fallbackString
120+
* nameString:-fallbackString -> group 1: nameString, group 2: fallbackString
121+
*/
122+
const ENV_VAR_WITH_FALLBACK_REGEX: RegExp = /^(?<name>[^:-]+)(?::?-(?<fallback>.+))?$/;
123+
113124
/**
114125
*
115126
* @param npmrcFileLines The npmrc file's lines
@@ -188,7 +199,7 @@ export function trimNpmrcFileLines(
188199
* ${nameString-fallbackString} -> name-fallbackString
189200
* ${nameString:-fallbackString} -> name:-fallbackString
190201
*/
191-
const nameWithFallback: string = token.substring(2, token.length - 1);
202+
const nameWithFallback: string = token.slice(2, -1);
192203

193204
let environmentVariableName: string;
194205
let fallback: string | undefined;
@@ -201,10 +212,9 @@ export function trimNpmrcFileLines(
201212
* nameString-fallbackString -> nameString fallbackString
202213
* nameString:-fallbackString -> nameString fallbackString
203214
*/
204-
const matched: string[] | null = nameWithFallback.match(/^([^:-]+)(?:\:?-(.+))?$/);
205-
// matched: [originStr, variableName, fallback]
206-
environmentVariableName = matched?.[1] ?? nameWithFallback;
207-
fallback = matched?.[2];
215+
const matched: RegExpMatchArray | null = nameWithFallback.match(ENV_VAR_WITH_FALLBACK_REGEX);
216+
environmentVariableName = matched?.groups?.name ?? nameWithFallback;
217+
fallback = matched?.groups?.fallback;
208218
} else {
209219
environmentVariableName = nameWithFallback;
210220
}
@@ -262,6 +272,7 @@ interface INpmrcTrimOptions {
262272
linesToAppend?: string[];
263273
supportEnvVarFallbackSyntax: boolean;
264274
filterNpmIncompatibleProperties?: boolean;
275+
env?: NodeJS.ProcessEnv;
265276
}
266277

267278
function _copyAndTrimNpmrcFile(options: INpmrcTrimOptions): string {
@@ -295,6 +306,7 @@ export interface ISyncNpmrcOptions {
295306
linesToAppend?: string[];
296307
createIfMissing?: boolean;
297308
filterNpmIncompatibleProperties?: boolean;
309+
env?: NodeJS.ProcessEnv;
298310
}
299311

300312
export function syncNpmrc(options: ISyncNpmrcOptions): string | undefined {

0 commit comments

Comments
 (0)