'use strict';

Liferay.Loader.define('portlet-configuration-css-web$loose-envify@1.4.0/replace', ['module', 'exports', 'require', 'portlet-configuration-css-web$js-tokens'], function (module, exports, require) {
  var define = undefined;
  var global = window;
  {
    var jsTokens = require('portlet-configuration-css-web$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;
  }
});
//# sourceMappingURL=replace.js.map