Skip to content
Snippets Groups Projects
Select Git revision
  • 93b13b55db544651963dd80f4b97dc7fc1bb96cf
  • main default protected
  • feat/gnupg
  • next
  • fix/36615b-branch-reuse-no-cache
  • renovate/main-redis-5.x
  • 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
  • gh-readonly-queue/next/pr-35009-9d5e583b7d7251148ab0d11ee8dd38149618d162
  • 41.43.5
  • 41.43.4
  • 41.43.3
  • 41.43.2
  • 41.43.1
  • 41.43.0
  • 41.42.12
  • 41.42.11
  • 41.42.10
  • 41.42.9
  • 41.42.8
  • 41.42.7
  • 41.42.6
  • 41.42.5
  • 41.42.4
  • 41.42.3
  • 41.42.2
  • 41.42.1
  • 41.42.0
  • 41.41.0
41 results

package-json.js

Blame
  • user avatar
    Rhys Arkins authored and GitHub committed
    * Move yarn and npm helpers into branch worker
    
    * Fix name
    
    * Move package-json helper
    
    * Update name
    
    * Move changelog
    
    * Move github-app
    
    * Remove unused platform
    
    * Move logger
    
    * Fix lint
    552b5e68
    History
    package-json.js 2.14 KiB
    const _ = require('lodash');
    
    module.exports = {
      setNewValue,
    };
    
    function setNewValue(currentFileContent, depType, depName, newVersion, logger) {
      logger.debug(`setNewValue: ${depType}.${depName} = ${newVersion}`);
      const parsedContents = JSON.parse(currentFileContent);
      // Save the old version
      const oldVersion = parsedContents[depType][depName];
      if (oldVersion === newVersion) {
        logger.debug('Version is already updated');
        return currentFileContent;
      }
      // Update the file = this is what we want
      parsedContents[depType][depName] = newVersion;
      // Look for the old version number
      const searchString = `"${oldVersion}"`;
      const newString = `"${newVersion}"`;
      let newFileContent = null;
      // Skip ahead to depType section
      let searchIndex = currentFileContent.indexOf(`"${depType}"`) + depType.length;
      logger.debug(`Starting search at index ${searchIndex}`);
      // Iterate through the rest of the file
      for (; searchIndex < currentFileContent.length; searchIndex += 1) {
        // First check if we have a hit for the old version
        if (matchAt(currentFileContent, searchIndex, searchString)) {
          logger.debug(`Found match at index ${searchIndex}`);
          // Now test if the result matches
          const testContent = replaceAt(
            currentFileContent,
            searchIndex,
            searchString,
            newString,
            logger
          );
          // Compare the parsed JSON structure of old and new
          if (_.isEqual(parsedContents, JSON.parse(testContent))) {
            newFileContent = testContent;
            break;
          }
        }
      }
      // istanbul ignore if
      if (!newFileContent) {
        throw new Error('Could not set new value');
      }
      return newFileContent;
    }
    
    // Return true if the match string is found at index in content
    function matchAt(content, index, match) {
      return content.substring(index, index + match.length) === match;
    }
    
    // Replace oldString with newString at location index of content
    function replaceAt(content, index, oldString, newString, logger) {
      logger.debug(`Replacing ${oldString} with ${newString} at index ${index}`);
      return (
        content.substr(0, index) +
        newString +
        content.substr(index + oldString.length)
      );
    }