renovate 43.116.1 → 43.118.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.
- package/dist/config/presets/internal/custom-managers.preset.js +1 -1
- package/dist/config/presets/internal/custom-managers.preset.js.map +1 -1
- package/dist/modules/manager/ant/extract.js +82 -20
- package/dist/modules/manager/ant/extract.js.map +1 -1
- package/dist/modules/manager/ant/index.js +2 -0
- package/dist/modules/manager/ant/index.js.map +1 -1
- package/dist/modules/manager/ant/properties.js +123 -0
- package/dist/modules/manager/ant/properties.js.map +1 -0
- package/dist/modules/manager/ant/update.js +33 -0
- package/dist/modules/manager/ant/update.js.map +1 -0
- package/dist/modules/manager/bitbucket-pipelines/index.js +1 -1
- package/dist/modules/manager/bitbucket-pipelines/index.js.map +1 -1
- package/dist/modules/manager/fingerprint.generated.js +2 -2
- package/dist/modules/manager/fingerprint.generated.js.map +1 -1
- package/dist/modules/platform/github/schema.d.ts +2 -2
- package/dist/util/cache/package/impl/file.js +13 -0
- package/dist/util/cache/package/impl/file.js.map +1 -1
- package/package.json +2 -1
- package/renovate-schema.json +3 -3
|
@@ -22,7 +22,7 @@ const presets = {
|
|
|
22
22
|
bitbucketPipelinesVersions: {
|
|
23
23
|
customManagers: [{
|
|
24
24
|
customType: "regex",
|
|
25
|
-
managerFilePatterns: ["
|
|
25
|
+
managerFilePatterns: ["**/*-pipelines.yml"],
|
|
26
26
|
matchStrings: ["# renovate: datasource=(?<datasource>[a-zA-Z0-9-._]+?) depName=(?<depName>[^\\s]+?)(?: (lookupName|packageName)=(?<packageName>[^\\s]+?))?(?: versioning=(?<versioning>[^\\s]+?))?(?: extractVersion=(?<extractVersion>[^\\s]+?))?(?: registryUrl=(?<registryUrl>[^\\s]+?))?\\s+.*\\s+[A-Za-z0-9_]+?_VERSION[ =:]\\s?[\"']?(?<currentValue>.+?)[\"']?\\s"]
|
|
27
27
|
}],
|
|
28
28
|
description: "Update `_VERSION` variables in Bitbucket Pipelines"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-managers.preset.js","names":[],"sources":["../../../../lib/config/presets/internal/custom-managers.preset.ts"],"sourcesContent":["import type { Preset } from '../types.ts';\n\nexport const presets: Record<string, Preset> = {\n azurePipelinesVersions: {\n customManagers: [\n {\n customType: 'regex',\n managerFilePatterns: [\n '**/.azuredevops/**/*.{yml,yaml}',\n 'azure*pipeline*.{yml,yaml}',\n ],\n matchStrings: [\n '# renovate: datasource=(?<datasource>[a-zA-Z0-9-._]+?) depName=(?<depName>[^\\\\s]+?)(?: (?:lookupName|packageName)=(?<packageName>[^\\\\s]+?))?(?: versioning=(?<versioning>[^\\\\s]+?))?(?: extractVersion=(?<extractVersion>[^\\\\s]+?))?(?: registryUrl=(?<registryUrl>[^\\\\s]+?))?\\\\s+[A-Za-z0-9_]+?_VERSION\\\\s*:\\\\s*[\"\\']?(?<currentValue>.+?)[\"\\']?\\\\s',\n ],\n },\n ],\n description:\n 'Update `_VERSION` environment variables in Azure Pipelines files.',\n },\n biomeVersions: {\n customManagers: [\n {\n customType: 'jsonata',\n datasourceTemplate: 'npm',\n depNameTemplate: '@biomejs/biome',\n fileFormat: 'json',\n managerFilePatterns: ['**/biome.{json,jsonc}'],\n matchStrings: ['{\"currentValue\": $split($.\"$schema\",(\"/\"))[-2]}'],\n },\n ],\n description:\n 'Update `$schema` version in `biome.json` configuration files.',\n },\n bitbucketPipelinesVersions: {\n customManagers: [\n {\n customType: 'regex',\n managerFilePatterns: ['
|
|
1
|
+
{"version":3,"file":"custom-managers.preset.js","names":[],"sources":["../../../../lib/config/presets/internal/custom-managers.preset.ts"],"sourcesContent":["import type { Preset } from '../types.ts';\n\nexport const presets: Record<string, Preset> = {\n azurePipelinesVersions: {\n customManagers: [\n {\n customType: 'regex',\n managerFilePatterns: [\n '**/.azuredevops/**/*.{yml,yaml}',\n 'azure*pipeline*.{yml,yaml}',\n ],\n matchStrings: [\n '# renovate: datasource=(?<datasource>[a-zA-Z0-9-._]+?) depName=(?<depName>[^\\\\s]+?)(?: (?:lookupName|packageName)=(?<packageName>[^\\\\s]+?))?(?: versioning=(?<versioning>[^\\\\s]+?))?(?: extractVersion=(?<extractVersion>[^\\\\s]+?))?(?: registryUrl=(?<registryUrl>[^\\\\s]+?))?\\\\s+[A-Za-z0-9_]+?_VERSION\\\\s*:\\\\s*[\"\\']?(?<currentValue>.+?)[\"\\']?\\\\s',\n ],\n },\n ],\n description:\n 'Update `_VERSION` environment variables in Azure Pipelines files.',\n },\n biomeVersions: {\n customManagers: [\n {\n customType: 'jsonata',\n datasourceTemplate: 'npm',\n depNameTemplate: '@biomejs/biome',\n fileFormat: 'json',\n managerFilePatterns: ['**/biome.{json,jsonc}'],\n matchStrings: ['{\"currentValue\": $split($.\"$schema\",(\"/\"))[-2]}'],\n },\n ],\n description:\n 'Update `$schema` version in `biome.json` configuration files.',\n },\n bitbucketPipelinesVersions: {\n customManagers: [\n {\n customType: 'regex',\n managerFilePatterns: ['**/*-pipelines.yml'],\n matchStrings: [\n '# renovate: datasource=(?<datasource>[a-zA-Z0-9-._]+?) depName=(?<depName>[^\\\\s]+?)(?: (lookupName|packageName)=(?<packageName>[^\\\\s]+?))?(?: versioning=(?<versioning>[^\\\\s]+?))?(?: extractVersion=(?<extractVersion>[^\\\\s]+?))?(?: registryUrl=(?<registryUrl>[^\\\\s]+?))?\\\\s+.*\\\\s+[A-Za-z0-9_]+?_VERSION[ =:]\\\\s?[\"\\']?(?<currentValue>.+?)[\"\\']?\\\\s',\n ],\n },\n ],\n description: 'Update `_VERSION` variables in Bitbucket Pipelines',\n },\n dockerfileVersions: {\n customManagers: [\n {\n customType: 'regex',\n managerFilePatterns: [\n '**/[Dd]ockerfile*',\n '**/[Cc]ontainerfile*',\n '**/*.[Dd]ockerfile*',\n '**/*.[Cc]ontainerfile*',\n ],\n matchStrings: [\n '# renovate: datasource=(?<datasource>[a-zA-Z0-9-._]+?) depName=(?<depName>[^\\\\s]+?)(?: (lookupName|packageName)=(?<packageName>[^\\\\s]+?))?(?: versioning=(?<versioning>[^\\\\s]+?))?(?: extractVersion=(?<extractVersion>[^\\\\s]+?))?(?: registryUrl=(?<registryUrl>[^\\\\s]+?))?\\\\s(?:ENV|ARG)\\\\s+[A-Za-z0-9_]+?_VERSION[ =][\"\\']?(?<currentValue>.+?)[\"\\']?\\\\s',\n ],\n },\n ],\n description: 'Update `_VERSION` variables in Dockerfiles.',\n },\n githubActionsVersions: {\n customManagers: [\n {\n customType: 'regex',\n managerFilePatterns: [\n '/(^|/)(workflow-templates|\\\\.(?:github|gitea|forgejo)/(?:workflows|actions))/.+\\\\.ya?ml$/',\n '/(^|/)action\\\\.ya?ml$/',\n ],\n matchStrings: [\n '# renovate: datasource=(?<datasource>[a-zA-Z0-9-._]+?) depName=(?<depName>[^\\\\s]+?)(?: (?:lookupName|packageName)=(?<packageName>[^\\\\s]+?))?(?: versioning=(?<versioning>[^\\\\s]+?))?(?: extractVersion=(?<extractVersion>[^\\\\s]+?))?(?: registryUrl=(?<registryUrl>[^\\\\s]+?))?\\\\s+[A-Za-z0-9_]+?_VERSION\\\\s*:\\\\s*[\"\\']?(?<currentValue>.+?)[\"\\']?\\\\s',\n ],\n },\n ],\n description:\n 'Update `_VERSION` environment variables in GitHub Action files.',\n },\n gitlabPipelineVersions: {\n customManagers: [\n {\n customType: 'regex',\n managerFilePatterns: ['**/*.gitlab-ci.{yml,yaml}'],\n matchStrings: [\n '# renovate: datasource=(?<datasource>[a-zA-Z0-9-._]+?) depName=(?<depName>[^\\\\s]+?)(?: (?:packageName)=(?<packageName>[^\\\\s]+?))?(?: versioning=(?<versioning>[^\\\\s]+?))?(?: extractVersion=(?<extractVersion>[^\\\\s]+?))?(?: registryUrl=(?<registryUrl>[^\\\\s]+?))?\\\\s+[A-Za-z0-9_]+?_VERSION\\\\s*:\\\\s*[\"\\']?(?<currentValue>.+?)[\"\\']?\\\\s',\n ],\n },\n ],\n description:\n 'Update `_VERSION` environment variables in GitLab pipeline file.',\n },\n helmChartYamlAppVersions: {\n customManagers: [\n {\n customType: 'regex',\n datasourceTemplate: 'docker',\n managerFilePatterns: ['**/Chart.yaml'],\n matchStrings: [\n '#\\\\s*renovate: image=(?<depName>.*?)\\\\s+appVersion:\\\\s*[\"\\']?(?<currentValue>[\\\\w+\\\\.\\\\-]*)',\n ],\n },\n ],\n description: 'Update `appVersion` value in Helm chart `Chart.yaml`.',\n },\n makefileVersions: {\n customManagers: [\n {\n customType: 'regex',\n managerFilePatterns: ['**/[Mm]akefile', '**/GNUMakefile', '**/*.mk'],\n matchStrings: [\n '# renovate: datasource=(?<datasource>[a-zA-Z0-9-._]+?) depName=(?<depName>[^\\\\s]+?)(?: (?:packageName)=(?<packageName>[^\\\\s]+?))?(?: versioning=(?<versioning>[^\\\\s]+?))?(?: extractVersion=(?<extractVersion>[^\\\\s]+?))?(?: registryUrl=(?<registryUrl>[^\\\\s]+?))?\\\\s+[A-Za-z0-9_]+?_VERSION\\\\s*:*\\\\??=\\\\s*[\"\\']?(?<currentValue>.+?)[\"\\']?\\\\s',\n ],\n },\n ],\n description: 'Update `_VERSION` variables in Makefiles.',\n },\n mavenPropertyVersions: {\n customManagers: [\n {\n customType: 'regex',\n datasourceTemplate:\n '{{#if datasource}}{{{datasource}}}{{else}}maven{{/if}}',\n managerFilePatterns: ['**/pom.xml'],\n matchStrings: [\n '<!--\\\\s?renovate:( datasource=(?<datasource>[a-zA-Z0-9-._]+?))? depName=(?<depName>[^\\\\s]+?)(?: packageName=(?<packageName>[^\\\\s]+?))?(?: versioning=(?<versioning>[^\\\\s]+?))?(?: extractVersion=(?<extractVersion>[^\\\\s]+?))?\\\\s+-->\\\\s+<.+\\\\.version>(?<currentValue>.+)<\\\\/.+\\\\.version>',\n ],\n versioningTemplate: '{{#if versioning}}{{{versioning}}}{{/if}}',\n },\n ],\n description: 'Update `*.version` properties in `pom.xml` files.',\n },\n tfvarsVersions: {\n customManagers: [\n {\n customType: 'regex',\n managerFilePatterns: ['**/*.tfvars'],\n matchStrings: [\n '#\\\\s*renovate: datasource=(?<datasource>.*?) depName=(?<depName>.*?)( versioning=(?<versioning>.*?))?(?: extractVersion=(?<extractVersion>.*?))?(?: registryUrl=(?<registryUrl>[^\\\\s]+?))?\\\\s.*?_version\\\\s*=\\\\s*\"(?<currentValue>.*)\"',\n ],\n versioningTemplate: '{{#if versioning}}{{{versioning}}}{{/if}}',\n },\n ],\n description: 'Update `*_version` variables in `.tfvars` files.',\n },\n tsconfigNodeVersions: {\n customManagers: [\n {\n autoReplaceStringTemplate: '\"@tsconfig/node{{{major}}}/tsconfig.json\"',\n currentValueTemplate: '{{{major}}}',\n customType: 'regex',\n datasourceTemplate: 'npm',\n managerFilePatterns: ['**/{j,t}sconfig.json', '**/{j,t}sconfig.*.json'],\n matchStrings: [\n '\"(?<depName>@tsconfig/node(?<major>\\\\d+))/tsconfig\\\\.json\"',\n ],\n },\n {\n autoReplaceStringTemplate: '\"@tsconfig/node{{{major}}}\"',\n currentValueTemplate: '{{{major}}}',\n customType: 'regex',\n datasourceTemplate: 'npm',\n managerFilePatterns: ['**/{j,t}sconfig.json', '**/{j,t}sconfig.*.json'],\n matchStrings: ['\"(?<depName>@tsconfig/node(?<major>\\\\d+))\"'],\n },\n ],\n description:\n 'Update `@tsconfig/node` extends in `tsconfig.json` and `jsconfig.json` files.',\n },\n};\n"],"mappings":";AAEA,MAAa,UAAkC;CAC7C,wBAAwB;EACtB,gBAAgB,CACd;GACE,YAAY;GACZ,qBAAqB,CACnB,mCACA,6BACD;GACD,cAAc,CACZ,uVACD;GACF,CACF;EACD,aACE;EACH;CACD,eAAe;EACb,gBAAgB,CACd;GACE,YAAY;GACZ,oBAAoB;GACpB,iBAAiB;GACjB,YAAY;GACZ,qBAAqB,CAAC,wBAAwB;GAC9C,cAAc,CAAC,wDAAkD;GAClE,CACF;EACD,aACE;EACH;CACD,4BAA4B;EAC1B,gBAAgB,CACd;GACE,YAAY;GACZ,qBAAqB,CAAC,qBAAqB;GAC3C,cAAc,CACZ,2VACD;GACF,CACF;EACD,aAAa;EACd;CACD,oBAAoB;EAClB,gBAAgB,CACd;GACE,YAAY;GACZ,qBAAqB;IACnB;IACA;IACA;IACA;IACD;GACD,cAAc,CACZ,8VACD;GACF,CACF;EACD,aAAa;EACd;CACD,uBAAuB;EACrB,gBAAgB,CACd;GACE,YAAY;GACZ,qBAAqB,CACnB,6FACA,yBACD;GACD,cAAc,CACZ,uVACD;GACF,CACF;EACD,aACE;EACH;CACD,wBAAwB;EACtB,gBAAgB,CACd;GACE,YAAY;GACZ,qBAAqB,CAAC,4BAA4B;GAClD,cAAc,CACZ,4UACD;GACF,CACF;EACD,aACE;EACH;CACD,0BAA0B;EACxB,gBAAgB,CACd;GACE,YAAY;GACZ,oBAAoB;GACpB,qBAAqB,CAAC,gBAAgB;GACtC,cAAc,CACZ,8FACD;GACF,CACF;EACD,aAAa;EACd;CACD,kBAAkB;EAChB,gBAAgB,CACd;GACE,YAAY;GACZ,qBAAqB;IAAC;IAAkB;IAAkB;IAAU;GACpE,cAAc,CACZ,kVACD;GACF,CACF;EACD,aAAa;EACd;CACD,uBAAuB;EACrB,gBAAgB,CACd;GACE,YAAY;GACZ,oBACE;GACF,qBAAqB,CAAC,aAAa;GACnC,cAAc,CACZ,8RACD;GACD,oBAAoB;GACrB,CACF;EACD,aAAa;EACd;CACD,gBAAgB;EACd,gBAAgB,CACd;GACE,YAAY;GACZ,qBAAqB,CAAC,cAAc;GACpC,cAAc,CACZ,2OACD;GACD,oBAAoB;GACrB,CACF;EACD,aAAa;EACd;CACD,sBAAsB;EACpB,gBAAgB,CACd;GACE,2BAA2B;GAC3B,sBAAsB;GACtB,YAAY;GACZ,oBAAoB;GACpB,qBAAqB,CAAC,wBAAwB,yBAAyB;GACvE,cAAc,CACZ,+DACD;GACF,EACD;GACE,2BAA2B;GAC3B,sBAAsB;GACtB,YAAY;GACZ,oBAAoB;GACpB,qBAAqB,CAAC,wBAAwB,yBAAyB;GACvE,cAAc,CAAC,+CAA6C;GAC7D,CACF;EACD,aACE;EACH;CACF"}
|
|
@@ -2,6 +2,8 @@ import { logger } from "../../../logger/index.js";
|
|
|
2
2
|
import { readLocalFile } from "../../../util/fs/index.js";
|
|
3
3
|
import { MavenDatasource } from "../../datasource/maven/index.js";
|
|
4
4
|
import { isXmlElement } from "../nuget/util.js";
|
|
5
|
+
import { applyProps, findAttrValuePosition, parsePropertiesFile, resolveChainedProps } from "./properties.js";
|
|
6
|
+
import upath from "upath";
|
|
5
7
|
import { XmlDocument } from "xmldoc";
|
|
6
8
|
//#region lib/modules/manager/ant/extract.ts
|
|
7
9
|
const scopeNames = new Set([
|
|
@@ -15,24 +17,29 @@ function getDependencyType(scope) {
|
|
|
15
17
|
if (scope && scopeNames.has(scope)) return scope;
|
|
16
18
|
return "compile";
|
|
17
19
|
}
|
|
18
|
-
function collectDependency(node) {
|
|
20
|
+
function collectDependency(node, packageFile, content) {
|
|
19
21
|
const { groupId, artifactId, version, scope } = node.attr;
|
|
20
22
|
if (!version || !groupId || !artifactId) return null;
|
|
21
|
-
|
|
23
|
+
const dep = {
|
|
22
24
|
datasource: MavenDatasource.id,
|
|
23
25
|
depName: `${groupId}:${artifactId}`,
|
|
24
26
|
currentValue: version,
|
|
25
27
|
depType: getDependencyType(scope),
|
|
26
28
|
registryUrls: []
|
|
27
29
|
};
|
|
30
|
+
dep.fileReplacePosition = findAttrValuePosition(content, node, "version");
|
|
31
|
+
return {
|
|
32
|
+
dep,
|
|
33
|
+
depPackageFile: packageFile
|
|
34
|
+
};
|
|
28
35
|
}
|
|
29
|
-
function walkNode(node,
|
|
36
|
+
function walkNode(node, rawDeps, packageFile, content) {
|
|
30
37
|
for (const child of node.children) {
|
|
31
38
|
if (!isXmlElement(child)) continue;
|
|
32
39
|
if (child.name === "dependency") {
|
|
33
|
-
const
|
|
34
|
-
if (
|
|
35
|
-
} else walkNode(child,
|
|
40
|
+
const rawDep = collectDependency(child, packageFile, content);
|
|
41
|
+
if (rawDep) rawDeps.push(rawDep);
|
|
42
|
+
} else walkNode(child, rawDeps, packageFile, content);
|
|
36
43
|
}
|
|
37
44
|
}
|
|
38
45
|
function extractPackageFile(content, packageFile) {
|
|
@@ -43,32 +50,87 @@ function extractPackageFile(content, packageFile) {
|
|
|
43
50
|
logger.debug(`ant manager: could not parse XML ${packageFile}`);
|
|
44
51
|
return null;
|
|
45
52
|
}
|
|
46
|
-
const
|
|
47
|
-
walkNode(doc,
|
|
53
|
+
const rawDeps = [];
|
|
54
|
+
walkNode(doc, rawDeps, packageFile, content);
|
|
55
|
+
const deps = rawDeps.map((rd) => rd.dep);
|
|
48
56
|
if (deps.length === 0) return null;
|
|
49
57
|
return { deps };
|
|
50
58
|
}
|
|
51
|
-
|
|
52
|
-
|
|
59
|
+
/**
|
|
60
|
+
* Walk an XML node tree in document order, processing properties,
|
|
61
|
+
* property file references, and dependencies as they appear.
|
|
62
|
+
*/
|
|
63
|
+
async function walkNodeInOrder(node, packageFile, content, visitedFiles, allProps, allRawDeps) {
|
|
64
|
+
const baseDir = upath.dirname(packageFile);
|
|
65
|
+
for (const child of node.children) {
|
|
66
|
+
if (!isXmlElement(child)) continue;
|
|
67
|
+
if (child.name === "property") {
|
|
68
|
+
const name = child.attr.name;
|
|
69
|
+
const value = child.attr.value;
|
|
70
|
+
if (name && value && !(name in allProps)) allProps[name] = {
|
|
71
|
+
val: value,
|
|
72
|
+
fileReplacePosition: findAttrValuePosition(content, child, "value"),
|
|
73
|
+
packageFile
|
|
74
|
+
};
|
|
75
|
+
const file = child.attr.file;
|
|
76
|
+
if (file) {
|
|
77
|
+
const propFilePath = file.startsWith("/") ? file : upath.join(baseDir, file);
|
|
78
|
+
if (!visitedFiles.has(propFilePath)) {
|
|
79
|
+
visitedFiles.add(propFilePath);
|
|
80
|
+
const propContent = await readLocalFile(propFilePath, "utf8");
|
|
81
|
+
if (propContent) parsePropertiesFile(propContent, propFilePath, allProps);
|
|
82
|
+
else logger.debug(`ant manager: could not read properties file ${propFilePath}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
} else if (child.name === "dependency") {
|
|
86
|
+
const rawDep = collectDependency(child, packageFile, content);
|
|
87
|
+
if (rawDep) allRawDeps.push(rawDep);
|
|
88
|
+
} else await walkNodeInOrder(child, packageFile, content, visitedFiles, allProps, allRawDeps);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
async function walkXmlFile(packageFile, visitedFiles, allProps, allRawDeps) {
|
|
53
92
|
visitedFiles.add(packageFile);
|
|
54
93
|
const content = await readLocalFile(packageFile, "utf8");
|
|
55
94
|
if (!content) {
|
|
56
95
|
logger.debug(`ant manager: could not read ${packageFile}`);
|
|
57
|
-
return
|
|
96
|
+
return;
|
|
58
97
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
98
|
+
let doc;
|
|
99
|
+
try {
|
|
100
|
+
doc = new XmlDocument(content);
|
|
101
|
+
} catch {
|
|
102
|
+
logger.debug(`ant manager: could not parse XML ${packageFile}`);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
await walkNodeInOrder(doc, packageFile, content, visitedFiles, allProps, allRawDeps);
|
|
65
106
|
}
|
|
66
107
|
async function extractAllPackageFiles(_config, packageFiles) {
|
|
67
108
|
const results = [];
|
|
68
|
-
const
|
|
109
|
+
const seen = /* @__PURE__ */ new Set();
|
|
69
110
|
for (const packageFile of packageFiles) {
|
|
70
|
-
|
|
71
|
-
|
|
111
|
+
if (seen.has(packageFile)) continue;
|
|
112
|
+
seen.add(packageFile);
|
|
113
|
+
const visitedFiles = /* @__PURE__ */ new Set();
|
|
114
|
+
const allProps = {};
|
|
115
|
+
const allRawDeps = [];
|
|
116
|
+
await walkXmlFile(packageFile, visitedFiles, allProps, allRawDeps);
|
|
117
|
+
resolveChainedProps(allProps);
|
|
118
|
+
const resolvedDeps = allRawDeps.map((rawDep) => applyProps(rawDep.dep, rawDep.depPackageFile, allProps));
|
|
119
|
+
if (resolvedDeps.length === 0) continue;
|
|
120
|
+
const fileMap = /* @__PURE__ */ new Map();
|
|
121
|
+
for (let i = 0; i < resolvedDeps.length; i++) {
|
|
122
|
+
const dep = resolvedDeps[i];
|
|
123
|
+
const targetFile = dep.propSource ?? allRawDeps[i].depPackageFile;
|
|
124
|
+
if (!fileMap.has(targetFile)) fileMap.set(targetFile, []);
|
|
125
|
+
fileMap.get(targetFile).push(dep);
|
|
126
|
+
}
|
|
127
|
+
for (const [pkgFile, deps] of fileMap) {
|
|
128
|
+
for (const dep of deps) delete dep.propSource;
|
|
129
|
+
results.push({
|
|
130
|
+
packageFile: pkgFile,
|
|
131
|
+
deps
|
|
132
|
+
});
|
|
133
|
+
}
|
|
72
134
|
}
|
|
73
135
|
return results.length > 0 ? results : null;
|
|
74
136
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/ant/extract.ts"],"sourcesContent":["import type { XmlElement } from 'xmldoc';\nimport { XmlDocument } from 'xmldoc';\nimport { logger } from '../../../logger/index.ts';\nimport { readLocalFile } from '../../../util/fs/index.ts';\nimport { MavenDatasource } from '../../datasource/maven/index.ts';\nimport { isXmlElement } from '../nuget/util.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFile,\n PackageFileContent,\n} from '../types.ts';\n\nconst scopeNames = new Set([\n 'compile',\n 'runtime',\n 'test',\n 'provided',\n 'system',\n]);\n\nfunction getDependencyType(scope: string | undefined): string {\n if (scope && scopeNames.has(scope)) {\n return scope;\n }\n return 'compile';\n}\n\nfunction collectDependency(node: XmlElement):
|
|
1
|
+
{"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/ant/extract.ts"],"sourcesContent":["import upath from 'upath';\nimport type { XmlElement } from 'xmldoc';\nimport { XmlDocument } from 'xmldoc';\nimport { logger } from '../../../logger/index.ts';\nimport { readLocalFile } from '../../../util/fs/index.ts';\nimport { MavenDatasource } from '../../datasource/maven/index.ts';\nimport { isXmlElement } from '../nuget/util.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFile,\n PackageFileContent,\n} from '../types.ts';\nimport {\n applyProps,\n findAttrValuePosition,\n parsePropertiesFile,\n resolveChainedProps,\n} from './properties.ts';\nimport type { AntProp } from './types.ts';\n\nexport { parsePropertiesFile } from './properties.ts';\n\nconst scopeNames = new Set([\n 'compile',\n 'runtime',\n 'test',\n 'provided',\n 'system',\n]);\n\nfunction getDependencyType(scope: string | undefined): string {\n if (scope && scopeNames.has(scope)) {\n return scope;\n }\n return 'compile';\n}\n\ninterface RawDep {\n dep: PackageDependency;\n depPackageFile: string;\n}\n\nfunction collectDependency(\n node: XmlElement,\n packageFile: string,\n content: string,\n): RawDep | null {\n const { groupId, artifactId, version, scope } = node.attr;\n\n if (!version || !groupId || !artifactId) {\n return null;\n }\n\n const dep: PackageDependency = {\n datasource: MavenDatasource.id,\n depName: `${groupId}:${artifactId}`,\n currentValue: version,\n depType: getDependencyType(scope),\n registryUrls: [],\n };\n\n dep.fileReplacePosition = findAttrValuePosition(content, node, 'version');\n\n return { dep, depPackageFile: packageFile };\n}\n\nfunction walkNode(\n node: XmlElement | XmlDocument,\n rawDeps: RawDep[],\n packageFile: string,\n content: string,\n): void {\n for (const child of node.children) {\n if (!isXmlElement(child)) {\n continue;\n }\n\n if (child.name === 'dependency') {\n const rawDep = collectDependency(child, packageFile, content);\n if (rawDep) {\n rawDeps.push(rawDep);\n }\n } else {\n walkNode(child, rawDeps, packageFile, content);\n }\n }\n}\n\nexport function extractPackageFile(\n content: string,\n packageFile: string,\n): PackageFileContent | null {\n let doc: XmlDocument;\n try {\n doc = new XmlDocument(content);\n } catch {\n logger.debug(`ant manager: could not parse XML ${packageFile}`);\n return null;\n }\n\n const rawDeps: RawDep[] = [];\n walkNode(doc, rawDeps, packageFile, content);\n\n const deps = rawDeps.map((rd) => rd.dep);\n\n if (deps.length === 0) {\n return null;\n }\n\n return { deps };\n}\n\n/**\n * Walk an XML node tree in document order, processing properties,\n * property file references, and dependencies as they appear.\n */\nasync function walkNodeInOrder(\n node: XmlElement | XmlDocument,\n packageFile: string,\n content: string,\n visitedFiles: Set<string>,\n allProps: Record<string, AntProp>,\n allRawDeps: RawDep[],\n): Promise<void> {\n const baseDir = upath.dirname(packageFile);\n\n for (const child of node.children) {\n if (!isXmlElement(child)) {\n continue;\n }\n\n if (child.name === 'property') {\n // Handle inline property definition\n const name = child.attr.name;\n const value = child.attr.value;\n if (name && value && !(name in allProps)) {\n const pos = findAttrValuePosition(content, child, 'value');\n allProps[name] = { val: value, fileReplacePosition: pos, packageFile };\n }\n\n // Handle property file reference\n const file = child.attr.file;\n if (file) {\n const propFilePath = file.startsWith('/')\n ? file\n : upath.join(baseDir, file);\n\n if (!visitedFiles.has(propFilePath)) {\n visitedFiles.add(propFilePath);\n const propContent = await readLocalFile(propFilePath, 'utf8');\n if (propContent) {\n parsePropertiesFile(propContent, propFilePath, allProps);\n } else {\n logger.debug(\n `ant manager: could not read properties file ${propFilePath}`,\n );\n }\n }\n }\n } else if (child.name === 'dependency') {\n const rawDep = collectDependency(child, packageFile, content);\n if (rawDep) {\n allRawDeps.push(rawDep);\n }\n } else {\n await walkNodeInOrder(\n child,\n packageFile,\n content,\n visitedFiles,\n allProps,\n allRawDeps,\n );\n }\n }\n}\n\nasync function walkXmlFile(\n packageFile: string,\n visitedFiles: Set<string>,\n allProps: Record<string, AntProp>,\n allRawDeps: RawDep[],\n): Promise<void> {\n visitedFiles.add(packageFile);\n\n const content = await readLocalFile(packageFile, 'utf8');\n if (!content) {\n logger.debug(`ant manager: could not read ${packageFile}`);\n return;\n }\n\n let doc: XmlDocument;\n try {\n doc = new XmlDocument(content);\n } catch {\n logger.debug(`ant manager: could not parse XML ${packageFile}`);\n return;\n }\n\n await walkNodeInOrder(\n doc,\n packageFile,\n content,\n visitedFiles,\n allProps,\n allRawDeps,\n );\n}\n\nexport async function extractAllPackageFiles(\n _config: ExtractConfig,\n packageFiles: string[],\n): Promise<PackageFile[] | null> {\n const results: PackageFile[] = [];\n const seen = new Set<string>();\n\n for (const packageFile of packageFiles) {\n if (seen.has(packageFile)) {\n continue;\n }\n seen.add(packageFile);\n\n const visitedFiles = new Set<string>();\n const allProps: Record<string, AntProp> = {};\n const allRawDeps: RawDep[] = [];\n\n await walkXmlFile(packageFile, visitedFiles, allProps, allRawDeps);\n\n // Resolve chained property values before applying to deps\n resolveChainedProps(allProps);\n\n // Apply property resolution to all dependencies\n const resolvedDeps = allRawDeps.map((rawDep) =>\n applyProps(rawDep.dep, rawDep.depPackageFile, allProps),\n );\n\n if (resolvedDeps.length === 0) {\n continue;\n }\n\n // Group deps by their target file (propSource or original packageFile)\n const fileMap = new Map<string, PackageDependency[]>();\n for (let i = 0; i < resolvedDeps.length; i++) {\n const dep = resolvedDeps[i];\n const targetFile = dep.propSource ?? allRawDeps[i].depPackageFile;\n if (!fileMap.has(targetFile)) {\n fileMap.set(targetFile, []);\n }\n fileMap.get(targetFile)!.push(dep);\n }\n\n for (const [pkgFile, deps] of fileMap) {\n // Clean up internal propSource field\n for (const dep of deps) {\n delete dep.propSource;\n }\n results.push({ packageFile: pkgFile, deps });\n }\n }\n\n return results.length > 0 ? results : null;\n}\n"],"mappings":";;;;;;;;AAuBA,MAAM,aAAa,IAAI,IAAI;CACzB;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,SAAS,kBAAkB,OAAmC;AAC5D,KAAI,SAAS,WAAW,IAAI,MAAM,CAChC,QAAO;AAET,QAAO;;AAQT,SAAS,kBACP,MACA,aACA,SACe;CACf,MAAM,EAAE,SAAS,YAAY,SAAS,UAAU,KAAK;AAErD,KAAI,CAAC,WAAW,CAAC,WAAW,CAAC,WAC3B,QAAO;CAGT,MAAM,MAAyB;EAC7B,YAAY,gBAAgB;EAC5B,SAAS,GAAG,QAAQ,GAAG;EACvB,cAAc;EACd,SAAS,kBAAkB,MAAM;EACjC,cAAc,EAAE;EACjB;AAED,KAAI,sBAAsB,sBAAsB,SAAS,MAAM,UAAU;AAEzE,QAAO;EAAE;EAAK,gBAAgB;EAAa;;AAG7C,SAAS,SACP,MACA,SACA,aACA,SACM;AACN,MAAK,MAAM,SAAS,KAAK,UAAU;AACjC,MAAI,CAAC,aAAa,MAAM,CACtB;AAGF,MAAI,MAAM,SAAS,cAAc;GAC/B,MAAM,SAAS,kBAAkB,OAAO,aAAa,QAAQ;AAC7D,OAAI,OACF,SAAQ,KAAK,OAAO;QAGtB,UAAS,OAAO,SAAS,aAAa,QAAQ;;;AAKpD,SAAgB,mBACd,SACA,aAC2B;CAC3B,IAAI;AACJ,KAAI;AACF,QAAM,IAAI,YAAY,QAAQ;SACxB;AACN,SAAO,MAAM,oCAAoC,cAAc;AAC/D,SAAO;;CAGT,MAAM,UAAoB,EAAE;AAC5B,UAAS,KAAK,SAAS,aAAa,QAAQ;CAE5C,MAAM,OAAO,QAAQ,KAAK,OAAO,GAAG,IAAI;AAExC,KAAI,KAAK,WAAW,EAClB,QAAO;AAGT,QAAO,EAAE,MAAM;;;;;;AAOjB,eAAe,gBACb,MACA,aACA,SACA,cACA,UACA,YACe;CACf,MAAM,UAAU,MAAM,QAAQ,YAAY;AAE1C,MAAK,MAAM,SAAS,KAAK,UAAU;AACjC,MAAI,CAAC,aAAa,MAAM,CACtB;AAGF,MAAI,MAAM,SAAS,YAAY;GAE7B,MAAM,OAAO,MAAM,KAAK;GACxB,MAAM,QAAQ,MAAM,KAAK;AACzB,OAAI,QAAQ,SAAS,EAAE,QAAQ,UAE7B,UAAS,QAAQ;IAAE,KAAK;IAAO,qBADnB,sBAAsB,SAAS,OAAO,QAAQ;IACD;IAAa;GAIxE,MAAM,OAAO,MAAM,KAAK;AACxB,OAAI,MAAM;IACR,MAAM,eAAe,KAAK,WAAW,IAAI,GACrC,OACA,MAAM,KAAK,SAAS,KAAK;AAE7B,QAAI,CAAC,aAAa,IAAI,aAAa,EAAE;AACnC,kBAAa,IAAI,aAAa;KAC9B,MAAM,cAAc,MAAM,cAAc,cAAc,OAAO;AAC7D,SAAI,YACF,qBAAoB,aAAa,cAAc,SAAS;SAExD,QAAO,MACL,+CAA+C,eAChD;;;aAIE,MAAM,SAAS,cAAc;GACtC,MAAM,SAAS,kBAAkB,OAAO,aAAa,QAAQ;AAC7D,OAAI,OACF,YAAW,KAAK,OAAO;QAGzB,OAAM,gBACJ,OACA,aACA,SACA,cACA,UACA,WACD;;;AAKP,eAAe,YACb,aACA,cACA,UACA,YACe;AACf,cAAa,IAAI,YAAY;CAE7B,MAAM,UAAU,MAAM,cAAc,aAAa,OAAO;AACxD,KAAI,CAAC,SAAS;AACZ,SAAO,MAAM,+BAA+B,cAAc;AAC1D;;CAGF,IAAI;AACJ,KAAI;AACF,QAAM,IAAI,YAAY,QAAQ;SACxB;AACN,SAAO,MAAM,oCAAoC,cAAc;AAC/D;;AAGF,OAAM,gBACJ,KACA,aACA,SACA,cACA,UACA,WACD;;AAGH,eAAsB,uBACpB,SACA,cAC+B;CAC/B,MAAM,UAAyB,EAAE;CACjC,MAAM,uBAAO,IAAI,KAAa;AAE9B,MAAK,MAAM,eAAe,cAAc;AACtC,MAAI,KAAK,IAAI,YAAY,CACvB;AAEF,OAAK,IAAI,YAAY;EAErB,MAAM,+BAAe,IAAI,KAAa;EACtC,MAAM,WAAoC,EAAE;EAC5C,MAAM,aAAuB,EAAE;AAE/B,QAAM,YAAY,aAAa,cAAc,UAAU,WAAW;AAGlE,sBAAoB,SAAS;EAG7B,MAAM,eAAe,WAAW,KAAK,WACnC,WAAW,OAAO,KAAK,OAAO,gBAAgB,SAAS,CACxD;AAED,MAAI,aAAa,WAAW,EAC1B;EAIF,MAAM,0BAAU,IAAI,KAAkC;AACtD,OAAK,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;GAC5C,MAAM,MAAM,aAAa;GACzB,MAAM,aAAa,IAAI,cAAc,WAAW,GAAG;AACnD,OAAI,CAAC,QAAQ,IAAI,WAAW,CAC1B,SAAQ,IAAI,YAAY,EAAE,CAAC;AAE7B,WAAQ,IAAI,WAAW,CAAE,KAAK,IAAI;;AAGpC,OAAK,MAAM,CAAC,SAAS,SAAS,SAAS;AAErC,QAAK,MAAM,OAAO,KAChB,QAAO,IAAI;AAEb,WAAQ,KAAK;IAAE,aAAa;IAAS;IAAM,CAAC;;;AAIhD,QAAO,QAAQ,SAAS,IAAI,UAAU"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { __exportAll } from "../../../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { MavenDatasource } from "../../datasource/maven/index.js";
|
|
3
3
|
import { extractAllPackageFiles, extractPackageFile } from "./extract.js";
|
|
4
|
+
import { updateDependency } from "./update.js";
|
|
4
5
|
//#region lib/modules/manager/ant/index.ts
|
|
5
6
|
var ant_exports = /* @__PURE__ */ __exportAll({
|
|
6
7
|
categories: () => categories,
|
|
@@ -9,6 +10,7 @@ var ant_exports = /* @__PURE__ */ __exportAll({
|
|
|
9
10
|
extractAllPackageFiles: () => extractAllPackageFiles,
|
|
10
11
|
extractPackageFile: () => extractPackageFile,
|
|
11
12
|
supportedDatasources: () => supportedDatasources,
|
|
13
|
+
updateDependency: () => updateDependency,
|
|
12
14
|
url: () => url
|
|
13
15
|
});
|
|
14
16
|
const displayName = "Apache Ant";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/manager/ant/index.ts"],"sourcesContent":["import type { Category } from '../../../constants/index.ts';\nimport { MavenDatasource } from '../../datasource/maven/index.ts';\n\nexport { extractAllPackageFiles, extractPackageFile } from './extract.ts';\n\nexport const displayName = 'Apache Ant';\nexport const url = 'https://ant.apache.org';\nexport const categories: Category[] = ['java'];\n\nexport const defaultConfig = {\n managerFilePatterns: ['**/build.xml'],\n};\n\nexport const supportedDatasources = [MavenDatasource.id];\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/manager/ant/index.ts"],"sourcesContent":["import type { Category } from '../../../constants/index.ts';\nimport { MavenDatasource } from '../../datasource/maven/index.ts';\n\nexport { extractAllPackageFiles, extractPackageFile } from './extract.ts';\nexport { updateDependency } from './update.ts';\n\nexport const displayName = 'Apache Ant';\nexport const url = 'https://ant.apache.org';\nexport const categories: Category[] = ['java'];\n\nexport const defaultConfig = {\n managerFilePatterns: ['**/build.xml'],\n};\n\nexport const supportedDatasources = [MavenDatasource.id];\n"],"mappings":";;;;;;;;;;;;;;;AAMA,MAAa,cAAc;AAC3B,MAAa,MAAM;AACnB,MAAa,aAAyB,CAAC,OAAO;AAE9C,MAAa,gBAAgB,EAC3B,qBAAqB,CAAC,eAAe,EACtC;AAED,MAAa,uBAAuB,CAAC,gBAAgB,GAAG"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { escapeRegExp, regEx } from "../../../util/regex.js";
|
|
2
|
+
//#region lib/modules/manager/ant/properties.ts
|
|
3
|
+
const fullPlaceholderRegex = regEx(/^\$\{([^}]+)}$/);
|
|
4
|
+
const placeholderTestRegex = regEx(/\$\{[^}]+}/);
|
|
5
|
+
const propertySeparatorRegex = regEx(/^([^=:\s]+)\s*[=:\s]\s*(.*)$/);
|
|
6
|
+
function containsPlaceholder(str) {
|
|
7
|
+
return !!str && placeholderTestRegex.test(str);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Find the byte offset of an attribute's value in raw XML content.
|
|
11
|
+
* Returns the offset of the first character of the value (after the opening quote).
|
|
12
|
+
*/
|
|
13
|
+
function findAttrValuePosition(content, node, attrName) {
|
|
14
|
+
const startTag = node.startTagPosition;
|
|
15
|
+
const tagEnd = content.indexOf(">", startTag);
|
|
16
|
+
const tagContent = content.slice(startTag, tagEnd + 1);
|
|
17
|
+
const match = regEx(`${escapeRegExp(attrName)}\\s*=\\s*(?:"([^"]*)"|'([^']*)')`).exec(tagContent);
|
|
18
|
+
const valueInMatch = match[1] ?? match[2];
|
|
19
|
+
const valueOffset = match[0].indexOf(valueInMatch);
|
|
20
|
+
return startTag + match.index + valueOffset;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Parse a .properties file into a map of property names to AntProp.
|
|
24
|
+
* Implements first-definition-wins: if a key already exists in the map, it is not overwritten.
|
|
25
|
+
*/
|
|
26
|
+
function parsePropertiesFile(content, packageFile, props) {
|
|
27
|
+
let offset = 0;
|
|
28
|
+
for (const rawLine of content.split("\n")) {
|
|
29
|
+
const line = rawLine.trim();
|
|
30
|
+
if (line.startsWith("#") || line.startsWith("!") || line === "") {
|
|
31
|
+
offset += rawLine.length + 1;
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
const separatorMatch = propertySeparatorRegex.exec(line);
|
|
35
|
+
if (separatorMatch) {
|
|
36
|
+
const key = separatorMatch[1];
|
|
37
|
+
const val = separatorMatch[2].trim();
|
|
38
|
+
if (!(key in props)) props[key] = {
|
|
39
|
+
val,
|
|
40
|
+
fileReplacePosition: offset + rawLine.indexOf(line) + line.indexOf(separatorMatch[2]),
|
|
41
|
+
packageFile
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
offset += rawLine.length + 1;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Apply property resolution to a dependency.
|
|
49
|
+
* Handles chained references with circular detection.
|
|
50
|
+
*/
|
|
51
|
+
function applyProps(dep, depPackageFile, props) {
|
|
52
|
+
const currentValue = dep.currentValue;
|
|
53
|
+
if (!currentValue || !containsPlaceholder(currentValue)) return dep;
|
|
54
|
+
const fullMatch = fullPlaceholderRegex.exec(currentValue);
|
|
55
|
+
if (!fullMatch) {
|
|
56
|
+
dep.skipReason = "version-placeholder";
|
|
57
|
+
return dep;
|
|
58
|
+
}
|
|
59
|
+
const propKey = fullMatch[1];
|
|
60
|
+
const prop = props[propKey];
|
|
61
|
+
if (!prop) {
|
|
62
|
+
dep.skipReason = "version-placeholder";
|
|
63
|
+
return dep;
|
|
64
|
+
}
|
|
65
|
+
if (containsPlaceholder(prop.val)) {
|
|
66
|
+
dep.skipReason = "recursive-placeholder";
|
|
67
|
+
return dep;
|
|
68
|
+
}
|
|
69
|
+
dep.currentValue = prop.val;
|
|
70
|
+
dep.sharedVariableName = propKey;
|
|
71
|
+
dep.fileReplacePosition = prop.fileReplacePosition;
|
|
72
|
+
if (prop.packageFile !== depPackageFile) dep.editFile = prop.packageFile;
|
|
73
|
+
dep.propSource = prop.packageFile;
|
|
74
|
+
return dep;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Resolve a single property key, following chained references.
|
|
78
|
+
* Returns the resolved value or null if circular/unresolvable.
|
|
79
|
+
*/
|
|
80
|
+
function resolveKey(key, props, resolved, chain) {
|
|
81
|
+
if (resolved.has(key)) return resolved.get(key);
|
|
82
|
+
if (chain.has(key)) {
|
|
83
|
+
resolved.set(key, null);
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
const prop = props[key];
|
|
87
|
+
if (!prop) return null;
|
|
88
|
+
if (!containsPlaceholder(prop.val)) {
|
|
89
|
+
resolved.set(key, prop.val);
|
|
90
|
+
return prop.val;
|
|
91
|
+
}
|
|
92
|
+
chain.add(key);
|
|
93
|
+
let isCircular = false;
|
|
94
|
+
const val = prop.val.replace(regEx(/\$\{([^}]+)}/g), (match, refKey) => {
|
|
95
|
+
const refResult = resolveKey(refKey, props, resolved, chain);
|
|
96
|
+
if (refResult === null) {
|
|
97
|
+
isCircular = true;
|
|
98
|
+
return match;
|
|
99
|
+
}
|
|
100
|
+
return refResult;
|
|
101
|
+
});
|
|
102
|
+
chain.delete(key);
|
|
103
|
+
if (isCircular) {
|
|
104
|
+
resolved.set(key, null);
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
resolved.set(key, val);
|
|
108
|
+
prop.val = val;
|
|
109
|
+
return val;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Resolve chained property references within the property map itself.
|
|
113
|
+
* E.g., if prop A = "${B}" and prop B = "1.0", resolve A to "1.0".
|
|
114
|
+
* Marks circular properties by setting val to a placeholder that will be caught later.
|
|
115
|
+
*/
|
|
116
|
+
function resolveChainedProps(props) {
|
|
117
|
+
const resolved = /* @__PURE__ */ new Map();
|
|
118
|
+
for (const key of Object.keys(props)) resolveKey(key, props, resolved, /* @__PURE__ */ new Set());
|
|
119
|
+
}
|
|
120
|
+
//#endregion
|
|
121
|
+
export { applyProps, findAttrValuePosition, parsePropertiesFile, resolveChainedProps };
|
|
122
|
+
|
|
123
|
+
//# sourceMappingURL=properties.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"properties.js","names":[],"sources":["../../../../lib/modules/manager/ant/properties.ts"],"sourcesContent":["import type { XmlElement } from 'xmldoc';\nimport { escapeRegExp, regEx } from '../../../util/regex.ts';\nimport type { PackageDependency } from '../types.ts';\nimport type { AntProp } from './types.ts';\n\nconst fullPlaceholderRegex = regEx(/^\\$\\{([^}]+)}$/);\nconst placeholderTestRegex = regEx(/\\$\\{[^}]+}/);\nconst propertySeparatorRegex = regEx(/^([^=:\\s]+)\\s*[=:\\s]\\s*(.*)$/);\n\nexport function containsPlaceholder(str: string | null | undefined): boolean {\n return !!str && placeholderTestRegex.test(str);\n}\n\n/**\n * Find the byte offset of an attribute's value in raw XML content.\n * Returns the offset of the first character of the value (after the opening quote).\n */\nexport function findAttrValuePosition(\n content: string,\n node: XmlElement,\n attrName: string,\n): number {\n const startTag = node.startTagPosition!;\n const tagEnd = content.indexOf('>', startTag);\n const tagContent = content.slice(startTag, tagEnd + 1);\n\n const attrPattern = regEx(\n `${escapeRegExp(attrName)}\\\\s*=\\\\s*(?:\"([^\"]*)\"|'([^']*)')`,\n );\n const match = attrPattern.exec(tagContent)!;\n\n const valueInMatch = match[1] ?? match[2];\n const valueOffset = match[0].indexOf(valueInMatch);\n return startTag + match.index + valueOffset;\n}\n\n/**\n * Parse a .properties file into a map of property names to AntProp.\n * Implements first-definition-wins: if a key already exists in the map, it is not overwritten.\n */\nexport function parsePropertiesFile(\n content: string,\n packageFile: string,\n props: Record<string, AntProp>,\n): void {\n let offset = 0;\n for (const rawLine of content.split('\\n')) {\n const line = rawLine.trim();\n // Skip comments and blank lines\n if (line.startsWith('#') || line.startsWith('!') || line === '') {\n offset += rawLine.length + 1; // +1 for newline\n continue;\n }\n\n // Match key=value, key:value, or key value (first separator wins)\n const separatorMatch = propertySeparatorRegex.exec(line);\n if (separatorMatch) {\n const key = separatorMatch[1];\n const val = separatorMatch[2].trim();\n\n // First-definition-wins\n if (!(key in props)) {\n // fileReplacePosition points to the start of the value in the raw content\n const lineStart = offset + rawLine.indexOf(line);\n const keyEnd = line.indexOf(separatorMatch[2]);\n const fileReplacePosition = lineStart + keyEnd;\n\n props[key] = { val, fileReplacePosition, packageFile };\n }\n }\n\n offset += rawLine.length + 1;\n }\n}\n\n/**\n * Apply property resolution to a dependency.\n * Handles chained references with circular detection.\n */\nexport function applyProps(\n dep: PackageDependency,\n depPackageFile: string,\n props: Record<string, AntProp>,\n): PackageDependency {\n const currentValue = dep.currentValue;\n\n if (!currentValue || !containsPlaceholder(currentValue)) {\n return dep;\n }\n\n // Check if the entire version is a single property reference\n const fullMatch = fullPlaceholderRegex.exec(currentValue);\n if (!fullMatch) {\n // Partial placeholder in version string - not supported for updates\n dep.skipReason = 'version-placeholder';\n return dep;\n }\n\n const propKey = fullMatch[1];\n const prop = props[propKey];\n if (!prop) {\n dep.skipReason = 'version-placeholder';\n return dep;\n }\n\n // After resolveChainedProps, prop.val is either fully resolved or still contains\n // placeholders (meaning circular or unresolvable)\n if (containsPlaceholder(prop.val)) {\n dep.skipReason = 'recursive-placeholder';\n return dep;\n }\n\n dep.currentValue = prop.val;\n dep.sharedVariableName = propKey;\n dep.fileReplacePosition = prop.fileReplacePosition;\n if (prop.packageFile !== depPackageFile) {\n dep.editFile = prop.packageFile;\n }\n // propSource is used to route deps to the correct PackageFile\n dep.propSource = prop.packageFile;\n return dep;\n}\n\n/**\n * Resolve a single property key, following chained references.\n * Returns the resolved value or null if circular/unresolvable.\n */\nfunction resolveKey(\n key: string,\n props: Record<string, AntProp>,\n resolved: Map<string, string | null>,\n chain: Set<string>,\n): string | null {\n if (resolved.has(key)) {\n return resolved.get(key)!;\n }\n if (chain.has(key)) {\n // Circular reference detected\n resolved.set(key, null);\n return null;\n }\n const prop = props[key];\n if (!prop) {\n return null;\n }\n if (!containsPlaceholder(prop.val)) {\n resolved.set(key, prop.val);\n return prop.val;\n }\n\n chain.add(key);\n let isCircular = false;\n const val = prop.val.replace(\n regEx(/\\$\\{([^}]+)}/g),\n (match, refKey: string) => {\n const refResult = resolveKey(refKey, props, resolved, chain);\n if (refResult === null) {\n isCircular = true;\n return match;\n }\n return refResult;\n },\n );\n chain.delete(key);\n\n if (isCircular) {\n resolved.set(key, null);\n return null;\n }\n\n resolved.set(key, val);\n prop.val = val;\n return val;\n}\n\n/**\n * Resolve chained property references within the property map itself.\n * E.g., if prop A = \"${B}\" and prop B = \"1.0\", resolve A to \"1.0\".\n * Marks circular properties by setting val to a placeholder that will be caught later.\n */\nexport function resolveChainedProps(props: Record<string, AntProp>): void {\n const resolved = new Map<string, string | null>(); // null = circular\n\n for (const key of Object.keys(props)) {\n resolveKey(key, props, resolved, new Set());\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { logger } from "../../../logger/index.js";
|
|
2
|
+
//#region lib/modules/manager/ant/update.ts
|
|
3
|
+
/** For external .properties files: updateDependency is necessary because extractPackageFile can't reconstruct dep metadata from a .properties file alone */
|
|
4
|
+
function updateDependency({ fileContent, upgrade }) {
|
|
5
|
+
const { depName, currentValue, newValue, fileReplacePosition } = upgrade;
|
|
6
|
+
if (fileReplacePosition === void 0 || fileReplacePosition === null) {
|
|
7
|
+
logger.debug({ depName }, "No fileReplacePosition for ant dependency");
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
const leftPart = fileContent.slice(0, fileReplacePosition);
|
|
11
|
+
const rightPart = fileContent.slice(fileReplacePosition);
|
|
12
|
+
let endIndex;
|
|
13
|
+
const quoteChar = leftPart.at(-1);
|
|
14
|
+
if (quoteChar === "\"" || quoteChar === "'") endIndex = rightPart.indexOf(quoteChar);
|
|
15
|
+
else {
|
|
16
|
+
const newlineIndex = rightPart.indexOf("\n");
|
|
17
|
+
endIndex = newlineIndex === -1 ? rightPart.length : newlineIndex;
|
|
18
|
+
}
|
|
19
|
+
const currentFound = rightPart.slice(0, endIndex);
|
|
20
|
+
if (currentFound === newValue) return fileContent;
|
|
21
|
+
if (currentFound === currentValue || upgrade.sharedVariableName) return `${leftPart}${newValue}${rightPart.slice(endIndex)}`;
|
|
22
|
+
logger.debug({
|
|
23
|
+
depName,
|
|
24
|
+
currentFound,
|
|
25
|
+
currentValue,
|
|
26
|
+
newValue
|
|
27
|
+
}, "ant: unexpected value at fileReplacePosition");
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
//#endregion
|
|
31
|
+
export { updateDependency };
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","names":[],"sources":["../../../../lib/modules/manager/ant/update.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport type { UpdateDependencyConfig } from '../types.ts';\n\n/** For external .properties files: updateDependency is necessary because extractPackageFile can't reconstruct dep metadata from a .properties file alone */\nexport function updateDependency({\n fileContent,\n upgrade,\n}: UpdateDependencyConfig): string | null {\n const { depName, currentValue, newValue, fileReplacePosition } = upgrade;\n\n if (fileReplacePosition === undefined || fileReplacePosition === null) {\n logger.debug({ depName }, 'No fileReplacePosition for ant dependency');\n return null;\n }\n\n const leftPart = fileContent.slice(0, fileReplacePosition);\n const rightPart = fileContent.slice(fileReplacePosition);\n\n // Find the end of the value (closing quote or end of line for .properties files)\n let endIndex: number;\n const quoteChar = leftPart.at(-1);\n if (quoteChar === '\"' || quoteChar === \"'\") {\n endIndex = rightPart.indexOf(quoteChar);\n } else {\n // .properties file: value ends at newline or EOF\n const newlineIndex = rightPart.indexOf('\\n');\n endIndex = newlineIndex === -1 ? rightPart.length : newlineIndex;\n }\n\n const currentFound = rightPart.slice(0, endIndex);\n\n if (currentFound === newValue) {\n return fileContent;\n }\n\n if (currentFound === currentValue || upgrade.sharedVariableName) {\n return `${leftPart}${newValue}${rightPart.slice(endIndex)}`;\n }\n\n logger.debug(\n { depName, currentFound, currentValue, newValue },\n 'ant: unexpected value at fileReplacePosition',\n );\n return null;\n}\n"],"mappings":";;;AAIA,SAAgB,iBAAiB,EAC/B,aACA,WACwC;CACxC,MAAM,EAAE,SAAS,cAAc,UAAU,wBAAwB;AAEjE,KAAI,wBAAwB,KAAA,KAAa,wBAAwB,MAAM;AACrE,SAAO,MAAM,EAAE,SAAS,EAAE,4CAA4C;AACtE,SAAO;;CAGT,MAAM,WAAW,YAAY,MAAM,GAAG,oBAAoB;CAC1D,MAAM,YAAY,YAAY,MAAM,oBAAoB;CAGxD,IAAI;CACJ,MAAM,YAAY,SAAS,GAAG,GAAG;AACjC,KAAI,cAAc,QAAO,cAAc,IACrC,YAAW,UAAU,QAAQ,UAAU;MAClC;EAEL,MAAM,eAAe,UAAU,QAAQ,KAAK;AAC5C,aAAW,iBAAiB,KAAK,UAAU,SAAS;;CAGtD,MAAM,eAAe,UAAU,MAAM,GAAG,SAAS;AAEjD,KAAI,iBAAiB,SACnB,QAAO;AAGT,KAAI,iBAAiB,gBAAgB,QAAQ,mBAC3C,QAAO,GAAG,WAAW,WAAW,UAAU,MAAM,SAAS;AAG3D,QAAO,MACL;EAAE;EAAS;EAAc;EAAc;EAAU,EACjD,+CACD;AACD,QAAO"}
|
|
@@ -15,7 +15,7 @@ var bitbucket_pipelines_exports = /* @__PURE__ */ __exportAll({
|
|
|
15
15
|
const url = "https://support.atlassian.com/bitbucket-cloud/docs/get-started-with-bitbucket-pipelines";
|
|
16
16
|
const categories = ["ci"];
|
|
17
17
|
const urls = ["https://support.atlassian.com/bitbucket-cloud/docs/bitbucket-pipelines-configuration-reference"];
|
|
18
|
-
const defaultConfig = { managerFilePatterns: ["
|
|
18
|
+
const defaultConfig = { managerFilePatterns: ["**/*-pipelines.yml"] };
|
|
19
19
|
const supportedDatasources = [DockerDatasource.id];
|
|
20
20
|
//#endregion
|
|
21
21
|
export { bitbucket_pipelines_exports };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/manager/bitbucket-pipelines/index.ts"],"sourcesContent":["import type { Category } from '../../../constants/index.ts';\nimport { DockerDatasource } from '../../datasource/docker/index.ts';\nimport { extractPackageFile } from './extract.ts';\n\nexport { knownDepTypes } from './dep-types.ts';\nexport { extractPackageFile };\n\nexport const url =\n 'https://support.atlassian.com/bitbucket-cloud/docs/get-started-with-bitbucket-pipelines';\nexport const categories: Category[] = ['ci'];\nexport const urls = [\n 'https://support.atlassian.com/bitbucket-cloud/docs/bitbucket-pipelines-configuration-reference',\n];\n\nexport const defaultConfig = {\n managerFilePatterns: ['
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/manager/bitbucket-pipelines/index.ts"],"sourcesContent":["import type { Category } from '../../../constants/index.ts';\nimport { DockerDatasource } from '../../datasource/docker/index.ts';\nimport { extractPackageFile } from './extract.ts';\n\nexport { knownDepTypes } from './dep-types.ts';\nexport { extractPackageFile };\n\nexport const url =\n 'https://support.atlassian.com/bitbucket-cloud/docs/get-started-with-bitbucket-pipelines';\nexport const categories: Category[] = ['ci'];\nexport const urls = [\n 'https://support.atlassian.com/bitbucket-cloud/docs/bitbucket-pipelines-configuration-reference',\n];\n\nexport const defaultConfig = {\n managerFilePatterns: ['**/*-pipelines.yml'],\n};\n\nexport const supportedDatasources = [DockerDatasource.id];\n"],"mappings":";;;;;;;;;;;;;;AAOA,MAAa,MACX;AACF,MAAa,aAAyB,CAAC,KAAK;AAC5C,MAAa,OAAO,CAClB,iGACD;AAED,MAAa,gBAAgB,EAC3B,qBAAqB,CAAC,qBAAqB,EAC5C;AAED,MAAa,uBAAuB,CAAC,iBAAiB,GAAG"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const hashMap = /* @__PURE__ */ new Map();
|
|
3
3
|
hashMap.set("ansible", "1fbc76f78daa14a8c9ab1142e9d1e05c746c0419a9f1455e4279f476590d0c04");
|
|
4
4
|
hashMap.set("ansible-galaxy", "8226d47128f2018825d4d6f84794e3183eb79c706045fa7e88491edd5e64106f");
|
|
5
|
-
hashMap.set("ant", "
|
|
5
|
+
hashMap.set("ant", "0a356fc5ff43659fc81edb74f868ddd7213235512181da875c09caa94c6e3070");
|
|
6
6
|
hashMap.set("argocd", "5d35b1992e53130bf83b0e59a0f90ccd3a78919974c69044f306dc5d162f48ce");
|
|
7
7
|
hashMap.set("asdf", "1f6fcf620e9c6cd35991380cb6eafb94ec60cd77cbd13335ebe3a1d9727416c9");
|
|
8
8
|
hashMap.set("azure-pipelines", "4f635b0ecd388ee266d992e8281fd40e3db2f5867d86fc1cbce72dc33a66e796");
|
|
@@ -12,7 +12,7 @@ hashMap.set("bazel", "c6e0ad88ea468664c3a33263baf7452d83d2d37ff09ba920e18f64ee81
|
|
|
12
12
|
hashMap.set("bazel-module", "ff071fcf8b53036956627d2a430ccdf256e30bee4d7e80c329379879d836a931");
|
|
13
13
|
hashMap.set("bazelisk", "b6ec532dfa7c8f82ad4084df864ac6276e87c27285369323902afc146d3537ac");
|
|
14
14
|
hashMap.set("bicep", "7246e0bfc06e0e28cbb03ac088c5591f648956b086e106aeb251fe5d628329db");
|
|
15
|
-
hashMap.set("bitbucket-pipelines", "
|
|
15
|
+
hashMap.set("bitbucket-pipelines", "59c0503494ab1442b127914503c01b97ac17b6742b19c632292d5aa24de115cd");
|
|
16
16
|
hashMap.set("bitrise", "478dfd316221fad7c29e177c70d1018d832fb2626b53308a5d0f1f0380e69f42");
|
|
17
17
|
hashMap.set("buildkite", "a93effb1f1c5d65b3277c3b4709924eacde282e8efd028a8e3d8c1ce3ef69407");
|
|
18
18
|
hashMap.set("buildpacks", "6bef3cb04d66b5cfbb195adb4829bcbccae6408518706744d291bacf0610421f");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprint.generated.js","names":[],"sources":["../../../lib/modules/manager/fingerprint.generated.ts"],"sourcesContent":["export const hashMap = new Map<string, string>();\n\nhashMap.set('ansible','1fbc76f78daa14a8c9ab1142e9d1e05c746c0419a9f1455e4279f476590d0c04');\nhashMap.set('ansible-galaxy','8226d47128f2018825d4d6f84794e3183eb79c706045fa7e88491edd5e64106f');\nhashMap.set('ant','7d6414a195345c60a25a9d92c4b17c0b6df90be086fc5559150e2e5496976890');\nhashMap.set('argocd','5d35b1992e53130bf83b0e59a0f90ccd3a78919974c69044f306dc5d162f48ce');\nhashMap.set('asdf','1f6fcf620e9c6cd35991380cb6eafb94ec60cd77cbd13335ebe3a1d9727416c9');\nhashMap.set('azure-pipelines','4f635b0ecd388ee266d992e8281fd40e3db2f5867d86fc1cbce72dc33a66e796');\nhashMap.set('batect','fad98996bea8626525ab925f83a6ae0ce9262c53770e7aa7cb448a1e0f1ddf21');\nhashMap.set('batect-wrapper','d999355511ea7f4053325a18b8cfc8d2b586c61e6760c35e557d383a673e3939');\nhashMap.set('bazel','c6e0ad88ea468664c3a33263baf7452d83d2d37ff09ba920e18f64ee81fd0acb');\nhashMap.set('bazel-module','ff071fcf8b53036956627d2a430ccdf256e30bee4d7e80c329379879d836a931');\nhashMap.set('bazelisk','b6ec532dfa7c8f82ad4084df864ac6276e87c27285369323902afc146d3537ac');\nhashMap.set('bicep','7246e0bfc06e0e28cbb03ac088c5591f648956b086e106aeb251fe5d628329db');\nhashMap.set('bitbucket-pipelines','09eb044219d74331fea135f50121b7d4d146333eb97e4ccbfa9ddf0eb4012963');\nhashMap.set('bitrise','478dfd316221fad7c29e177c70d1018d832fb2626b53308a5d0f1f0380e69f42');\nhashMap.set('buildkite','a93effb1f1c5d65b3277c3b4709924eacde282e8efd028a8e3d8c1ce3ef69407');\nhashMap.set('buildpacks','6bef3cb04d66b5cfbb195adb4829bcbccae6408518706744d291bacf0610421f');\nhashMap.set('bun','1322232bf1d0c4fa796e31a00488453bdcd00d4958431d9e424c1635e60a99bd');\nhashMap.set('bun-version','df3ae8e4a5de1fa1b4544f3d7fc8117e80adb1e151c46d1ede54a4dbea6521e4');\nhashMap.set('bundler','6d7e9d2018ac03e15f19e8b40ef70dd87d509d5affca24bc464d085899880a25');\nhashMap.set('cake','288c3c36a50371b26957fa71992cc335228d53563c75597b36919ac7286e96eb');\nhashMap.set('cargo','308d7ab4c6d24027b050bf659dfab0e510d9a22f8134695a7c68214908ee4634');\nhashMap.set('cdnurl','d3edf6cdc38e92eb43ff5a2b4e8df6a6a13154cf83244725c39e28d7e6ea9177');\nhashMap.set('circleci','135937d4720718304adb0ba998516f8ce38c3220ccd18b00b8c70c62b45df4da');\nhashMap.set('cloudbuild','8c0c739f7e4082bbfe8e3fdffebaf43e26f70a1314d95b306e9b93e4f4297886');\nhashMap.set('cocoapods','b6ac3b4a6b8a5b32daed37bf695fe177cdb1b4a94ae7f7fb2f4c4c096c0a004c');\nhashMap.set('composer','cdb6895574020cec402e0b878e4078b62f1acfd0392a861cbb523036634f6383');\nhashMap.set('conan','aecc3917d77146db4e57dd12944be1beff860e90b7ebdd2d8fbc449fc1a06574');\nhashMap.set('copier','faa3b79991256a6fc0957fdcd530a1bc8aee65913d5aff2b1b4d226dcd44d008');\nhashMap.set('cpanfile','6a1d67d9c8751123deaf0c7f3ac38a07024e960c140f8228fcbcb93954fdca01');\nhashMap.set('crossplane','5c26b1201a1a51454ffb94d829e223a76a781569bf79cdb1e47087c30233ec40');\nhashMap.set('crow','eb9a5f9f95041855dded67bcce3dd54724f690995ed6268d272e8a666ff28fd0');\nhashMap.set('deps-edn','c87dd5e88587147ad1a78f047b814f3c4aa60d6de30d0c49d849391eeaf1b64c');\nhashMap.set('devbox','bcf5334e8a21190baaa25436acf2f17fbf095504262a4e9ee7c62ffb644eb716');\nhashMap.set('devcontainer','24320ed1cb6191d04cb8b2707214d82c08c682597aed1d84f250aa00ad1632ec');\nhashMap.set('docker-compose','5441af5b5abf8d347e46002d47f02f85743401bda28232f49fb7b3bbb772a4fb');\nhashMap.set('dockerfile','322b95f7e55dd78d7fe71306a6f649479eca61c60d75bb10b23604a230dbdd08');\nhashMap.set('droneci','237c8de87b9bf653fb943b56e84e99c45f6d86ae27d86e599b3f3f99c35ba8ee');\nhashMap.set('fleet','d73d5d35f10df0599a561d9c8d25f3935350407d0e3bd3a1d1545295f278912e');\nhashMap.set('flux','427e0c1a5b1d8337503a9a568a76532fbde0bab8b355fa8f47312de50eadf2f6');\nhashMap.set('fvm','9b161df0f14bc6e536368952adf373e343630097121a913cea60ee284027fb90');\nhashMap.set('git-submodules','fbbf1c7b7b6f4166fa3beee96a3283d007b388e9ecb6a14f76123c8ab8c78071');\nhashMap.set('github-actions','d8f83c65da1e80b639ad44a0d8641e7e97b1d93a1b6c873603333d337ad02011');\nhashMap.set('gitlabci','0dec44dd398bfc5b3c19d0929bea2fef7f386c94acfd1b1d7bc2a31d81d96fd6');\nhashMap.set('gitlabci-include','354cfc4ea327c6d5cd5bee1f17763832efc7f5402e9fd22c579239fccb9c6dab');\nhashMap.set('glasskube','253d6db30bdec75ed5ab5d26f31d69bc07813ba10089a28da12c6a29eff4ec70');\nhashMap.set('gleam','b717a48c525ad6b1d434c6a9db828ddebbb85e94519e89ddc4040878e3600e84');\nhashMap.set('gomod','82e877b22c0dd0217368760bb5d38430657fff63d07c289793a866f0845d2976');\nhashMap.set('gradle','f430d8d768b56889ad1e5a69965841e85cc700e364d15db7bce680e8a5d6f821');\nhashMap.set('gradle-wrapper','90d2ecb9d0b113f8e946d4ea221c040f17f91af846e1ff4f9fc1514ad4324b74');\nhashMap.set('haskell-cabal','d796ec6859e63ab4f1b7030c4016071202c3a44c7c11d4a9131d7e2ba19b396d');\nhashMap.set('helm-requirements','4d90e5e18a380876ad48e21e1ad88ea62e25d973a1ddaa3763447fc0a9f9915b');\nhashMap.set('helm-values','b5c52c6a27d805557418c585c5d3030c95ee641d53057021f3fe060f81b6e1af');\nhashMap.set('helmfile','e5783484b81247279563da3c835afe4002edfc412e13fb91877818ca44ae65f2');\nhashMap.set('helmsman','ef9680c612f702c7f07aea9b6e5d811e91214dcfa5755c9f3803e9528090935e');\nhashMap.set('helmv3','7724bf6cc3ff4afec1809899f619a332f4350049b9578b5c4634514b4448cf2b');\nhashMap.set('hermit','672c328e4baea3a1ccd2cde2364db01c8033a8c077bf63a5b914fc20ee1de838');\nhashMap.set('homeassistant-manifest','05043c6db870cffbb6f8f3e351c025e3de227eaae0b24134b796aec46f84b65f');\nhashMap.set('homebrew','56ef90301143874355fd2ed25dff7c646875f701f97422d02e01d45608a88f31');\nhashMap.set('html','67c5f3c5c58e96f5dd257ba5987d900cf7fef81d667c3640e96c847b37de35a8');\nhashMap.set('jenkins','268ebfc8a1caf3edeb2192c2b1b2fa4bf18a78a3e731ba20a6c104940a5539f3');\nhashMap.set('jsonnet-bundler','4b73c32ddc3fe45d9777106d45b116777a2960e6e631256a6553060e602f893c');\nhashMap.set('kotlin-script','99ef296792a0ca575ed31d3defb514b05a58083dc01c52ea0890c69d867ba1dd');\nhashMap.set('kubernetes','321e7d77fb3600dd4c00a86eaa1294927e7f92300b74fa2977d813dcaa3bb4de');\nhashMap.set('kustomize','1e44d6ef8622252dac6d9649fb04badd12d4827eb2a55f74792aa9de2b915775');\nhashMap.set('leiningen','133fca2c3423f53f2ccc22518153ddbcafbf0f4812376c77e952eb3d24d81f85');\nhashMap.set('maven','fd6bfc21be851ed076eabea1a91a89b25eb82129734c7cb0c2e684385cf1ea69');\nhashMap.set('maven-wrapper','9a868d1328f911eb72f9e65a64d46c86ae347aab0153d1cf4e9a62ad9e0d6cb0');\nhashMap.set('meteor','4a93a326b27bedfe52118e27e06f39fecd7c55bd4cd7fccec4cb120cac14cec4');\nhashMap.set('mint','b816a49c8525716454d0a2bc9127916d5b27e5cca7b2aa2030312f218942af3e');\nhashMap.set('mise','38177382f3785cfe7cce92994bfb429b68f5165e6eef1bdcd2c7a3d8d5414da2');\nhashMap.set('mix','1116e1adf1c18c866f0a9e6fa065c4fb9da055d8d150e625344899bb94095481');\nhashMap.set('nix','f3ffec2f14e7261de8068895b91392e992dcef208fbaf52110d6862e4712c031');\nhashMap.set('nodenv','ac652c28481b001f7471f4183eac07b45d98ecbe83efc275830b0a1b2e0459b8');\nhashMap.set('npm','eaf9fe4981de8f7504227f3be88445f60f87ba74f9b9c7e54284bc2bb41320b3');\nhashMap.set('nuget','42175b1906e8e91ae0731a13d92d0df065108063665f8a36150aeae73aafdc78');\nhashMap.set('nvm','3eb77c7b0acf6d64753de78fad2499b352719853aa6872878c40675d14152322');\nhashMap.set('ocb','032b216684c14b0954e0bb019513a2aca3faaee5748587acb668d377d7c891ca');\nhashMap.set('osgi','32233a1a8a2725699d7448ba438e3d0b78141f7799cd2b588de278d41e26ed10');\nhashMap.set('pep621','f503497a4adef31b29572176e9a69d52fa9b0bfe3477b6e228c906aeb4861de5');\nhashMap.set('pep723','b96683163de63ed93207ec0538066705b1e58a1cd5b8bd11c63fc28b26bddba1');\nhashMap.set('pip-compile','89152ad6c89f278395f32d289dc3890823c233366547d228e97dd1319aa144b5');\nhashMap.set('pip_requirements','d5c474c524bc7adc1aae065da0531bd22d9f7f52523b018f2461f6c29e12fdf3');\nhashMap.set('pip_setup','0175fe550c19d9bd31c978bd83fdc088cb40fcacd5d6751f640164274ae64e61');\nhashMap.set('pipenv','50f5a54ed714fd3d738c1aa9a353cf3aab767899acdcb763088d4bd04f3a737b');\nhashMap.set('pixi','b17af6eaa33e7babcc52cfc9a617c7801c0efb1125bbd6d0d4e9f6fe33afd353');\nhashMap.set('poetry','7f227b8b912b405df7735e9dc7c178f03021844f0c027d4b321c023c330c390a');\nhashMap.set('pre-commit','a6a6e847fdb0f56650e66ef7d69e68de752b390913f79ac31d1a7ec5955d03da');\nhashMap.set('pub','0fbad9f77579fcec3a623c6feab56e71934c67a79bb8f4f0f847452051d2a0ba');\nhashMap.set('puppet','ba58ab689e44acc8f61c3569ab8b40fde01b8a9d3aad712708e2a419e57d8b45');\nhashMap.set('pyenv','9ede8becc97774f9040b40f4472d3e933534b596e04c360bfe0f3c6f95f25182');\nhashMap.set('quadlet','e355e13e104351a8b3516a8e272fc5f7e625c9f39b0c492ba27283a36227c2d4');\nhashMap.set('renovate-config-presets','a394fe55f8b6ba356f29f76efd9f0d34b56baceb111e6d92f95b29b5ca50ac67');\nhashMap.set('ruby-version','2db2140d9eee8c555e729a4de0396fa2d78846d3149890ee12fa515bd654be97');\nhashMap.set('runtime-version','b582b168c0cc595e39010feb10f4b97a82683eb269e9598216fbb11cc186e160');\nhashMap.set('sbt','74125bd9c76a5724092258cd1dee1ea99fc0d735b463a2b64fedc5d950efde2a');\nhashMap.set('scalafmt','9d36159b56835e96498af026a1fb0543200db0581681ef95ec54988f411e180f');\nhashMap.set('setup-cfg','7dea08c5708625e753bd56918bc214df7fb4d8543a26e936926a21ab43b5f785');\nhashMap.set('sveltos','167a5cc79098803be3b815a28cc40ef3361c455751e1d6a7a99ba91bfce26709');\nhashMap.set('swift','79ec9a6a2a8bb4853bb78bbb3a2a6e64e3b32b0ddeb312385abb3a14366ad505');\nhashMap.set('tekton','4e35c75bba4abc9c3cf49c55da6c19db4f4e9181d1fd9583288ab55ef7c944fd');\nhashMap.set('terraform','5bd62ce12c23896b8ecb2385a60a3cb9eb72badf10f9984bfed38f50f9262266');\nhashMap.set('terraform-version','ec8f786b9731d47f2c2fe0307caf64d7ddd83046fe7ff1f7d8423239f8b0f2aa');\nhashMap.set('terragrunt','b8474c65383a702602eee432cc1434f9a49a1ef886d1213de92d7a84fb98b9cd');\nhashMap.set('terragrunt-version','eea6087b33717d22ede2fc68c2f64df8390b75abe82110ed831a180648feb51d');\nhashMap.set('tflint-plugin','4a975f0cc1aa22cd258aa835de3dc98d7a5c0d1cee0a1092324338968e08a827');\nhashMap.set('travis','bb482a0195cd009ec3896a6227bb95617f5c84bedb518c7d971e50c62235d9ca');\nhashMap.set('typst','d080a79fbd961c6e21fcc505d544b7e0ff2126142acb1dcabdf6abbcd9339248');\nhashMap.set('unity3d','f13e25e115e3443f4e16cf31578acffa78fb1a5e23339680a92d8d6de6052920');\nhashMap.set('velaci','fda00ddb7cc23e9a37e0a8a253151df0a6930b4276d3e4f78cc54b9ac09af7de');\nhashMap.set('vendir','4627230d3b7698c41aac192d57b65b091c860c8f858c89d6af4b06ed6a32fae6');\nhashMap.set('woodpecker','6110d3bec33aaeb3511d4bbfa896cec3c8e02fb04a6cff50c9ba81061c851045');\nhashMap.set('jsonata','3b5f465b586993f92c8490e70885e7eecce9b6556bcc376dd9c11db8ee9e6960');\nhashMap.set('regex','7b643b49e498465cf91b25b8b840bb1fec8c8a3a59bfa8f97a39c976675325a0');"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fingerprint.generated.js","names":[],"sources":["../../../lib/modules/manager/fingerprint.generated.ts"],"sourcesContent":["export const hashMap = new Map<string, string>();\n\nhashMap.set('ansible','1fbc76f78daa14a8c9ab1142e9d1e05c746c0419a9f1455e4279f476590d0c04');\nhashMap.set('ansible-galaxy','8226d47128f2018825d4d6f84794e3183eb79c706045fa7e88491edd5e64106f');\nhashMap.set('ant','0a356fc5ff43659fc81edb74f868ddd7213235512181da875c09caa94c6e3070');\nhashMap.set('argocd','5d35b1992e53130bf83b0e59a0f90ccd3a78919974c69044f306dc5d162f48ce');\nhashMap.set('asdf','1f6fcf620e9c6cd35991380cb6eafb94ec60cd77cbd13335ebe3a1d9727416c9');\nhashMap.set('azure-pipelines','4f635b0ecd388ee266d992e8281fd40e3db2f5867d86fc1cbce72dc33a66e796');\nhashMap.set('batect','fad98996bea8626525ab925f83a6ae0ce9262c53770e7aa7cb448a1e0f1ddf21');\nhashMap.set('batect-wrapper','d999355511ea7f4053325a18b8cfc8d2b586c61e6760c35e557d383a673e3939');\nhashMap.set('bazel','c6e0ad88ea468664c3a33263baf7452d83d2d37ff09ba920e18f64ee81fd0acb');\nhashMap.set('bazel-module','ff071fcf8b53036956627d2a430ccdf256e30bee4d7e80c329379879d836a931');\nhashMap.set('bazelisk','b6ec532dfa7c8f82ad4084df864ac6276e87c27285369323902afc146d3537ac');\nhashMap.set('bicep','7246e0bfc06e0e28cbb03ac088c5591f648956b086e106aeb251fe5d628329db');\nhashMap.set('bitbucket-pipelines','59c0503494ab1442b127914503c01b97ac17b6742b19c632292d5aa24de115cd');\nhashMap.set('bitrise','478dfd316221fad7c29e177c70d1018d832fb2626b53308a5d0f1f0380e69f42');\nhashMap.set('buildkite','a93effb1f1c5d65b3277c3b4709924eacde282e8efd028a8e3d8c1ce3ef69407');\nhashMap.set('buildpacks','6bef3cb04d66b5cfbb195adb4829bcbccae6408518706744d291bacf0610421f');\nhashMap.set('bun','1322232bf1d0c4fa796e31a00488453bdcd00d4958431d9e424c1635e60a99bd');\nhashMap.set('bun-version','df3ae8e4a5de1fa1b4544f3d7fc8117e80adb1e151c46d1ede54a4dbea6521e4');\nhashMap.set('bundler','6d7e9d2018ac03e15f19e8b40ef70dd87d509d5affca24bc464d085899880a25');\nhashMap.set('cake','288c3c36a50371b26957fa71992cc335228d53563c75597b36919ac7286e96eb');\nhashMap.set('cargo','308d7ab4c6d24027b050bf659dfab0e510d9a22f8134695a7c68214908ee4634');\nhashMap.set('cdnurl','d3edf6cdc38e92eb43ff5a2b4e8df6a6a13154cf83244725c39e28d7e6ea9177');\nhashMap.set('circleci','135937d4720718304adb0ba998516f8ce38c3220ccd18b00b8c70c62b45df4da');\nhashMap.set('cloudbuild','8c0c739f7e4082bbfe8e3fdffebaf43e26f70a1314d95b306e9b93e4f4297886');\nhashMap.set('cocoapods','b6ac3b4a6b8a5b32daed37bf695fe177cdb1b4a94ae7f7fb2f4c4c096c0a004c');\nhashMap.set('composer','cdb6895574020cec402e0b878e4078b62f1acfd0392a861cbb523036634f6383');\nhashMap.set('conan','aecc3917d77146db4e57dd12944be1beff860e90b7ebdd2d8fbc449fc1a06574');\nhashMap.set('copier','faa3b79991256a6fc0957fdcd530a1bc8aee65913d5aff2b1b4d226dcd44d008');\nhashMap.set('cpanfile','6a1d67d9c8751123deaf0c7f3ac38a07024e960c140f8228fcbcb93954fdca01');\nhashMap.set('crossplane','5c26b1201a1a51454ffb94d829e223a76a781569bf79cdb1e47087c30233ec40');\nhashMap.set('crow','eb9a5f9f95041855dded67bcce3dd54724f690995ed6268d272e8a666ff28fd0');\nhashMap.set('deps-edn','c87dd5e88587147ad1a78f047b814f3c4aa60d6de30d0c49d849391eeaf1b64c');\nhashMap.set('devbox','bcf5334e8a21190baaa25436acf2f17fbf095504262a4e9ee7c62ffb644eb716');\nhashMap.set('devcontainer','24320ed1cb6191d04cb8b2707214d82c08c682597aed1d84f250aa00ad1632ec');\nhashMap.set('docker-compose','5441af5b5abf8d347e46002d47f02f85743401bda28232f49fb7b3bbb772a4fb');\nhashMap.set('dockerfile','322b95f7e55dd78d7fe71306a6f649479eca61c60d75bb10b23604a230dbdd08');\nhashMap.set('droneci','237c8de87b9bf653fb943b56e84e99c45f6d86ae27d86e599b3f3f99c35ba8ee');\nhashMap.set('fleet','d73d5d35f10df0599a561d9c8d25f3935350407d0e3bd3a1d1545295f278912e');\nhashMap.set('flux','427e0c1a5b1d8337503a9a568a76532fbde0bab8b355fa8f47312de50eadf2f6');\nhashMap.set('fvm','9b161df0f14bc6e536368952adf373e343630097121a913cea60ee284027fb90');\nhashMap.set('git-submodules','fbbf1c7b7b6f4166fa3beee96a3283d007b388e9ecb6a14f76123c8ab8c78071');\nhashMap.set('github-actions','d8f83c65da1e80b639ad44a0d8641e7e97b1d93a1b6c873603333d337ad02011');\nhashMap.set('gitlabci','0dec44dd398bfc5b3c19d0929bea2fef7f386c94acfd1b1d7bc2a31d81d96fd6');\nhashMap.set('gitlabci-include','354cfc4ea327c6d5cd5bee1f17763832efc7f5402e9fd22c579239fccb9c6dab');\nhashMap.set('glasskube','253d6db30bdec75ed5ab5d26f31d69bc07813ba10089a28da12c6a29eff4ec70');\nhashMap.set('gleam','b717a48c525ad6b1d434c6a9db828ddebbb85e94519e89ddc4040878e3600e84');\nhashMap.set('gomod','82e877b22c0dd0217368760bb5d38430657fff63d07c289793a866f0845d2976');\nhashMap.set('gradle','f430d8d768b56889ad1e5a69965841e85cc700e364d15db7bce680e8a5d6f821');\nhashMap.set('gradle-wrapper','90d2ecb9d0b113f8e946d4ea221c040f17f91af846e1ff4f9fc1514ad4324b74');\nhashMap.set('haskell-cabal','d796ec6859e63ab4f1b7030c4016071202c3a44c7c11d4a9131d7e2ba19b396d');\nhashMap.set('helm-requirements','4d90e5e18a380876ad48e21e1ad88ea62e25d973a1ddaa3763447fc0a9f9915b');\nhashMap.set('helm-values','b5c52c6a27d805557418c585c5d3030c95ee641d53057021f3fe060f81b6e1af');\nhashMap.set('helmfile','e5783484b81247279563da3c835afe4002edfc412e13fb91877818ca44ae65f2');\nhashMap.set('helmsman','ef9680c612f702c7f07aea9b6e5d811e91214dcfa5755c9f3803e9528090935e');\nhashMap.set('helmv3','7724bf6cc3ff4afec1809899f619a332f4350049b9578b5c4634514b4448cf2b');\nhashMap.set('hermit','672c328e4baea3a1ccd2cde2364db01c8033a8c077bf63a5b914fc20ee1de838');\nhashMap.set('homeassistant-manifest','05043c6db870cffbb6f8f3e351c025e3de227eaae0b24134b796aec46f84b65f');\nhashMap.set('homebrew','56ef90301143874355fd2ed25dff7c646875f701f97422d02e01d45608a88f31');\nhashMap.set('html','67c5f3c5c58e96f5dd257ba5987d900cf7fef81d667c3640e96c847b37de35a8');\nhashMap.set('jenkins','268ebfc8a1caf3edeb2192c2b1b2fa4bf18a78a3e731ba20a6c104940a5539f3');\nhashMap.set('jsonnet-bundler','4b73c32ddc3fe45d9777106d45b116777a2960e6e631256a6553060e602f893c');\nhashMap.set('kotlin-script','99ef296792a0ca575ed31d3defb514b05a58083dc01c52ea0890c69d867ba1dd');\nhashMap.set('kubernetes','321e7d77fb3600dd4c00a86eaa1294927e7f92300b74fa2977d813dcaa3bb4de');\nhashMap.set('kustomize','1e44d6ef8622252dac6d9649fb04badd12d4827eb2a55f74792aa9de2b915775');\nhashMap.set('leiningen','133fca2c3423f53f2ccc22518153ddbcafbf0f4812376c77e952eb3d24d81f85');\nhashMap.set('maven','fd6bfc21be851ed076eabea1a91a89b25eb82129734c7cb0c2e684385cf1ea69');\nhashMap.set('maven-wrapper','9a868d1328f911eb72f9e65a64d46c86ae347aab0153d1cf4e9a62ad9e0d6cb0');\nhashMap.set('meteor','4a93a326b27bedfe52118e27e06f39fecd7c55bd4cd7fccec4cb120cac14cec4');\nhashMap.set('mint','b816a49c8525716454d0a2bc9127916d5b27e5cca7b2aa2030312f218942af3e');\nhashMap.set('mise','38177382f3785cfe7cce92994bfb429b68f5165e6eef1bdcd2c7a3d8d5414da2');\nhashMap.set('mix','1116e1adf1c18c866f0a9e6fa065c4fb9da055d8d150e625344899bb94095481');\nhashMap.set('nix','f3ffec2f14e7261de8068895b91392e992dcef208fbaf52110d6862e4712c031');\nhashMap.set('nodenv','ac652c28481b001f7471f4183eac07b45d98ecbe83efc275830b0a1b2e0459b8');\nhashMap.set('npm','eaf9fe4981de8f7504227f3be88445f60f87ba74f9b9c7e54284bc2bb41320b3');\nhashMap.set('nuget','42175b1906e8e91ae0731a13d92d0df065108063665f8a36150aeae73aafdc78');\nhashMap.set('nvm','3eb77c7b0acf6d64753de78fad2499b352719853aa6872878c40675d14152322');\nhashMap.set('ocb','032b216684c14b0954e0bb019513a2aca3faaee5748587acb668d377d7c891ca');\nhashMap.set('osgi','32233a1a8a2725699d7448ba438e3d0b78141f7799cd2b588de278d41e26ed10');\nhashMap.set('pep621','f503497a4adef31b29572176e9a69d52fa9b0bfe3477b6e228c906aeb4861de5');\nhashMap.set('pep723','b96683163de63ed93207ec0538066705b1e58a1cd5b8bd11c63fc28b26bddba1');\nhashMap.set('pip-compile','89152ad6c89f278395f32d289dc3890823c233366547d228e97dd1319aa144b5');\nhashMap.set('pip_requirements','d5c474c524bc7adc1aae065da0531bd22d9f7f52523b018f2461f6c29e12fdf3');\nhashMap.set('pip_setup','0175fe550c19d9bd31c978bd83fdc088cb40fcacd5d6751f640164274ae64e61');\nhashMap.set('pipenv','50f5a54ed714fd3d738c1aa9a353cf3aab767899acdcb763088d4bd04f3a737b');\nhashMap.set('pixi','b17af6eaa33e7babcc52cfc9a617c7801c0efb1125bbd6d0d4e9f6fe33afd353');\nhashMap.set('poetry','7f227b8b912b405df7735e9dc7c178f03021844f0c027d4b321c023c330c390a');\nhashMap.set('pre-commit','a6a6e847fdb0f56650e66ef7d69e68de752b390913f79ac31d1a7ec5955d03da');\nhashMap.set('pub','0fbad9f77579fcec3a623c6feab56e71934c67a79bb8f4f0f847452051d2a0ba');\nhashMap.set('puppet','ba58ab689e44acc8f61c3569ab8b40fde01b8a9d3aad712708e2a419e57d8b45');\nhashMap.set('pyenv','9ede8becc97774f9040b40f4472d3e933534b596e04c360bfe0f3c6f95f25182');\nhashMap.set('quadlet','e355e13e104351a8b3516a8e272fc5f7e625c9f39b0c492ba27283a36227c2d4');\nhashMap.set('renovate-config-presets','a394fe55f8b6ba356f29f76efd9f0d34b56baceb111e6d92f95b29b5ca50ac67');\nhashMap.set('ruby-version','2db2140d9eee8c555e729a4de0396fa2d78846d3149890ee12fa515bd654be97');\nhashMap.set('runtime-version','b582b168c0cc595e39010feb10f4b97a82683eb269e9598216fbb11cc186e160');\nhashMap.set('sbt','74125bd9c76a5724092258cd1dee1ea99fc0d735b463a2b64fedc5d950efde2a');\nhashMap.set('scalafmt','9d36159b56835e96498af026a1fb0543200db0581681ef95ec54988f411e180f');\nhashMap.set('setup-cfg','7dea08c5708625e753bd56918bc214df7fb4d8543a26e936926a21ab43b5f785');\nhashMap.set('sveltos','167a5cc79098803be3b815a28cc40ef3361c455751e1d6a7a99ba91bfce26709');\nhashMap.set('swift','79ec9a6a2a8bb4853bb78bbb3a2a6e64e3b32b0ddeb312385abb3a14366ad505');\nhashMap.set('tekton','4e35c75bba4abc9c3cf49c55da6c19db4f4e9181d1fd9583288ab55ef7c944fd');\nhashMap.set('terraform','5bd62ce12c23896b8ecb2385a60a3cb9eb72badf10f9984bfed38f50f9262266');\nhashMap.set('terraform-version','ec8f786b9731d47f2c2fe0307caf64d7ddd83046fe7ff1f7d8423239f8b0f2aa');\nhashMap.set('terragrunt','b8474c65383a702602eee432cc1434f9a49a1ef886d1213de92d7a84fb98b9cd');\nhashMap.set('terragrunt-version','eea6087b33717d22ede2fc68c2f64df8390b75abe82110ed831a180648feb51d');\nhashMap.set('tflint-plugin','4a975f0cc1aa22cd258aa835de3dc98d7a5c0d1cee0a1092324338968e08a827');\nhashMap.set('travis','bb482a0195cd009ec3896a6227bb95617f5c84bedb518c7d971e50c62235d9ca');\nhashMap.set('typst','d080a79fbd961c6e21fcc505d544b7e0ff2126142acb1dcabdf6abbcd9339248');\nhashMap.set('unity3d','f13e25e115e3443f4e16cf31578acffa78fb1a5e23339680a92d8d6de6052920');\nhashMap.set('velaci','fda00ddb7cc23e9a37e0a8a253151df0a6930b4276d3e4f78cc54b9ac09af7de');\nhashMap.set('vendir','4627230d3b7698c41aac192d57b65b091c860c8f858c89d6af4b06ed6a32fae6');\nhashMap.set('woodpecker','6110d3bec33aaeb3511d4bbfa896cec3c8e02fb04a6cff50c9ba81061c851045');\nhashMap.set('jsonata','3b5f465b586993f92c8490e70885e7eecce9b6556bcc376dd9c11db8ee9e6960');\nhashMap.set('regex','7b643b49e498465cf91b25b8b840bb1fec8c8a3a59bfa8f97a39c976675325a0');"],"mappings":";AAAA,MAAa,0BAAU,IAAI,KAAqB;AAEhD,QAAQ,IAAI,WAAU,mEAAmE;AACzF,QAAQ,IAAI,kBAAiB,mEAAmE;AAChG,QAAQ,IAAI,OAAM,mEAAmE;AACrF,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,QAAO,mEAAmE;AACtF,QAAQ,IAAI,mBAAkB,mEAAmE;AACjG,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,kBAAiB,mEAAmE;AAChG,QAAQ,IAAI,SAAQ,mEAAmE;AACvF,QAAQ,IAAI,gBAAe,mEAAmE;AAC9F,QAAQ,IAAI,YAAW,mEAAmE;AAC1F,QAAQ,IAAI,SAAQ,mEAAmE;AACvF,QAAQ,IAAI,uBAAsB,mEAAmE;AACrG,QAAQ,IAAI,WAAU,mEAAmE;AACzF,QAAQ,IAAI,aAAY,mEAAmE;AAC3F,QAAQ,IAAI,cAAa,mEAAmE;AAC5F,QAAQ,IAAI,OAAM,mEAAmE;AACrF,QAAQ,IAAI,eAAc,mEAAmE;AAC7F,QAAQ,IAAI,WAAU,mEAAmE;AACzF,QAAQ,IAAI,QAAO,mEAAmE;AACtF,QAAQ,IAAI,SAAQ,mEAAmE;AACvF,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,YAAW,mEAAmE;AAC1F,QAAQ,IAAI,cAAa,mEAAmE;AAC5F,QAAQ,IAAI,aAAY,mEAAmE;AAC3F,QAAQ,IAAI,YAAW,mEAAmE;AAC1F,QAAQ,IAAI,SAAQ,mEAAmE;AACvF,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,YAAW,mEAAmE;AAC1F,QAAQ,IAAI,cAAa,mEAAmE;AAC5F,QAAQ,IAAI,QAAO,mEAAmE;AACtF,QAAQ,IAAI,YAAW,mEAAmE;AAC1F,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,gBAAe,mEAAmE;AAC9F,QAAQ,IAAI,kBAAiB,mEAAmE;AAChG,QAAQ,IAAI,cAAa,mEAAmE;AAC5F,QAAQ,IAAI,WAAU,mEAAmE;AACzF,QAAQ,IAAI,SAAQ,mEAAmE;AACvF,QAAQ,IAAI,QAAO,mEAAmE;AACtF,QAAQ,IAAI,OAAM,mEAAmE;AACrF,QAAQ,IAAI,kBAAiB,mEAAmE;AAChG,QAAQ,IAAI,kBAAiB,mEAAmE;AAChG,QAAQ,IAAI,YAAW,mEAAmE;AAC1F,QAAQ,IAAI,oBAAmB,mEAAmE;AAClG,QAAQ,IAAI,aAAY,mEAAmE;AAC3F,QAAQ,IAAI,SAAQ,mEAAmE;AACvF,QAAQ,IAAI,SAAQ,mEAAmE;AACvF,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,kBAAiB,mEAAmE;AAChG,QAAQ,IAAI,iBAAgB,mEAAmE;AAC/F,QAAQ,IAAI,qBAAoB,mEAAmE;AACnG,QAAQ,IAAI,eAAc,mEAAmE;AAC7F,QAAQ,IAAI,YAAW,mEAAmE;AAC1F,QAAQ,IAAI,YAAW,mEAAmE;AAC1F,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,0BAAyB,mEAAmE;AACxG,QAAQ,IAAI,YAAW,mEAAmE;AAC1F,QAAQ,IAAI,QAAO,mEAAmE;AACtF,QAAQ,IAAI,WAAU,mEAAmE;AACzF,QAAQ,IAAI,mBAAkB,mEAAmE;AACjG,QAAQ,IAAI,iBAAgB,mEAAmE;AAC/F,QAAQ,IAAI,cAAa,mEAAmE;AAC5F,QAAQ,IAAI,aAAY,mEAAmE;AAC3F,QAAQ,IAAI,aAAY,mEAAmE;AAC3F,QAAQ,IAAI,SAAQ,mEAAmE;AACvF,QAAQ,IAAI,iBAAgB,mEAAmE;AAC/F,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,QAAO,mEAAmE;AACtF,QAAQ,IAAI,QAAO,mEAAmE;AACtF,QAAQ,IAAI,OAAM,mEAAmE;AACrF,QAAQ,IAAI,OAAM,mEAAmE;AACrF,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,OAAM,mEAAmE;AACrF,QAAQ,IAAI,SAAQ,mEAAmE;AACvF,QAAQ,IAAI,OAAM,mEAAmE;AACrF,QAAQ,IAAI,OAAM,mEAAmE;AACrF,QAAQ,IAAI,QAAO,mEAAmE;AACtF,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,eAAc,mEAAmE;AAC7F,QAAQ,IAAI,oBAAmB,mEAAmE;AAClG,QAAQ,IAAI,aAAY,mEAAmE;AAC3F,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,QAAO,mEAAmE;AACtF,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,cAAa,mEAAmE;AAC5F,QAAQ,IAAI,OAAM,mEAAmE;AACrF,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,SAAQ,mEAAmE;AACvF,QAAQ,IAAI,WAAU,mEAAmE;AACzF,QAAQ,IAAI,2BAA0B,mEAAmE;AACzG,QAAQ,IAAI,gBAAe,mEAAmE;AAC9F,QAAQ,IAAI,mBAAkB,mEAAmE;AACjG,QAAQ,IAAI,OAAM,mEAAmE;AACrF,QAAQ,IAAI,YAAW,mEAAmE;AAC1F,QAAQ,IAAI,aAAY,mEAAmE;AAC3F,QAAQ,IAAI,WAAU,mEAAmE;AACzF,QAAQ,IAAI,SAAQ,mEAAmE;AACvF,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,aAAY,mEAAmE;AAC3F,QAAQ,IAAI,qBAAoB,mEAAmE;AACnG,QAAQ,IAAI,cAAa,mEAAmE;AAC5F,QAAQ,IAAI,sBAAqB,mEAAmE;AACpG,QAAQ,IAAI,iBAAgB,mEAAmE;AAC/F,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,SAAQ,mEAAmE;AACvF,QAAQ,IAAI,WAAU,mEAAmE;AACzF,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,cAAa,mEAAmE;AAC5F,QAAQ,IAAI,WAAU,mEAAmE;AACzF,QAAQ,IAAI,SAAQ,mEAAmE"}
|
|
@@ -14,7 +14,7 @@ declare const GithubVulnerabilityAlerts: z.ZodEffects<z.ZodEffects<z.ZodArray<z.
|
|
|
14
14
|
};
|
|
15
15
|
security_vulnerability: {
|
|
16
16
|
package: {
|
|
17
|
-
ecosystem: "composer" | "maven" | "npm" | "rust" | "go" | "
|
|
17
|
+
ecosystem: "composer" | "maven" | "npm" | "rust" | "go" | "actions" | "nuget" | "pip" | "rubygems";
|
|
18
18
|
name: string;
|
|
19
19
|
};
|
|
20
20
|
vulnerable_version_range: string;
|
|
@@ -39,7 +39,7 @@ declare const GithubVulnerabilityAlerts: z.ZodEffects<z.ZodEffects<z.ZodArray<z.
|
|
|
39
39
|
};
|
|
40
40
|
security_vulnerability: {
|
|
41
41
|
package: {
|
|
42
|
-
ecosystem: "composer" | "maven" | "npm" | "rust" | "go" | "
|
|
42
|
+
ecosystem: "composer" | "maven" | "npm" | "rust" | "go" | "actions" | "nuget" | "pip" | "rubygems";
|
|
43
43
|
name: string;
|
|
44
44
|
};
|
|
45
45
|
vulnerable_version_range: string;
|
|
@@ -4,6 +4,7 @@ import { PackageCacheBase } from "./base.js";
|
|
|
4
4
|
import { DateTime } from "luxon";
|
|
5
5
|
import upath from "upath";
|
|
6
6
|
import cacache from "cacache";
|
|
7
|
+
import { LRUCache } from "lru-cache";
|
|
7
8
|
//#region lib/util/cache/package/impl/file.ts
|
|
8
9
|
var PackageCacheFile = class PackageCacheFile extends PackageCacheBase {
|
|
9
10
|
static create(cacheDir) {
|
|
@@ -12,6 +13,7 @@ var PackageCacheFile = class PackageCacheFile extends PackageCacheBase {
|
|
|
12
13
|
return new PackageCacheFile(cacheFileName);
|
|
13
14
|
}
|
|
14
15
|
cacheFileName;
|
|
16
|
+
expiryMap = new LRUCache({ max: 1e5 });
|
|
15
17
|
constructor(cacheFileName) {
|
|
16
18
|
super();
|
|
17
19
|
this.cacheFileName = cacheFileName;
|
|
@@ -33,6 +35,7 @@ var PackageCacheFile = class PackageCacheFile extends PackageCacheBase {
|
|
|
33
35
|
namespace,
|
|
34
36
|
key
|
|
35
37
|
}, "Returning cached value");
|
|
38
|
+
this.expiryMap.set(this.getKey(namespace, key), expiry);
|
|
36
39
|
if (!cached.compress) return cached.value;
|
|
37
40
|
const json = await decompressFromBase64(cached.value);
|
|
38
41
|
return JSON.parse(json);
|
|
@@ -57,6 +60,7 @@ var PackageCacheFile = class PackageCacheFile extends PackageCacheBase {
|
|
|
57
60
|
expiry
|
|
58
61
|
});
|
|
59
62
|
await cacache.put(this.cacheFileName, this.getKey(namespace, key), payload);
|
|
63
|
+
this.expiryMap.set(this.getKey(namespace, key), expiry);
|
|
60
64
|
}
|
|
61
65
|
async destroy() {
|
|
62
66
|
logger.debug("Checking file package cache for expired items");
|
|
@@ -67,6 +71,15 @@ var PackageCacheFile = class PackageCacheFile extends PackageCacheBase {
|
|
|
67
71
|
for await (const item of cacache.ls.stream(this.cacheFileName)) try {
|
|
68
72
|
totalCount += 1;
|
|
69
73
|
const cacheEntry = item;
|
|
74
|
+
const cachedExpiry = this.expiryMap.get(cacheEntry.key);
|
|
75
|
+
if (cachedExpiry !== void 0) {
|
|
76
|
+
if (DateTime.local() <= cachedExpiry) continue;
|
|
77
|
+
await cacache.rm.entry(this.cacheFileName, cacheEntry.key);
|
|
78
|
+
await cacache.rm.content(this.cacheFileName, cacheEntry.integrity);
|
|
79
|
+
this.expiryMap.delete(cacheEntry.key);
|
|
80
|
+
deletedCount += 1;
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
70
83
|
const entry = await cacache.get(this.cacheFileName, cacheEntry.key);
|
|
71
84
|
let cached;
|
|
72
85
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.js","names":[],"sources":["../../../../../lib/util/cache/package/impl/file.ts"],"sourcesContent":["import cacache from 'cacache';\nimport { DateTime } from 'luxon';\nimport upath from 'upath';\nimport { logger } from '../../../../logger/index.ts';\nimport { compressToBase64, decompressFromBase64 } from '../../../compress.ts';\nimport type { PackageCacheNamespace } from '../types.ts';\nimport { PackageCacheBase } from './base.ts';\n\nexport class PackageCacheFile extends PackageCacheBase {\n static create(cacheDir: string): PackageCacheFile {\n const cacheFileName = upath.join(cacheDir, '/renovate/renovate-cache-v1');\n logger.debug(`Initializing Renovate internal cache into ${cacheFileName}`);\n return new PackageCacheFile(cacheFileName);\n }\n\n private readonly cacheFileName: string;\n\n private constructor(cacheFileName: string) {\n super();\n this.cacheFileName = cacheFileName;\n }\n\n private getKey(namespace: PackageCacheNamespace, key: string): string {\n return `${namespace}-${key}`;\n }\n\n override async get<T = unknown>(\n namespace: PackageCacheNamespace,\n key: string,\n ): Promise<T | undefined> {\n try {\n const entry = await cacache.get(\n this.cacheFileName,\n this.getKey(namespace, key),\n );\n const raw = entry.data.toString();\n const cached = JSON.parse(raw);\n\n if (!cached) {\n return undefined;\n }\n\n const expiry = DateTime.fromISO(cached.expiry);\n if (!expiry.isValid || DateTime.local() >= expiry) {\n await this.rm(namespace, key);\n return undefined;\n }\n\n logger.trace({ namespace, key }, 'Returning cached value');\n\n if (!cached.compress) {\n return cached.value;\n }\n\n const json = await decompressFromBase64(cached.value);\n return JSON.parse(json);\n } catch {\n logger.trace({ namespace, key }, 'Cache miss');\n }\n return undefined;\n }\n\n override async set(\n namespace: PackageCacheNamespace,\n key: string,\n value: unknown,\n hardTtlMinutes: number,\n ): Promise<void> {\n logger.trace({ namespace, key, hardTtlMinutes }, 'Saving cached value');\n const serialized = JSON.stringify(value);\n const compressedValue = await compressToBase64(serialized);\n const expiry = DateTime.local().plus({ minutes: hardTtlMinutes });\n const payload = JSON.stringify({\n compress: true,\n value: compressedValue,\n expiry,\n });\n await cacache.put(this.cacheFileName, this.getKey(namespace, key), payload);\n }\n\n override async destroy(): Promise<void> {\n logger.debug('Checking file package cache for expired items');\n let totalCount = 0;\n let deletedCount = 0;\n let errorCount = 0;\n const startTime = Date.now();\n for await (const item of cacache.ls.stream(this.cacheFileName)) {\n try {\n totalCount += 1;\n const cacheEntry = item as unknown as cacache.CacheObject;\n const entry = await cacache.get(this.cacheFileName, cacheEntry.key);\n let cached: { expiry?: string } | undefined;\n try {\n const raw = entry.data.toString();\n cached = JSON.parse(raw);\n } catch {\n logger.debug('Error parsing cached value - deleting');\n }\n\n if (cached) {\n if (!cached.expiry) {\n continue;\n }\n const expiry = DateTime.fromISO(cached.expiry);\n if (expiry.isValid && DateTime.local() <= expiry) {\n continue;\n }\n }\n\n await cacache.rm.entry(this.cacheFileName, cacheEntry.key);\n await cacache.rm.content(this.cacheFileName, cacheEntry.integrity);\n deletedCount += 1;\n } catch (err) {\n logger.trace({ err }, 'Error cleaning up cache entry');\n errorCount += 1;\n }\n }\n if (errorCount > 0) {\n logger.debug(`Error count cleaning up cache: ${errorCount}`);\n }\n const durationMs = Date.now() - startTime;\n logger.debug(\n `Deleted ${deletedCount} of ${totalCount} file cached entries in ${durationMs}ms`,\n );\n }\n\n private async rm(\n namespace: PackageCacheNamespace,\n key: string,\n ): Promise<void> {\n logger.trace({ namespace, key }, 'Removing cache entry');\n await cacache.rm.entry(this.cacheFileName, this.getKey(namespace, key));\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"file.js","names":[],"sources":["../../../../../lib/util/cache/package/impl/file.ts"],"sourcesContent":["import cacache from 'cacache';\nimport { LRUCache } from 'lru-cache';\nimport { DateTime } from 'luxon';\nimport upath from 'upath';\nimport { logger } from '../../../../logger/index.ts';\nimport { compressToBase64, decompressFromBase64 } from '../../../compress.ts';\nimport type { PackageCacheNamespace } from '../types.ts';\nimport { PackageCacheBase } from './base.ts';\n\nexport class PackageCacheFile extends PackageCacheBase {\n static create(cacheDir: string): PackageCacheFile {\n const cacheFileName = upath.join(cacheDir, '/renovate/renovate-cache-v1');\n logger.debug(`Initializing Renovate internal cache into ${cacheFileName}`);\n return new PackageCacheFile(cacheFileName);\n }\n\n private readonly cacheFileName: string;\n\n private readonly expiryMap = new LRUCache<string, DateTime>({\n // Assuming 50 bytes per entry, this limits the memory footprint of this\n // to around 5MB.\n max: 100000,\n });\n\n private constructor(cacheFileName: string) {\n super();\n this.cacheFileName = cacheFileName;\n }\n\n private getKey(namespace: PackageCacheNamespace, key: string): string {\n return `${namespace}-${key}`;\n }\n\n override async get<T = unknown>(\n namespace: PackageCacheNamespace,\n key: string,\n ): Promise<T | undefined> {\n try {\n const entry = await cacache.get(\n this.cacheFileName,\n this.getKey(namespace, key),\n );\n const raw = entry.data.toString();\n const cached = JSON.parse(raw);\n\n if (!cached) {\n return undefined;\n }\n\n const expiry = DateTime.fromISO(cached.expiry);\n if (!expiry.isValid || DateTime.local() >= expiry) {\n await this.rm(namespace, key);\n return undefined;\n }\n\n logger.trace({ namespace, key }, 'Returning cached value');\n this.expiryMap.set(this.getKey(namespace, key), expiry);\n\n if (!cached.compress) {\n return cached.value;\n }\n\n const json = await decompressFromBase64(cached.value);\n return JSON.parse(json);\n } catch {\n logger.trace({ namespace, key }, 'Cache miss');\n }\n return undefined;\n }\n\n override async set(\n namespace: PackageCacheNamespace,\n key: string,\n value: unknown,\n hardTtlMinutes: number,\n ): Promise<void> {\n logger.trace({ namespace, key, hardTtlMinutes }, 'Saving cached value');\n const serialized = JSON.stringify(value);\n const compressedValue = await compressToBase64(serialized);\n const expiry = DateTime.local().plus({ minutes: hardTtlMinutes });\n const payload = JSON.stringify({\n compress: true,\n value: compressedValue,\n expiry,\n });\n await cacache.put(this.cacheFileName, this.getKey(namespace, key), payload);\n this.expiryMap.set(this.getKey(namespace, key), expiry);\n }\n\n override async destroy(): Promise<void> {\n logger.debug('Checking file package cache for expired items');\n let totalCount = 0;\n let deletedCount = 0;\n let errorCount = 0;\n const startTime = Date.now();\n for await (const item of cacache.ls.stream(this.cacheFileName)) {\n try {\n totalCount += 1;\n const cacheEntry = item as unknown as cacache.CacheObject;\n const cachedExpiry = this.expiryMap.get(cacheEntry.key);\n if (cachedExpiry !== undefined) {\n if (DateTime.local() <= cachedExpiry) {\n continue;\n }\n await cacache.rm.entry(this.cacheFileName, cacheEntry.key);\n await cacache.rm.content(this.cacheFileName, cacheEntry.integrity);\n this.expiryMap.delete(cacheEntry.key);\n deletedCount += 1;\n continue;\n }\n const entry = await cacache.get(this.cacheFileName, cacheEntry.key);\n let cached: { expiry?: string } | undefined;\n try {\n const raw = entry.data.toString();\n cached = JSON.parse(raw);\n } catch {\n logger.debug('Error parsing cached value - deleting');\n }\n\n if (cached) {\n if (!cached.expiry) {\n continue;\n }\n const expiry = DateTime.fromISO(cached.expiry);\n if (expiry.isValid && DateTime.local() <= expiry) {\n continue;\n }\n }\n\n await cacache.rm.entry(this.cacheFileName, cacheEntry.key);\n await cacache.rm.content(this.cacheFileName, cacheEntry.integrity);\n deletedCount += 1;\n } catch (err) {\n logger.trace({ err }, 'Error cleaning up cache entry');\n errorCount += 1;\n }\n }\n if (errorCount > 0) {\n logger.debug(`Error count cleaning up cache: ${errorCount}`);\n }\n const durationMs = Date.now() - startTime;\n logger.debug(\n `Deleted ${deletedCount} of ${totalCount} file cached entries in ${durationMs}ms`,\n );\n }\n\n private async rm(\n namespace: PackageCacheNamespace,\n key: string,\n ): Promise<void> {\n logger.trace({ namespace, key }, 'Removing cache entry');\n await cacache.rm.entry(this.cacheFileName, this.getKey(namespace, key));\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "renovate",
|
|
3
3
|
"description": "Automated dependency updates. Flexible so you don't need to be.",
|
|
4
|
-
"version": "43.
|
|
4
|
+
"version": "43.118.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"renovate": "dist/renovate.js",
|
|
@@ -170,6 +170,7 @@
|
|
|
170
170
|
"jsonata": "2.1.0",
|
|
171
171
|
"jsonc-weaver": "0.2.4",
|
|
172
172
|
"klona": "2.0.6",
|
|
173
|
+
"lru-cache": "11.3.5",
|
|
173
174
|
"luxon": "3.7.2",
|
|
174
175
|
"markdown-it": "14.1.1",
|
|
175
176
|
"markdown-table": "3.0.4",
|
package/renovate-schema.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$id": "https://docs.renovatebot.com/renovate-schema.json",
|
|
3
|
-
"title": "JSON schema for Renovate 43.
|
|
3
|
+
"title": "JSON schema for Renovate 43.118.0 config files (https://renovatebot.com/)",
|
|
4
4
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
5
|
-
"x-renovate-version": "43.
|
|
5
|
+
"x-renovate-version": "43.118.0",
|
|
6
6
|
"allowComments": true,
|
|
7
7
|
"type": "object",
|
|
8
8
|
"properties": {
|
|
@@ -842,7 +842,7 @@
|
|
|
842
842
|
"type": "object",
|
|
843
843
|
"default": {
|
|
844
844
|
"managerFilePatterns": [
|
|
845
|
-
"
|
|
845
|
+
"**/*-pipelines.yml"
|
|
846
846
|
]
|
|
847
847
|
},
|
|
848
848
|
"$ref": "#",
|