Skip to content
Snippets Groups Projects
Select Git revision
  • 4314bb806075fc360f2397a460b9b85bc7bad814
  • main default protected
  • next
  • renovate/main-redis-5.x
  • chore/update-static-data
  • feat/gnupg
  • fix/36615b-branch-reuse-no-cache
  • chore/punycode
  • refactor/pin-new-value
  • feat/36219--git-x509-signing
  • feat/structured-logger
  • hotfix/39.264.1
  • feat/skip-dangling
  • gh-readonly-queue/next/pr-36034-7a061c4ca1024a19e2c295d773d9642625d1c2be
  • hotfix/39.238.3
  • refactor/gitlab-auto-approve
  • feat/template-strings
  • gh-readonly-queue/next/pr-35654-137d934242c784e0c45d4b957362214f0eade1d7
  • fix/32307-global-extends-merging
  • fix/32307-global-extends-repositories
  • gh-readonly-queue/next/pr-35009-046ebf7cb84ab859f7fefceb5fa53a54ce9736f8
  • 41.62.4
  • 41.62.3
  • 41.62.2
  • 41.62.1
  • 41.62.0
  • 41.61.1
  • 41.61.0
  • 41.60.4
  • 41.60.3
  • 41.60.2
  • 41.60.1
  • 41.60.0
  • 41.59.2
  • 41.59.1
  • 41.59.0
  • 41.58.2
  • 41.58.1
  • 41.58.0
  • 41.57.1
  • 41.57.0
41 results

use-cases.md

Blame
  • npmrc.js 1.83 KiB
    const is = require('@sindresorhus/is');
    const ini = require('ini');
    const { isBase64 } = require('validator');
    
    let npmrc = null;
    let npmrcRaw;
    
    module.exports = {
      getNpmrc,
      setNpmrc,
    };
    
    function getNpmrc() {
      return npmrc;
    }
    
    function setNpmrc(input) {
      if (input) {
        if (input === npmrcRaw) {
          return;
        }
        const existingNpmrc = npmrc;
        npmrcRaw = input;
        logger.debug('Setting npmrc');
        npmrc = ini.parse(input.replace(/\\n/g, '\n'));
        // massage _auth to _authToken
        for (const [key, val] of Object.entries(npmrc)) {
          // istanbul ignore if
          if (
            global.trustLevel !== 'high' &&
            key.endsWith('registry') &&
            val &&
            val.includes('localhost')
          ) {
            logger.info(
              { key, val },
              'Detected localhost registry - rejecting npmrc file'
            );
            npmrc = existingNpmrc;
            return;
          }
          if (key !== '_auth' && key.endsWith('_auth') && isBase64(val)) {
            logger.debug('Massaging _auth to _authToken');
            npmrc[key + 'Token'] = val;
            npmrc.massagedAuth = true;
            delete npmrc[key];
          }
        }
        if (global.trustLevel !== 'high') {
          return;
        }
        for (const key in npmrc) {
          if (Object.prototype.hasOwnProperty.call(npmrc, key)) {
            npmrc[key] = envReplace(npmrc[key]);
          }
        }
      } else if (npmrc) {
        logger.debug('Resetting npmrc');
        npmrc = null;
        npmrcRaw = null;
      }
    }
    
    function envReplace(value, env = process.env) {
      // istanbul ignore if
      if (!is.string(value)) {
        return value;
      }
    
      const ENV_EXPR = /(\\*)\$\{([^}]+)\}/g;
    
      return value.replace(ENV_EXPR, (match, esc, envVarName) => {
        if (env[envVarName] === undefined) {
          logger.warn('Failed to replace env in config: ' + match);
          throw new Error('env-replace');
        }
        return env[envVarName];
      });
    }