@@ -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 */
111113const 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
267278function _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
300312export function syncNpmrc ( options : ISyncNpmrcOptions ) : string | undefined {
0 commit comments