renovate 43.204.1 → 43.205.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
//#region lib/data/mise-registry.json
|
|
2
2
|
var mise_registry_default = {
|
|
3
|
-
meta: { "version": "2026.5.
|
|
3
|
+
meta: { "version": "2026.5.15 linux-x64 (2026-05-23)" },
|
|
4
4
|
tools: {
|
|
5
5
|
"1password": {
|
|
6
6
|
"aqua": "1password/cli",
|
|
@@ -2259,6 +2259,7 @@ var mise_registry_default = {
|
|
|
2259
2259
|
"github": "natesales/q"
|
|
2260
2260
|
},
|
|
2261
2261
|
"qsv": {
|
|
2262
|
+
"aqua": "dathere/qsv",
|
|
2262
2263
|
"asdf": "vjda/asdf-qsv",
|
|
2263
2264
|
"github": "dathere/qsv"
|
|
2264
2265
|
},
|
|
@@ -2960,7 +2961,7 @@ var mise_registry_default = {
|
|
|
2960
2961
|
"v": { "asdf": "mise-plugins/mise-v" },
|
|
2961
2962
|
"vacuum": { "aqua": "daveshanley/vacuum" },
|
|
2962
2963
|
"vale": {
|
|
2963
|
-
"aqua": "
|
|
2964
|
+
"aqua": "vale-cli/vale",
|
|
2964
2965
|
"asdf": "pdemagny/asdf-vale"
|
|
2965
2966
|
},
|
|
2966
2967
|
"vals": {
|
|
@@ -2975,7 +2976,7 @@ var mise_registry_default = {
|
|
|
2975
2976
|
"aqua": "loft-sh/vcluster",
|
|
2976
2977
|
"asdf": "https"
|
|
2977
2978
|
},
|
|
2978
|
-
"vector": { "
|
|
2979
|
+
"vector": { "aqua": "vectordotdev/vector" },
|
|
2979
2980
|
"velad": {
|
|
2980
2981
|
"asdf": "mise-plugins/mise-velad",
|
|
2981
2982
|
"github": "kubevela/velad"
|
|
@@ -126,32 +126,18 @@ async function checkExistingBranch(upgrade, existingContent) {
|
|
|
126
126
|
logger.debug(`Branch dep ${depName} in ${packageFile} is already updated`);
|
|
127
127
|
return existingContent;
|
|
128
128
|
}
|
|
129
|
-
/**
|
|
130
|
-
* Check if an update from `current` to `newString` should be performed and return 1 if so.
|
|
131
|
-
*
|
|
132
|
-
* @remarks
|
|
133
|
-
* Useful for counting the number of updates to do.
|
|
134
|
-
*
|
|
135
|
-
* @param current The current value (if undefined then no update is required)
|
|
136
|
-
* @param newString The new value (if undefined then no update is required)
|
|
137
|
-
*
|
|
138
|
-
* @returns 1 if `current !== newString` and 0 if they are equal or at least one is undefined.
|
|
139
|
-
*/
|
|
140
|
-
function updatedToInt(current, newString) {
|
|
141
|
-
if (current && newString && newString !== current) return 1;
|
|
142
|
-
else return 0;
|
|
143
|
-
}
|
|
144
129
|
async function doAutoReplace(upgrade, existingContent, reuseExistingBranch, firstUpdate = true) {
|
|
145
130
|
const { packageFile, depName, depNameTemplate, newName, currentValue, currentValueTemplate, newValue, currentDigest, currentDigestShort, newDigest, autoReplaceGlobalMatch, autoReplaceStringTemplate } = upgrade;
|
|
146
131
|
if (reuseExistingBranch) return await checkExistingBranch(upgrade, existingContent);
|
|
147
|
-
const
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
132
|
+
const valueChanging = isString(currentValue) && isString(newValue) && currentValue !== newValue;
|
|
133
|
+
const digestChanging = isString(currentDigest) && isString(newDigest) && currentDigest !== newDigest;
|
|
134
|
+
let replaceWithoutReplaceString = isString(newName) && newName !== depName && (isUndefined(upgrade.replaceString) || !upgrade.replaceString?.includes(depName));
|
|
135
|
+
let replaceString = upgrade.replaceString;
|
|
136
|
+
if (isUndefined(replaceString)) if (valueChanging && digestChanging) {
|
|
137
|
+
replaceWithoutReplaceString = true;
|
|
138
|
+
replaceString = currentValue;
|
|
139
|
+
} else if (digestChanging) replaceString = currentDigest;
|
|
140
|
+
else replaceString = currentValue ?? currentDigest;
|
|
155
141
|
logger.trace({
|
|
156
142
|
depName,
|
|
157
143
|
replaceString
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-replace.js","names":[],"sources":["../../../../../lib/workers/repository/update/branch/auto-replace.ts"],"sourcesContent":["// TODO #22198\nimport { isNumber, isString, isUndefined } from '@sindresorhus/is';\nimport { WORKER_FILE_UPDATE_FAILED } from '../../../../constants/error-messages.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { extractPackageFile } from '../../../../modules/manager/index.ts';\nimport type { PackageDependency } from '../../../../modules/manager/types.ts';\nimport { writeLocalFile } from '../../../../util/fs/index.ts';\nimport { escapeRegExp, regEx } from '../../../../util/regex.ts';\nimport { matchAt, replaceAt } from '../../../../util/string.ts';\nimport { compile } from '../../../../util/template/index.ts';\nimport type { BranchUpgradeConfig } from '../../../types.ts';\n\nexport async function confirmIfDepUpdated(\n upgrade: BranchUpgradeConfig,\n newContent: string,\n): Promise<boolean> {\n const { manager, packageFile, depIndex } = upgrade;\n let newUpgrade: PackageDependency;\n try {\n const newExtract = await extractPackageFile(\n manager,\n newContent,\n packageFile!,\n upgrade,\n );\n // istanbul ignore if\n if (!newExtract) {\n // TODO: fix types (#22198)\n logger.debug(\n `Could not extract ${packageFile!} (manager=${manager}) after autoreplace. Did the autoreplace make the file unparseable?`,\n );\n logger.trace(\n { packageFile, content: newContent },\n 'packageFile content after autoreplace',\n );\n return false;\n }\n // istanbul ignore if\n if (!newExtract.deps?.length) {\n logger.debug(\n `Extracted ${packageFile!} after autoreplace has no deps array. Did the autoreplace make the file unparseable?`,\n );\n return false;\n }\n // istanbul ignore if\n if (isNumber(depIndex) && depIndex >= newExtract.deps.length) {\n logger.debug(\n `Extracted ${packageFile!} after autoreplace has fewer deps than expected.`,\n );\n return false;\n }\n newUpgrade = newExtract.deps[depIndex!];\n } catch (err) {\n /* istanbul ignore next */\n logger.debug({ manager, packageFile, err }, 'Failed to parse newContent');\n }\n\n if (!newUpgrade!) {\n logger.debug(`No newUpgrade in ${packageFile!}`);\n return false;\n }\n\n if (\n upgrade.depName !== newUpgrade.depName &&\n upgrade.newName !== newUpgrade.depName\n ) {\n logger.debug(\n {\n manager,\n packageFile,\n currentDepName: upgrade.depName,\n newDepName: newUpgrade.depName,\n },\n 'depName mismatch',\n );\n return false;\n }\n\n if (upgrade.newName && upgrade.newName !== newUpgrade.depName) {\n logger.debug(\n {\n manager,\n packageFile,\n currentDepName: upgrade.depName,\n newDepName: newUpgrade.depName,\n },\n 'depName is not updated',\n );\n return false;\n }\n\n if (upgrade.newValue && upgrade.newValue !== newUpgrade.currentValue) {\n logger.debug(\n {\n depName: upgrade.depName,\n manager,\n packageFile,\n expectedValue: upgrade.newValue,\n foundValue: newUpgrade.currentValue,\n },\n 'Value is not updated',\n );\n return false;\n }\n\n if (\n upgrade.newDigest &&\n (upgrade.isPinDigest === true || upgrade.currentDigest) &&\n upgrade.newDigest !== newUpgrade.currentDigest\n ) {\n logger.debug(\n {\n depName: upgrade.depName,\n manager,\n packageFile,\n expectedValue: upgrade.newDigest,\n foundValue: newUpgrade.currentDigest,\n },\n 'Digest is not updated',\n );\n return false;\n }\n\n return true;\n}\n\nfunction getDepsSignature(deps: PackageDependency[]): string {\n // TODO: types (#22198)\n return deps\n .map(\n (dep) =>\n `${(dep.depName ?? dep.packageName)!}${(dep.packageName ??\n dep.depName)!}`,\n )\n .join(',');\n}\n\nfunction firstIndexOf(\n existingContent: string,\n depName: string,\n currentValue: string,\n position = 0,\n): number {\n const depIndex = existingContent.indexOf(depName, position);\n const valIndex = existingContent.indexOf(currentValue, position);\n const index = depIndex < valIndex ? depIndex : valIndex;\n if (index < 0) {\n return position === 0 ? -1 : existingContent.length;\n }\n return index;\n}\n\nexport async function checkBranchDepsMatchBaseDeps(\n upgrade: BranchUpgradeConfig,\n branchContent: string,\n): Promise<boolean> {\n const { baseDeps, manager, packageFile } = upgrade;\n try {\n const res = await extractPackageFile(\n manager,\n branchContent,\n packageFile!,\n upgrade,\n )!;\n const branchDeps = res!.deps;\n return getDepsSignature(baseDeps!) === getDepsSignature(branchDeps);\n } catch /* istanbul ignore next */ {\n logger.info(\n { manager, packageFile },\n 'Failed to parse branchContent - rebasing',\n );\n return false;\n }\n}\n\nasync function checkExistingBranch(\n upgrade: BranchUpgradeConfig,\n existingContent: string,\n): Promise<string | null> {\n const { packageFile, depName } = upgrade;\n if (!(await checkBranchDepsMatchBaseDeps(upgrade, existingContent))) {\n logger.debug(\n { packageFile, depName },\n 'Rebasing branch after deps list has changed',\n );\n return null;\n }\n if (!(await confirmIfDepUpdated(upgrade, existingContent))) {\n logger.debug(\n { packageFile, depName },\n 'Rebasing after outdated branch dep found',\n );\n return null;\n }\n // TODO: fix types (#22198)\n logger.debug(`Branch dep ${depName!} in ${packageFile!} is already updated`);\n return existingContent;\n}\n\n/**\n * Check if an update from `current` to `newString` should be performed and return 1 if so.\n *\n * @remarks\n * Useful for counting the number of updates to do.\n *\n * @param current The current value (if undefined then no update is required)\n * @param newString The new value (if undefined then no update is required)\n *\n * @returns 1 if `current !== newString` and 0 if they are equal or at least one is undefined.\n */\nfunction updatedToInt(\n current: string | undefined | null,\n newString: string | undefined | null,\n): number {\n if (current && newString && newString !== current) {\n return 1;\n } else {\n return 0;\n }\n}\n\nexport async function doAutoReplace(\n upgrade: BranchUpgradeConfig,\n existingContent: string,\n reuseExistingBranch: boolean,\n firstUpdate = true,\n): Promise<string | null> {\n const {\n packageFile,\n depName,\n depNameTemplate,\n newName,\n currentValue,\n currentValueTemplate,\n newValue,\n currentDigest,\n currentDigestShort,\n newDigest,\n autoReplaceGlobalMatch,\n autoReplaceStringTemplate,\n } = upgrade;\n /*\n If replacement support for more managers is added,\n please also update the list in docs/usage/configuration-options.md\n at replacementName and replacementVersion\n */\n if (reuseExistingBranch) {\n return await checkExistingBranch(upgrade, existingContent);\n }\n\n // count how many strings need to be updated\n const changedCount =\n updatedToInt(depName, newName) +\n updatedToInt(currentValue, newValue) +\n updatedToInt(currentDigest, newDigest);\n if (changedCount > 1) {\n logger.debug(\n { packageFile, depName, changedCount },\n 'Multiple changed values, might need special handling (#36461)',\n );\n }\n\n const replaceWithoutReplaceString =\n (isString(newName) &&\n newName !== depName &&\n (isUndefined(upgrade.replaceString) ||\n !upgrade.replaceString?.includes(depName!))) ||\n // for jsonata manager, fixes #36461\n (isUndefined(upgrade.replaceString) && changedCount > 1);\n const replaceString = upgrade.replaceString ?? currentValue ?? currentDigest;\n logger.trace({ depName, replaceString }, 'autoReplace replaceString');\n let searchIndex: number;\n if (replaceWithoutReplaceString) {\n searchIndex = firstIndexOf(existingContent, depName!, currentValue!);\n } else {\n searchIndex = existingContent.indexOf(replaceString!);\n }\n if (searchIndex === -1) {\n logger.info(\n { packageFile, depName, existingContent, replaceString },\n 'Cannot find replaceString in current file content. Was it already updated?',\n );\n return existingContent;\n }\n try {\n let newString: string;\n if (autoReplaceStringTemplate && !newName) {\n newString = compile(autoReplaceStringTemplate, upgrade, false);\n } else {\n newString = replaceString!;\n\n const autoReplaceRegExpFlag = autoReplaceGlobalMatch ? 'g' : '';\n if (currentValue && newValue && currentValue !== newValue) {\n if (!newString.includes(currentValue)) {\n logger.debug(\n { stringToReplace: newString, currentValue, currentValueTemplate },\n 'currentValue not found in string to replace',\n );\n }\n newString = newString.replace(\n regEx(escapeRegExp(currentValue), autoReplaceRegExpFlag),\n newValue,\n );\n }\n if (depName && newName && depName !== newName) {\n if (!newString.includes(depName)) {\n logger.debug(\n { stringToReplace: newString, depName, depNameTemplate },\n 'depName not found in string to replace',\n );\n }\n newString = newString.replace(\n regEx(escapeRegExp(depName), autoReplaceRegExpFlag),\n newName,\n );\n }\n if (currentDigest && newDigest && currentDigest !== newDigest) {\n if (!newString.includes(currentDigest)) {\n logger.debug(\n { stringToReplace: newString, currentDigest },\n 'currentDigest not found in string to replace',\n );\n }\n newString = newString.replace(\n regEx(escapeRegExp(currentDigest), autoReplaceRegExpFlag),\n newDigest,\n );\n } else if (\n currentDigestShort &&\n newDigest &&\n currentDigestShort !== newDigest &&\n // Only use short digest replacement when there's no full currentDigest\n // that already matches newDigest (otherwise we'd incorrectly replace\n // part of an already-correct digest)\n !(currentDigest && currentDigest === newDigest)\n ) {\n if (!newString.includes(currentDigestShort)) {\n logger.debug(\n { stringToReplace: newString, currentDigestShort },\n 'currentDigestShort not found in string to replace',\n );\n }\n newString = newString.replace(\n regEx(escapeRegExp(currentDigestShort), autoReplaceRegExpFlag),\n newDigest,\n );\n }\n }\n if (!firstUpdate && (await confirmIfDepUpdated(upgrade, existingContent))) {\n logger.debug(\n { packageFile, depName },\n 'Package file is already updated - no work to do',\n );\n return existingContent;\n }\n logger.debug(\n { packageFile, depName },\n `Starting search at index ${searchIndex}`,\n );\n let newContent = existingContent;\n let nameReplaced = !newName;\n let valueReplaced = !newValue;\n let digestReplaced = !newDigest;\n let startIndex = searchIndex;\n // Iterate through the rest of the file\n for (; searchIndex < newContent.length; searchIndex += 1) {\n // First check if we have a hit for the old version\n if (replaceWithoutReplaceString) {\n // look for depName and currentValue\n if (newName && matchAt(newContent, searchIndex, depName!)) {\n logger.debug(\n { packageFile, depName },\n `Found depName at index ${searchIndex}`,\n );\n if (nameReplaced) {\n startIndex = firstIndexOf(\n existingContent,\n depName!,\n currentValue!,\n startIndex + 1,\n );\n searchIndex = startIndex - 1;\n await writeLocalFile(upgrade.packageFile!, existingContent);\n newContent = existingContent;\n nameReplaced = !newName;\n valueReplaced = !newValue;\n digestReplaced = !newDigest;\n continue;\n }\n // replace with newName\n newContent = replaceAt(newContent, searchIndex, depName!, newName);\n await writeLocalFile(upgrade.packageFile!, newContent);\n nameReplaced = true;\n searchIndex += newName.length - 1;\n } else if (\n newValue &&\n matchAt(newContent, searchIndex, currentValue!)\n ) {\n logger.debug(\n { packageFile, currentValue },\n `Found currentValue at index ${searchIndex}`,\n );\n if (valueReplaced) {\n startIndex = firstIndexOf(\n existingContent,\n depName!,\n currentValue!,\n startIndex + 1,\n );\n searchIndex = startIndex - 1;\n await writeLocalFile(upgrade.packageFile!, existingContent);\n newContent = existingContent;\n nameReplaced = !newName;\n valueReplaced = !newValue;\n digestReplaced = !newDigest;\n continue;\n }\n // Now test if the result matches\n newContent = replaceAt(\n newContent,\n searchIndex,\n currentValue!,\n newValue,\n );\n await writeLocalFile(upgrade.packageFile!, newContent);\n valueReplaced = true;\n searchIndex += newValue.length - 1;\n } else if (\n newDigest &&\n matchAt(newContent, searchIndex, currentDigest!)\n ) {\n logger.debug(\n { packageFile, currentDigest },\n `Found currentDigest at index ${searchIndex}`,\n );\n if (digestReplaced) {\n startIndex = firstIndexOf(\n existingContent,\n depName!,\n currentValue!,\n startIndex + 1,\n );\n searchIndex = startIndex - 1;\n await writeLocalFile(upgrade.packageFile!, existingContent);\n newContent = existingContent;\n nameReplaced = !newName;\n valueReplaced = !newValue;\n digestReplaced = !newDigest;\n continue;\n }\n // Now test if the result matches\n newContent = replaceAt(\n newContent,\n searchIndex,\n currentDigest!,\n newDigest,\n );\n await writeLocalFile(upgrade.packageFile!, newContent);\n digestReplaced = true;\n searchIndex += newDigest.length - 1;\n }\n if (nameReplaced && valueReplaced && digestReplaced) {\n if (await confirmIfDepUpdated(upgrade, newContent)) {\n return newContent;\n }\n startIndex = firstIndexOf(\n existingContent,\n depName!,\n currentValue!,\n startIndex + 1,\n );\n searchIndex = startIndex - 1;\n await writeLocalFile(upgrade.packageFile!, existingContent);\n newContent = existingContent;\n nameReplaced = !newName;\n valueReplaced = !newValue;\n digestReplaced = !newDigest;\n }\n } else if (matchAt(newContent, searchIndex, replaceString!)) {\n logger.debug(\n { packageFile, depName },\n `Found match at index ${searchIndex}`,\n );\n // Now test if the result matches\n newContent = replaceAt(\n newContent,\n searchIndex,\n replaceString!,\n newString,\n );\n await writeLocalFile(upgrade.packageFile!, newContent);\n if (await confirmIfDepUpdated(upgrade, newContent)) {\n return newContent;\n }\n await writeLocalFile(upgrade.packageFile!, existingContent);\n newContent = existingContent;\n }\n }\n } catch (err) {\n /* istanbul ignore next */\n logger.debug({ packageFile, depName, err }, 'doAutoReplace error');\n }\n // istanbul ignore next\n throw new Error(WORKER_FILE_UPDATE_FAILED);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auto-replace.js","names":[],"sources":["../../../../../lib/workers/repository/update/branch/auto-replace.ts"],"sourcesContent":["// TODO #22198\nimport { isNumber, isString, isUndefined } from '@sindresorhus/is';\nimport { WORKER_FILE_UPDATE_FAILED } from '../../../../constants/error-messages.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { extractPackageFile } from '../../../../modules/manager/index.ts';\nimport type { PackageDependency } from '../../../../modules/manager/types.ts';\nimport { writeLocalFile } from '../../../../util/fs/index.ts';\nimport { escapeRegExp, regEx } from '../../../../util/regex.ts';\nimport { matchAt, replaceAt } from '../../../../util/string.ts';\nimport { compile } from '../../../../util/template/index.ts';\nimport type { BranchUpgradeConfig } from '../../../types.ts';\n\nexport async function confirmIfDepUpdated(\n upgrade: BranchUpgradeConfig,\n newContent: string,\n): Promise<boolean> {\n const { manager, packageFile, depIndex } = upgrade;\n let newUpgrade: PackageDependency;\n try {\n const newExtract = await extractPackageFile(\n manager,\n newContent,\n packageFile!,\n upgrade,\n );\n // istanbul ignore if\n if (!newExtract) {\n // TODO: fix types (#22198)\n logger.debug(\n `Could not extract ${packageFile!} (manager=${manager}) after autoreplace. Did the autoreplace make the file unparseable?`,\n );\n logger.trace(\n { packageFile, content: newContent },\n 'packageFile content after autoreplace',\n );\n return false;\n }\n // istanbul ignore if\n if (!newExtract.deps?.length) {\n logger.debug(\n `Extracted ${packageFile!} after autoreplace has no deps array. Did the autoreplace make the file unparseable?`,\n );\n return false;\n }\n // istanbul ignore if\n if (isNumber(depIndex) && depIndex >= newExtract.deps.length) {\n logger.debug(\n `Extracted ${packageFile!} after autoreplace has fewer deps than expected.`,\n );\n return false;\n }\n newUpgrade = newExtract.deps[depIndex!];\n } catch (err) {\n /* istanbul ignore next */\n logger.debug({ manager, packageFile, err }, 'Failed to parse newContent');\n }\n\n if (!newUpgrade!) {\n logger.debug(`No newUpgrade in ${packageFile!}`);\n return false;\n }\n\n if (\n upgrade.depName !== newUpgrade.depName &&\n upgrade.newName !== newUpgrade.depName\n ) {\n logger.debug(\n {\n manager,\n packageFile,\n currentDepName: upgrade.depName,\n newDepName: newUpgrade.depName,\n },\n 'depName mismatch',\n );\n return false;\n }\n\n if (upgrade.newName && upgrade.newName !== newUpgrade.depName) {\n logger.debug(\n {\n manager,\n packageFile,\n currentDepName: upgrade.depName,\n newDepName: newUpgrade.depName,\n },\n 'depName is not updated',\n );\n return false;\n }\n\n if (upgrade.newValue && upgrade.newValue !== newUpgrade.currentValue) {\n logger.debug(\n {\n depName: upgrade.depName,\n manager,\n packageFile,\n expectedValue: upgrade.newValue,\n foundValue: newUpgrade.currentValue,\n },\n 'Value is not updated',\n );\n return false;\n }\n\n if (\n upgrade.newDigest &&\n (upgrade.isPinDigest === true || upgrade.currentDigest) &&\n upgrade.newDigest !== newUpgrade.currentDigest\n ) {\n logger.debug(\n {\n depName: upgrade.depName,\n manager,\n packageFile,\n expectedValue: upgrade.newDigest,\n foundValue: newUpgrade.currentDigest,\n },\n 'Digest is not updated',\n );\n return false;\n }\n\n return true;\n}\n\nfunction getDepsSignature(deps: PackageDependency[]): string {\n // TODO: types (#22198)\n return deps\n .map(\n (dep) =>\n `${(dep.depName ?? dep.packageName)!}${(dep.packageName ??\n dep.depName)!}`,\n )\n .join(',');\n}\n\nfunction firstIndexOf(\n existingContent: string,\n depName: string,\n currentValue: string,\n position = 0,\n): number {\n const depIndex = existingContent.indexOf(depName, position);\n const valIndex = existingContent.indexOf(currentValue, position);\n const index = depIndex < valIndex ? depIndex : valIndex;\n if (index < 0) {\n return position === 0 ? -1 : existingContent.length;\n }\n return index;\n}\n\nexport async function checkBranchDepsMatchBaseDeps(\n upgrade: BranchUpgradeConfig,\n branchContent: string,\n): Promise<boolean> {\n const { baseDeps, manager, packageFile } = upgrade;\n try {\n const res = await extractPackageFile(\n manager,\n branchContent,\n packageFile!,\n upgrade,\n )!;\n const branchDeps = res!.deps;\n return getDepsSignature(baseDeps!) === getDepsSignature(branchDeps);\n } catch /* istanbul ignore next */ {\n logger.info(\n { manager, packageFile },\n 'Failed to parse branchContent - rebasing',\n );\n return false;\n }\n}\n\nasync function checkExistingBranch(\n upgrade: BranchUpgradeConfig,\n existingContent: string,\n): Promise<string | null> {\n const { packageFile, depName } = upgrade;\n if (!(await checkBranchDepsMatchBaseDeps(upgrade, existingContent))) {\n logger.debug(\n { packageFile, depName },\n 'Rebasing branch after deps list has changed',\n );\n return null;\n }\n if (!(await confirmIfDepUpdated(upgrade, existingContent))) {\n logger.debug(\n { packageFile, depName },\n 'Rebasing after outdated branch dep found',\n );\n return null;\n }\n // TODO: fix types (#22198)\n logger.debug(`Branch dep ${depName!} in ${packageFile!} is already updated`);\n return existingContent;\n}\n\nexport async function doAutoReplace(\n upgrade: BranchUpgradeConfig,\n existingContent: string,\n reuseExistingBranch: boolean,\n firstUpdate = true,\n): Promise<string | null> {\n const {\n packageFile,\n depName,\n depNameTemplate,\n newName,\n currentValue,\n currentValueTemplate,\n newValue,\n currentDigest,\n currentDigestShort,\n newDigest,\n autoReplaceGlobalMatch,\n autoReplaceStringTemplate,\n } = upgrade;\n /*\n If replacement support for more managers is added,\n please also update the list in docs/usage/configuration-options.md\n at replacementName and replacementVersion\n */\n if (reuseExistingBranch) {\n return await checkExistingBranch(upgrade, existingContent);\n }\n const valueChanging =\n isString(currentValue) && isString(newValue) && currentValue !== newValue;\n const digestChanging =\n isString(currentDigest) &&\n isString(newDigest) &&\n currentDigest !== newDigest;\n let replaceWithoutReplaceString =\n isString(newName) &&\n newName !== depName &&\n (isUndefined(upgrade.replaceString) ||\n !upgrade.replaceString?.includes(depName!));\n // fallback must contain the field being updated, else the replacement is\n // a no-op for managers where value and digest live in separate tokens\n let replaceString = upgrade.replaceString;\n if (isUndefined(replaceString)) {\n if (valueChanging && digestChanging) {\n // no single fallback covers both — use the per-field path\n replaceWithoutReplaceString = true;\n replaceString = currentValue;\n } else if (digestChanging) {\n replaceString = currentDigest;\n } else {\n replaceString = currentValue ?? currentDigest;\n }\n }\n logger.trace({ depName, replaceString }, 'autoReplace replaceString');\n let searchIndex: number;\n if (replaceWithoutReplaceString) {\n searchIndex = firstIndexOf(existingContent, depName!, currentValue!);\n } else {\n searchIndex = existingContent.indexOf(replaceString!);\n }\n if (searchIndex === -1) {\n logger.info(\n { packageFile, depName, existingContent, replaceString },\n 'Cannot find replaceString in current file content. Was it already updated?',\n );\n return existingContent;\n }\n try {\n let newString: string;\n if (autoReplaceStringTemplate && !newName) {\n newString = compile(autoReplaceStringTemplate, upgrade, false);\n } else {\n newString = replaceString!;\n\n const autoReplaceRegExpFlag = autoReplaceGlobalMatch ? 'g' : '';\n if (currentValue && newValue && currentValue !== newValue) {\n if (!newString.includes(currentValue)) {\n logger.debug(\n { stringToReplace: newString, currentValue, currentValueTemplate },\n 'currentValue not found in string to replace',\n );\n }\n newString = newString.replace(\n regEx(escapeRegExp(currentValue), autoReplaceRegExpFlag),\n newValue,\n );\n }\n if (depName && newName && depName !== newName) {\n if (!newString.includes(depName)) {\n logger.debug(\n { stringToReplace: newString, depName, depNameTemplate },\n 'depName not found in string to replace',\n );\n }\n newString = newString.replace(\n regEx(escapeRegExp(depName), autoReplaceRegExpFlag),\n newName,\n );\n }\n if (currentDigest && newDigest && currentDigest !== newDigest) {\n if (!newString.includes(currentDigest)) {\n logger.debug(\n { stringToReplace: newString, currentDigest },\n 'currentDigest not found in string to replace',\n );\n }\n newString = newString.replace(\n regEx(escapeRegExp(currentDigest), autoReplaceRegExpFlag),\n newDigest,\n );\n } else if (\n currentDigestShort &&\n newDigest &&\n currentDigestShort !== newDigest &&\n // Only use short digest replacement when there's no full currentDigest\n // that already matches newDigest (otherwise we'd incorrectly replace\n // part of an already-correct digest)\n !(currentDigest && currentDigest === newDigest)\n ) {\n if (!newString.includes(currentDigestShort)) {\n logger.debug(\n { stringToReplace: newString, currentDigestShort },\n 'currentDigestShort not found in string to replace',\n );\n }\n newString = newString.replace(\n regEx(escapeRegExp(currentDigestShort), autoReplaceRegExpFlag),\n newDigest,\n );\n }\n }\n if (!firstUpdate && (await confirmIfDepUpdated(upgrade, existingContent))) {\n logger.debug(\n { packageFile, depName },\n 'Package file is already updated - no work to do',\n );\n return existingContent;\n }\n logger.debug(\n { packageFile, depName },\n `Starting search at index ${searchIndex}`,\n );\n let newContent = existingContent;\n let nameReplaced = !newName;\n let valueReplaced = !newValue;\n let digestReplaced = !newDigest;\n let startIndex = searchIndex;\n // Iterate through the rest of the file\n for (; searchIndex < newContent.length; searchIndex += 1) {\n // First check if we have a hit for the old version\n if (replaceWithoutReplaceString) {\n // look for depName and currentValue\n if (newName && matchAt(newContent, searchIndex, depName!)) {\n logger.debug(\n { packageFile, depName },\n `Found depName at index ${searchIndex}`,\n );\n if (nameReplaced) {\n startIndex = firstIndexOf(\n existingContent,\n depName!,\n currentValue!,\n startIndex + 1,\n );\n searchIndex = startIndex - 1;\n await writeLocalFile(upgrade.packageFile!, existingContent);\n newContent = existingContent;\n nameReplaced = !newName;\n valueReplaced = !newValue;\n digestReplaced = !newDigest;\n continue;\n }\n // replace with newName\n newContent = replaceAt(newContent, searchIndex, depName!, newName);\n await writeLocalFile(upgrade.packageFile!, newContent);\n nameReplaced = true;\n searchIndex += newName.length - 1;\n } else if (\n newValue &&\n matchAt(newContent, searchIndex, currentValue!)\n ) {\n logger.debug(\n { packageFile, currentValue },\n `Found currentValue at index ${searchIndex}`,\n );\n if (valueReplaced) {\n startIndex = firstIndexOf(\n existingContent,\n depName!,\n currentValue!,\n startIndex + 1,\n );\n searchIndex = startIndex - 1;\n await writeLocalFile(upgrade.packageFile!, existingContent);\n newContent = existingContent;\n nameReplaced = !newName;\n valueReplaced = !newValue;\n digestReplaced = !newDigest;\n continue;\n }\n // Now test if the result matches\n newContent = replaceAt(\n newContent,\n searchIndex,\n currentValue!,\n newValue,\n );\n await writeLocalFile(upgrade.packageFile!, newContent);\n valueReplaced = true;\n searchIndex += newValue.length - 1;\n } else if (\n newDigest &&\n matchAt(newContent, searchIndex, currentDigest!)\n ) {\n logger.debug(\n { packageFile, currentDigest },\n `Found currentDigest at index ${searchIndex}`,\n );\n if (digestReplaced) {\n startIndex = firstIndexOf(\n existingContent,\n depName!,\n currentValue!,\n startIndex + 1,\n );\n searchIndex = startIndex - 1;\n await writeLocalFile(upgrade.packageFile!, existingContent);\n newContent = existingContent;\n nameReplaced = !newName;\n valueReplaced = !newValue;\n digestReplaced = !newDigest;\n continue;\n }\n // Now test if the result matches\n newContent = replaceAt(\n newContent,\n searchIndex,\n currentDigest!,\n newDigest,\n );\n await writeLocalFile(upgrade.packageFile!, newContent);\n digestReplaced = true;\n searchIndex += newDigest.length - 1;\n }\n if (nameReplaced && valueReplaced && digestReplaced) {\n if (await confirmIfDepUpdated(upgrade, newContent)) {\n return newContent;\n }\n startIndex = firstIndexOf(\n existingContent,\n depName!,\n currentValue!,\n startIndex + 1,\n );\n searchIndex = startIndex - 1;\n await writeLocalFile(upgrade.packageFile!, existingContent);\n newContent = existingContent;\n nameReplaced = !newName;\n valueReplaced = !newValue;\n digestReplaced = !newDigest;\n }\n } else if (matchAt(newContent, searchIndex, replaceString!)) {\n logger.debug(\n { packageFile, depName },\n `Found match at index ${searchIndex}`,\n );\n // Now test if the result matches\n newContent = replaceAt(\n newContent,\n searchIndex,\n replaceString!,\n newString,\n );\n await writeLocalFile(upgrade.packageFile!, newContent);\n if (await confirmIfDepUpdated(upgrade, newContent)) {\n return newContent;\n }\n await writeLocalFile(upgrade.packageFile!, existingContent);\n newContent = existingContent;\n }\n }\n } catch (err) {\n /* istanbul ignore next */\n logger.debug({ packageFile, depName, err }, 'doAutoReplace error');\n }\n // istanbul ignore next\n throw new Error(WORKER_FILE_UPDATE_FAILED);\n}\n"],"mappings":"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"}
|