renovate 42.0.2 → 42.1.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,2 +1,2 @@
1
- import type { Preset } from '../types';
2
- export declare const presets: Record<string, Preset>;
1
+ import type { GlobalPreset } from '../types';
2
+ export declare const presets: Record<string, GlobalPreset>;
@@ -1 +1 @@
1
- {"version":3,"file":"global.js","sourceRoot":"","sources":["../../../../lib/config/presets/internal/global.ts"],"names":[],"mappings":";;;AAEA,+EAA+E;AAElE,QAAA,OAAO,GAA2B;IAC7C,OAAO,EAAE;QACP,UAAU,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,iBAAiB,CAAC;QACrD,WAAW,EACT,mEAAmE;KACtE;CACF,CAAC","sourcesContent":["import type { Preset } from '../types';\n\n/* eslint sort-keys: [\"error\", \"asc\", {caseSensitive: false, natural: true}] */\n\nexport const presets: Record<string, Preset> = {\n safeEnv: {\n allowedEnv: ['GO*', 'GRADLE_OPTS', 'RUSTC_BOOTSTRAP'],\n description:\n 'Hopefully safe environment variables to allow users to configure.',\n },\n};\n"]}
1
+ {"version":3,"file":"global.js","sourceRoot":"","sources":["../../../../lib/config/presets/internal/global.ts"],"names":[],"mappings":";;;AAEA,+EAA+E;AAElE,QAAA,OAAO,GAAiC;IACnD,OAAO,EAAE;QACP,UAAU,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,iBAAiB,CAAC;QACrD,WAAW,EACT,mEAAmE;KACtE;CACF,CAAC","sourcesContent":["import type { GlobalPreset } from '../types';\n\n/* eslint sort-keys: [\"error\", \"asc\", {caseSensitive: false, natural: true}] */\n\nexport const presets: Record<string, GlobalPreset> = {\n safeEnv: {\n allowedEnv: ['GO*', 'GRADLE_OPTS', 'RUSTC_BOOTSTRAP'],\n description:\n 'Hopefully safe environment variables to allow users to configure.',\n },\n};\n"]}
@@ -1,6 +1,7 @@
1
1
  import type { MaybePromise, Nullish } from '../../types';
2
- import type { RenovateConfig } from '../types';
2
+ import type { RenovateConfig, RepoGlobalConfig } from '../types';
3
3
  export type Preset = RenovateConfig & Record<string, unknown>;
4
+ export type GlobalPreset = RepoGlobalConfig & Preset;
4
5
  export interface PresetConfig {
5
6
  repo: string;
6
7
  presetPath?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../lib/config/presets/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { MaybePromise, Nullish } from '../../types';\nimport type { RenovateConfig } from '../types';\n\n// TODO: Proper typing\nexport type Preset = RenovateConfig & Record<string, unknown>;\n\nexport interface PresetConfig {\n repo: string;\n presetPath?: string | undefined;\n presetName?: string;\n tag?: string | undefined;\n}\n\nexport interface PresetApi {\n getPreset(config: PresetConfig): MaybePromise<Nullish<Preset>>;\n}\n\nexport interface ParsedPreset {\n presetSource: string;\n repo: string;\n presetPath?: string | undefined;\n presetName: string;\n tag?: string | undefined;\n params?: string[] | undefined;\n rawParams?: string | undefined;\n}\n\nexport type PresetFetcher = (\n repo: string,\n fileName: string,\n endpoint: string,\n tag?: string,\n) => Promise<Nullish<Preset>>;\n\nexport interface FetchPresetConfig {\n repo: string;\n filePreset: string;\n presetPath?: string | undefined;\n endpoint: string;\n tag?: string | undefined;\n fetch: PresetFetcher;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../lib/config/presets/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { MaybePromise, Nullish } from '../../types';\nimport type { RenovateConfig, RepoGlobalConfig } from '../types';\n\n// TODO: Proper typing\nexport type Preset = RenovateConfig & Record<string, unknown>;\n\nexport type GlobalPreset = RepoGlobalConfig & Preset;\n\nexport interface PresetConfig {\n repo: string;\n presetPath?: string | undefined;\n presetName?: string;\n tag?: string | undefined;\n}\n\nexport interface PresetApi {\n getPreset(config: PresetConfig): MaybePromise<Nullish<Preset>>;\n}\n\nexport interface ParsedPreset {\n presetSource: string;\n repo: string;\n presetPath?: string | undefined;\n presetName: string;\n tag?: string | undefined;\n params?: string[] | undefined;\n rawParams?: string | undefined;\n}\n\nexport type PresetFetcher = (\n repo: string,\n fileName: string,\n endpoint: string,\n tag?: string,\n) => Promise<Nullish<Preset>>;\n\nexport interface FetchPresetConfig {\n repo: string;\n filePreset: string;\n presetPath?: string | undefined;\n endpoint: string;\n tag?: string | undefined;\n fetch: PresetFetcher;\n}\n"]}
@@ -31,41 +31,6 @@ export declare class DebDatasource extends Datasource {
31
31
  */
32
32
  readonly defaultRegistryUrls: string[];
33
33
  readonly defaultVersioning = "deb";
34
- /**
35
- * Downloads and extracts a package file from a component URL.
36
- *
37
- * @param componentUrl - The URL of the component.
38
- * @returns The path to the extracted file and the last modification timestamp.
39
- * @throws Will throw an error if no valid compression method is found.
40
- */
41
- private downloadAndExtractPackage;
42
- /**
43
- * Downloads a package file if it has been modified since the last download timestamp.
44
- *
45
- * @param basePackageUrl - The base URL of the package.
46
- * @param compression - The compression method used (e.g., 'gz').
47
- * @param compressedFile - The path where the compressed file will be saved.
48
- * @param lastDownloadTimestamp - The timestamp of the last download.
49
- * @returns True if the file was downloaded, otherwise false.
50
- */
51
- private downloadPackageFile;
52
- /**
53
- * Fetches the content of the InRelease file from the given base suite URL.
54
- *
55
- * @param baseReleaseUrl - The base URL of the suite (e.g., 'https://deb.debian.org/debian/dists/bullseye').
56
- * @returns resolves to the content of the InRelease file.
57
- * @throws An error if the InRelease file could not be downloaded.
58
- */
59
- private fetchInReleaseFile;
60
- /**
61
- * Checks if a packageUrl content has been modified since the specified timestamp.
62
- *
63
- * @param packageUrl - The URL to check.
64
- * @param lastDownloadTimestamp - The timestamp of the last download.
65
- * @returns True if the content has been modified, otherwise false.
66
- * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since
67
- */
68
- private checkIfModified;
69
34
  /**
70
35
  * Parses the extracted package index file.
71
36
  *
@@ -3,19 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DebDatasource = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const readline_1 = tslib_1.__importDefault(require("readline"));
6
- const nanoid_1 = require("nanoid");
7
- const upath_1 = tslib_1.__importDefault(require("upath"));
8
6
  const logger_1 = require("../../../logger");
9
7
  const decorator_1 = require("../../../util/cache/package/decorator");
10
8
  const fs = tslib_1.__importStar(require("../../../util/fs"));
11
- const hash_1 = require("../../../util/hash");
12
- const url_1 = require("../../../util/url");
13
9
  const datasource_1 = require("../datasource");
14
- const checksum_1 = require("./checksum");
15
10
  const common_1 = require("./common");
16
- const file_1 = require("./file");
11
+ const packages_1 = require("./packages");
17
12
  const release_1 = require("./release");
18
- const url_2 = require("./url");
13
+ const url_1 = require("./url");
19
14
  class DebDatasource extends datasource_1.Datasource {
20
15
  static id = 'deb';
21
16
  constructor() {
@@ -50,123 +45,6 @@ class DebDatasource extends datasource_1.Datasource {
50
45
  'https://deb.debian.org/debian?suite=stable&components=main,contrib,non-free&binaryArch=amd64',
51
46
  ];
52
47
  defaultVersioning = 'deb';
53
- /**
54
- * Downloads and extracts a package file from a component URL.
55
- *
56
- * @param componentUrl - The URL of the component.
57
- * @returns The path to the extracted file and the last modification timestamp.
58
- * @throws Will throw an error if no valid compression method is found.
59
- */
60
- async downloadAndExtractPackage(componentUrl) {
61
- const packageUrlHash = (0, hash_1.toSha256)(componentUrl);
62
- const fullCacheDir = await fs.ensureCacheDir(common_1.cacheSubDir);
63
- const extractedFile = upath_1.default.join(fullCacheDir, `${packageUrlHash}.txt`);
64
- let lastTimestamp = await (0, file_1.getFileCreationTime)(extractedFile);
65
- const compression = 'gz';
66
- const compressedFile = upath_1.default.join(fullCacheDir, `${(0, nanoid_1.nanoid)()}_${packageUrlHash}.${compression}`);
67
- const wasUpdated = await this.downloadPackageFile(componentUrl, compression, compressedFile, lastTimestamp);
68
- if (wasUpdated || !lastTimestamp) {
69
- try {
70
- await (0, file_1.extract)(compressedFile, compression, extractedFile);
71
- lastTimestamp = await (0, file_1.getFileCreationTime)(extractedFile);
72
- }
73
- catch (error) {
74
- logger_1.logger.warn({
75
- compressedFile,
76
- componentUrl,
77
- compression,
78
- error: error.message,
79
- }, 'Failed to extract package file from compressed file');
80
- }
81
- finally {
82
- await fs.rmCache(compressedFile);
83
- }
84
- }
85
- if (!lastTimestamp) {
86
- //extracting went wrong
87
- throw new Error('Missing metadata in extracted package index file!');
88
- }
89
- return { extractedFile, lastTimestamp };
90
- }
91
- /**
92
- * Downloads a package file if it has been modified since the last download timestamp.
93
- *
94
- * @param basePackageUrl - The base URL of the package.
95
- * @param compression - The compression method used (e.g., 'gz').
96
- * @param compressedFile - The path where the compressed file will be saved.
97
- * @param lastDownloadTimestamp - The timestamp of the last download.
98
- * @returns True if the file was downloaded, otherwise false.
99
- */
100
- async downloadPackageFile(basePackageUrl, compression, compressedFile, lastDownloadTimestamp) {
101
- const baseSuiteUrl = (0, url_2.getBaseSuiteUrl)(basePackageUrl);
102
- const packageUrl = (0, url_1.joinUrlParts)(basePackageUrl, `Packages.${compression}`);
103
- let needsToDownload = true;
104
- if (lastDownloadTimestamp) {
105
- needsToDownload = await this.checkIfModified(packageUrl, lastDownloadTimestamp);
106
- }
107
- if (!needsToDownload) {
108
- logger_1.logger.debug(`No need to download ${packageUrl}, file is up to date.`);
109
- return false;
110
- }
111
- const readStream = this.http.stream(packageUrl);
112
- const writeStream = fs.createCacheWriteStream(compressedFile);
113
- await fs.pipeline(readStream, writeStream);
114
- logger_1.logger.debug({ url: packageUrl, targetFile: compressedFile }, 'Downloading Debian package file');
115
- let inReleaseContent = '';
116
- try {
117
- inReleaseContent = await this.fetchInReleaseFile(baseSuiteUrl);
118
- }
119
- catch (error) {
120
- // This is expected to fail for Artifactory if GPG verification is not enabled
121
- logger_1.logger.debug({ url: baseSuiteUrl, err: error }, 'Could not fetch InRelease file');
122
- }
123
- if (inReleaseContent) {
124
- const actualChecksum = await (0, checksum_1.computeFileChecksum)(compressedFile);
125
- const expectedChecksum = (0, checksum_1.parseChecksumsFromInRelease)(inReleaseContent,
126
- // path to the Package.gz file
127
- packageUrl.replace(`${baseSuiteUrl}/`, ''));
128
- if (actualChecksum !== expectedChecksum) {
129
- await fs.rmCache(compressedFile);
130
- throw new Error('SHA256 checksum validation failed');
131
- }
132
- }
133
- return needsToDownload;
134
- }
135
- /**
136
- * Fetches the content of the InRelease file from the given base suite URL.
137
- *
138
- * @param baseReleaseUrl - The base URL of the suite (e.g., 'https://deb.debian.org/debian/dists/bullseye').
139
- * @returns resolves to the content of the InRelease file.
140
- * @throws An error if the InRelease file could not be downloaded.
141
- */
142
- async fetchInReleaseFile(baseReleaseUrl) {
143
- const inReleaseUrl = (0, url_1.joinUrlParts)(baseReleaseUrl, 'InRelease');
144
- const response = await this.http.getText(inReleaseUrl);
145
- return response.body;
146
- }
147
- /**
148
- * Checks if a packageUrl content has been modified since the specified timestamp.
149
- *
150
- * @param packageUrl - The URL to check.
151
- * @param lastDownloadTimestamp - The timestamp of the last download.
152
- * @returns True if the content has been modified, otherwise false.
153
- * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since
154
- */
155
- async checkIfModified(packageUrl, lastDownloadTimestamp) {
156
- const options = {
157
- headers: {
158
- 'If-Modified-Since': lastDownloadTimestamp.toUTCString(),
159
- },
160
- };
161
- try {
162
- const response = await this.http.head(packageUrl, options);
163
- return response.statusCode !== 304;
164
- }
165
- catch (error) {
166
- logger_1.logger.warn({ packageUrl, lastDownloadTimestamp, errorMessage: error.message }, 'Could not determine if package file is modified since last download');
167
- return true; // Assume it needs to be downloaded if check fails
168
- }
169
- }
170
48
  /**
171
49
  * Parses the extracted package index file.
172
50
  *
@@ -214,7 +92,7 @@ class DebDatasource extends datasource_1.Datasource {
214
92
  return allPackages;
215
93
  }
216
94
  async getPackageIndex(componentUrl) {
217
- const { extractedFile, lastTimestamp } = await this.downloadAndExtractPackage(componentUrl);
95
+ const { extractedFile, lastTimestamp } = await (0, packages_1.downloadAndExtractPackage)(componentUrl, this.http);
218
96
  return await this.parseExtractedPackageIndex(extractedFile, lastTimestamp);
219
97
  }
220
98
  /**
@@ -228,7 +106,7 @@ class DebDatasource extends datasource_1.Datasource {
228
106
  if (!registryUrl) {
229
107
  return null;
230
108
  }
231
- const componentUrls = (0, url_2.constructComponentUrls)(registryUrl);
109
+ const componentUrls = (0, url_1.constructComponentUrls)(registryUrl);
232
110
  let aggregatedRelease = null;
233
111
  for (const componentUrl of componentUrls) {
234
112
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/deb/index.ts"],"names":[],"mappings":"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","sourcesContent":["import readline from 'readline';\nimport { nanoid } from 'nanoid';\nimport upath from 'upath';\nimport { logger } from '../../../logger';\nimport { cache } from '../../../util/cache/package/decorator';\nimport * as fs from '../../../util/fs';\nimport { toSha256 } from '../../../util/hash';\nimport type { HttpOptions } from '../../../util/http/types';\nimport { joinUrlParts } from '../../../util/url';\nimport { Datasource } from '../datasource';\nimport type { GetReleasesConfig, ReleaseResult } from '../types';\nimport { computeFileChecksum, parseChecksumsFromInRelease } from './checksum';\nimport { cacheSubDir, packageKeys, requiredPackageKeys } from './common';\nimport { extract, getFileCreationTime } from './file';\nimport { formatReleaseResult, releaseMetaInformationMatches } from './release';\nimport type { PackageDescription } from './types';\nimport { constructComponentUrls, getBaseSuiteUrl } from './url';\n\nexport class DebDatasource extends Datasource {\n static readonly id = 'deb';\n\n constructor() {\n super(DebDatasource.id);\n }\n\n /**\n * Users are able to specify custom Debian repositories as long as they follow\n * the Debian package repository format as specified here\n * @see{https://wiki.debian.org/DebianRepository/Format}\n */\n override readonly customRegistrySupport = true;\n\n /**\n * Users can specify multiple upstream repositories and the datasource will aggregate the release\n * @example\n * When specifying multiple dependencies both internal and external dependencies from internal/external artifactory\n */\n override readonly registryStrategy = 'merge';\n\n /**\n * The original apt source list file format is\n * deb uri distribution [component1] [component2] [...]\n * @see{https://wiki.debian.org/DebianRepository/Format}\n *\n * However, for Renovate, we require the registry URLs to be\n * valid URLs which is why the parameters are encoded in the URL.\n *\n * The following query parameters are required:\n * - components: comma separated list of components\n * - suite: stable, oldstable or other alias for a release, either this or release must be given like buster\n * - binaryArch: e.g. amd64 resolves to http://deb.debian.org/debian/dists/stable/non-free/binary-amd64/\n */\n override readonly defaultRegistryUrls = [\n 'https://deb.debian.org/debian?suite=stable&components=main,contrib,non-free&binaryArch=amd64',\n ];\n\n override readonly defaultVersioning = 'deb';\n\n /**\n * Downloads and extracts a package file from a component URL.\n *\n * @param componentUrl - The URL of the component.\n * @returns The path to the extracted file and the last modification timestamp.\n * @throws Will throw an error if no valid compression method is found.\n */\n private async downloadAndExtractPackage(\n componentUrl: string,\n ): Promise<{ extractedFile: string; lastTimestamp: Date }> {\n const packageUrlHash = toSha256(componentUrl);\n const fullCacheDir = await fs.ensureCacheDir(cacheSubDir);\n const extractedFile = upath.join(fullCacheDir, `${packageUrlHash}.txt`);\n let lastTimestamp = await getFileCreationTime(extractedFile);\n\n const compression = 'gz';\n const compressedFile = upath.join(\n fullCacheDir,\n `${nanoid()}_${packageUrlHash}.${compression}`,\n );\n\n const wasUpdated = await this.downloadPackageFile(\n componentUrl,\n compression,\n compressedFile,\n lastTimestamp,\n );\n\n if (wasUpdated || !lastTimestamp) {\n try {\n await extract(compressedFile, compression, extractedFile);\n lastTimestamp = await getFileCreationTime(extractedFile);\n } catch (error) {\n logger.warn(\n {\n compressedFile,\n componentUrl,\n compression,\n error: error.message,\n },\n 'Failed to extract package file from compressed file',\n );\n } finally {\n await fs.rmCache(compressedFile);\n }\n }\n\n if (!lastTimestamp) {\n //extracting went wrong\n throw new Error('Missing metadata in extracted package index file!');\n }\n\n return { extractedFile, lastTimestamp };\n }\n\n /**\n * Downloads a package file if it has been modified since the last download timestamp.\n *\n * @param basePackageUrl - The base URL of the package.\n * @param compression - The compression method used (e.g., 'gz').\n * @param compressedFile - The path where the compressed file will be saved.\n * @param lastDownloadTimestamp - The timestamp of the last download.\n * @returns True if the file was downloaded, otherwise false.\n */\n private async downloadPackageFile(\n basePackageUrl: string,\n compression: string,\n compressedFile: string,\n lastDownloadTimestamp?: Date,\n ): Promise<boolean> {\n const baseSuiteUrl = getBaseSuiteUrl(basePackageUrl);\n const packageUrl = joinUrlParts(basePackageUrl, `Packages.${compression}`);\n let needsToDownload = true;\n\n if (lastDownloadTimestamp) {\n needsToDownload = await this.checkIfModified(\n packageUrl,\n lastDownloadTimestamp,\n );\n }\n\n if (!needsToDownload) {\n logger.debug(`No need to download ${packageUrl}, file is up to date.`);\n return false;\n }\n const readStream = this.http.stream(packageUrl);\n const writeStream = fs.createCacheWriteStream(compressedFile);\n await fs.pipeline(readStream, writeStream);\n logger.debug(\n { url: packageUrl, targetFile: compressedFile },\n 'Downloading Debian package file',\n );\n\n let inReleaseContent = '';\n\n try {\n inReleaseContent = await this.fetchInReleaseFile(baseSuiteUrl);\n } catch (error) {\n // This is expected to fail for Artifactory if GPG verification is not enabled\n logger.debug(\n { url: baseSuiteUrl, err: error },\n 'Could not fetch InRelease file',\n );\n }\n\n if (inReleaseContent) {\n const actualChecksum = await computeFileChecksum(compressedFile);\n const expectedChecksum = parseChecksumsFromInRelease(\n inReleaseContent,\n // path to the Package.gz file\n packageUrl.replace(`${baseSuiteUrl}/`, ''),\n );\n if (actualChecksum !== expectedChecksum) {\n await fs.rmCache(compressedFile);\n throw new Error('SHA256 checksum validation failed');\n }\n }\n\n return needsToDownload;\n }\n\n /**\n * Fetches the content of the InRelease file from the given base suite URL.\n *\n * @param baseReleaseUrl - The base URL of the suite (e.g., 'https://deb.debian.org/debian/dists/bullseye').\n * @returns resolves to the content of the InRelease file.\n * @throws An error if the InRelease file could not be downloaded.\n */\n private async fetchInReleaseFile(baseReleaseUrl: string): Promise<string> {\n const inReleaseUrl = joinUrlParts(baseReleaseUrl, 'InRelease');\n const response = await this.http.getText(inReleaseUrl);\n return response.body;\n }\n\n /**\n * Checks if a packageUrl content has been modified since the specified timestamp.\n *\n * @param packageUrl - The URL to check.\n * @param lastDownloadTimestamp - The timestamp of the last download.\n * @returns True if the content has been modified, otherwise false.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since\n */\n private async checkIfModified(\n packageUrl: string,\n lastDownloadTimestamp: Date,\n ): Promise<boolean> {\n const options: HttpOptions = {\n headers: {\n 'If-Modified-Since': lastDownloadTimestamp.toUTCString(),\n },\n };\n\n try {\n const response = await this.http.head(packageUrl, options);\n return response.statusCode !== 304;\n } catch (error) {\n logger.warn(\n { packageUrl, lastDownloadTimestamp, errorMessage: error.message },\n 'Could not determine if package file is modified since last download',\n );\n return true; // Assume it needs to be downloaded if check fails\n }\n }\n\n /**\n * Parses the extracted package index file.\n *\n * @param extractedFile - The path to the extracted package file.\n * @param lastTimestamp - The timestamp of the last modification.\n * @returns a list of packages with minimal Metadata.\n */\n @cache({\n namespace: `datasource-${DebDatasource.id}`,\n key: (extractedFile: string, lastTimestamp: Date) =>\n `${extractedFile}:${lastTimestamp.getTime()}`,\n ttlMinutes: 24 * 60,\n })\n async parseExtractedPackageIndex(\n extractedFile: string,\n _lastTimestamp: Date,\n ): Promise<Record<string, PackageDescription[]>> {\n // read line by line to avoid high memory consumption as the extracted Packages\n // files can be multiple MBs in size\n const rl = readline.createInterface({\n input: fs.createCacheReadStream(extractedFile),\n terminal: false,\n });\n\n let currentPackage: PackageDescription = {};\n // A Package Index can contain multiple Versions of the package on private Artifactory (e.g. Jfrog)\n const allPackages: Record<string, PackageDescription[]> = {};\n\n for await (const line of rl) {\n if (line === '') {\n // All information of the package are available, add to the list of packages\n if (requiredPackageKeys.every((key) => key in currentPackage)) {\n if (!allPackages[currentPackage.Package!]) {\n allPackages[currentPackage.Package!] = [];\n }\n allPackages[currentPackage.Package!].push(currentPackage);\n currentPackage = {};\n }\n } else {\n for (const key of packageKeys) {\n if (line.startsWith(`${key}:`)) {\n currentPackage[key] = line.substring(key.length + 1).trim();\n break;\n }\n }\n }\n }\n\n // Check the last package after file reading is complete\n if (requiredPackageKeys.every((key) => key in currentPackage)) {\n if (!allPackages[currentPackage.Package!]) {\n allPackages[currentPackage.Package!] = [];\n }\n allPackages[currentPackage.Package!].push(currentPackage);\n }\n\n return allPackages;\n }\n\n @cache({\n namespace: `datasource-${DebDatasource.id}`,\n key: (componentUrl: string) => componentUrl,\n })\n async getPackageIndex(\n componentUrl: string,\n ): Promise<Record<string, PackageDescription[]>> {\n const { extractedFile, lastTimestamp } =\n await this.downloadAndExtractPackage(componentUrl);\n return await this.parseExtractedPackageIndex(extractedFile, lastTimestamp);\n }\n\n /**\n * Fetches the release information for a given package from the registry URL.\n *\n * @param config - Configuration for fetching releases.\n * @returns The release result if the package is found, otherwise null.\n */\n @cache({\n namespace: `datasource-${DebDatasource.id}`,\n key: ({ registryUrl, packageName }: GetReleasesConfig) =>\n `${registryUrl}:${packageName}`,\n })\n async getReleases({\n registryUrl,\n packageName,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n\n const componentUrls = constructComponentUrls(registryUrl);\n let aggregatedRelease: ReleaseResult | null = null;\n\n for (const componentUrl of componentUrls) {\n try {\n const packageIndex = await this.getPackageIndex(componentUrl);\n const parsedPackages = packageIndex[packageName];\n\n if (parsedPackages) {\n const newRelease = formatReleaseResult(parsedPackages);\n if (aggregatedRelease === null) {\n aggregatedRelease = newRelease;\n } else {\n if (!releaseMetaInformationMatches(aggregatedRelease, newRelease)) {\n logger.warn(\n { packageName },\n 'Package occurred in more than one repository with different meta information. Aggregating releases anyway.',\n );\n }\n aggregatedRelease.releases.push(...newRelease.releases);\n }\n }\n } catch (error) {\n logger.debug(\n { componentUrl, error },\n 'Skipping component due to an error',\n );\n }\n }\n\n return aggregatedRelease;\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/deb/index.ts"],"names":[],"mappings":"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","sourcesContent":["import readline from 'readline';\nimport { logger } from '../../../logger';\nimport { cache } from '../../../util/cache/package/decorator';\nimport * as fs from '../../../util/fs';\nimport { Datasource } from '../datasource';\nimport type { GetReleasesConfig, ReleaseResult } from '../types';\nimport { packageKeys, requiredPackageKeys } from './common';\nimport { downloadAndExtractPackage } from './packages';\nimport { formatReleaseResult, releaseMetaInformationMatches } from './release';\nimport type { PackageDescription } from './types';\nimport { constructComponentUrls } from './url';\n\nexport class DebDatasource extends Datasource {\n static readonly id = 'deb';\n\n constructor() {\n super(DebDatasource.id);\n }\n\n /**\n * Users are able to specify custom Debian repositories as long as they follow\n * the Debian package repository format as specified here\n * @see{https://wiki.debian.org/DebianRepository/Format}\n */\n override readonly customRegistrySupport = true;\n\n /**\n * Users can specify multiple upstream repositories and the datasource will aggregate the release\n * @example\n * When specifying multiple dependencies both internal and external dependencies from internal/external artifactory\n */\n override readonly registryStrategy = 'merge';\n\n /**\n * The original apt source list file format is\n * deb uri distribution [component1] [component2] [...]\n * @see{https://wiki.debian.org/DebianRepository/Format}\n *\n * However, for Renovate, we require the registry URLs to be\n * valid URLs which is why the parameters are encoded in the URL.\n *\n * The following query parameters are required:\n * - components: comma separated list of components\n * - suite: stable, oldstable or other alias for a release, either this or release must be given like buster\n * - binaryArch: e.g. amd64 resolves to http://deb.debian.org/debian/dists/stable/non-free/binary-amd64/\n */\n override readonly defaultRegistryUrls = [\n 'https://deb.debian.org/debian?suite=stable&components=main,contrib,non-free&binaryArch=amd64',\n ];\n\n override readonly defaultVersioning = 'deb';\n\n /**\n * Parses the extracted package index file.\n *\n * @param extractedFile - The path to the extracted package file.\n * @param lastTimestamp - The timestamp of the last modification.\n * @returns a list of packages with minimal Metadata.\n */\n @cache({\n namespace: `datasource-${DebDatasource.id}`,\n key: (extractedFile: string, lastTimestamp: Date) =>\n `${extractedFile}:${lastTimestamp.getTime()}`,\n ttlMinutes: 24 * 60,\n })\n async parseExtractedPackageIndex(\n extractedFile: string,\n _lastTimestamp: Date,\n ): Promise<Record<string, PackageDescription[]>> {\n // read line by line to avoid high memory consumption as the extracted Packages\n // files can be multiple MBs in size\n const rl = readline.createInterface({\n input: fs.createCacheReadStream(extractedFile),\n terminal: false,\n });\n\n let currentPackage: PackageDescription = {};\n // A Package Index can contain multiple Versions of the package on private Artifactory (e.g. Jfrog)\n const allPackages: Record<string, PackageDescription[]> = {};\n\n for await (const line of rl) {\n if (line === '') {\n // All information of the package are available, add to the list of packages\n if (requiredPackageKeys.every((key) => key in currentPackage)) {\n if (!allPackages[currentPackage.Package!]) {\n allPackages[currentPackage.Package!] = [];\n }\n allPackages[currentPackage.Package!].push(currentPackage);\n currentPackage = {};\n }\n } else {\n for (const key of packageKeys) {\n if (line.startsWith(`${key}:`)) {\n currentPackage[key] = line.substring(key.length + 1).trim();\n break;\n }\n }\n }\n }\n\n // Check the last package after file reading is complete\n if (requiredPackageKeys.every((key) => key in currentPackage)) {\n if (!allPackages[currentPackage.Package!]) {\n allPackages[currentPackage.Package!] = [];\n }\n allPackages[currentPackage.Package!].push(currentPackage);\n }\n\n return allPackages;\n }\n\n @cache({\n namespace: `datasource-${DebDatasource.id}`,\n key: (componentUrl: string) => componentUrl,\n })\n async getPackageIndex(\n componentUrl: string,\n ): Promise<Record<string, PackageDescription[]>> {\n const { extractedFile, lastTimestamp } = await downloadAndExtractPackage(\n componentUrl,\n this.http,\n );\n return await this.parseExtractedPackageIndex(extractedFile, lastTimestamp);\n }\n\n /**\n * Fetches the release information for a given package from the registry URL.\n *\n * @param config - Configuration for fetching releases.\n * @returns The release result if the package is found, otherwise null.\n */\n @cache({\n namespace: `datasource-${DebDatasource.id}`,\n key: ({ registryUrl, packageName }: GetReleasesConfig) =>\n `${registryUrl}:${packageName}`,\n })\n async getReleases({\n registryUrl,\n packageName,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n\n const componentUrls = constructComponentUrls(registryUrl);\n let aggregatedRelease: ReleaseResult | null = null;\n\n for (const componentUrl of componentUrls) {\n try {\n const packageIndex = await this.getPackageIndex(componentUrl);\n const parsedPackages = packageIndex[packageName];\n\n if (parsedPackages) {\n const newRelease = formatReleaseResult(parsedPackages);\n if (aggregatedRelease === null) {\n aggregatedRelease = newRelease;\n } else {\n if (!releaseMetaInformationMatches(aggregatedRelease, newRelease)) {\n logger.warn(\n { packageName },\n 'Package occurred in more than one repository with different meta information. Aggregating releases anyway.',\n );\n }\n aggregatedRelease.releases.push(...newRelease.releases);\n }\n }\n } catch (error) {\n logger.debug(\n { componentUrl, error },\n 'Skipping component due to an error',\n );\n }\n }\n\n return aggregatedRelease;\n }\n}\n"]}
@@ -0,0 +1,30 @@
1
+ import type { Http } from '../../../util/http';
2
+ /**
3
+ * Downloads and extracts a package file from a component URL.
4
+ *
5
+ * @param componentUrl - The URL of the component.
6
+ * @returns The path to the extracted file and the last modification timestamp.
7
+ * @throws Will throw an error if no valid compression method is found.
8
+ */
9
+ export declare function downloadAndExtractPackage(componentUrl: string, http: Http): Promise<{
10
+ extractedFile: string;
11
+ lastTimestamp: Date;
12
+ }>;
13
+ /**
14
+ * Downloads a package file if it has been modified since the last download timestamp.
15
+ *
16
+ * @param basePackageUrl - The base URL of the package.
17
+ * @param compression - The compression method used (e.g., 'gz').
18
+ * @param compressedFile - The path where the compressed file will be saved.
19
+ * @param lastDownloadTimestamp - The timestamp of the last download.
20
+ * @returns True if the file was downloaded, otherwise false.
21
+ */
22
+ export declare function downloadPackageFile(basePackageUrl: string, compression: string, compressedFile: string, http: Http, lastDownloadTimestamp?: Date): Promise<boolean>;
23
+ /**
24
+ * Fetches the content of the InRelease file from the given base suite URL.
25
+ *
26
+ * @param baseReleaseUrl - The base URL of the suite (e.g., 'https://deb.debian.org/debian/dists/bullseye').
27
+ * @returns resolves to the content of the InRelease file.
28
+ * @throws An error if the InRelease file could not be downloaded.
29
+ */
30
+ export declare function fetchInReleaseFile(baseReleaseUrl: string, http: Http): Promise<string>;
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.downloadAndExtractPackage = downloadAndExtractPackage;
4
+ exports.downloadPackageFile = downloadPackageFile;
5
+ exports.fetchInReleaseFile = fetchInReleaseFile;
6
+ const tslib_1 = require("tslib");
7
+ const nanoid_1 = require("nanoid");
8
+ const upath_1 = tslib_1.__importDefault(require("upath"));
9
+ const logger_1 = require("../../../logger");
10
+ const fs = tslib_1.__importStar(require("../../../util/fs"));
11
+ const hash_1 = require("../../../util/hash");
12
+ const url_1 = require("../../../util/url");
13
+ const checksum_1 = require("./checksum");
14
+ const common_1 = require("./common");
15
+ const url_2 = require("./url");
16
+ const utils_1 = require("./utils");
17
+ /**
18
+ * Downloads and extracts a package file from a component URL.
19
+ *
20
+ * @param componentUrl - The URL of the component.
21
+ * @returns The path to the extracted file and the last modification timestamp.
22
+ * @throws Will throw an error if no valid compression method is found.
23
+ */
24
+ async function downloadAndExtractPackage(componentUrl, http) {
25
+ const packageUrlHash = (0, hash_1.toSha256)(componentUrl);
26
+ const fullCacheDir = await fs.ensureCacheDir(common_1.cacheSubDir);
27
+ const extractedFile = upath_1.default.join(fullCacheDir, `${packageUrlHash}.txt`);
28
+ let lastTimestamp = await (0, utils_1.getFileCreationTime)(extractedFile);
29
+ const compression = 'gz';
30
+ const compressedFile = upath_1.default.join(fullCacheDir, `${(0, nanoid_1.nanoid)()}_${packageUrlHash}.${compression}`);
31
+ const wasUpdated = await downloadPackageFile(componentUrl, compression, compressedFile, http, lastTimestamp);
32
+ if (wasUpdated || !lastTimestamp) {
33
+ try {
34
+ await (0, utils_1.extract)(compressedFile, compression, extractedFile);
35
+ lastTimestamp = await (0, utils_1.getFileCreationTime)(extractedFile);
36
+ }
37
+ catch (error) {
38
+ logger_1.logger.warn({
39
+ compressedFile,
40
+ componentUrl,
41
+ compression,
42
+ error: error.message,
43
+ }, 'Failed to extract package file from compressed file');
44
+ }
45
+ finally {
46
+ await fs.rmCache(compressedFile);
47
+ }
48
+ }
49
+ if (!lastTimestamp) {
50
+ //extracting went wrong
51
+ throw new Error('Missing metadata in extracted package index file!');
52
+ }
53
+ return { extractedFile, lastTimestamp };
54
+ }
55
+ /**
56
+ * Downloads a package file if it has been modified since the last download timestamp.
57
+ *
58
+ * @param basePackageUrl - The base URL of the package.
59
+ * @param compression - The compression method used (e.g., 'gz').
60
+ * @param compressedFile - The path where the compressed file will be saved.
61
+ * @param lastDownloadTimestamp - The timestamp of the last download.
62
+ * @returns True if the file was downloaded, otherwise false.
63
+ */
64
+ async function downloadPackageFile(basePackageUrl, compression, compressedFile, http, lastDownloadTimestamp) {
65
+ const baseSuiteUrl = (0, url_2.getBaseSuiteUrl)(basePackageUrl);
66
+ const packageUrl = (0, url_1.joinUrlParts)(basePackageUrl, `Packages.${compression}`);
67
+ let needsToDownload = true;
68
+ if (lastDownloadTimestamp) {
69
+ needsToDownload = await (0, url_2.checkIfModified)(packageUrl, lastDownloadTimestamp, http);
70
+ }
71
+ if (!needsToDownload) {
72
+ logger_1.logger.debug(`No need to download ${packageUrl}, file is up to date.`);
73
+ return false;
74
+ }
75
+ const readStream = http.stream(packageUrl);
76
+ const writeStream = fs.createCacheWriteStream(compressedFile);
77
+ await fs.pipeline(readStream, writeStream);
78
+ logger_1.logger.debug({ url: packageUrl, targetFile: compressedFile }, 'Downloading Debian package file');
79
+ let inReleaseContent = '';
80
+ try {
81
+ inReleaseContent = await fetchInReleaseFile(baseSuiteUrl, http);
82
+ }
83
+ catch (error) {
84
+ // This is expected to fail for Artifactory if GPG verification is not enabled
85
+ logger_1.logger.debug({ url: baseSuiteUrl, err: error }, 'Could not fetch InRelease file');
86
+ }
87
+ if (inReleaseContent) {
88
+ const actualChecksum = await (0, checksum_1.computeFileChecksum)(compressedFile);
89
+ const expectedChecksum = (0, checksum_1.parseChecksumsFromInRelease)(inReleaseContent,
90
+ // path to the Package.gz file
91
+ packageUrl.replace(`${baseSuiteUrl}/`, ''));
92
+ if (actualChecksum !== expectedChecksum) {
93
+ await fs.rmCache(compressedFile);
94
+ throw new Error('SHA256 checksum validation failed');
95
+ }
96
+ }
97
+ return needsToDownload;
98
+ }
99
+ /**
100
+ * Fetches the content of the InRelease file from the given base suite URL.
101
+ *
102
+ * @param baseReleaseUrl - The base URL of the suite (e.g., 'https://deb.debian.org/debian/dists/bullseye').
103
+ * @returns resolves to the content of the InRelease file.
104
+ * @throws An error if the InRelease file could not be downloaded.
105
+ */
106
+ async function fetchInReleaseFile(baseReleaseUrl, http) {
107
+ const inReleaseUrl = (0, url_1.joinUrlParts)(baseReleaseUrl, 'InRelease');
108
+ const response = await http.getText(inReleaseUrl);
109
+ return response.body;
110
+ }
111
+ //# sourceMappingURL=packages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packages.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/deb/packages.ts"],"names":[],"mappings":"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","sourcesContent":["import { nanoid } from 'nanoid';\nimport upath from 'upath';\nimport { logger } from '../../../logger';\nimport * as fs from '../../../util/fs';\nimport { toSha256 } from '../../../util/hash';\nimport type { Http } from '../../../util/http';\nimport { joinUrlParts } from '../../../util/url';\nimport { computeFileChecksum, parseChecksumsFromInRelease } from './checksum';\nimport { cacheSubDir } from './common';\nimport { checkIfModified, getBaseSuiteUrl } from './url';\nimport { extract, getFileCreationTime } from './utils';\n\n/**\n * Downloads and extracts a package file from a component URL.\n *\n * @param componentUrl - The URL of the component.\n * @returns The path to the extracted file and the last modification timestamp.\n * @throws Will throw an error if no valid compression method is found.\n */\nexport async function downloadAndExtractPackage(\n componentUrl: string,\n http: Http,\n): Promise<{ extractedFile: string; lastTimestamp: Date }> {\n const packageUrlHash = toSha256(componentUrl);\n const fullCacheDir = await fs.ensureCacheDir(cacheSubDir);\n const extractedFile = upath.join(fullCacheDir, `${packageUrlHash}.txt`);\n let lastTimestamp = await getFileCreationTime(extractedFile);\n\n const compression = 'gz';\n const compressedFile = upath.join(\n fullCacheDir,\n `${nanoid()}_${packageUrlHash}.${compression}`,\n );\n\n const wasUpdated = await downloadPackageFile(\n componentUrl,\n compression,\n compressedFile,\n http,\n lastTimestamp,\n );\n\n if (wasUpdated || !lastTimestamp) {\n try {\n await extract(compressedFile, compression, extractedFile);\n lastTimestamp = await getFileCreationTime(extractedFile);\n } catch (error) {\n logger.warn(\n {\n compressedFile,\n componentUrl,\n compression,\n error: error.message,\n },\n 'Failed to extract package file from compressed file',\n );\n } finally {\n await fs.rmCache(compressedFile);\n }\n }\n\n if (!lastTimestamp) {\n //extracting went wrong\n throw new Error('Missing metadata in extracted package index file!');\n }\n\n return { extractedFile, lastTimestamp };\n}\n\n/**\n * Downloads a package file if it has been modified since the last download timestamp.\n *\n * @param basePackageUrl - The base URL of the package.\n * @param compression - The compression method used (e.g., 'gz').\n * @param compressedFile - The path where the compressed file will be saved.\n * @param lastDownloadTimestamp - The timestamp of the last download.\n * @returns True if the file was downloaded, otherwise false.\n */\nexport async function downloadPackageFile(\n basePackageUrl: string,\n compression: string,\n compressedFile: string,\n http: Http,\n lastDownloadTimestamp?: Date,\n): Promise<boolean> {\n const baseSuiteUrl = getBaseSuiteUrl(basePackageUrl);\n const packageUrl = joinUrlParts(basePackageUrl, `Packages.${compression}`);\n let needsToDownload = true;\n\n if (lastDownloadTimestamp) {\n needsToDownload = await checkIfModified(\n packageUrl,\n lastDownloadTimestamp,\n http,\n );\n }\n\n if (!needsToDownload) {\n logger.debug(`No need to download ${packageUrl}, file is up to date.`);\n return false;\n }\n const readStream = http.stream(packageUrl);\n const writeStream = fs.createCacheWriteStream(compressedFile);\n await fs.pipeline(readStream, writeStream);\n logger.debug(\n { url: packageUrl, targetFile: compressedFile },\n 'Downloading Debian package file',\n );\n\n let inReleaseContent = '';\n\n try {\n inReleaseContent = await fetchInReleaseFile(baseSuiteUrl, http);\n } catch (error) {\n // This is expected to fail for Artifactory if GPG verification is not enabled\n logger.debug(\n { url: baseSuiteUrl, err: error },\n 'Could not fetch InRelease file',\n );\n }\n\n if (inReleaseContent) {\n const actualChecksum = await computeFileChecksum(compressedFile);\n const expectedChecksum = parseChecksumsFromInRelease(\n inReleaseContent,\n // path to the Package.gz file\n packageUrl.replace(`${baseSuiteUrl}/`, ''),\n );\n if (actualChecksum !== expectedChecksum) {\n await fs.rmCache(compressedFile);\n throw new Error('SHA256 checksum validation failed');\n }\n }\n\n return needsToDownload;\n}\n\n/**\n * Fetches the content of the InRelease file from the given base suite URL.\n *\n * @param baseReleaseUrl - The base URL of the suite (e.g., 'https://deb.debian.org/debian/dists/bullseye').\n * @returns resolves to the content of the InRelease file.\n * @throws An error if the InRelease file could not be downloaded.\n */\nexport async function fetchInReleaseFile(\n baseReleaseUrl: string,\n http: Http,\n): Promise<string> {\n const inReleaseUrl = joinUrlParts(baseReleaseUrl, 'InRelease');\n const response = await http.getText(inReleaseUrl);\n return response.body;\n}\n"]}
@@ -1,3 +1,4 @@
1
+ import type { Http } from '../../../util/http';
1
2
  /**
2
3
  * Extracts the base suite URL from a package URL by removing the last two path segments.
3
4
  *
@@ -17,3 +18,42 @@ export declare function getBaseSuiteUrl(basePackageUrl: string): string;
17
18
  * @throws Will throw an error if required parameters are missing from the URL.
18
19
  */
19
20
  export declare function constructComponentUrls(registryUrl: string): string[];
21
+ /**
22
+ * Checks if a packageUrl content has been modified since the specified timestamp.
23
+ *
24
+ * @param packageUrl - The URL to check.
25
+ * @param lastDownloadTimestamp - The timestamp of the last download.
26
+ * @returns True if the content has been modified, otherwise false.
27
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since
28
+ */
29
+ export declare function checkIfModified(packageUrl: string, lastDownloadTimestamp: Date, http: Http): Promise<boolean>;
30
+ /**
31
+ * Constructs a URL for accessing the component directory for a specific release and architecture.
32
+ *
33
+ * @param baseUrl - The base URL of the repository.
34
+ * @param release - The release name or codename (e.g., 'buster', 'bullseye').
35
+ * @param component - The component name (e.g., 'main', 'contrib', 'non-free').
36
+ * @param arch - The architecture name (e.g., 'amd64', 'i386').
37
+ * @returns The complete URL to the component directory.
38
+ */
39
+ export declare function getComponentUrl(baseUrl: string, release: string, component: string, arch: string): string;
40
+ /**
41
+ * Constructs a URL for accessing the Packages.gz file for a specific component, release, and architecture.
42
+ *
43
+ * @param baseUrl - The base URL of the repository.
44
+ * @param release - The release name or codename (e.g., 'buster', 'bullseye').
45
+ * @param component - The component name (e.g., 'main', 'contrib', 'non-free').
46
+ * @param arch - The architecture name (e.g., 'amd64', 'i386').
47
+ * @returns The complete URL to the Packages.gz file.
48
+ */
49
+ export declare function getPackageUrl(baseUrl: string, release: string, component: string, arch: string): string;
50
+ /**
51
+ * Constructs a URL used generating the component url with specific release, components, and architecture.
52
+ *
53
+ * @param baseUrl - The base URL of the repository.
54
+ * @param release - The release name or codename (e.g., 'buster', 'bullseye').
55
+ * @param components - An array of component names (e.g., ['main', 'contrib', 'non-free']).
56
+ * @param arch - The architecture name (e.g., 'amd64', 'i386').
57
+ * @returns The complete URL to the package registry.
58
+ */
59
+ export declare function getRegistryUrl(baseUrl: string, release: string, components: string[], arch: string): string;
@@ -2,6 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getBaseSuiteUrl = getBaseSuiteUrl;
4
4
  exports.constructComponentUrls = constructComponentUrls;
5
+ exports.checkIfModified = checkIfModified;
6
+ exports.getComponentUrl = getComponentUrl;
7
+ exports.getPackageUrl = getPackageUrl;
8
+ exports.getRegistryUrl = getRegistryUrl;
5
9
  const logger_1 = require("../../../logger");
6
10
  const url_1 = require("../../../util/url");
7
11
  /**
@@ -76,4 +80,63 @@ function getReleaseParam(url, optionalParams) {
76
80
  }
77
81
  throw new Error(`Missing one of suite query parameter`);
78
82
  }
83
+ /**
84
+ * Checks if a packageUrl content has been modified since the specified timestamp.
85
+ *
86
+ * @param packageUrl - The URL to check.
87
+ * @param lastDownloadTimestamp - The timestamp of the last download.
88
+ * @returns True if the content has been modified, otherwise false.
89
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since
90
+ */
91
+ async function checkIfModified(packageUrl, lastDownloadTimestamp, http) {
92
+ const options = {
93
+ headers: {
94
+ 'If-Modified-Since': lastDownloadTimestamp.toUTCString(),
95
+ },
96
+ };
97
+ try {
98
+ const response = await http.head(packageUrl, options);
99
+ return response.statusCode !== 304;
100
+ }
101
+ catch (error) {
102
+ logger_1.logger.warn({ packageUrl, lastDownloadTimestamp, errorMessage: error.message }, 'Could not determine if package file is modified since last download');
103
+ return true; // Assume it needs to be downloaded if check fails
104
+ }
105
+ }
106
+ /**
107
+ * Constructs a URL for accessing the component directory for a specific release and architecture.
108
+ *
109
+ * @param baseUrl - The base URL of the repository.
110
+ * @param release - The release name or codename (e.g., 'buster', 'bullseye').
111
+ * @param component - The component name (e.g., 'main', 'contrib', 'non-free').
112
+ * @param arch - The architecture name (e.g., 'amd64', 'i386').
113
+ * @returns The complete URL to the component directory.
114
+ */
115
+ function getComponentUrl(baseUrl, release, component, arch) {
116
+ return `${baseUrl}/debian/dists/${release}/${component}/binary-${arch}`;
117
+ }
118
+ /**
119
+ * Constructs a URL for accessing the Packages.gz file for a specific component, release, and architecture.
120
+ *
121
+ * @param baseUrl - The base URL of the repository.
122
+ * @param release - The release name or codename (e.g., 'buster', 'bullseye').
123
+ * @param component - The component name (e.g., 'main', 'contrib', 'non-free').
124
+ * @param arch - The architecture name (e.g., 'amd64', 'i386').
125
+ * @returns The complete URL to the Packages.gz file.
126
+ */
127
+ function getPackageUrl(baseUrl, release, component, arch) {
128
+ return `${getComponentUrl(baseUrl, release, component, arch)}/Packages.gz`;
129
+ }
130
+ /**
131
+ * Constructs a URL used generating the component url with specific release, components, and architecture.
132
+ *
133
+ * @param baseUrl - The base URL of the repository.
134
+ * @param release - The release name or codename (e.g., 'buster', 'bullseye').
135
+ * @param components - An array of component names (e.g., ['main', 'contrib', 'non-free']).
136
+ * @param arch - The architecture name (e.g., 'amd64', 'i386').
137
+ * @returns The complete URL to the package registry.
138
+ */
139
+ function getRegistryUrl(baseUrl, release, components, arch) {
140
+ return `${baseUrl}/debian?suite=${release}&components=${components.join(',')}&binaryArch=${arch}`;
141
+ }
79
142
  //# sourceMappingURL=url.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"url.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/deb/url.ts"],"names":[],"mappings":";;AAaA,0CAGC;AASD,wDA+BC;AAxDD,4CAAyC;AACzC,2CAAiD;AAEjD;;;;;;;;;GASG;AACH,SAAgB,eAAe,CAAC,cAAsB;IACpD,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3C,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,sBAAsB,CAAC,WAAmB;IACxD,MAAM,eAAe,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IACrD,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAE7C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;QACjC,oBAAoB,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;QAE3C,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAElE,2DAA2D;QAC3D,CAAC,GAAG,eAAe,EAAE,GAAG,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CACzD,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAC/B,CAAC;QAEF,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAClC,IAAA,kBAAY,EACV,GAAG,CAAC,QAAQ,EAAE,EACd,OAAO,EACP,KAAK,EACL,SAAS,EACT,UAAU,UAAU,EAAE,CACvB,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,yBAAyB,WAAW,yBAAyB,KAAK,CAAC,OAAO,EAAE,CAC7E,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,oBAAoB,CAAC,GAAQ,EAAE,cAAwB;IAC9D,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,qCAAqC,KAAK,GAAG,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,eAAe,CAAC,GAAQ,EAAE,cAAwB;IACzD,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,eAAM,CAAC,KAAK,CACV,wEAAwE,CACzE,CAAC;YACJ,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;AAC1D,CAAC","sourcesContent":["import { logger } from '../../../logger';\nimport { joinUrlParts } from '../../../util/url';\n\n/**\n * Extracts the base suite URL from a package URL by removing the last two path segments.\n *\n * @param basePackageUrl - The base URL of the package.\n * @returns The base suite URL.\n *\n * @example\n * // Returns 'https://deb.debian.org/debian/dists/bullseye'\n * getBaseReleaseUrl('https://deb.debian.org/debian/dists/bullseye/main/binary-amd64');\n */\nexport function getBaseSuiteUrl(basePackageUrl: string): string {\n const urlParts = basePackageUrl.split('/');\n return urlParts.slice(0, urlParts.length - 2).join('/');\n}\n\n/**\n * Constructs the component URLs from the given registry URL.\n *\n * @param registryUrl - The base URL of the registry.\n * @returns An array of component URLs.\n * @throws Will throw an error if required parameters are missing from the URL.\n */\nexport function constructComponentUrls(registryUrl: string): string[] {\n const REQUIRED_PARAMS = ['components', 'binaryArch'];\n const OPTIONAL_PARAMS = ['suite', 'release'];\n\n try {\n const url = new URL(registryUrl);\n validateUrlAndParams(url, REQUIRED_PARAMS);\n\n const suite = getReleaseParam(url, OPTIONAL_PARAMS);\n const binaryArch = url.searchParams.get('binaryArch');\n const components = url.searchParams.get('components')!.split(',');\n\n // Clean up URL search parameters for constructing new URLs\n [...REQUIRED_PARAMS, ...OPTIONAL_PARAMS].forEach((param) =>\n url.searchParams.delete(param),\n );\n\n return components.map((component) =>\n joinUrlParts(\n url.toString(),\n `dists`,\n suite,\n component,\n `binary-${binaryArch}`,\n ),\n );\n } catch (error) {\n throw new Error(\n `Invalid deb repo URL: ${registryUrl} - see documentation: ${error.message}`,\n );\n }\n}\n\n/**\n * Validates that the required parameters are present in the URL.\n *\n * @param url - The URL to validate.\n * @param requiredParams - The list of required query parameters.\n * @throws Will throw an error if a required parameter is missing.\n */\nfunction validateUrlAndParams(url: URL, requiredParams: string[]): void {\n for (const param of requiredParams) {\n if (!url.searchParams.has(param)) {\n throw new Error(`Missing required query parameter '${param}'`);\n }\n }\n}\n\n/**\n * Retrieves the suite parameter from the URL.\n *\n * @param url - The URL to retrieve the suite parameter from.\n * @param optionalParams - The list of optional query parameters.\n * @returns The value of the suite parameter.\n * @throws Will throw an error if none of the optional parameters are found.\n */\nfunction getReleaseParam(url: URL, optionalParams: string[]): string {\n for (const param of optionalParams) {\n const paramValue = url.searchParams.get(param);\n if (paramValue !== null) {\n if (param === 'release') {\n logger.debug(\n 'Deprecation notice. Use `suite` instead of `release` for deb repo URLs',\n );\n }\n return paramValue;\n }\n }\n throw new Error(`Missing one of suite query parameter`);\n}\n"]}
1
+ {"version":3,"file":"url.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/deb/url.ts"],"names":[],"mappings":"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","sourcesContent":["import { logger } from '../../../logger';\nimport type { Http, HttpOptions } from '../../../util/http';\nimport { joinUrlParts } from '../../../util/url';\n\n/**\n * Extracts the base suite URL from a package URL by removing the last two path segments.\n *\n * @param basePackageUrl - The base URL of the package.\n * @returns The base suite URL.\n *\n * @example\n * // Returns 'https://deb.debian.org/debian/dists/bullseye'\n * getBaseReleaseUrl('https://deb.debian.org/debian/dists/bullseye/main/binary-amd64');\n */\nexport function getBaseSuiteUrl(basePackageUrl: string): string {\n const urlParts = basePackageUrl.split('/');\n return urlParts.slice(0, urlParts.length - 2).join('/');\n}\n\n/**\n * Constructs the component URLs from the given registry URL.\n *\n * @param registryUrl - The base URL of the registry.\n * @returns An array of component URLs.\n * @throws Will throw an error if required parameters are missing from the URL.\n */\nexport function constructComponentUrls(registryUrl: string): string[] {\n const REQUIRED_PARAMS = ['components', 'binaryArch'];\n const OPTIONAL_PARAMS = ['suite', 'release'];\n\n try {\n const url = new URL(registryUrl);\n validateUrlAndParams(url, REQUIRED_PARAMS);\n\n const suite = getReleaseParam(url, OPTIONAL_PARAMS);\n const binaryArch = url.searchParams.get('binaryArch');\n const components = url.searchParams.get('components')!.split(',');\n\n // Clean up URL search parameters for constructing new URLs\n [...REQUIRED_PARAMS, ...OPTIONAL_PARAMS].forEach((param) =>\n url.searchParams.delete(param),\n );\n\n return components.map((component) =>\n joinUrlParts(\n url.toString(),\n `dists`,\n suite,\n component,\n `binary-${binaryArch}`,\n ),\n );\n } catch (error) {\n throw new Error(\n `Invalid deb repo URL: ${registryUrl} - see documentation: ${error.message}`,\n );\n }\n}\n\n/**\n * Validates that the required parameters are present in the URL.\n *\n * @param url - The URL to validate.\n * @param requiredParams - The list of required query parameters.\n * @throws Will throw an error if a required parameter is missing.\n */\nfunction validateUrlAndParams(url: URL, requiredParams: string[]): void {\n for (const param of requiredParams) {\n if (!url.searchParams.has(param)) {\n throw new Error(`Missing required query parameter '${param}'`);\n }\n }\n}\n\n/**\n * Retrieves the suite parameter from the URL.\n *\n * @param url - The URL to retrieve the suite parameter from.\n * @param optionalParams - The list of optional query parameters.\n * @returns The value of the suite parameter.\n * @throws Will throw an error if none of the optional parameters are found.\n */\nfunction getReleaseParam(url: URL, optionalParams: string[]): string {\n for (const param of optionalParams) {\n const paramValue = url.searchParams.get(param);\n if (paramValue !== null) {\n if (param === 'release') {\n logger.debug(\n 'Deprecation notice. Use `suite` instead of `release` for deb repo URLs',\n );\n }\n return paramValue;\n }\n }\n throw new Error(`Missing one of suite query parameter`);\n}\n\n/**\n * Checks if a packageUrl content has been modified since the specified timestamp.\n *\n * @param packageUrl - The URL to check.\n * @param lastDownloadTimestamp - The timestamp of the last download.\n * @returns True if the content has been modified, otherwise false.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since\n */\nexport async function checkIfModified(\n packageUrl: string,\n lastDownloadTimestamp: Date,\n http: Http,\n): Promise<boolean> {\n const options: HttpOptions = {\n headers: {\n 'If-Modified-Since': lastDownloadTimestamp.toUTCString(),\n },\n };\n\n try {\n const response = await http.head(packageUrl, options);\n return response.statusCode !== 304;\n } catch (error) {\n logger.warn(\n { packageUrl, lastDownloadTimestamp, errorMessage: error.message },\n 'Could not determine if package file is modified since last download',\n );\n return true; // Assume it needs to be downloaded if check fails\n }\n}\n\n/**\n * Constructs a URL for accessing the component directory for a specific release and architecture.\n *\n * @param baseUrl - The base URL of the repository.\n * @param release - The release name or codename (e.g., 'buster', 'bullseye').\n * @param component - The component name (e.g., 'main', 'contrib', 'non-free').\n * @param arch - The architecture name (e.g., 'amd64', 'i386').\n * @returns The complete URL to the component directory.\n */\nexport function getComponentUrl(\n baseUrl: string,\n release: string,\n component: string,\n arch: string,\n): string {\n return `${baseUrl}/debian/dists/${release}/${component}/binary-${arch}`;\n}\n\n/**\n * Constructs a URL for accessing the Packages.gz file for a specific component, release, and architecture.\n *\n * @param baseUrl - The base URL of the repository.\n * @param release - The release name or codename (e.g., 'buster', 'bullseye').\n * @param component - The component name (e.g., 'main', 'contrib', 'non-free').\n * @param arch - The architecture name (e.g., 'amd64', 'i386').\n * @returns The complete URL to the Packages.gz file.\n */\nexport function getPackageUrl(\n baseUrl: string,\n release: string,\n component: string,\n arch: string,\n): string {\n return `${getComponentUrl(baseUrl, release, component, arch)}/Packages.gz`;\n}\n\n/**\n * Constructs a URL used generating the component url with specific release, components, and architecture.\n *\n * @param baseUrl - The base URL of the repository.\n * @param release - The release name or codename (e.g., 'buster', 'bullseye').\n * @param components - An array of component names (e.g., ['main', 'contrib', 'non-free']).\n * @param arch - The architecture name (e.g., 'amd64', 'i386').\n * @returns The complete URL to the package registry.\n */\nexport function getRegistryUrl(\n baseUrl: string,\n release: string,\n components: string[],\n arch: string,\n): string {\n return `${baseUrl}/debian?suite=${release}&components=${components.join(',')}&binaryArch=${arch}`;\n}\n"]}
@@ -33,4 +33,4 @@ async function getFileCreationTime(filePath) {
33
33
  const stats = await fs.statCacheFile(filePath);
34
34
  return stats?.ctime;
35
35
  }
36
- //# sourceMappingURL=file.js.map
36
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/deb/utils.ts"],"names":[],"mappings":";;AAWA,0BAYC;AAQD,kDAKC;;AApCD,+BAAmC;AACnC,6DAAuC;AAEvC;;;;;;;GAOG;AACI,KAAK,UAAU,OAAO,CAC3B,cAAsB,EACtB,WAAmB,EACnB,UAAkB;IAElB,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,EAAE,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC;QACxD,MAAM,WAAW,GAAG,EAAE,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAC1D,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAA,kBAAW,GAAE,EAAE,WAAW,CAAC,CAAC;IACxD,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,qCAAqC,WAAW,GAAG,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,mBAAmB,CACvC,QAAgB;IAEhB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC/C,OAAO,KAAK,EAAE,KAAK,CAAC;AACtB,CAAC","sourcesContent":["import { createUnzip } from 'zlib';\nimport * as fs from '../../../util/fs';\n\n/**\n * Extracts the specified compressed file to the output file.\n *\n * @param compressedFile - The path to the compressed file.\n * @param compression - The compression method used (currently only 'gz' is supported).\n * @param outputFile - The path where the extracted content will be stored.\n * @throws Will throw an error if the compression method is unknown.\n */\nexport async function extract(\n compressedFile: string,\n compression: string,\n outputFile: string,\n): Promise<void> {\n if (compression === 'gz') {\n const source = fs.createCacheReadStream(compressedFile);\n const destination = fs.createCacheWriteStream(outputFile);\n await fs.pipeline(source, createUnzip(), destination);\n } else {\n throw new Error(`Unsupported compression standard '${compression}'`);\n }\n}\n\n/**\n * Checks if the file exists and retrieves its creation time.\n *\n * @param filePath - The path to the file.\n * @returns The creation time if the file exists, otherwise undefined.\n */\nexport async function getFileCreationTime(\n filePath: string,\n): Promise<Date | undefined> {\n const stats = await fs.statCacheFile(filePath);\n return stats?.ctime;\n}\n"]}
@@ -80,7 +80,7 @@ exports.hashMap.set('ocb', 'bff1864d0937341790cfe08833c39642f785844762669f5753ff
80
80
  exports.hashMap.set('osgi', 'dae012cd486843eb53da4b032105e54d18f4e7537bd59c5321313950dd108a95');
81
81
  exports.hashMap.set('pep621', 'b751518af0945d2ec0871c5dfb6f6e5190d1b9ffe4dfe7cfc14cf633cb629182');
82
82
  exports.hashMap.set('pep723', 'bf07d466ea1bc9513c8d2cb475fcca3bc9b61f2184bd9af0a7a28d45b6f57ecd');
83
- exports.hashMap.set('pip-compile', '7a8878bc3cfd1e8920557176d924230960010b5bac5abc2d00613886ffb487b5');
83
+ exports.hashMap.set('pip-compile', '19ea8b7c966f51a7516b114d2fcb099ddcfc96a8e437e525cab06a8b0f0ca1b7');
84
84
  exports.hashMap.set('pip_requirements', '140cca562c9264fc2570a1837994cec14c427651fba507f536adc084e48d8dec');
85
85
  exports.hashMap.set('pip_setup', '31b330d9666d61474326a761a3ce1479f9a189ef6838ecfee78843ff4c80af73');
86
86
  exports.hashMap.set('pipenv', '02b3c60e01f73dce4a439ba4aecfc97467dfae0ca5be9628548db4079a1e7b38');
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprint.generated.js","sourceRoot":"","sources":["../../../lib/modules/manager/fingerprint.generated.ts"],"names":[],"mappings":"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","sourcesContent":["export const hashMap = new Map<string, string>();\n\nhashMap.set('ansible','4c234d79f768392545924fa9b139f8d177f15b6aa46776cf063860a1d36e48c7');\nhashMap.set('ansible-galaxy','a211e40f5c8613986ac16bc8d5389ea23d145cd643091d1b951a7f65926e99ff');\nhashMap.set('argocd','37faccd3854254a2009d963f781e77cf6e5aca3719ffd7cae1fea3d02c153eed');\nhashMap.set('asdf','e7f29eb8157e6ca5928890a0cc2fc88d57ddcf7b426dad1c4f15386858d3cd6a');\nhashMap.set('azure-pipelines','0b741b2629f6d94589524ce9b3886765e5c5648c9b6d707bb0b5fede276f9c09');\nhashMap.set('batect','523e8d7a309b4814a02819371313b2dac3764eab64cabfaf1d58b6e89de4ce43');\nhashMap.set('batect-wrapper','90941650f810adb3d7abe476da7221ff3434aa9d09ffc3d310e35108f360f364');\nhashMap.set('bazel','19e8ee20f9882e3023b2126d4b8335693cae9fb2b908f59803bbdfd432055d28');\nhashMap.set('bazel-module','4e3d00184b146e5c0ad69433697076f722afe933701ab08676af13e47d289eac');\nhashMap.set('bazelisk','6fbef61d534724ff259ea6e4fc1cd0a3d5a46d740c375128fa59b225daddd39f');\nhashMap.set('bicep','fbbd74998411012cfba829526701109d1fc184ade0cb11a28e4ca2956174b0f1');\nhashMap.set('bitbucket-pipelines','98c0d715a7eb4e41b8231091b83385f325966373f37dc7d6bc10b1febb6f605e');\nhashMap.set('bitrise','d18d2dcd356e19c4cd94912511a88636198c23b64e54f31da273be11044970cf');\nhashMap.set('buildkite','ac713ce38da057ff3ceb08d092291356dfc74f5b33b75f010bb9db1a211439c0');\nhashMap.set('buildpacks','cc8bbe937416a012df36a5c7ab01ae3cdedbed03615549bbe9f0f27fa40a150b');\nhashMap.set('bun','940ad758faff772794f754d190725e9339e9139a0df0f5e16f46884ef31d0cfc');\nhashMap.set('bun-version','49194d7fcb6b7bdd7e7a1264f71532bb2be8142d48478bf74716f7a9d4b306b9');\nhashMap.set('bundler','ca2d34c35ad8aaa5881f925933d743f948d712aa20ad51b187bcc1830df8c47c');\nhashMap.set('cake','a04160b352550cb470acb62f9a532361842c12f2ffbcd473bffca3de024522d9');\nhashMap.set('cargo','cdd6020c52aacaf309d528b1ed05f92bc4e3b2b45b7e613950d026d6798fea3a');\nhashMap.set('cdnurl','70281459e771df007787fc25dba16e4d5109865f97209dcf4f572ddd287d538a');\nhashMap.set('circleci','c7c7a1b71385f0ea7cf1e9fc24c37a1d5dabf13d6952e1e3b2179861b55f4e44');\nhashMap.set('cloudbuild','e4f926bfb907220e97dce98335837c52b4e0fe66d813593a7e572736acfc53f7');\nhashMap.set('cocoapods','a3be5ff98669b788cc796ac8f51111fa5cbf98dc9f0998c6856727ac9060c3ad');\nhashMap.set('composer','d1de64c4276d4abd41a2007346d1c2b81735675ac4036b337beb25f37813c622');\nhashMap.set('conan','4df92ebfa53ec6b7103030316ff70822d18f73cca8c71f2dca1d71c0d00b9353');\nhashMap.set('copier','aab6bf750a30b9efdbbee15b75e04e27383b2722ff7a64f238333a683ad442ca');\nhashMap.set('cpanfile','9b354db9666eee2485b27e44a6e61eaadc86ec2f2c6af9bb7bbc9fab54f31642');\nhashMap.set('crossplane','76261ff27b38f9850ee1a3a7e95168abefd96b4736f2cf04a7343e16827b42d8');\nhashMap.set('crow','6b8b61da3622456dfc0768978c7bfe991b63d9c6f67080c8840569cd95a6219b');\nhashMap.set('deps-edn','4e4b76596229f23524086c1dca79c52159ae3ec094e28d8a59bd8a1926458046');\nhashMap.set('devbox','7acedf4c5d3bef2f6c75c8b490c47f18fb03597680b46e4670ae5fe6f9873960');\nhashMap.set('devcontainer','e9982b5ff8aeac8fefb40dc363d3ab35f58af8c08b91eb45d22937a8c60447bb');\nhashMap.set('docker-compose','0c867e3aa14ae7dfc673eef348b2086ae2e36cbebfd1827e031a8030f9295276');\nhashMap.set('dockerfile','0bddc097addf84db6aa48d985567f247ca89affe1265ac09e6cd9635f61710f9');\nhashMap.set('droneci','f2a98fcece07b462baaceb28cd6904e080cb1ab0727fcd7403bea5ffd2e05239');\nhashMap.set('fleet','642e8e7ab739fba65bce7222b6f3e80fe44806c4190c8e93c5bcab23d44e9fd4');\nhashMap.set('flux','3b87b351f98c11ca0e6cb275deb708dc9bf601a7e578f7a3a7e83fe6e15eb540');\nhashMap.set('fvm','aa154dd5ffe3caced30713a9a55967360b7a0f35edd2fc06bd6f3e73c5c87570');\nhashMap.set('git-submodules','4294974c9a4d64e9a34998906607664c8056638cc998c84895706585706746fe');\nhashMap.set('github-actions','8d44776f5902cd5aacdf7ece0282306d864e8a88f4c0427737846542e2d7cbed');\nhashMap.set('gitlabci','1f2e3e3a3013488e68d2aa0e39d80ee3bfbc9a01d817874f4c8195f8aff1fac9');\nhashMap.set('gitlabci-include','5bc01de9b40ecc8888a37690152f4a2f9cacc509b9cb5902aac024ca7a7c8e65');\nhashMap.set('glasskube','fd415356a866ad174a5b70522d662e4289a2c5d5e34c55d57542b0d8968f1645');\nhashMap.set('gleam','8be0140c0a26de7c588c03c2aa5c9f8bc1ffa2a6c9b46a70d23d90581392a3cf');\nhashMap.set('gomod','6809a0892a5b50c03f7cb1dd86f8139fc3d858215965cc6d12041dae07a47a1a');\nhashMap.set('gradle','417dec82bd1d38cbd27a560aa3b4e27c35d533e1f95fb16a3423c983a18c6582');\nhashMap.set('gradle-wrapper','8035248857cd8c32b382ee6411e67799885feac6c6c43f26d48d9dad8d004e76');\nhashMap.set('haskell-cabal','a2bf118238529952d0f2f352112dfbc86fb5533ef819625161a130f39c8ca713');\nhashMap.set('helm-requirements','8f643d415ab0cfbef05bce4dce9812eef47bddb7b8b67a191e6a4230489e652f');\nhashMap.set('helm-values','fbd4a0b4bdda8a71dc38ac8916287f73e2b7de5ef122096a5b5d525c1a3306cd');\nhashMap.set('helmfile','85424858e74869bf27bd38dd0105299540c665c259f46fa7a63506943fad0f5a');\nhashMap.set('helmsman','734fa89740fd5140ca3e39204872aba3451c05cd17f0b5e2b635934ed7b1710b');\nhashMap.set('helmv3','8f60a3ec95fded429df5a4bc4a0e8df536d55b85c8e744767101a3bbce57c41f');\nhashMap.set('hermit','c7bc14921a07e0ca5dcf02d0c1103702ee9262568097a2f50533aaee94af0158');\nhashMap.set('homebrew','4b05428b846b8a7c260a41500cc14938cca8e7d5df0e2510050f95718f6f823f');\nhashMap.set('html','226a9084e10ebf754906386159db08667394f5432105249bdb30d9c60af9fb56');\nhashMap.set('jenkins','309db014e3590e1cd6d53ede2755395c82e5cd4b880425daf52a6ab60e0d6a42');\nhashMap.set('jsonnet-bundler','f8e905391544e5d0464849d84e43a0143cbacdb2dacd7e5ae4278f8a25db583a');\nhashMap.set('kotlin-script','60f8f714bb3aef5d7e3e91c67f658847ad2b01bfc044a2f0dd0798fccb5c7c30');\nhashMap.set('kubernetes','62cfa6c77593b48290f3c26a2f390c4bdfe8ab3cfb79e358b10d8aece689a999');\nhashMap.set('kustomize','ec7716faba585471109a2ce9b155ededa2eea47b47e7ac600f64eb20ae0d9cc4');\nhashMap.set('leiningen','0598d2f53cfc92076d47186245a7b591d2b0df157609a7f55a37b54ab2d32a77');\nhashMap.set('maven','5592ee2784417aa586aca86efa13e142c4fdf544bd0deea691c596788a9c48c7');\nhashMap.set('maven-wrapper','95f7c3473b9cf82dc57bf8352e8d9dd131c92ef0365db5a97a1e16bda4d19481');\nhashMap.set('meteor','a9785d85b3520ed9e763c800730f36b95747795699758ecbe1395133c5b0040e');\nhashMap.set('mint','7072e37f18bb57500018406eb8711b2615b1916f073867f30653cdd4a99dab81');\nhashMap.set('mise','d84dcf05c3a23985e20aeca65a51552c808c954196fb4eae1de319c11f539ad9');\nhashMap.set('mix','6f7951fd86e7abcd7d7703893a5cc2c49f907a0d36e75c8a939c9995728e51e4');\nhashMap.set('nix','7a9f99ee6ddad1b35a5056bb2d8905598f39873017889d3652e64e8031722c4d');\nhashMap.set('nodenv','d159174d53e39af2013443cf86df88e14aac79a5a8d602180af229dcb2ddeda9');\nhashMap.set('npm','0b539b6639d7b9b5ba5643ca9332a81e9dd69a156345f4972e9ed20cfa006055');\nhashMap.set('nuget','88ed155e9c990fddd1bc7c237a3f4e62b8c18f0f520e7d81e40d29a699767428');\nhashMap.set('nvm','2d7a15f668d33a31302af960c3bc137b86d0284b1ea16c528d334e46a468b0d4');\nhashMap.set('ocb','bff1864d0937341790cfe08833c39642f785844762669f5753ff057bada923ab');\nhashMap.set('osgi','dae012cd486843eb53da4b032105e54d18f4e7537bd59c5321313950dd108a95');\nhashMap.set('pep621','b751518af0945d2ec0871c5dfb6f6e5190d1b9ffe4dfe7cfc14cf633cb629182');\nhashMap.set('pep723','bf07d466ea1bc9513c8d2cb475fcca3bc9b61f2184bd9af0a7a28d45b6f57ecd');\nhashMap.set('pip-compile','7a8878bc3cfd1e8920557176d924230960010b5bac5abc2d00613886ffb487b5');\nhashMap.set('pip_requirements','140cca562c9264fc2570a1837994cec14c427651fba507f536adc084e48d8dec');\nhashMap.set('pip_setup','31b330d9666d61474326a761a3ce1479f9a189ef6838ecfee78843ff4c80af73');\nhashMap.set('pipenv','02b3c60e01f73dce4a439ba4aecfc97467dfae0ca5be9628548db4079a1e7b38');\nhashMap.set('pixi','ad1d3689a4f4815be8b579ec7455d4c20f1a7602accd45f451ee554f4bd9d1fd');\nhashMap.set('poetry','42812ba90d7647e9072309068092a6aa69c5eb3cc674c12b9cfe50afa41a015a');\nhashMap.set('pre-commit','64efc3146f0981751a584a29bdcfe6701cc17849c7bc2bc87b238315d843524a');\nhashMap.set('pub','a2e38469167f49a34503e25816c7b9dd113b65bd10a3ad3fa325ac4ce571a453');\nhashMap.set('puppet','34f7e3916780e8ed352b65864bad91bf66547e29f91ee8fca7fd6e8fcd2621fd');\nhashMap.set('pyenv','4e520570d9a1407864aa7c5461d4008372d889254067e405cee2212d0ef8990b');\nhashMap.set('quadlet','972bb8017f8c7811a74b91b56cfcd9d6f1aef1c026c9a8b956cecc63d95b0bb2');\nhashMap.set('renovate-config-presets','27f100d67e2a1ad20cfd4aa3f1db1f1c34f62910929695f381160b3835a7fa65');\nhashMap.set('ruby-version','4aac2178a20ccdf8136363030e5156017f3d44368b4192b3280997df596dcacc');\nhashMap.set('runtime-version','dbf80ce2a5f07dd34bc9a008159b4f08052cc6fd0d92cbd2aeb0026c8008fa72');\nhashMap.set('sbt','dc1ec4aeeb5e012c7a595478873ad67e2dee6e2af951b12b9e9057cb64f2258d');\nhashMap.set('scalafmt','8a54fef703269ed31ce28887e62b0b838a13359e86fa77c7f4dceb89fda0f352');\nhashMap.set('setup-cfg','9a778d8a58f643fff1d23d750dfebed21e45bce99bfdcdc3de39795a407d983f');\nhashMap.set('sveltos','a69f9e206526af08685e20a72344b22d856f2effd882e67333a153a989a0a047');\nhashMap.set('swift','966398303fb2b86c14cede8e4a7bfc7810d3100c39a60ac9e01e56b181df3970');\nhashMap.set('tekton','eb8fb6a25ca7fd0d304f67d5ab2e93ddd8b34854553130003ce3340ca7b3bba1');\nhashMap.set('terraform','df2687884bcb81ebd6366deff3dd67aeafac8d0ba6e6bf8d18c61717eb928d78');\nhashMap.set('terraform-version','b08480f326c45daf3daeccc2d2f593a723c30a50437a66ac2290d671b427a355');\nhashMap.set('terragrunt','b32d2317bf2cf032243c417463f3760e4decf820d2e5332e6415e16dcf05e9ab');\nhashMap.set('terragrunt-version','45f221b13a193a42687f318e10cf1558079e28c970e91ce25c370f35f88f2f58');\nhashMap.set('tflint-plugin','719408f35a233216562aa62fb8126145a3450b69f917c8fcdf2f3b2c05a9898b');\nhashMap.set('travis','30174e78a6297e44db1c030ea2e111084e14b1eac220f522522c77d684a76285');\nhashMap.set('typst','d0e2b7cbf2ac47d55bd41fd4503251a4f606861dc60d812eff7532371ae2a8cb');\nhashMap.set('unity3d','9a61f8db397bc962f03a1d82045805ffa89863894e26824ecbeffcbf66b3ba3d');\nhashMap.set('velaci','9ad5d5d2584b9c189c4edcd25ad9103926bd4ba850a419a3b5e4aba9682817c3');\nhashMap.set('vendir','c281fb3cb9d8504f919eef08d40dc525dda9a689c2760d58b4bab0f746f32f17');\nhashMap.set('woodpecker','eaaa0a3bcfd0dc60c0990f2a1d7acf19c4f86ce4641ab3cf0a31f2bf46fc61b8');\nhashMap.set('jsonata','b8a0369f94be06f2109b7d233d8165a3e03d93498c43353720eb03b1eaa43e7b');\nhashMap.set('regex','baa61e8cd76a22201283a10749170dd35bae562ecf44a58ceca39cae754e208e');"]}
1
+ {"version":3,"file":"fingerprint.generated.js","sourceRoot":"","sources":["../../../lib/modules/manager/fingerprint.generated.ts"],"names":[],"mappings":"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","sourcesContent":["export const hashMap = new Map<string, string>();\n\nhashMap.set('ansible','4c234d79f768392545924fa9b139f8d177f15b6aa46776cf063860a1d36e48c7');\nhashMap.set('ansible-galaxy','a211e40f5c8613986ac16bc8d5389ea23d145cd643091d1b951a7f65926e99ff');\nhashMap.set('argocd','37faccd3854254a2009d963f781e77cf6e5aca3719ffd7cae1fea3d02c153eed');\nhashMap.set('asdf','e7f29eb8157e6ca5928890a0cc2fc88d57ddcf7b426dad1c4f15386858d3cd6a');\nhashMap.set('azure-pipelines','0b741b2629f6d94589524ce9b3886765e5c5648c9b6d707bb0b5fede276f9c09');\nhashMap.set('batect','523e8d7a309b4814a02819371313b2dac3764eab64cabfaf1d58b6e89de4ce43');\nhashMap.set('batect-wrapper','90941650f810adb3d7abe476da7221ff3434aa9d09ffc3d310e35108f360f364');\nhashMap.set('bazel','19e8ee20f9882e3023b2126d4b8335693cae9fb2b908f59803bbdfd432055d28');\nhashMap.set('bazel-module','4e3d00184b146e5c0ad69433697076f722afe933701ab08676af13e47d289eac');\nhashMap.set('bazelisk','6fbef61d534724ff259ea6e4fc1cd0a3d5a46d740c375128fa59b225daddd39f');\nhashMap.set('bicep','fbbd74998411012cfba829526701109d1fc184ade0cb11a28e4ca2956174b0f1');\nhashMap.set('bitbucket-pipelines','98c0d715a7eb4e41b8231091b83385f325966373f37dc7d6bc10b1febb6f605e');\nhashMap.set('bitrise','d18d2dcd356e19c4cd94912511a88636198c23b64e54f31da273be11044970cf');\nhashMap.set('buildkite','ac713ce38da057ff3ceb08d092291356dfc74f5b33b75f010bb9db1a211439c0');\nhashMap.set('buildpacks','cc8bbe937416a012df36a5c7ab01ae3cdedbed03615549bbe9f0f27fa40a150b');\nhashMap.set('bun','940ad758faff772794f754d190725e9339e9139a0df0f5e16f46884ef31d0cfc');\nhashMap.set('bun-version','49194d7fcb6b7bdd7e7a1264f71532bb2be8142d48478bf74716f7a9d4b306b9');\nhashMap.set('bundler','ca2d34c35ad8aaa5881f925933d743f948d712aa20ad51b187bcc1830df8c47c');\nhashMap.set('cake','a04160b352550cb470acb62f9a532361842c12f2ffbcd473bffca3de024522d9');\nhashMap.set('cargo','cdd6020c52aacaf309d528b1ed05f92bc4e3b2b45b7e613950d026d6798fea3a');\nhashMap.set('cdnurl','70281459e771df007787fc25dba16e4d5109865f97209dcf4f572ddd287d538a');\nhashMap.set('circleci','c7c7a1b71385f0ea7cf1e9fc24c37a1d5dabf13d6952e1e3b2179861b55f4e44');\nhashMap.set('cloudbuild','e4f926bfb907220e97dce98335837c52b4e0fe66d813593a7e572736acfc53f7');\nhashMap.set('cocoapods','a3be5ff98669b788cc796ac8f51111fa5cbf98dc9f0998c6856727ac9060c3ad');\nhashMap.set('composer','d1de64c4276d4abd41a2007346d1c2b81735675ac4036b337beb25f37813c622');\nhashMap.set('conan','4df92ebfa53ec6b7103030316ff70822d18f73cca8c71f2dca1d71c0d00b9353');\nhashMap.set('copier','aab6bf750a30b9efdbbee15b75e04e27383b2722ff7a64f238333a683ad442ca');\nhashMap.set('cpanfile','9b354db9666eee2485b27e44a6e61eaadc86ec2f2c6af9bb7bbc9fab54f31642');\nhashMap.set('crossplane','76261ff27b38f9850ee1a3a7e95168abefd96b4736f2cf04a7343e16827b42d8');\nhashMap.set('crow','6b8b61da3622456dfc0768978c7bfe991b63d9c6f67080c8840569cd95a6219b');\nhashMap.set('deps-edn','4e4b76596229f23524086c1dca79c52159ae3ec094e28d8a59bd8a1926458046');\nhashMap.set('devbox','7acedf4c5d3bef2f6c75c8b490c47f18fb03597680b46e4670ae5fe6f9873960');\nhashMap.set('devcontainer','e9982b5ff8aeac8fefb40dc363d3ab35f58af8c08b91eb45d22937a8c60447bb');\nhashMap.set('docker-compose','0c867e3aa14ae7dfc673eef348b2086ae2e36cbebfd1827e031a8030f9295276');\nhashMap.set('dockerfile','0bddc097addf84db6aa48d985567f247ca89affe1265ac09e6cd9635f61710f9');\nhashMap.set('droneci','f2a98fcece07b462baaceb28cd6904e080cb1ab0727fcd7403bea5ffd2e05239');\nhashMap.set('fleet','642e8e7ab739fba65bce7222b6f3e80fe44806c4190c8e93c5bcab23d44e9fd4');\nhashMap.set('flux','3b87b351f98c11ca0e6cb275deb708dc9bf601a7e578f7a3a7e83fe6e15eb540');\nhashMap.set('fvm','aa154dd5ffe3caced30713a9a55967360b7a0f35edd2fc06bd6f3e73c5c87570');\nhashMap.set('git-submodules','4294974c9a4d64e9a34998906607664c8056638cc998c84895706585706746fe');\nhashMap.set('github-actions','8d44776f5902cd5aacdf7ece0282306d864e8a88f4c0427737846542e2d7cbed');\nhashMap.set('gitlabci','1f2e3e3a3013488e68d2aa0e39d80ee3bfbc9a01d817874f4c8195f8aff1fac9');\nhashMap.set('gitlabci-include','5bc01de9b40ecc8888a37690152f4a2f9cacc509b9cb5902aac024ca7a7c8e65');\nhashMap.set('glasskube','fd415356a866ad174a5b70522d662e4289a2c5d5e34c55d57542b0d8968f1645');\nhashMap.set('gleam','8be0140c0a26de7c588c03c2aa5c9f8bc1ffa2a6c9b46a70d23d90581392a3cf');\nhashMap.set('gomod','6809a0892a5b50c03f7cb1dd86f8139fc3d858215965cc6d12041dae07a47a1a');\nhashMap.set('gradle','417dec82bd1d38cbd27a560aa3b4e27c35d533e1f95fb16a3423c983a18c6582');\nhashMap.set('gradle-wrapper','8035248857cd8c32b382ee6411e67799885feac6c6c43f26d48d9dad8d004e76');\nhashMap.set('haskell-cabal','a2bf118238529952d0f2f352112dfbc86fb5533ef819625161a130f39c8ca713');\nhashMap.set('helm-requirements','8f643d415ab0cfbef05bce4dce9812eef47bddb7b8b67a191e6a4230489e652f');\nhashMap.set('helm-values','fbd4a0b4bdda8a71dc38ac8916287f73e2b7de5ef122096a5b5d525c1a3306cd');\nhashMap.set('helmfile','85424858e74869bf27bd38dd0105299540c665c259f46fa7a63506943fad0f5a');\nhashMap.set('helmsman','734fa89740fd5140ca3e39204872aba3451c05cd17f0b5e2b635934ed7b1710b');\nhashMap.set('helmv3','8f60a3ec95fded429df5a4bc4a0e8df536d55b85c8e744767101a3bbce57c41f');\nhashMap.set('hermit','c7bc14921a07e0ca5dcf02d0c1103702ee9262568097a2f50533aaee94af0158');\nhashMap.set('homebrew','4b05428b846b8a7c260a41500cc14938cca8e7d5df0e2510050f95718f6f823f');\nhashMap.set('html','226a9084e10ebf754906386159db08667394f5432105249bdb30d9c60af9fb56');\nhashMap.set('jenkins','309db014e3590e1cd6d53ede2755395c82e5cd4b880425daf52a6ab60e0d6a42');\nhashMap.set('jsonnet-bundler','f8e905391544e5d0464849d84e43a0143cbacdb2dacd7e5ae4278f8a25db583a');\nhashMap.set('kotlin-script','60f8f714bb3aef5d7e3e91c67f658847ad2b01bfc044a2f0dd0798fccb5c7c30');\nhashMap.set('kubernetes','62cfa6c77593b48290f3c26a2f390c4bdfe8ab3cfb79e358b10d8aece689a999');\nhashMap.set('kustomize','ec7716faba585471109a2ce9b155ededa2eea47b47e7ac600f64eb20ae0d9cc4');\nhashMap.set('leiningen','0598d2f53cfc92076d47186245a7b591d2b0df157609a7f55a37b54ab2d32a77');\nhashMap.set('maven','5592ee2784417aa586aca86efa13e142c4fdf544bd0deea691c596788a9c48c7');\nhashMap.set('maven-wrapper','95f7c3473b9cf82dc57bf8352e8d9dd131c92ef0365db5a97a1e16bda4d19481');\nhashMap.set('meteor','a9785d85b3520ed9e763c800730f36b95747795699758ecbe1395133c5b0040e');\nhashMap.set('mint','7072e37f18bb57500018406eb8711b2615b1916f073867f30653cdd4a99dab81');\nhashMap.set('mise','d84dcf05c3a23985e20aeca65a51552c808c954196fb4eae1de319c11f539ad9');\nhashMap.set('mix','6f7951fd86e7abcd7d7703893a5cc2c49f907a0d36e75c8a939c9995728e51e4');\nhashMap.set('nix','7a9f99ee6ddad1b35a5056bb2d8905598f39873017889d3652e64e8031722c4d');\nhashMap.set('nodenv','d159174d53e39af2013443cf86df88e14aac79a5a8d602180af229dcb2ddeda9');\nhashMap.set('npm','0b539b6639d7b9b5ba5643ca9332a81e9dd69a156345f4972e9ed20cfa006055');\nhashMap.set('nuget','88ed155e9c990fddd1bc7c237a3f4e62b8c18f0f520e7d81e40d29a699767428');\nhashMap.set('nvm','2d7a15f668d33a31302af960c3bc137b86d0284b1ea16c528d334e46a468b0d4');\nhashMap.set('ocb','bff1864d0937341790cfe08833c39642f785844762669f5753ff057bada923ab');\nhashMap.set('osgi','dae012cd486843eb53da4b032105e54d18f4e7537bd59c5321313950dd108a95');\nhashMap.set('pep621','b751518af0945d2ec0871c5dfb6f6e5190d1b9ffe4dfe7cfc14cf633cb629182');\nhashMap.set('pep723','bf07d466ea1bc9513c8d2cb475fcca3bc9b61f2184bd9af0a7a28d45b6f57ecd');\nhashMap.set('pip-compile','19ea8b7c966f51a7516b114d2fcb099ddcfc96a8e437e525cab06a8b0f0ca1b7');\nhashMap.set('pip_requirements','140cca562c9264fc2570a1837994cec14c427651fba507f536adc084e48d8dec');\nhashMap.set('pip_setup','31b330d9666d61474326a761a3ce1479f9a189ef6838ecfee78843ff4c80af73');\nhashMap.set('pipenv','02b3c60e01f73dce4a439ba4aecfc97467dfae0ca5be9628548db4079a1e7b38');\nhashMap.set('pixi','ad1d3689a4f4815be8b579ec7455d4c20f1a7602accd45f451ee554f4bd9d1fd');\nhashMap.set('poetry','42812ba90d7647e9072309068092a6aa69c5eb3cc674c12b9cfe50afa41a015a');\nhashMap.set('pre-commit','64efc3146f0981751a584a29bdcfe6701cc17849c7bc2bc87b238315d843524a');\nhashMap.set('pub','a2e38469167f49a34503e25816c7b9dd113b65bd10a3ad3fa325ac4ce571a453');\nhashMap.set('puppet','34f7e3916780e8ed352b65864bad91bf66547e29f91ee8fca7fd6e8fcd2621fd');\nhashMap.set('pyenv','4e520570d9a1407864aa7c5461d4008372d889254067e405cee2212d0ef8990b');\nhashMap.set('quadlet','972bb8017f8c7811a74b91b56cfcd9d6f1aef1c026c9a8b956cecc63d95b0bb2');\nhashMap.set('renovate-config-presets','27f100d67e2a1ad20cfd4aa3f1db1f1c34f62910929695f381160b3835a7fa65');\nhashMap.set('ruby-version','4aac2178a20ccdf8136363030e5156017f3d44368b4192b3280997df596dcacc');\nhashMap.set('runtime-version','dbf80ce2a5f07dd34bc9a008159b4f08052cc6fd0d92cbd2aeb0026c8008fa72');\nhashMap.set('sbt','dc1ec4aeeb5e012c7a595478873ad67e2dee6e2af951b12b9e9057cb64f2258d');\nhashMap.set('scalafmt','8a54fef703269ed31ce28887e62b0b838a13359e86fa77c7f4dceb89fda0f352');\nhashMap.set('setup-cfg','9a778d8a58f643fff1d23d750dfebed21e45bce99bfdcdc3de39795a407d983f');\nhashMap.set('sveltos','a69f9e206526af08685e20a72344b22d856f2effd882e67333a153a989a0a047');\nhashMap.set('swift','966398303fb2b86c14cede8e4a7bfc7810d3100c39a60ac9e01e56b181df3970');\nhashMap.set('tekton','eb8fb6a25ca7fd0d304f67d5ab2e93ddd8b34854553130003ce3340ca7b3bba1');\nhashMap.set('terraform','df2687884bcb81ebd6366deff3dd67aeafac8d0ba6e6bf8d18c61717eb928d78');\nhashMap.set('terraform-version','b08480f326c45daf3daeccc2d2f593a723c30a50437a66ac2290d671b427a355');\nhashMap.set('terragrunt','b32d2317bf2cf032243c417463f3760e4decf820d2e5332e6415e16dcf05e9ab');\nhashMap.set('terragrunt-version','45f221b13a193a42687f318e10cf1558079e28c970e91ce25c370f35f88f2f58');\nhashMap.set('tflint-plugin','719408f35a233216562aa62fb8126145a3450b69f917c8fcdf2f3b2c05a9898b');\nhashMap.set('travis','30174e78a6297e44db1c030ea2e111084e14b1eac220f522522c77d684a76285');\nhashMap.set('typst','d0e2b7cbf2ac47d55bd41fd4503251a4f606861dc60d812eff7532371ae2a8cb');\nhashMap.set('unity3d','9a61f8db397bc962f03a1d82045805ffa89863894e26824ecbeffcbf66b3ba3d');\nhashMap.set('velaci','9ad5d5d2584b9c189c4edcd25ad9103926bd4ba850a419a3b5e4aba9682817c3');\nhashMap.set('vendir','c281fb3cb9d8504f919eef08d40dc525dda9a689c2760d58b4bab0f746f32f17');\nhashMap.set('woodpecker','eaaa0a3bcfd0dc60c0990f2a1d7acf19c4f86ce4641ab3cf0a31f2bf46fc61b8');\nhashMap.set('jsonata','b8a0369f94be06f2109b7d233d8165a3e03d93498c43353720eb03b1eaa43e7b');\nhashMap.set('regex','baa61e8cd76a22201283a10749170dd35bae562ecf44a58ceca39cae754e208e');"]}
@@ -103,6 +103,12 @@ const uvOptionsWithArguments = [
103
103
  '--constraints',
104
104
  '--python-version',
105
105
  '--no-emit-package',
106
+ '--prerelease',
107
+ '--format',
108
+ '--resolution',
109
+ '--fork-strategy',
110
+ '--exclude-newer',
111
+ '--exclude-newer-package',
106
112
  ...commonOptionsWithArguments,
107
113
  ];
108
114
  exports.optionsWithArguments = [
@@ -114,10 +120,10 @@ const allowedCommonOptions = [
114
120
  '--generate-hashes',
115
121
  '--emit-index-url',
116
122
  '--index-url',
123
+ '--all-extras',
117
124
  ];
118
125
  exports.allowedOptions = {
119
126
  'pip-compile': [
120
- '--all-extras',
121
127
  '--allow-unsafe',
122
128
  '--generate-hashes',
123
129
  '--no-emit-index-url',
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../lib/modules/manager/pip-compile/common.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { split } from 'shlex';\nimport upath from 'upath';\nimport { logger } from '../../../logger';\nimport { isNotNullOrUndefined } from '../../../util/array';\nimport type {\n ExecOptions,\n ExtraEnv,\n ToolConstraint,\n} from '../../../util/exec/types';\nimport { ensureCacheDir } from '../../../util/fs';\nimport { ensureLocalPath } from '../../../util/fs/util';\nimport * as hostRules from '../../../util/host-rules';\nimport { regEx } from '../../../util/regex';\nimport type { PackageFileContent, UpdateArtifactsConfig } from '../types';\nimport type { CommandType, PipCompileArgs, SupportedManagers } from './types';\n\nexport function getPythonVersionConstraint(\n config: UpdateArtifactsConfig,\n extractedPythonVersion: string | undefined,\n): string | undefined | null {\n const { constraints = {} } = config;\n const { python } = constraints;\n\n if (python) {\n logger.debug('Using python constraint from config');\n return python;\n }\n\n if (extractedPythonVersion) {\n logger.debug('Using python constraint extracted from the lock file');\n return `==${extractedPythonVersion}`;\n }\n\n return undefined;\n}\n\nexport function getPipToolsVersionConstraint(\n config: UpdateArtifactsConfig,\n): string {\n const { constraints = {} } = config;\n const { pipTools } = constraints;\n\n if (is.string(pipTools)) {\n logger.debug('Using pipTools constraint from config');\n return pipTools;\n }\n\n return '';\n}\n\nexport function getUvVersionConstraint(config: UpdateArtifactsConfig): string {\n const { constraints = {} } = config;\n const { uv } = constraints;\n\n if (is.string(uv)) {\n logger.debug('Using uv constraint from config');\n return uv;\n }\n\n return '';\n}\n\nexport function getToolVersionConstraint(\n config: UpdateArtifactsConfig,\n commandType: CommandType,\n): ToolConstraint {\n if (commandType === 'uv') {\n return {\n toolName: 'uv',\n constraint: getUvVersionConstraint(config),\n };\n }\n\n return {\n toolName: 'pip-tools',\n constraint: getPipToolsVersionConstraint(config),\n };\n}\n\nexport async function getExecOptions(\n config: UpdateArtifactsConfig,\n commandType: CommandType,\n cwd: string,\n extraEnv: ExtraEnv<string>,\n extractedPythonVersion: string | undefined,\n): Promise<ExecOptions> {\n const constraint = getPythonVersionConstraint(config, extractedPythonVersion);\n const execOptions: ExecOptions = {\n cwd: ensureLocalPath(cwd),\n docker: {},\n toolConstraints: [\n {\n toolName: 'python',\n constraint,\n },\n getToolVersionConstraint(config, commandType),\n ],\n extraEnv: {\n PIP_CACHE_DIR: await ensureCacheDir('pip'),\n PIP_NO_INPUT: 'true', // ensure pip doesn't block forever waiting for credentials on stdin\n PIP_KEYRING_PROVIDER: 'import',\n PYTHON_KEYRING_BACKEND: 'keyrings.envvars.keyring.EnvvarsKeyring',\n ...extraEnv,\n },\n };\n return execOptions;\n}\n\nexport const constraintLineRegex = regEx(\n /^(#.*?\\r?\\n)+# {4}(?<command>\\S*)(?<arguments> .*?)?\\r?\\n/,\n);\n\nexport const disallowedPipOptions = [\n '--no-header', // header is required by this manager\n];\nconst commonOptionsWithArguments = [\n '--output-file',\n '--extra',\n '--extra-index-url',\n];\nconst pipOptionsWithArguments = [\n '--resolver',\n '--constraint',\n ...commonOptionsWithArguments,\n];\nconst uvOptionsWithArguments = [\n '--constraints',\n '--python-version',\n '--no-emit-package',\n ...commonOptionsWithArguments,\n];\nexport const optionsWithArguments = [\n ...pipOptionsWithArguments,\n ...uvOptionsWithArguments,\n];\nconst allowedCommonOptions = [\n '-v',\n '--generate-hashes',\n '--emit-index-url',\n '--index-url',\n];\nexport const allowedOptions: Record<CommandType, string[]> = {\n 'pip-compile': [\n '--all-extras',\n '--allow-unsafe',\n '--generate-hashes',\n '--no-emit-index-url',\n '--strip-extras',\n ...allowedCommonOptions,\n ...pipOptionsWithArguments,\n ],\n uv: [\n '--no-strip-extras',\n '--universal',\n ...allowedCommonOptions,\n ...uvOptionsWithArguments,\n ],\n custom: [],\n};\n\n// TODO(not7cd): test on all correct headers, even with CUSTOM_COMPILE_COMMAND\nexport function extractHeaderCommand(\n content: string,\n fileName: string,\n): PipCompileArgs {\n const compileCommand = constraintLineRegex.exec(content);\n if (compileCommand?.groups === undefined) {\n throw new Error(\n `Failed to extract command from header in ${fileName} ${content}`,\n );\n }\n logger.trace(\n `pip-compile: found header in ${fileName}: \\n${compileCommand[0]}`,\n );\n const command = compileCommand.groups.command;\n const argv = [command];\n let commandType: CommandType;\n if (command === 'pip-compile') {\n commandType = 'pip-compile';\n } else if (command === 'uv') {\n commandType = 'uv';\n } else {\n commandType = 'custom';\n }\n if (compileCommand.groups.arguments) {\n argv.push(...split(compileCommand.groups.arguments));\n }\n logger.debug(\n { fileName, argv, commandType },\n `pip-compile: extracted command from header`,\n );\n\n const result: PipCompileArgs = {\n argv,\n command,\n commandType,\n outputFile: '',\n sourceFiles: [],\n };\n for (const arg of argv.slice(1)) {\n if (commandType === 'uv' && ['pip', 'compile'].includes(arg)) {\n continue;\n }\n // TODO(not7cd): check for \"--option -- argument\" case\n if (!arg.startsWith('-')) {\n result.sourceFiles.push(arg);\n continue;\n }\n throwForDisallowedOption(arg);\n throwForNoEqualSignInOptionWithArgument(arg);\n throwForUnknownOption(commandType, arg);\n\n if (arg.includes('=')) {\n const [option, value] = arg.split('=');\n if (option === '--extra') {\n result.extra = result.extra ?? [];\n result.extra.push(value);\n } else if (option === '--extra-index-url') {\n result.extraIndexUrl = result.extraIndexUrl ?? [];\n result.extraIndexUrl.push(value);\n // TODO: add to secrets? next PR\n } else if (['--constraint', '--constraints'].includes(option)) {\n result.constraintsFiles = result.constraintsFiles ?? [];\n result.constraintsFiles.push(value);\n } else if (option === '--output-file') {\n if (result.outputFile) {\n throw new Error('Cannot use multiple --output-file options');\n }\n result.outputFile = upath.normalize(value);\n } else if (option === '--python-version') {\n result.pythonVersion = value;\n } else if (option === '--index-url') {\n if (result.indexUrl) {\n throw new Error('Cannot use multiple --index-url options');\n }\n result.indexUrl = value;\n // TODO: add to secrets? next PR\n } else {\n logger.debug({ option }, `pip-compile: option not handled`);\n }\n continue;\n }\n if (arg === '--no-emit-index-url') {\n result.noEmitIndexUrl = true;\n continue;\n }\n if (arg === '--emit-index-url') {\n result.emitIndexUrl = true;\n continue;\n }\n if (arg === '--all-extras') {\n result.allExtras = true;\n continue;\n }\n\n logger.debug({ option: arg }, `pip-compile: option not handled`);\n }\n logger.trace(\n {\n ...result,\n },\n 'Parsed pip-compile command from header',\n );\n if (result.noEmitIndexUrl && result.emitIndexUrl) {\n throw new Error('Cannot use both --no-emit-index-url and --emit-index-url');\n }\n if (result.sourceFiles.length === 0) {\n throw new Error(\n 'No source files detected in command, pass at least one package file explicitly',\n );\n }\n return result;\n}\n\nconst pythonVersionRegex = regEx(\n /^(#.*?\\r?\\n)*# This file is autogenerated by pip-compile with Python (?<pythonVersion>\\d+(\\.\\d+)*)\\s/,\n 'i',\n);\n\nexport function extractPythonVersion(\n content: string,\n fileName: string,\n): string | undefined {\n const match = pythonVersionRegex.exec(content);\n if (match?.groups === undefined) {\n logger.warn(\n { fileName, content },\n 'pip-compile: failed to extract Python version from header in file',\n );\n return undefined;\n }\n logger.trace(\n `pip-compile: found Python version header in ${fileName}: \\n${match[0]}`,\n );\n const { pythonVersion } = match.groups;\n logger.debug(\n { fileName, pythonVersion },\n `pip-compile: extracted Python version from header`,\n );\n return pythonVersion;\n}\n\nfunction throwForDisallowedOption(arg: string): void {\n if (disallowedPipOptions.includes(arg)) {\n throw new Error(`Option ${arg} not allowed for this manager`);\n }\n}\nfunction throwForNoEqualSignInOptionWithArgument(arg: string): void {\n if (optionsWithArguments.includes(arg)) {\n throw new Error(\n `Option ${arg} must have equal sign '=' separating it's argument`,\n );\n }\n}\nfunction throwForUnknownOption(commandType: CommandType, arg: string): void {\n if (arg.includes('=')) {\n const [option] = arg.split('=');\n if (allowedOptions[commandType].includes(option)) {\n return;\n }\n }\n if (allowedOptions[commandType].includes(arg)) {\n return;\n }\n throw new Error(`Option ${arg} not supported (yet)`);\n}\n\nfunction getRegistryCredEnvVars(\n url: URL,\n index: number,\n): Record<string, string> {\n const hostRule = hostRules.find({ url: url.href });\n logger.debug(hostRule, `Found host rule for url ${url.href}`);\n const ret: Record<string, string> = {};\n if (!!hostRule.username || !!hostRule.password) {\n ret[`KEYRING_SERVICE_NAME_${index}`] = url.hostname;\n ret[`KEYRING_SERVICE_USERNAME_${index}`] = hostRule.username ?? '';\n ret[`KEYRING_SERVICE_PASSWORD_${index}`] = hostRule.password ?? '';\n }\n return ret;\n}\n\nfunction cleanUrl(url: string): URL | null {\n try {\n // Strip everything but protocol, host, and port\n const urlObj = new URL(url);\n return new URL(urlObj.origin);\n } catch {\n return null;\n }\n}\n\nexport function getRegistryCredVarsFromPackageFiles(\n packageFiles: PackageFileContent[],\n): ExtraEnv<string> {\n const urls: string[] = [];\n for (const packageFile of packageFiles) {\n urls.push(\n ...(packageFile.registryUrls ?? []),\n ...(packageFile.additionalRegistryUrls ?? []),\n );\n }\n logger.debug(urls, 'Extracted registry URLs from package files');\n\n const uniqueHosts = new Set<URL>(\n urls.map(cleanUrl).filter(isNotNullOrUndefined),\n );\n\n let allCreds: ExtraEnv<string> = {};\n for (const [index, host] of [...uniqueHosts].entries()) {\n const hostCreds = getRegistryCredEnvVars(host, index);\n allCreds = {\n ...allCreds,\n ...hostCreds,\n };\n }\n\n return allCreds;\n}\n\nexport function matchManager(filename: string): SupportedManagers | 'unknown' {\n if (filename.endsWith('setup.py')) {\n return 'pip_setup';\n }\n if (filename.endsWith('setup.cfg')) {\n return 'setup-cfg';\n }\n if (filename.endsWith('pyproject.toml')) {\n return 'pep621';\n }\n // naive, could be improved, maybe use pip_requirements.managerFilePatterns\n if (filename.endsWith('.in') || filename.endsWith('.txt')) {\n return 'pip_requirements';\n }\n return 'unknown';\n}\n"]}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../lib/modules/manager/pip-compile/common.ts"],"names":[],"mappings":";;;AAiBA,gEAkBC;AAED,oEAYC;AAED,wDAUC;AAED,4DAeC;AAED,wCA2BC;AA6DD,oDA+GC;AAOD,oDAqBC;AAoDD,kFA0BC;AAED,oCAeC;;AAlZD,kEAAkC;AAClC,iCAA8B;AAC9B,0DAA0B;AAC1B,4CAAyC;AACzC,+CAA2D;AAM3D,yCAAkD;AAClD,gDAAwD;AACxD,4EAAsD;AACtD,+CAA4C;AAI5C,SAAgB,0BAA0B,CACxC,MAA6B,EAC7B,sBAA0C;IAE1C,MAAM,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;IACpC,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC;IAE/B,IAAI,MAAM,EAAE,CAAC;QACX,eAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACpD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,sBAAsB,EAAE,CAAC;QAC3B,eAAM,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACrE,OAAO,KAAK,sBAAsB,EAAE,CAAC;IACvC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,4BAA4B,CAC1C,MAA6B;IAE7B,MAAM,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;IACpC,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC;IAEjC,IAAI,YAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,eAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;QACtD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAgB,sBAAsB,CAAC,MAA6B;IAClE,MAAM,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;IACpC,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,CAAC;IAE3B,IAAI,YAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;QAClB,eAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAChD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAgB,wBAAwB,CACtC,MAA6B,EAC7B,WAAwB;IAExB,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACzB,OAAO;YACL,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,sBAAsB,CAAC,MAAM,CAAC;SAC3C,CAAC;IACJ,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,WAAW;QACrB,UAAU,EAAE,4BAA4B,CAAC,MAAM,CAAC;KACjD,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,cAAc,CAClC,MAA6B,EAC7B,WAAwB,EACxB,GAAW,EACX,QAA0B,EAC1B,sBAA0C;IAE1C,MAAM,UAAU,GAAG,0BAA0B,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAC9E,MAAM,WAAW,GAAgB;QAC/B,GAAG,EAAE,IAAA,sBAAe,EAAC,GAAG,CAAC;QACzB,MAAM,EAAE,EAAE;QACV,eAAe,EAAE;YACf;gBACE,QAAQ,EAAE,QAAQ;gBAClB,UAAU;aACX;YACD,wBAAwB,CAAC,MAAM,EAAE,WAAW,CAAC;SAC9C;QACD,QAAQ,EAAE;YACR,aAAa,EAAE,MAAM,IAAA,mBAAc,EAAC,KAAK,CAAC;YAC1C,YAAY,EAAE,MAAM,EAAE,oEAAoE;YAC1F,oBAAoB,EAAE,QAAQ;YAC9B,sBAAsB,EAAE,yCAAyC;YACjE,GAAG,QAAQ;SACZ;KACF,CAAC;IACF,OAAO,WAAW,CAAC;AACrB,CAAC;AAEY,QAAA,mBAAmB,GAAG,IAAA,aAAK,EACtC,2DAA2D,CAC5D,CAAC;AAEW,QAAA,oBAAoB,GAAG;IAClC,aAAa,EAAE,qCAAqC;CACrD,CAAC;AACF,MAAM,0BAA0B,GAAG;IACjC,eAAe;IACf,SAAS;IACT,mBAAmB;CACpB,CAAC;AACF,MAAM,uBAAuB,GAAG;IAC9B,YAAY;IACZ,cAAc;IACd,GAAG,0BAA0B;CAC9B,CAAC;AACF,MAAM,sBAAsB,GAAG;IAC7B,eAAe;IACf,kBAAkB;IAClB,mBAAmB;IACnB,cAAc;IACd,UAAU;IACV,cAAc;IACd,iBAAiB;IACjB,iBAAiB;IACjB,yBAAyB;IACzB,GAAG,0BAA0B;CAC9B,CAAC;AACW,QAAA,oBAAoB,GAAG;IAClC,GAAG,uBAAuB;IAC1B,GAAG,sBAAsB;CAC1B,CAAC;AACF,MAAM,oBAAoB,GAAG;IAC3B,IAAI;IACJ,mBAAmB;IACnB,kBAAkB;IAClB,aAAa;IACb,cAAc;CACf,CAAC;AACW,QAAA,cAAc,GAAkC;IAC3D,aAAa,EAAE;QACb,gBAAgB;QAChB,mBAAmB;QACnB,qBAAqB;QACrB,gBAAgB;QAChB,GAAG,oBAAoB;QACvB,GAAG,uBAAuB;KAC3B;IACD,EAAE,EAAE;QACF,mBAAmB;QACnB,aAAa;QACb,GAAG,oBAAoB;QACvB,GAAG,sBAAsB;KAC1B;IACD,MAAM,EAAE,EAAE;CACX,CAAC;AAEF,8EAA8E;AAC9E,SAAgB,oBAAoB,CAClC,OAAe,EACf,QAAgB;IAEhB,MAAM,cAAc,GAAG,2BAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,cAAc,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CACb,4CAA4C,QAAQ,IAAI,OAAO,EAAE,CAClE,CAAC;IACJ,CAAC;IACD,eAAM,CAAC,KAAK,CACV,gCAAgC,QAAQ,OAAO,cAAc,CAAC,CAAC,CAAC,EAAE,CACnE,CAAC;IACF,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC;IAC9C,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,IAAI,WAAwB,CAAC;IAC7B,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QAC9B,WAAW,GAAG,aAAa,CAAC;IAC9B,CAAC;SAAM,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAC5B,WAAW,GAAG,IAAI,CAAC;IACrB,CAAC;SAAM,CAAC;QACN,WAAW,GAAG,QAAQ,CAAC;IACzB,CAAC;IACD,IAAI,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAA,aAAK,EAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,eAAM,CAAC,KAAK,CACV,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,EAC/B,4CAA4C,CAC7C,CAAC;IAEF,MAAM,MAAM,GAAmB;QAC7B,IAAI;QACJ,OAAO;QACP,WAAW;QACX,UAAU,EAAE,EAAE;QACd,WAAW,EAAE,EAAE;KAChB,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAChC,IAAI,WAAW,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7D,SAAS;QACX,CAAC;QACD,sDAAsD;QACtD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7B,SAAS;QACX,CAAC;QACD,wBAAwB,CAAC,GAAG,CAAC,CAAC;QAC9B,uCAAuC,CAAC,GAAG,CAAC,CAAC;QAC7C,qBAAqB,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAExC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;gBAClC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC;iBAAM,IAAI,MAAM,KAAK,mBAAmB,EAAE,CAAC;gBAC1C,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC;gBAClD,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACjC,gCAAgC;YAClC,CAAC;iBAAM,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC9D,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,EAAE,CAAC;gBACxD,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtC,CAAC;iBAAM,IAAI,MAAM,KAAK,eAAe,EAAE,CAAC;gBACtC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBACtB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBAC/D,CAAC;gBACD,MAAM,CAAC,UAAU,GAAG,eAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC7C,CAAC;iBAAM,IAAI,MAAM,KAAK,kBAAkB,EAAE,CAAC;gBACzC,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC;YAC/B,CAAC;iBAAM,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;gBACpC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACpB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;gBAC7D,CAAC;gBACD,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;gBACxB,gCAAgC;YAClC,CAAC;iBAAM,CAAC;gBACN,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,iCAAiC,CAAC,CAAC;YAC9D,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,qBAAqB,EAAE,CAAC;YAClC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;YAC7B,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,kBAAkB,EAAE,CAAC;YAC/B,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC;YAC3B,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,cAAc,EAAE,CAAC;YAC3B,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;YACxB,SAAS;QACX,CAAC;QAED,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,iCAAiC,CAAC,CAAC;IACnE,CAAC;IACD,eAAM,CAAC,KAAK,CACV;QACE,GAAG,MAAM;KACV,EACD,wCAAwC,CACzC,CAAC;IACF,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CACb,gFAAgF,CACjF,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,kBAAkB,GAAG,IAAA,aAAK,EAC9B,sGAAsG,EACtG,GAAG,CACJ,CAAC;AAEF,SAAgB,oBAAoB,CAClC,OAAe,EACf,QAAgB;IAEhB,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,KAAK,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,eAAM,CAAC,IAAI,CACT,EAAE,QAAQ,EAAE,OAAO,EAAE,EACrB,mEAAmE,CACpE,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,eAAM,CAAC,KAAK,CACV,+CAA+C,QAAQ,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,CACzE,CAAC;IACF,MAAM,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;IACvC,eAAM,CAAC,KAAK,CACV,EAAE,QAAQ,EAAE,aAAa,EAAE,EAC3B,mDAAmD,CACpD,CAAC;IACF,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAS,wBAAwB,CAAC,GAAW;IAC3C,IAAI,4BAAoB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,UAAU,GAAG,+BAA+B,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AACD,SAAS,uCAAuC,CAAC,GAAW;IAC1D,IAAI,4BAAoB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CACb,UAAU,GAAG,oDAAoD,CAClE,CAAC;IACJ,CAAC;AACH,CAAC;AACD,SAAS,qBAAqB,CAAC,WAAwB,EAAE,GAAW;IAClE,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,sBAAc,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACjD,OAAO;QACT,CAAC;IACH,CAAC;IACD,IAAI,sBAAc,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9C,OAAO;IACT,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,UAAU,GAAG,sBAAsB,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,sBAAsB,CAC7B,GAAQ,EACR,KAAa;IAEb,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACnD,eAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,2BAA2B,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9D,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC/C,GAAG,CAAC,wBAAwB,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC;QACpD,GAAG,CAAC,4BAA4B,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;QACnE,GAAG,CAAC,4BAA4B,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;IACrE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW;IAC3B,IAAI,CAAC;QACH,gDAAgD;QAChD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,mCAAmC,CACjD,YAAkC;IAElC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,CACP,GAAG,CAAC,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC,EACnC,GAAG,CAAC,WAAW,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAC9C,CAAC;IACJ,CAAC;IACD,eAAM,CAAC,KAAK,CAAC,IAAI,EAAE,4CAA4C,CAAC,CAAC;IAEjE,MAAM,WAAW,GAAG,IAAI,GAAG,CACzB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,4BAAoB,CAAC,CAChD,CAAC;IAEF,IAAI,QAAQ,GAAqB,EAAE,CAAC;IACpC,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QACvD,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACtD,QAAQ,GAAG;YACT,GAAG,QAAQ;YACX,GAAG,SAAS;SACb,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAgB,YAAY,CAAC,QAAgB;IAC3C,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACnC,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACxC,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,2EAA2E;IAC3E,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1D,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["import is from '@sindresorhus/is';\nimport { split } from 'shlex';\nimport upath from 'upath';\nimport { logger } from '../../../logger';\nimport { isNotNullOrUndefined } from '../../../util/array';\nimport type {\n ExecOptions,\n ExtraEnv,\n ToolConstraint,\n} from '../../../util/exec/types';\nimport { ensureCacheDir } from '../../../util/fs';\nimport { ensureLocalPath } from '../../../util/fs/util';\nimport * as hostRules from '../../../util/host-rules';\nimport { regEx } from '../../../util/regex';\nimport type { PackageFileContent, UpdateArtifactsConfig } from '../types';\nimport type { CommandType, PipCompileArgs, SupportedManagers } from './types';\n\nexport function getPythonVersionConstraint(\n config: UpdateArtifactsConfig,\n extractedPythonVersion: string | undefined,\n): string | undefined | null {\n const { constraints = {} } = config;\n const { python } = constraints;\n\n if (python) {\n logger.debug('Using python constraint from config');\n return python;\n }\n\n if (extractedPythonVersion) {\n logger.debug('Using python constraint extracted from the lock file');\n return `==${extractedPythonVersion}`;\n }\n\n return undefined;\n}\n\nexport function getPipToolsVersionConstraint(\n config: UpdateArtifactsConfig,\n): string {\n const { constraints = {} } = config;\n const { pipTools } = constraints;\n\n if (is.string(pipTools)) {\n logger.debug('Using pipTools constraint from config');\n return pipTools;\n }\n\n return '';\n}\n\nexport function getUvVersionConstraint(config: UpdateArtifactsConfig): string {\n const { constraints = {} } = config;\n const { uv } = constraints;\n\n if (is.string(uv)) {\n logger.debug('Using uv constraint from config');\n return uv;\n }\n\n return '';\n}\n\nexport function getToolVersionConstraint(\n config: UpdateArtifactsConfig,\n commandType: CommandType,\n): ToolConstraint {\n if (commandType === 'uv') {\n return {\n toolName: 'uv',\n constraint: getUvVersionConstraint(config),\n };\n }\n\n return {\n toolName: 'pip-tools',\n constraint: getPipToolsVersionConstraint(config),\n };\n}\n\nexport async function getExecOptions(\n config: UpdateArtifactsConfig,\n commandType: CommandType,\n cwd: string,\n extraEnv: ExtraEnv<string>,\n extractedPythonVersion: string | undefined,\n): Promise<ExecOptions> {\n const constraint = getPythonVersionConstraint(config, extractedPythonVersion);\n const execOptions: ExecOptions = {\n cwd: ensureLocalPath(cwd),\n docker: {},\n toolConstraints: [\n {\n toolName: 'python',\n constraint,\n },\n getToolVersionConstraint(config, commandType),\n ],\n extraEnv: {\n PIP_CACHE_DIR: await ensureCacheDir('pip'),\n PIP_NO_INPUT: 'true', // ensure pip doesn't block forever waiting for credentials on stdin\n PIP_KEYRING_PROVIDER: 'import',\n PYTHON_KEYRING_BACKEND: 'keyrings.envvars.keyring.EnvvarsKeyring',\n ...extraEnv,\n },\n };\n return execOptions;\n}\n\nexport const constraintLineRegex = regEx(\n /^(#.*?\\r?\\n)+# {4}(?<command>\\S*)(?<arguments> .*?)?\\r?\\n/,\n);\n\nexport const disallowedPipOptions = [\n '--no-header', // header is required by this manager\n];\nconst commonOptionsWithArguments = [\n '--output-file',\n '--extra',\n '--extra-index-url',\n];\nconst pipOptionsWithArguments = [\n '--resolver',\n '--constraint',\n ...commonOptionsWithArguments,\n];\nconst uvOptionsWithArguments = [\n '--constraints',\n '--python-version',\n '--no-emit-package',\n '--prerelease',\n '--format',\n '--resolution',\n '--fork-strategy',\n '--exclude-newer',\n '--exclude-newer-package',\n ...commonOptionsWithArguments,\n];\nexport const optionsWithArguments = [\n ...pipOptionsWithArguments,\n ...uvOptionsWithArguments,\n];\nconst allowedCommonOptions = [\n '-v',\n '--generate-hashes',\n '--emit-index-url',\n '--index-url',\n '--all-extras',\n];\nexport const allowedOptions: Record<CommandType, string[]> = {\n 'pip-compile': [\n '--allow-unsafe',\n '--generate-hashes',\n '--no-emit-index-url',\n '--strip-extras',\n ...allowedCommonOptions,\n ...pipOptionsWithArguments,\n ],\n uv: [\n '--no-strip-extras',\n '--universal',\n ...allowedCommonOptions,\n ...uvOptionsWithArguments,\n ],\n custom: [],\n};\n\n// TODO(not7cd): test on all correct headers, even with CUSTOM_COMPILE_COMMAND\nexport function extractHeaderCommand(\n content: string,\n fileName: string,\n): PipCompileArgs {\n const compileCommand = constraintLineRegex.exec(content);\n if (compileCommand?.groups === undefined) {\n throw new Error(\n `Failed to extract command from header in ${fileName} ${content}`,\n );\n }\n logger.trace(\n `pip-compile: found header in ${fileName}: \\n${compileCommand[0]}`,\n );\n const command = compileCommand.groups.command;\n const argv = [command];\n let commandType: CommandType;\n if (command === 'pip-compile') {\n commandType = 'pip-compile';\n } else if (command === 'uv') {\n commandType = 'uv';\n } else {\n commandType = 'custom';\n }\n if (compileCommand.groups.arguments) {\n argv.push(...split(compileCommand.groups.arguments));\n }\n logger.debug(\n { fileName, argv, commandType },\n `pip-compile: extracted command from header`,\n );\n\n const result: PipCompileArgs = {\n argv,\n command,\n commandType,\n outputFile: '',\n sourceFiles: [],\n };\n for (const arg of argv.slice(1)) {\n if (commandType === 'uv' && ['pip', 'compile'].includes(arg)) {\n continue;\n }\n // TODO(not7cd): check for \"--option -- argument\" case\n if (!arg.startsWith('-')) {\n result.sourceFiles.push(arg);\n continue;\n }\n throwForDisallowedOption(arg);\n throwForNoEqualSignInOptionWithArgument(arg);\n throwForUnknownOption(commandType, arg);\n\n if (arg.includes('=')) {\n const [option, value] = arg.split('=');\n if (option === '--extra') {\n result.extra = result.extra ?? [];\n result.extra.push(value);\n } else if (option === '--extra-index-url') {\n result.extraIndexUrl = result.extraIndexUrl ?? [];\n result.extraIndexUrl.push(value);\n // TODO: add to secrets? next PR\n } else if (['--constraint', '--constraints'].includes(option)) {\n result.constraintsFiles = result.constraintsFiles ?? [];\n result.constraintsFiles.push(value);\n } else if (option === '--output-file') {\n if (result.outputFile) {\n throw new Error('Cannot use multiple --output-file options');\n }\n result.outputFile = upath.normalize(value);\n } else if (option === '--python-version') {\n result.pythonVersion = value;\n } else if (option === '--index-url') {\n if (result.indexUrl) {\n throw new Error('Cannot use multiple --index-url options');\n }\n result.indexUrl = value;\n // TODO: add to secrets? next PR\n } else {\n logger.debug({ option }, `pip-compile: option not handled`);\n }\n continue;\n }\n if (arg === '--no-emit-index-url') {\n result.noEmitIndexUrl = true;\n continue;\n }\n if (arg === '--emit-index-url') {\n result.emitIndexUrl = true;\n continue;\n }\n if (arg === '--all-extras') {\n result.allExtras = true;\n continue;\n }\n\n logger.debug({ option: arg }, `pip-compile: option not handled`);\n }\n logger.trace(\n {\n ...result,\n },\n 'Parsed pip-compile command from header',\n );\n if (result.noEmitIndexUrl && result.emitIndexUrl) {\n throw new Error('Cannot use both --no-emit-index-url and --emit-index-url');\n }\n if (result.sourceFiles.length === 0) {\n throw new Error(\n 'No source files detected in command, pass at least one package file explicitly',\n );\n }\n return result;\n}\n\nconst pythonVersionRegex = regEx(\n /^(#.*?\\r?\\n)*# This file is autogenerated by pip-compile with Python (?<pythonVersion>\\d+(\\.\\d+)*)\\s/,\n 'i',\n);\n\nexport function extractPythonVersion(\n content: string,\n fileName: string,\n): string | undefined {\n const match = pythonVersionRegex.exec(content);\n if (match?.groups === undefined) {\n logger.warn(\n { fileName, content },\n 'pip-compile: failed to extract Python version from header in file',\n );\n return undefined;\n }\n logger.trace(\n `pip-compile: found Python version header in ${fileName}: \\n${match[0]}`,\n );\n const { pythonVersion } = match.groups;\n logger.debug(\n { fileName, pythonVersion },\n `pip-compile: extracted Python version from header`,\n );\n return pythonVersion;\n}\n\nfunction throwForDisallowedOption(arg: string): void {\n if (disallowedPipOptions.includes(arg)) {\n throw new Error(`Option ${arg} not allowed for this manager`);\n }\n}\nfunction throwForNoEqualSignInOptionWithArgument(arg: string): void {\n if (optionsWithArguments.includes(arg)) {\n throw new Error(\n `Option ${arg} must have equal sign '=' separating it's argument`,\n );\n }\n}\nfunction throwForUnknownOption(commandType: CommandType, arg: string): void {\n if (arg.includes('=')) {\n const [option] = arg.split('=');\n if (allowedOptions[commandType].includes(option)) {\n return;\n }\n }\n if (allowedOptions[commandType].includes(arg)) {\n return;\n }\n throw new Error(`Option ${arg} not supported (yet)`);\n}\n\nfunction getRegistryCredEnvVars(\n url: URL,\n index: number,\n): Record<string, string> {\n const hostRule = hostRules.find({ url: url.href });\n logger.debug(hostRule, `Found host rule for url ${url.href}`);\n const ret: Record<string, string> = {};\n if (!!hostRule.username || !!hostRule.password) {\n ret[`KEYRING_SERVICE_NAME_${index}`] = url.hostname;\n ret[`KEYRING_SERVICE_USERNAME_${index}`] = hostRule.username ?? '';\n ret[`KEYRING_SERVICE_PASSWORD_${index}`] = hostRule.password ?? '';\n }\n return ret;\n}\n\nfunction cleanUrl(url: string): URL | null {\n try {\n // Strip everything but protocol, host, and port\n const urlObj = new URL(url);\n return new URL(urlObj.origin);\n } catch {\n return null;\n }\n}\n\nexport function getRegistryCredVarsFromPackageFiles(\n packageFiles: PackageFileContent[],\n): ExtraEnv<string> {\n const urls: string[] = [];\n for (const packageFile of packageFiles) {\n urls.push(\n ...(packageFile.registryUrls ?? []),\n ...(packageFile.additionalRegistryUrls ?? []),\n );\n }\n logger.debug(urls, 'Extracted registry URLs from package files');\n\n const uniqueHosts = new Set<URL>(\n urls.map(cleanUrl).filter(isNotNullOrUndefined),\n );\n\n let allCreds: ExtraEnv<string> = {};\n for (const [index, host] of [...uniqueHosts].entries()) {\n const hostCreds = getRegistryCredEnvVars(host, index);\n allCreds = {\n ...allCreds,\n ...hostCreds,\n };\n }\n\n return allCreds;\n}\n\nexport function matchManager(filename: string): SupportedManagers | 'unknown' {\n if (filename.endsWith('setup.py')) {\n return 'pip_setup';\n }\n if (filename.endsWith('setup.cfg')) {\n return 'setup-cfg';\n }\n if (filename.endsWith('pyproject.toml')) {\n return 'pep621';\n }\n // naive, could be improved, maybe use pip_requirements.managerFilePatterns\n if (filename.endsWith('.in') || filename.endsWith('.txt')) {\n return 'pip_requirements';\n }\n return 'unknown';\n}\n"]}
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": "42.0.2",
4
+ "version": "42.1.0",
5
5
  "type": "commonjs",
6
6
  "bin": {
7
7
  "renovate": "dist/renovate.js",
@@ -122,7 +122,7 @@
122
122
  "@renovatebot/pep440": "4.2.1",
123
123
  "@renovatebot/pgp": "1.1.0",
124
124
  "@renovatebot/ruby-semver": "4.1.2",
125
- "@sindresorhus/is": "7.1.0",
125
+ "@sindresorhus/is": "7.1.1",
126
126
  "@yarnpkg/core": "4.4.4",
127
127
  "@yarnpkg/parsers": "3.0.3",
128
128
  "ae-cvss-calculator": "1.0.9",
@@ -1,7 +1,7 @@
1
1
  {
2
- "title": "JSON schema for Renovate 42.0.2 config files (https://renovatebot.com/)",
2
+ "title": "JSON schema for Renovate 42.1.0 config files (https://renovatebot.com/)",
3
3
  "$schema": "http://json-schema.org/draft-07/schema#",
4
- "x-renovate-version": "42.0.2",
4
+ "x-renovate-version": "42.1.0",
5
5
  "allowComments": true,
6
6
  "type": "object",
7
7
  "properties": {
@@ -1 +0,0 @@
1
- {"version":3,"file":"file.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/deb/file.ts"],"names":[],"mappings":";;AAWA,0BAYC;AAQD,kDAKC;;AApCD,+BAAmC;AACnC,6DAAuC;AAEvC;;;;;;;GAOG;AACI,KAAK,UAAU,OAAO,CAC3B,cAAsB,EACtB,WAAmB,EACnB,UAAkB;IAElB,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,EAAE,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC;QACxD,MAAM,WAAW,GAAG,EAAE,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAC1D,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAA,kBAAW,GAAE,EAAE,WAAW,CAAC,CAAC;IACxD,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,qCAAqC,WAAW,GAAG,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,mBAAmB,CACvC,QAAgB;IAEhB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC/C,OAAO,KAAK,EAAE,KAAK,CAAC;AACtB,CAAC","sourcesContent":["import { createUnzip } from 'zlib';\nimport * as fs from '../../../util/fs';\n\n/**\n * Extracts the specified compressed file to the output file.\n *\n * @param compressedFile - The path to the compressed file.\n * @param compression - The compression method used (currently only 'gz' is supported).\n * @param outputFile - The path where the extracted content will be stored.\n * @throws Will throw an error if the compression method is unknown.\n */\nexport async function extract(\n compressedFile: string,\n compression: string,\n outputFile: string,\n): Promise<void> {\n if (compression === 'gz') {\n const source = fs.createCacheReadStream(compressedFile);\n const destination = fs.createCacheWriteStream(outputFile);\n await fs.pipeline(source, createUnzip(), destination);\n } else {\n throw new Error(`Unsupported compression standard '${compression}'`);\n }\n}\n\n/**\n * Checks if the file exists and retrieves its creation time.\n *\n * @param filePath - The path to the file.\n * @returns The creation time if the file exists, otherwise undefined.\n */\nexport async function getFileCreationTime(\n filePath: string,\n): Promise<Date | undefined> {\n const stats = await fs.statCacheFile(filePath);\n return stats?.ctime;\n}\n"]}