You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							65 lines
						
					
					
						
							1.5 KiB
						
					
					
				
			
		
		
	
	
							65 lines
						
					
					
						
							1.5 KiB
						
					
					
				'use strict'; | 
						|
 | 
						|
var jsTokens = require('js-tokens').default; | 
						|
 | 
						|
var processEnvRe = /\bprocess\.env\.[_$a-zA-Z][$\w]+\b/; | 
						|
var spaceOrCommentRe = /^(?:\s|\/[/*])/; | 
						|
 | 
						|
function replace(src, envs) { | 
						|
  if (!processEnvRe.test(src)) { | 
						|
    return src; | 
						|
  } | 
						|
 | 
						|
  var out = []; | 
						|
  var purge = envs.some(function(env) { | 
						|
    return env._ && env._.indexOf('purge') !== -1; | 
						|
  }); | 
						|
 | 
						|
  jsTokens.lastIndex = 0 | 
						|
  var parts = src.match(jsTokens); | 
						|
 | 
						|
  for (var i = 0; i < parts.length; i++) { | 
						|
    if (parts[i    ] === 'process' && | 
						|
        parts[i + 1] === '.' && | 
						|
        parts[i + 2] === 'env' && | 
						|
        parts[i + 3] === '.') { | 
						|
      var prevCodeToken = getAdjacentCodeToken(-1, parts, i); | 
						|
      var nextCodeToken = getAdjacentCodeToken(1, parts, i + 4); | 
						|
      var replacement = getReplacementString(envs, parts[i + 4], purge); | 
						|
      if (prevCodeToken !== '.' && | 
						|
          nextCodeToken !== '.' && | 
						|
          nextCodeToken !== '=' && | 
						|
          typeof replacement === 'string') { | 
						|
        out.push(replacement); | 
						|
        i += 4; | 
						|
        continue; | 
						|
      } | 
						|
    } | 
						|
    out.push(parts[i]); | 
						|
  } | 
						|
 | 
						|
  return out.join(''); | 
						|
} | 
						|
 | 
						|
function getAdjacentCodeToken(dir, parts, i) { | 
						|
  while (true) { | 
						|
    var part = parts[i += dir]; | 
						|
    if (!spaceOrCommentRe.test(part)) { | 
						|
      return part; | 
						|
    } | 
						|
  } | 
						|
} | 
						|
 | 
						|
function getReplacementString(envs, name, purge) { | 
						|
  for (var j = 0; j < envs.length; j++) { | 
						|
    var env = envs[j]; | 
						|
    if (typeof env[name] !== 'undefined') { | 
						|
      return JSON.stringify(env[name]); | 
						|
    } | 
						|
  } | 
						|
  if (purge) { | 
						|
    return 'undefined'; | 
						|
  } | 
						|
} | 
						|
 | 
						|
module.exports = replace;
 | 
						|
 |