renovate 44.62.1 → 44.63.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.
Files changed (32) hide show
  1. package/dist/config/presets/internal/workarounds.preset.js +7 -0
  2. package/dist/config/presets/internal/workarounds.preset.js.map +1 -1
  3. package/dist/config/validation-helpers/utils.js +15 -2
  4. package/dist/config/validation-helpers/utils.js.map +1 -1
  5. package/dist/modules/datasource/api.js +2 -0
  6. package/dist/modules/datasource/api.js.map +1 -1
  7. package/dist/modules/datasource/apk/index.js +181 -0
  8. package/dist/modules/datasource/apk/index.js.map +1 -0
  9. package/dist/modules/datasource/apk/parser.js +55 -0
  10. package/dist/modules/datasource/apk/parser.js.map +1 -0
  11. package/dist/modules/datasource/apk/url.js +96 -0
  12. package/dist/modules/datasource/apk/url.js.map +1 -0
  13. package/dist/modules/datasource/artifactory/index.js +1 -1
  14. package/dist/modules/datasource/postprocess-release.js +1 -1
  15. package/dist/modules/datasource/postprocess-release.js.map +1 -1
  16. package/dist/modules/datasource/pypi/index.js +1 -1
  17. package/dist/modules/datasource/ruby-version/index.js +1 -1
  18. package/dist/modules/manager/fingerprint.generated.js +43 -43
  19. package/dist/modules/manager/fingerprint.generated.js.map +1 -1
  20. package/dist/modules/manager/mix/artifacts.js +1 -1
  21. package/dist/modules/manager/mix/artifacts.js.map +1 -1
  22. package/dist/modules/manager/pep621/processors/uv.js +20 -12
  23. package/dist/modules/manager/pep621/processors/uv.js.map +1 -1
  24. package/dist/modules/manager/pep621/schema.js +2 -1
  25. package/dist/modules/manager/pep621/schema.js.map +1 -1
  26. package/dist/modules/versioning/nuget/index.js +5 -1
  27. package/dist/modules/versioning/nuget/index.js.map +1 -1
  28. package/dist/util/cache/package/namespaces.d.ts +1 -1
  29. package/dist/util/cache/package/namespaces.js +1 -0
  30. package/dist/util/cache/package/namespaces.js.map +1 -1
  31. package/package.json +1 -1
  32. package/renovate-schema.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"uv.js","names":[],"sources":["../../../../../lib/modules/manager/pep621/processors/uv.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport { quote } from 'shlex';\nimport { TEMPORARY_ERROR } from '../../../../constants/error-messages.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport type { HostRule } from '../../../../types/index.ts';\nimport { coerceArray } from '../../../../util/array.ts';\nimport type {\n ExecOptions,\n ToolConstraint,\n} from '../../../../util/exec/types.ts';\nimport {\n findLocalSiblingOrParent,\n readLocalFile,\n} from '../../../../util/fs/index.ts';\nimport { withGitEnvironment } from '../../../../util/git/exec.ts';\nimport { find } from '../../../../util/host-rules.ts';\nimport { regEx } from '../../../../util/regex.ts';\nimport { Result } from '../../../../util/result.ts';\nimport { parseUrl } from '../../../../util/url.ts';\nimport { PypiDatasource } from '../../../datasource/pypi/index.ts';\nimport { getGoogleAuthHostRule } from '../../../datasource/util.ts';\nimport type {\n PackageDependency,\n UpdateArtifact,\n UpdateArtifactsResult,\n Upgrade,\n} from '../../types.ts';\nimport { applyGitSource } from '../../util.ts';\nimport { type PyProject, UvLockfile } from '../schema.ts';\nimport { depTypes } from '../utils.ts';\nimport { BasePyProjectProcessor } from './abstract.ts';\n\nconst uvUpdateCMD = 'uv lock';\nconst gitExec = withGitEnvironment(['pep621']);\n\nexport class UvProcessor extends BasePyProjectProcessor {\n override lockfileName = 'uv.lock';\n\n process(project: PyProject, deps: PackageDependency[]): PackageDependency[] {\n const uv = project.tool?.uv;\n if (!uv) {\n return deps;\n }\n\n const hasExplicitDefault = uv.index?.some(\n (index) => index.default && index.explicit,\n );\n const defaultIndex = uv.index?.find(\n (index) => index.default && !index.explicit,\n );\n const implicitIndexUrls = uv.index\n ?.filter((index) => !index.explicit && index.name !== defaultIndex?.name)\n ?.map(({ url }) => url);\n\n const devDependencies = uv['dev-dependencies'];\n if (devDependencies) {\n deps.push(...devDependencies);\n }\n\n // https://docs.astral.sh/uv/concepts/dependencies/#dependency-sources\n // Skip sources that do not make sense to handle (e.g. path).\n if (uv.sources || defaultIndex || implicitIndexUrls) {\n for (const dep of deps) {\n /* v8 ignore next -- needs test */\n if (!dep.packageName) {\n continue;\n }\n\n if (dep.depType === 'requires-python') {\n continue;\n }\n\n // Using `packageName` as it applies PEP 508 normalization, which is\n // also applied by uv when matching a source to a dependency.\n const depSource = uv.sources?.[dep.packageName];\n if (depSource) {\n // Dependency is pinned to a specific source.\n dep.depType = depTypes.uvSources;\n if ('index' in depSource) {\n const index = uv.index?.find(\n ({ name }) => name === depSource.index,\n );\n if (index) {\n dep.registryUrls = [index.url];\n }\n } else if ('git' in depSource) {\n applyGitSource(\n dep,\n depSource.git,\n depSource.rev,\n depSource.tag,\n depSource.branch,\n );\n } else if ('url' in depSource) {\n dep.skipReason = 'unsupported-url';\n } else if ('path' in depSource) {\n dep.skipReason = 'path-dependency';\n } else if ('workspace' in depSource) {\n dep.skipReason = 'inherited-dependency';\n } else {\n /* v8 ignore next -- unreachable through schema */\n dep.skipReason = 'unknown-registry';\n }\n } else {\n // Dependency is not pinned to a specific source, so we need to\n // determine the source based on the index configuration.\n if (hasExplicitDefault) {\n // don't fall back to pypi if there is an explicit default index\n dep.registryUrls = [];\n } else if (defaultIndex) {\n // There is a default index configured, so use it.\n dep.registryUrls = [defaultIndex.url];\n }\n\n if (implicitIndexUrls?.length) {\n // If there are implicit indexes, check them first and fall back\n // to the default.\n dep.registryUrls = implicitIndexUrls.concat(\n dep.registryUrls ?? PypiDatasource.defaultURL,\n );\n }\n }\n }\n }\n\n return deps;\n }\n\n async extractLockedVersions(\n project: PyProject,\n deps: PackageDependency[],\n packageFile: string,\n ): Promise<PackageDependency[]> {\n const lockFileName = await findLocalSiblingOrParent(\n packageFile,\n this.lockfileName,\n );\n if (lockFileName === null) {\n logger.debug({ packageFile }, `No uv lock file found`);\n } else {\n const lockFileContent = await readLocalFile(lockFileName, 'utf8');\n if (lockFileContent) {\n const { val: lockFileMapping, err } = Result.parse(\n lockFileContent,\n UvLockfile,\n ).unwrap();\n\n if (err) {\n logger.debug({ packageFile, err }, `Error parsing uv lock file`);\n } else {\n for (const dep of deps) {\n const packageName = dep.packageName;\n if (packageName && packageName in lockFileMapping) {\n dep.lockedVersion = lockFileMapping[packageName];\n }\n }\n }\n }\n }\n\n return Promise.resolve(deps);\n }\n\n async updateArtifacts(\n updateArtifact: UpdateArtifact,\n project: PyProject,\n ): Promise<UpdateArtifactsResult[] | null> {\n const { config, updatedDeps, packageFileName } = updateArtifact;\n\n const { isLockFileMaintenance } = config;\n\n // abort if no lockfile is defined\n const lockFileName = await findLocalSiblingOrParent(\n packageFileName,\n 'uv.lock',\n );\n if (lockFileName === null) {\n logger.debug({ packageFileName }, `No uv lock file found`);\n return null;\n }\n try {\n const existingLockFileContent = await readLocalFile(lockFileName, 'utf8');\n if (!existingLockFileContent) {\n logger.debug('No uv.lock found');\n return null;\n }\n\n const pythonConstraint: ToolConstraint = {\n toolName: 'python',\n constraint:\n config.constraints?.python ?? project.project?.['requires-python'],\n };\n const uvConstraint: ToolConstraint = {\n toolName: 'uv',\n constraint:\n config.constraints?.uv ?? project.tool?.uv?.['required-version'],\n };\n\n const extraEnv = {\n ...(await getUvExtraIndexUrl(project, updateArtifact.updatedDeps)),\n ...(await getUvIndexCredentials(project)),\n };\n const execOptions: ExecOptions = {\n cwdFile: packageFileName,\n extraEnv,\n docker: {},\n toolConstraints: [pythonConstraint, uvConstraint],\n };\n\n // on lockFileMaintenance do not specify any packages and update the complete lock file\n // else only update specific packages\n let cmd: string;\n if (isLockFileMaintenance) {\n cmd = `${uvUpdateCMD} --upgrade`;\n } else {\n cmd = generateCMD(updatedDeps);\n }\n await gitExec(cmd, execOptions);\n\n // check for changes\n const fileChanges: UpdateArtifactsResult[] = [];\n const newLockContent = await readLocalFile(lockFileName, 'utf8');\n const isLockFileChanged = existingLockFileContent !== newLockContent;\n if (isLockFileChanged) {\n fileChanges.push({\n file: {\n type: 'addition',\n path: lockFileName,\n contents: newLockContent,\n },\n });\n } else {\n logger.debug('uv.lock is unchanged');\n }\n\n return fileChanges.length ? fileChanges : null;\n } catch (err) {\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n logger.debug({ err }, 'Failed to update uv lock file');\n return [\n {\n artifactError: {\n fileName: lockFileName,\n stderr: err.message,\n },\n },\n ];\n }\n }\n}\n\nfunction generateCMD(updatedDeps: Upgrade[]): string {\n const deps: string[] = [];\n\n for (const dep of updatedDeps) {\n switch (dep.depType) {\n case depTypes.optionalDependencies: {\n deps.push(dep.depName!);\n break;\n }\n case depTypes.uvDevDependencies:\n case depTypes.uvSources: {\n deps.push(dep.depName!);\n break;\n }\n case depTypes.buildSystemRequires:\n // build requirements are not locked in the lock files, no need to update.\n break;\n default: {\n deps.push(dep.packageName!);\n }\n }\n }\n\n return `${uvUpdateCMD} ${deps.map((dep) => `--upgrade-package ${quote(dep)}`).join(' ')}`;\n}\n\nfunction getMatchingHostRule(url: string | undefined): HostRule {\n return find({ hostType: PypiDatasource.id, url });\n}\n\nasync function getUsernamePassword(\n url: URL,\n): Promise<{ username?: string; password?: string }> {\n const rule = getMatchingHostRule(url.toString());\n if (rule.username || rule.password) {\n return rule;\n }\n\n if (url.hostname.endsWith('.pkg.dev')) {\n const hostRule = await getGoogleAuthHostRule();\n if (hostRule) {\n return hostRule;\n }\n logger.once.debug({ url }, 'Could not get Google access token');\n }\n\n return {};\n}\n\nasync function getUvExtraIndexUrl(\n project: PyProject,\n deps: Upgrade[],\n): Promise<NodeJS.ProcessEnv> {\n const pyPiRegistryUrls = deps\n .filter((dep) => dep.datasource === PypiDatasource.id)\n .filter((dep) => {\n // Remove dependencies that are pinned to a specific index\n const sources = project.tool?.uv?.sources;\n const packageName = dep.packageName!;\n return !sources || !(packageName in sources);\n })\n .flatMap((dep) => dep.registryUrls)\n .filter(isString)\n .filter((registryUrl) => {\n // Check if the registry URL is not the default one and not already configured\n const configuredIndexUrls = coerceArray(\n project.tool?.uv?.index?.map(({ url }) => url),\n );\n return (\n registryUrl !== PypiDatasource.defaultURL &&\n !configuredIndexUrls.includes(registryUrl)\n );\n });\n\n const registryUrls = new Set(pyPiRegistryUrls);\n const extraIndexUrls: string[] = [];\n\n for (const registryUrl of registryUrls) {\n const parsedUrl = parseUrl(registryUrl);\n if (!parsedUrl) {\n continue;\n }\n\n const { username, password } = await getUsernamePassword(parsedUrl);\n if (username || password) {\n if (username) {\n parsedUrl.username = username;\n }\n if (password) {\n parsedUrl.password = password;\n }\n }\n\n extraIndexUrls.push(parsedUrl.toString());\n }\n\n return {\n UV_EXTRA_INDEX_URL: extraIndexUrls.join(' '),\n };\n}\n\nasync function getUvIndexCredentials(\n project: PyProject,\n): Promise<NodeJS.ProcessEnv> {\n const uv_indexes = project.tool?.uv?.index;\n\n if (!uv_indexes) {\n return {};\n }\n\n const entries = [];\n\n for (const { name, url } of uv_indexes) {\n const parsedUrl = parseUrl(url);\n /* v8 ignore next -- needs test */\n if (!parsedUrl) {\n continue;\n }\n\n // If no name is provided for the index, authentication information must be passed through alternative methods\n if (!name) {\n continue;\n }\n\n const { username, password } = await getUsernamePassword(parsedUrl);\n\n const NAME = name.toUpperCase().replace(regEx(/[^A-Z0-9]/g), '_');\n\n if (username) {\n entries.push([`UV_INDEX_${NAME}_USERNAME`, username]);\n }\n\n if (password) {\n entries.push([`UV_INDEX_${NAME}_PASSWORD`, password]);\n }\n }\n\n return Object.fromEntries(entries);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"uv.js","names":[],"sources":["../../../../../lib/modules/manager/pep621/processors/uv.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport { quote } from 'shlex';\nimport { TEMPORARY_ERROR } from '../../../../constants/error-messages.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport type { HostRule } from '../../../../types/index.ts';\nimport { coerceArray } from '../../../../util/array.ts';\nimport type {\n ExecOptions,\n ToolConstraint,\n} from '../../../../util/exec/types.ts';\nimport {\n findLocalSiblingOrParent,\n readLocalFile,\n} from '../../../../util/fs/index.ts';\nimport { withGitEnvironment } from '../../../../util/git/exec.ts';\nimport { find } from '../../../../util/host-rules.ts';\nimport { regEx } from '../../../../util/regex.ts';\nimport { Result } from '../../../../util/result.ts';\nimport { parseUrl } from '../../../../util/url.ts';\nimport { PypiDatasource } from '../../../datasource/pypi/index.ts';\nimport { getGoogleAuthHostRule } from '../../../datasource/util.ts';\nimport type {\n PackageDependency,\n UpdateArtifact,\n UpdateArtifactsResult,\n Upgrade,\n} from '../../types.ts';\nimport { applyGitSource } from '../../util.ts';\nimport { type PyProject, UvLockfile, type UvSource } from '../schema.ts';\nimport { depTypes } from '../utils.ts';\nimport { BasePyProjectProcessor } from './abstract.ts';\n\nconst uvUpdateCMD = 'uv lock';\nconst gitExec = withGitEnvironment(['pep621']);\n\nfunction isUvIndexSource(\n source: UvSource,\n): source is Extract<UvSource, { index: string }> {\n return 'index' in source;\n}\n\nexport class UvProcessor extends BasePyProjectProcessor {\n override lockfileName = 'uv.lock';\n\n process(project: PyProject, deps: PackageDependency[]): PackageDependency[] {\n const uv = project.tool?.uv;\n if (!uv) {\n return deps;\n }\n\n const hasExplicitDefault = uv.index?.some(\n (index) => index.default && index.explicit,\n );\n const defaultIndex = uv.index?.find(\n (index) => index.default && !index.explicit,\n );\n const implicitIndexUrls = uv.index\n ?.filter((index) => !index.explicit && index.name !== defaultIndex?.name)\n ?.map(({ url }) => url);\n\n const devDependencies = uv['dev-dependencies'];\n if (devDependencies) {\n deps.push(...devDependencies);\n }\n\n // https://docs.astral.sh/uv/concepts/dependencies/#dependency-sources\n // Skip sources that do not make sense to handle (e.g. path).\n if (uv.sources || defaultIndex || implicitIndexUrls) {\n for (const dep of deps) {\n /* v8 ignore next -- needs test */\n if (!dep.packageName) {\n continue;\n }\n\n if (dep.depType === 'requires-python') {\n continue;\n }\n\n // Using `packageName` as it applies PEP 508 normalization, which is\n // also applied by uv when matching a source to a dependency.\n const depSources = uv.sources?.[dep.packageName];\n if (depSources) {\n // Dependency is pinned to one or more specific sources.\n dep.depType = depTypes.uvSources;\n if (depSources.every(isUvIndexSource)) {\n // Sources referencing an index, possibly disambiguated by\n // environment markers. Any of the indexes can serve the package,\n // so use all of them as registries.\n const registryUrls: string[] = [];\n for (const depSource of depSources) {\n const index = uv.index?.find(\n ({ name }) => name === depSource.index,\n );\n if (index) {\n registryUrls.push(index.url);\n }\n }\n if (registryUrls.length) {\n dep.registryUrls = [...new Set(registryUrls)];\n }\n } else if (depSources.length === 1) {\n const depSource = depSources[0];\n if ('git' in depSource) {\n applyGitSource(\n dep,\n depSource.git,\n depSource.rev,\n depSource.tag,\n depSource.branch,\n );\n } else if ('url' in depSource) {\n dep.skipReason = 'unsupported-url';\n } else if ('path' in depSource) {\n dep.skipReason = 'path-dependency';\n } else if ('workspace' in depSource) {\n dep.skipReason = 'inherited-dependency';\n } else {\n dep.skipReason = 'unknown-registry';\n }\n } else {\n // Multiple sources that are not all indexes (e.g. a git source\n // per platform) cannot be represented as a single update.\n dep.skipReason = 'unsupported';\n }\n } else {\n // Dependency is not pinned to a specific source, so we need to\n // determine the source based on the index configuration.\n if (hasExplicitDefault) {\n // don't fall back to pypi if there is an explicit default index\n dep.registryUrls = [];\n } else if (defaultIndex) {\n // There is a default index configured, so use it.\n dep.registryUrls = [defaultIndex.url];\n }\n\n if (implicitIndexUrls?.length) {\n // If there are implicit indexes, check them first and fall back\n // to the default.\n dep.registryUrls = implicitIndexUrls.concat(\n dep.registryUrls ?? PypiDatasource.defaultURL,\n );\n }\n }\n }\n }\n\n return deps;\n }\n\n async extractLockedVersions(\n project: PyProject,\n deps: PackageDependency[],\n packageFile: string,\n ): Promise<PackageDependency[]> {\n const lockFileName = await findLocalSiblingOrParent(\n packageFile,\n this.lockfileName,\n );\n if (lockFileName === null) {\n logger.debug({ packageFile }, `No uv lock file found`);\n } else {\n const lockFileContent = await readLocalFile(lockFileName, 'utf8');\n if (lockFileContent) {\n const { val: lockFileMapping, err } = Result.parse(\n lockFileContent,\n UvLockfile,\n ).unwrap();\n\n if (err) {\n logger.debug({ packageFile, err }, `Error parsing uv lock file`);\n } else {\n for (const dep of deps) {\n const packageName = dep.packageName;\n if (packageName && packageName in lockFileMapping) {\n dep.lockedVersion = lockFileMapping[packageName];\n }\n }\n }\n }\n }\n\n return Promise.resolve(deps);\n }\n\n async updateArtifacts(\n updateArtifact: UpdateArtifact,\n project: PyProject,\n ): Promise<UpdateArtifactsResult[] | null> {\n const { config, updatedDeps, packageFileName } = updateArtifact;\n\n const { isLockFileMaintenance } = config;\n\n // abort if no lockfile is defined\n const lockFileName = await findLocalSiblingOrParent(\n packageFileName,\n 'uv.lock',\n );\n if (lockFileName === null) {\n logger.debug({ packageFileName }, `No uv lock file found`);\n return null;\n }\n try {\n const existingLockFileContent = await readLocalFile(lockFileName, 'utf8');\n if (!existingLockFileContent) {\n logger.debug('No uv.lock found');\n return null;\n }\n\n const pythonConstraint: ToolConstraint = {\n toolName: 'python',\n constraint:\n config.constraints?.python ?? project.project?.['requires-python'],\n };\n const uvConstraint: ToolConstraint = {\n toolName: 'uv',\n constraint:\n config.constraints?.uv ?? project.tool?.uv?.['required-version'],\n };\n\n const extraEnv = {\n ...(await getUvExtraIndexUrl(project, updateArtifact.updatedDeps)),\n ...(await getUvIndexCredentials(project)),\n };\n const execOptions: ExecOptions = {\n cwdFile: packageFileName,\n extraEnv,\n docker: {},\n toolConstraints: [pythonConstraint, uvConstraint],\n };\n\n // on lockFileMaintenance do not specify any packages and update the complete lock file\n // else only update specific packages\n let cmd: string;\n if (isLockFileMaintenance) {\n cmd = `${uvUpdateCMD} --upgrade`;\n } else {\n cmd = generateCMD(updatedDeps);\n }\n await gitExec(cmd, execOptions);\n\n // check for changes\n const fileChanges: UpdateArtifactsResult[] = [];\n const newLockContent = await readLocalFile(lockFileName, 'utf8');\n const isLockFileChanged = existingLockFileContent !== newLockContent;\n if (isLockFileChanged) {\n fileChanges.push({\n file: {\n type: 'addition',\n path: lockFileName,\n contents: newLockContent,\n },\n });\n } else {\n logger.debug('uv.lock is unchanged');\n }\n\n return fileChanges.length ? fileChanges : null;\n } catch (err) {\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n logger.debug({ err }, 'Failed to update uv lock file');\n return [\n {\n artifactError: {\n fileName: lockFileName,\n stderr: err.message,\n },\n },\n ];\n }\n }\n}\n\nfunction generateCMD(updatedDeps: Upgrade[]): string {\n const deps: string[] = [];\n\n for (const dep of updatedDeps) {\n switch (dep.depType) {\n case depTypes.optionalDependencies: {\n deps.push(dep.depName!);\n break;\n }\n case depTypes.uvDevDependencies:\n case depTypes.uvSources: {\n deps.push(dep.depName!);\n break;\n }\n case depTypes.buildSystemRequires:\n // build requirements are not locked in the lock files, no need to update.\n break;\n default: {\n deps.push(dep.packageName!);\n }\n }\n }\n\n return `${uvUpdateCMD} ${deps.map((dep) => `--upgrade-package ${quote(dep)}`).join(' ')}`;\n}\n\nfunction getMatchingHostRule(url: string | undefined): HostRule {\n return find({ hostType: PypiDatasource.id, url });\n}\n\nasync function getUsernamePassword(\n url: URL,\n): Promise<{ username?: string; password?: string }> {\n const rule = getMatchingHostRule(url.toString());\n if (rule.username || rule.password) {\n return rule;\n }\n\n if (url.hostname.endsWith('.pkg.dev')) {\n const hostRule = await getGoogleAuthHostRule();\n if (hostRule) {\n return hostRule;\n }\n logger.once.debug({ url }, 'Could not get Google access token');\n }\n\n return {};\n}\n\nasync function getUvExtraIndexUrl(\n project: PyProject,\n deps: Upgrade[],\n): Promise<NodeJS.ProcessEnv> {\n const pyPiRegistryUrls = deps\n .filter((dep) => dep.datasource === PypiDatasource.id)\n .filter((dep) => {\n // Remove dependencies that are pinned to a specific index\n const sources = project.tool?.uv?.sources;\n const packageName = dep.packageName!;\n return !sources || !(packageName in sources);\n })\n .flatMap((dep) => dep.registryUrls)\n .filter(isString)\n .filter((registryUrl) => {\n // Check if the registry URL is not the default one and not already configured\n const configuredIndexUrls = coerceArray(\n project.tool?.uv?.index?.map(({ url }) => url),\n );\n return (\n registryUrl !== PypiDatasource.defaultURL &&\n !configuredIndexUrls.includes(registryUrl)\n );\n });\n\n const registryUrls = new Set(pyPiRegistryUrls);\n const extraIndexUrls: string[] = [];\n\n for (const registryUrl of registryUrls) {\n const parsedUrl = parseUrl(registryUrl);\n if (!parsedUrl) {\n continue;\n }\n\n const { username, password } = await getUsernamePassword(parsedUrl);\n if (username || password) {\n if (username) {\n parsedUrl.username = username;\n }\n if (password) {\n parsedUrl.password = password;\n }\n }\n\n extraIndexUrls.push(parsedUrl.toString());\n }\n\n return {\n UV_EXTRA_INDEX_URL: extraIndexUrls.join(' '),\n };\n}\n\nasync function getUvIndexCredentials(\n project: PyProject,\n): Promise<NodeJS.ProcessEnv> {\n const uv_indexes = project.tool?.uv?.index;\n\n if (!uv_indexes) {\n return {};\n }\n\n const entries = [];\n\n for (const { name, url } of uv_indexes) {\n const parsedUrl = parseUrl(url);\n /* v8 ignore next -- needs test */\n if (!parsedUrl) {\n continue;\n }\n\n // If no name is provided for the index, authentication information must be passed through alternative methods\n if (!name) {\n continue;\n }\n\n const { username, password } = await getUsernamePassword(parsedUrl);\n\n const NAME = name.toUpperCase().replace(regEx(/[^A-Z0-9]/g), '_');\n\n if (username) {\n entries.push([`UV_INDEX_${NAME}_USERNAME`, username]);\n }\n\n if (password) {\n entries.push([`UV_INDEX_${NAME}_PASSWORD`, password]);\n }\n }\n\n return Object.fromEntries(entries);\n}\n"],"mappings":"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"}
@@ -77,10 +77,11 @@ const UvSource = z.union([
77
77
  UvPathSource,
78
78
  UvWorkspaceSource
79
79
  ]);
80
+ const UvSources = z.union([UvSource, z.array(UvSource).min(1)]).transform((source) => Array.isArray(source) ? source : [source]);
80
81
  const UvConfig = z.object({
81
82
  "dev-dependencies": LooseArray(Pep508Dependency(depTypes.uvDevDependencies)).catch([]),
82
83
  "required-version": z.string().optional(),
83
- sources: LooseRecord(z.string().transform((source) => normalizePythonDepName(source)), UvSource).optional(),
84
+ sources: LooseRecord(z.string().transform((source) => normalizePythonDepName(source)), UvSources).optional(),
84
85
  index: z.array(z.object({
85
86
  name: z.string().optional(),
86
87
  url: z.string(),
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","names":[],"sources":["../../../../lib/modules/manager/pep621/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport {\n LooseArray,\n LooseRecord,\n Toml,\n} from '../../../util/schema-utils/index.ts';\nimport { normalizePythonDepName } from '../../datasource/pypi/common.ts';\nimport { PypiDatasource } from '../../datasource/pypi/index.ts';\nimport type { PackageDependency } from '../types.ts';\nimport { depTypes, pep508ToPackageDependency } from './utils.ts';\n\ntype Pep508Dependency = z.ZodType<PackageDependency>;\n\nfunction Pep508Dependency(depType: string): Pep508Dependency {\n return z.string().transform((x, ctx) => {\n const res = pep508ToPackageDependency(depType, x);\n\n if (!res) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'should be a valid PEP508 dependency',\n fatal: true,\n });\n\n return z.NEVER;\n }\n\n return res;\n }) as Pep508Dependency;\n}\n\ntype DependencyGroup = z.ZodType<PackageDependency[]>;\n\nexport function DependencyGroup(depType: string): DependencyGroup {\n return LooseRecord(LooseArray(Pep508Dependency(depType))).transform(\n (depGroups) => {\n const deps: PackageDependency[] = [];\n for (const [depGroup, groupDeps] of Object.entries(depGroups)) {\n for (const dep of groupDeps) {\n if (dep.packageName) {\n dep.depName = dep.packageName;\n }\n dep.managerData = { depGroup };\n deps.push(dep);\n }\n }\n return deps;\n },\n );\n}\n\nconst PdmConfig = z\n .object({\n 'dev-dependencies': DependencyGroup(depTypes.pdmDevDependencies).catch([]),\n source: LooseArray(\n z.object({\n url: z.string(),\n name: z.string(),\n }),\n )\n .transform((pdmSource) => {\n const registryUrls: string[] = [];\n\n let containsPyPiUrl = false;\n for (const source of pdmSource) {\n if (source.name === 'pypi') {\n containsPyPiUrl = true;\n }\n\n registryUrls.push(source.url);\n }\n\n // Add pypi default url, if there is no source declared with the name `pypi`\n // @see https://daobook.github.io/pdm/pyproject/tool-pdm/#specify-other-sources-for-finding-packages\n if (!containsPyPiUrl) {\n registryUrls.unshift(PypiDatasource.defaultURL);\n }\n\n return registryUrls;\n })\n .optional()\n .catch(undefined),\n })\n .transform(\n ({ 'dev-dependencies': devDependencies, source: registryUrls }) => ({\n devDependencies,\n registryUrls,\n }),\n );\n\nconst HatchConfig = z\n .object({\n envs: LooseRecord(\n z.string(),\n z.object({\n dependencies: z.unknown().optional(),\n 'extra-dependencies': z.unknown().optional(),\n }),\n ),\n })\n .catch({ envs: {} })\n .transform(({ envs }) => {\n const deps: PackageDependency[] = [];\n for (const [\n envName,\n { dependencies, 'extra-dependencies': extraDependencies },\n ] of Object.entries(envs)) {\n const depType = `tool.hatch.envs.${envName}`;\n const HatchDependency = LooseArray(Pep508Dependency(depType)).catch([]);\n deps.push(\n ...HatchDependency.parse(dependencies),\n ...HatchDependency.parse(extraDependencies),\n );\n }\n return { deps };\n });\n\nconst UvIndexSource = z.object({\n index: z.string(),\n});\n\nconst UvGitSource = z.object({\n git: z.string(),\n rev: z.string().optional(),\n tag: z.string().optional(),\n branch: z.string().optional(),\n});\nexport type UvGitSource = z.infer<typeof UvGitSource>;\n\nconst UvUrlSource = z.object({\n url: z.string(),\n});\n\nconst UvPathSource = z.object({\n path: z.string(),\n});\n\nconst UvWorkspaceSource = z.object({\n workspace: z.literal(true),\n});\n\n// https://docs.astral.sh/uv/concepts/dependencies/#dependency-sources\nconst UvSource = z.union([\n UvIndexSource,\n UvGitSource,\n UvUrlSource,\n UvPathSource,\n UvWorkspaceSource,\n]);\n\nconst UvConfig = z.object({\n 'dev-dependencies': LooseArray(\n Pep508Dependency(depTypes.uvDevDependencies),\n ).catch([]),\n 'required-version': z.string().optional(),\n sources: LooseRecord(\n // uv applies the same normalization as for Python dependencies on sources\n z.string().transform((source) => normalizePythonDepName(source)),\n UvSource,\n ).optional(),\n index: z\n .array(\n z.object({\n name: z.string().optional(),\n url: z.string(),\n default: z.boolean().default(false),\n explicit: z.boolean().default(false),\n }),\n )\n .optional(),\n});\n\nexport const ProjectSection = z.object({\n version: z.string().optional().catch(undefined),\n 'requires-python': z.string().optional().catch(undefined),\n dependencies: LooseArray(Pep508Dependency(depTypes.dependencies)).catch([]),\n 'optional-dependencies': DependencyGroup(depTypes.optionalDependencies).catch(\n [],\n ),\n});\n\nconst PixiMinimalConfig = z\n .object({\n project: z\n .object({ 'requires-pixi': z.string().optional() })\n .optional()\n .catch(undefined),\n workspace: z\n .object({ 'requires-pixi': z.string().optional() })\n .optional()\n .catch(undefined),\n })\n .transform((val) => ({\n 'requires-pixi':\n val.project?.['requires-pixi'] ?? val.workspace?.['requires-pixi'],\n }))\n .optional()\n .catch(undefined);\n\nexport const PyProject = z.object({\n project: ProjectSection.optional().catch(undefined),\n 'build-system': z\n .object({\n requires: LooseArray(\n Pep508Dependency(depTypes.buildSystemRequires),\n ).catch([]),\n 'build-backend': z.string().optional().catch(undefined),\n })\n .optional()\n .catch(undefined),\n 'dependency-groups': DependencyGroup(depTypes.dependencyGroups).catch([]),\n tool: z\n .object({\n pdm: PdmConfig.optional().catch(undefined),\n hatch: HatchConfig.optional().catch(undefined),\n uv: UvConfig.optional().catch(undefined),\n pixi: PixiMinimalConfig,\n })\n .optional()\n .catch(undefined),\n});\nexport type PyProject = z.infer<typeof PyProject>;\n\nexport const PdmLockfile = Toml.pipe(\n z.object({\n package: LooseArray(\n z.object({\n name: z.string(),\n version: z.string(),\n }),\n ),\n }),\n)\n .transform(({ package: pkg }) =>\n Object.fromEntries(\n pkg.map(({ name, version }): [string, string] => [name, version]),\n ),\n )\n .transform((lock) => ({ lock }));\n\nexport const UvLockfile = Toml.pipe(\n z.object({\n package: LooseArray(\n z.object({\n name: z.string(),\n version: z.string(),\n }),\n ),\n }),\n).transform(({ package: pkg }) =>\n Object.fromEntries(\n pkg.map(({ name, version }): [string, string] => [name, version]),\n ),\n);\n"],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","names":[],"sources":["../../../../lib/modules/manager/pep621/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport {\n LooseArray,\n LooseRecord,\n Toml,\n} from '../../../util/schema-utils/index.ts';\nimport { normalizePythonDepName } from '../../datasource/pypi/common.ts';\nimport { PypiDatasource } from '../../datasource/pypi/index.ts';\nimport type { PackageDependency } from '../types.ts';\nimport { depTypes, pep508ToPackageDependency } from './utils.ts';\n\ntype Pep508Dependency = z.ZodType<PackageDependency>;\n\nfunction Pep508Dependency(depType: string): Pep508Dependency {\n return z.string().transform((x, ctx) => {\n const res = pep508ToPackageDependency(depType, x);\n\n if (!res) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'should be a valid PEP508 dependency',\n fatal: true,\n });\n\n return z.NEVER;\n }\n\n return res;\n }) as Pep508Dependency;\n}\n\ntype DependencyGroup = z.ZodType<PackageDependency[]>;\n\nexport function DependencyGroup(depType: string): DependencyGroup {\n return LooseRecord(LooseArray(Pep508Dependency(depType))).transform(\n (depGroups) => {\n const deps: PackageDependency[] = [];\n for (const [depGroup, groupDeps] of Object.entries(depGroups)) {\n for (const dep of groupDeps) {\n if (dep.packageName) {\n dep.depName = dep.packageName;\n }\n dep.managerData = { depGroup };\n deps.push(dep);\n }\n }\n return deps;\n },\n );\n}\n\nconst PdmConfig = z\n .object({\n 'dev-dependencies': DependencyGroup(depTypes.pdmDevDependencies).catch([]),\n source: LooseArray(\n z.object({\n url: z.string(),\n name: z.string(),\n }),\n )\n .transform((pdmSource) => {\n const registryUrls: string[] = [];\n\n let containsPyPiUrl = false;\n for (const source of pdmSource) {\n if (source.name === 'pypi') {\n containsPyPiUrl = true;\n }\n\n registryUrls.push(source.url);\n }\n\n // Add pypi default url, if there is no source declared with the name `pypi`\n // @see https://daobook.github.io/pdm/pyproject/tool-pdm/#specify-other-sources-for-finding-packages\n if (!containsPyPiUrl) {\n registryUrls.unshift(PypiDatasource.defaultURL);\n }\n\n return registryUrls;\n })\n .optional()\n .catch(undefined),\n })\n .transform(\n ({ 'dev-dependencies': devDependencies, source: registryUrls }) => ({\n devDependencies,\n registryUrls,\n }),\n );\n\nconst HatchConfig = z\n .object({\n envs: LooseRecord(\n z.string(),\n z.object({\n dependencies: z.unknown().optional(),\n 'extra-dependencies': z.unknown().optional(),\n }),\n ),\n })\n .catch({ envs: {} })\n .transform(({ envs }) => {\n const deps: PackageDependency[] = [];\n for (const [\n envName,\n { dependencies, 'extra-dependencies': extraDependencies },\n ] of Object.entries(envs)) {\n const depType = `tool.hatch.envs.${envName}`;\n const HatchDependency = LooseArray(Pep508Dependency(depType)).catch([]);\n deps.push(\n ...HatchDependency.parse(dependencies),\n ...HatchDependency.parse(extraDependencies),\n );\n }\n return { deps };\n });\n\nconst UvIndexSource = z.object({\n index: z.string(),\n});\n\nconst UvGitSource = z.object({\n git: z.string(),\n rev: z.string().optional(),\n tag: z.string().optional(),\n branch: z.string().optional(),\n});\nexport type UvGitSource = z.infer<typeof UvGitSource>;\n\nconst UvUrlSource = z.object({\n url: z.string(),\n});\n\nconst UvPathSource = z.object({\n path: z.string(),\n});\n\nconst UvWorkspaceSource = z.object({\n workspace: z.literal(true),\n});\n\n// https://docs.astral.sh/uv/concepts/dependencies/#dependency-sources\nconst UvSource = z.union([\n UvIndexSource,\n UvGitSource,\n UvUrlSource,\n UvPathSource,\n UvWorkspaceSource,\n]);\nexport type UvSource = z.infer<typeof UvSource>;\n\n// A dependency can declare a single source or, when disambiguated by\n// environment markers, an array of sources. Normalize both to an array.\n// https://docs.astral.sh/uv/concepts/projects/dependencies/#multiple-sources\nconst UvSources = z\n .union([UvSource, z.array(UvSource).min(1)])\n .transform((source) => (Array.isArray(source) ? source : [source]));\n\nconst UvConfig = z.object({\n 'dev-dependencies': LooseArray(\n Pep508Dependency(depTypes.uvDevDependencies),\n ).catch([]),\n 'required-version': z.string().optional(),\n sources: LooseRecord(\n // uv applies the same normalization as for Python dependencies on sources\n z.string().transform((source) => normalizePythonDepName(source)),\n UvSources,\n ).optional(),\n index: z\n .array(\n z.object({\n name: z.string().optional(),\n url: z.string(),\n default: z.boolean().default(false),\n explicit: z.boolean().default(false),\n }),\n )\n .optional(),\n});\n\nexport const ProjectSection = z.object({\n version: z.string().optional().catch(undefined),\n 'requires-python': z.string().optional().catch(undefined),\n dependencies: LooseArray(Pep508Dependency(depTypes.dependencies)).catch([]),\n 'optional-dependencies': DependencyGroup(depTypes.optionalDependencies).catch(\n [],\n ),\n});\n\nconst PixiMinimalConfig = z\n .object({\n project: z\n .object({ 'requires-pixi': z.string().optional() })\n .optional()\n .catch(undefined),\n workspace: z\n .object({ 'requires-pixi': z.string().optional() })\n .optional()\n .catch(undefined),\n })\n .transform((val) => ({\n 'requires-pixi':\n val.project?.['requires-pixi'] ?? val.workspace?.['requires-pixi'],\n }))\n .optional()\n .catch(undefined);\n\nexport const PyProject = z.object({\n project: ProjectSection.optional().catch(undefined),\n 'build-system': z\n .object({\n requires: LooseArray(\n Pep508Dependency(depTypes.buildSystemRequires),\n ).catch([]),\n 'build-backend': z.string().optional().catch(undefined),\n })\n .optional()\n .catch(undefined),\n 'dependency-groups': DependencyGroup(depTypes.dependencyGroups).catch([]),\n tool: z\n .object({\n pdm: PdmConfig.optional().catch(undefined),\n hatch: HatchConfig.optional().catch(undefined),\n uv: UvConfig.optional().catch(undefined),\n pixi: PixiMinimalConfig,\n })\n .optional()\n .catch(undefined),\n});\nexport type PyProject = z.infer<typeof PyProject>;\n\nexport const PdmLockfile = Toml.pipe(\n z.object({\n package: LooseArray(\n z.object({\n name: z.string(),\n version: z.string(),\n }),\n ),\n }),\n)\n .transform(({ package: pkg }) =>\n Object.fromEntries(\n pkg.map(({ name, version }): [string, string] => [name, version]),\n ),\n )\n .transform((lock) => ({ lock }));\n\nexport const UvLockfile = Toml.pipe(\n z.object({\n package: LooseArray(\n z.object({\n name: z.string(),\n version: z.string(),\n }),\n ),\n }),\n).transform(({ package: pkg }) =>\n Object.fromEntries(\n pkg.map(({ name, version }): [string, string] => [name, version]),\n ),\n);\n"],"mappings":"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"}
@@ -96,6 +96,7 @@ var NugetVersioningApi = class {
96
96
  for (const version of versions) {
97
97
  const v = parseVersion(version);
98
98
  if (!v) continue;
99
+ if (v.prerelease && !u.prerelease) continue;
99
100
  if (compare(v, u) < 0) continue;
100
101
  if (!vMax || compare(v, vMax) > 0) {
101
102
  vMax = v;
@@ -206,7 +207,10 @@ var NugetVersioningApi = class {
206
207
  const v = parseVersion(version);
207
208
  if (!v) return false;
208
209
  const u = parseVersion(range);
209
- if (u) return compare(v, u) >= 0;
210
+ if (u) {
211
+ if (v.prerelease && !u.prerelease) return false;
212
+ return compare(v, u) >= 0;
213
+ }
210
214
  const r = parseRange(range);
211
215
  if (!r) return false;
212
216
  return matches(v, r);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/versioning/nuget/index.ts"],"sourcesContent":["import type { NewValueConfig, VersioningApi } from '../types.ts';\nimport { parseRange, parseVersion } from './parser.ts';\nimport {\n coerceFloatingComponent,\n getFloatingRangeLowerBound,\n matches,\n rangeToString,\n tryBump,\n} from './range.ts';\nimport type {\n NugetBracketRange,\n NugetFloatingRange,\n NugetVersion,\n} from './types.ts';\nimport { compare, versionToString } from './version.ts';\n\nexport const id = 'nuget';\nexport const displayName = 'NuGet';\nexport const urls = [\n '[NuGet package versioning](https://learn.microsoft.com/nuget/concepts/package-versioning)',\n '[NuGet version range tool](https://nugettools.azurewebsites.net/)',\n];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies = ['bump'];\n\nclass NugetVersioningApi implements VersioningApi {\n isCompatible(version: string, _current?: string): boolean {\n return this.isValid(version);\n }\n\n isSingleVersion(version: string): boolean {\n const r = parseRange(version);\n if (!r) {\n return false;\n }\n\n return r.type === 'nuget-exact-range';\n }\n\n isStable(version: string): boolean {\n const v = parseVersion(version);\n if (v) {\n return !v.prerelease;\n }\n\n const r = parseRange(version);\n if (r?.type !== 'nuget-exact-range') {\n return false;\n }\n\n return !r.version.prerelease;\n }\n\n isValid(input: string): boolean {\n const v = parseVersion(input);\n if (v) {\n return true;\n }\n\n const r = parseRange(input);\n if (r) {\n return true;\n }\n\n return false;\n }\n\n isVersion(input: string | undefined | null): boolean {\n if (!input) {\n return false;\n }\n\n const v = parseVersion(input);\n if (!v) {\n return false;\n }\n\n return true;\n }\n\n getMajor(version: string): number | null {\n const v = parseVersion(version);\n if (!v) {\n return null;\n }\n\n return v.major;\n }\n\n getMinor(version: string): number | null {\n const v = parseVersion(version);\n if (!v) {\n return null;\n }\n\n return v.minor ?? null;\n }\n\n getPatch(version: string): number | null {\n const v = parseVersion(version);\n if (!v) {\n return null;\n }\n\n return v.patch ?? null;\n }\n\n equals(version: string, other: string): boolean {\n const x = parseVersion(version);\n const y = parseVersion(other);\n if (!x || !y) {\n return false;\n }\n\n return compare(x, y) === 0;\n }\n\n isGreaterThan(version: string, other: string): boolean {\n const x = parseVersion(version);\n const y = parseVersion(other);\n if (!x || !y) {\n return false;\n }\n\n return compare(x, y) > 0;\n }\n\n isLessThanRange(version: string, range: string): boolean {\n const v = parseVersion(version);\n if (!v) {\n return false;\n }\n\n const u = parseVersion(range);\n if (u) {\n return compare(v, u) < 0;\n }\n\n const r = parseRange(range);\n if (!r) {\n return false;\n }\n\n if (r.type === 'nuget-exact-range') {\n return compare(v, r.version) < 0;\n }\n\n if (r.type === 'nuget-bracket-range') {\n if (!r.min) {\n return false;\n }\n\n const minBound =\n r.min.type === 'nuget-version'\n ? r.min\n : getFloatingRangeLowerBound(r.min);\n const cmp = compare(v, minBound);\n return r.minInclusive ? cmp < 0 : cmp <= 0;\n }\n\n const minBound = getFloatingRangeLowerBound(r);\n return compare(v, minBound) < 0;\n }\n\n getSatisfyingVersion(versions: string[], range: string): string | null {\n const r = parseRange(range);\n if (r) {\n let result: string | null = null;\n let vMax: NugetVersion | undefined;\n for (const version of versions) {\n const v = parseVersion(version);\n if (!v) {\n continue;\n }\n\n if (!matches(v, r)) {\n continue;\n }\n\n if (!vMax || compare(v, vMax) > 0) {\n vMax = v;\n result = version;\n }\n }\n\n return result;\n }\n\n const u = parseVersion(range);\n if (u) {\n let result: string | null = null;\n let vMax: NugetVersion | undefined;\n for (const version of versions) {\n const v = parseVersion(version);\n if (!v) {\n continue;\n }\n\n if (compare(v, u) < 0) {\n continue;\n }\n\n if (!vMax || compare(v, vMax) > 0) {\n vMax = v;\n result = version;\n }\n }\n\n return result;\n }\n\n return null;\n }\n\n minSatisfyingVersion(versions: string[], range: string): string | null {\n const r = parseRange(range);\n if (r) {\n let result: string | null = null;\n let vMin: NugetVersion | undefined;\n for (const version of versions) {\n const v = parseVersion(version);\n if (!v) {\n continue;\n }\n\n if (!matches(v, r)) {\n continue;\n }\n\n if (!vMin || compare(v, vMin) < 0) {\n result = version;\n vMin = v;\n }\n }\n\n return result;\n }\n\n const u = parseVersion(range);\n if (u) {\n let result: string | null = null;\n let vMin: NugetVersion | undefined;\n for (const version of versions) {\n const v = parseVersion(version);\n if (!v) {\n continue;\n }\n\n if (compare(v, u) < 0) {\n continue;\n }\n\n if (!vMin || compare(v, vMin) < 0) {\n result = version;\n vMin = v;\n }\n }\n\n return result;\n }\n\n return null;\n }\n\n getPinnedValue(newVersion: string): string {\n const v = parseVersion(newVersion);\n if (!v) {\n return '';\n }\n return rangeToString({ type: 'nuget-exact-range', version: v });\n }\n\n getNewValue({ currentValue, newVersion }: NewValueConfig): string | null {\n const v = parseVersion(newVersion);\n if (!v) {\n return null;\n }\n\n if (this.isVersion(currentValue)) {\n return newVersion;\n }\n\n const r = parseRange(currentValue);\n if (!r) {\n return null;\n }\n\n if (this.isLessThanRange(newVersion, currentValue)) {\n return currentValue;\n }\n\n if (r.type === 'nuget-exact-range') {\n return rangeToString({ type: 'nuget-exact-range', version: v });\n }\n\n if (r.type === 'nuget-floating-range') {\n const floating = r.floating;\n if (!floating) {\n return versionToString(v);\n }\n\n const res: NugetFloatingRange = { ...r };\n\n if (floating === 'major') {\n res.major = coerceFloatingComponent(v.major);\n return tryBump(res, v, currentValue);\n }\n res.major = v.major;\n\n if (floating === 'minor') {\n res.minor = coerceFloatingComponent(v.minor);\n return tryBump(res, v, currentValue);\n }\n res.minor = v.minor ?? 0;\n\n if (floating === 'patch') {\n res.patch = coerceFloatingComponent(v.patch);\n return tryBump(res, v, currentValue);\n }\n res.patch = v.patch ?? 0;\n\n res.revision = coerceFloatingComponent(v.revision);\n return tryBump(res, v, currentValue);\n }\n\n const res: NugetBracketRange = { ...r };\n\n if (!r.max) {\n res.min = v;\n res.minInclusive = true;\n return rangeToString(res);\n }\n\n if (matches(v, r)) {\n return currentValue;\n }\n\n if (!r.min) {\n res.max = v;\n res.maxInclusive = true;\n return rangeToString(res);\n }\n\n res.max = v;\n res.maxInclusive = true;\n return rangeToString(res);\n }\n\n sortVersions(version: string, other: string): number {\n const x = parseVersion(version);\n const y = parseVersion(other);\n if (!x || !y) {\n return 0;\n }\n\n return compare(x, y);\n }\n\n matches(version: string, range: string): boolean {\n const v = parseVersion(version);\n if (!v) {\n return false;\n }\n\n const u = parseVersion(range);\n if (u) {\n return compare(v, u) >= 0;\n }\n\n const r = parseRange(range);\n if (!r) {\n return false;\n }\n\n return matches(v, r);\n }\n}\n\nexport const api: VersioningApi = new NugetVersioningApi();\n\nexport default api;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/versioning/nuget/index.ts"],"sourcesContent":["import type { NewValueConfig, VersioningApi } from '../types.ts';\nimport { parseRange, parseVersion } from './parser.ts';\nimport {\n coerceFloatingComponent,\n getFloatingRangeLowerBound,\n matches,\n rangeToString,\n tryBump,\n} from './range.ts';\nimport type {\n NugetBracketRange,\n NugetFloatingRange,\n NugetVersion,\n} from './types.ts';\nimport { compare, versionToString } from './version.ts';\n\nexport const id = 'nuget';\nexport const displayName = 'NuGet';\nexport const urls = [\n '[NuGet package versioning](https://learn.microsoft.com/nuget/concepts/package-versioning)',\n '[NuGet version range tool](https://nugettools.azurewebsites.net/)',\n];\nexport const supportsRanges = true;\nexport const supportedRangeStrategies = ['bump'];\n\nclass NugetVersioningApi implements VersioningApi {\n isCompatible(version: string, _current?: string): boolean {\n return this.isValid(version);\n }\n\n isSingleVersion(version: string): boolean {\n const r = parseRange(version);\n if (!r) {\n return false;\n }\n\n return r.type === 'nuget-exact-range';\n }\n\n isStable(version: string): boolean {\n const v = parseVersion(version);\n if (v) {\n return !v.prerelease;\n }\n\n const r = parseRange(version);\n if (r?.type !== 'nuget-exact-range') {\n return false;\n }\n\n return !r.version.prerelease;\n }\n\n isValid(input: string): boolean {\n const v = parseVersion(input);\n if (v) {\n return true;\n }\n\n const r = parseRange(input);\n if (r) {\n return true;\n }\n\n return false;\n }\n\n isVersion(input: string | undefined | null): boolean {\n if (!input) {\n return false;\n }\n\n const v = parseVersion(input);\n if (!v) {\n return false;\n }\n\n return true;\n }\n\n getMajor(version: string): number | null {\n const v = parseVersion(version);\n if (!v) {\n return null;\n }\n\n return v.major;\n }\n\n getMinor(version: string): number | null {\n const v = parseVersion(version);\n if (!v) {\n return null;\n }\n\n return v.minor ?? null;\n }\n\n getPatch(version: string): number | null {\n const v = parseVersion(version);\n if (!v) {\n return null;\n }\n\n return v.patch ?? null;\n }\n\n equals(version: string, other: string): boolean {\n const x = parseVersion(version);\n const y = parseVersion(other);\n if (!x || !y) {\n return false;\n }\n\n return compare(x, y) === 0;\n }\n\n isGreaterThan(version: string, other: string): boolean {\n const x = parseVersion(version);\n const y = parseVersion(other);\n if (!x || !y) {\n return false;\n }\n\n return compare(x, y) > 0;\n }\n\n isLessThanRange(version: string, range: string): boolean {\n const v = parseVersion(version);\n if (!v) {\n return false;\n }\n\n const u = parseVersion(range);\n if (u) {\n return compare(v, u) < 0;\n }\n\n const r = parseRange(range);\n if (!r) {\n return false;\n }\n\n if (r.type === 'nuget-exact-range') {\n return compare(v, r.version) < 0;\n }\n\n if (r.type === 'nuget-bracket-range') {\n if (!r.min) {\n return false;\n }\n\n const minBound =\n r.min.type === 'nuget-version'\n ? r.min\n : getFloatingRangeLowerBound(r.min);\n const cmp = compare(v, minBound);\n return r.minInclusive ? cmp < 0 : cmp <= 0;\n }\n\n const minBound = getFloatingRangeLowerBound(r);\n return compare(v, minBound) < 0;\n }\n\n getSatisfyingVersion(versions: string[], range: string): string | null {\n const r = parseRange(range);\n if (r) {\n let result: string | null = null;\n let vMax: NugetVersion | undefined;\n for (const version of versions) {\n const v = parseVersion(version);\n if (!v) {\n continue;\n }\n\n if (!matches(v, r)) {\n continue;\n }\n\n if (!vMax || compare(v, vMax) > 0) {\n vMax = v;\n result = version;\n }\n }\n\n return result;\n }\n\n const u = parseVersion(range);\n if (u) {\n let result: string | null = null;\n let vMax: NugetVersion | undefined;\n for (const version of versions) {\n const v = parseVersion(version);\n if (!v) {\n continue;\n }\n\n // A bare version acts as a min-version range, but it should\n // still respect stability: a stable pin must not match a\n // pre-release version.\n if (v.prerelease && !u.prerelease) {\n continue;\n }\n\n if (compare(v, u) < 0) {\n continue;\n }\n\n if (!vMax || compare(v, vMax) > 0) {\n vMax = v;\n result = version;\n }\n }\n\n return result;\n }\n\n return null;\n }\n\n minSatisfyingVersion(versions: string[], range: string): string | null {\n const r = parseRange(range);\n if (r) {\n let result: string | null = null;\n let vMin: NugetVersion | undefined;\n for (const version of versions) {\n const v = parseVersion(version);\n if (!v) {\n continue;\n }\n\n if (!matches(v, r)) {\n continue;\n }\n\n if (!vMin || compare(v, vMin) < 0) {\n result = version;\n vMin = v;\n }\n }\n\n return result;\n }\n\n const u = parseVersion(range);\n if (u) {\n let result: string | null = null;\n let vMin: NugetVersion | undefined;\n for (const version of versions) {\n const v = parseVersion(version);\n if (!v) {\n continue;\n }\n\n if (compare(v, u) < 0) {\n continue;\n }\n\n if (!vMin || compare(v, vMin) < 0) {\n result = version;\n vMin = v;\n }\n }\n\n return result;\n }\n\n return null;\n }\n\n getPinnedValue(newVersion: string): string {\n const v = parseVersion(newVersion);\n if (!v) {\n return '';\n }\n return rangeToString({ type: 'nuget-exact-range', version: v });\n }\n\n getNewValue({ currentValue, newVersion }: NewValueConfig): string | null {\n const v = parseVersion(newVersion);\n if (!v) {\n return null;\n }\n\n if (this.isVersion(currentValue)) {\n return newVersion;\n }\n\n const r = parseRange(currentValue);\n if (!r) {\n return null;\n }\n\n if (this.isLessThanRange(newVersion, currentValue)) {\n return currentValue;\n }\n\n if (r.type === 'nuget-exact-range') {\n return rangeToString({ type: 'nuget-exact-range', version: v });\n }\n\n if (r.type === 'nuget-floating-range') {\n const floating = r.floating;\n if (!floating) {\n return versionToString(v);\n }\n\n const res: NugetFloatingRange = { ...r };\n\n if (floating === 'major') {\n res.major = coerceFloatingComponent(v.major);\n return tryBump(res, v, currentValue);\n }\n res.major = v.major;\n\n if (floating === 'minor') {\n res.minor = coerceFloatingComponent(v.minor);\n return tryBump(res, v, currentValue);\n }\n res.minor = v.minor ?? 0;\n\n if (floating === 'patch') {\n res.patch = coerceFloatingComponent(v.patch);\n return tryBump(res, v, currentValue);\n }\n res.patch = v.patch ?? 0;\n\n res.revision = coerceFloatingComponent(v.revision);\n return tryBump(res, v, currentValue);\n }\n\n const res: NugetBracketRange = { ...r };\n\n if (!r.max) {\n res.min = v;\n res.minInclusive = true;\n return rangeToString(res);\n }\n\n if (matches(v, r)) {\n return currentValue;\n }\n\n if (!r.min) {\n res.max = v;\n res.maxInclusive = true;\n return rangeToString(res);\n }\n\n res.max = v;\n res.maxInclusive = true;\n return rangeToString(res);\n }\n\n sortVersions(version: string, other: string): number {\n const x = parseVersion(version);\n const y = parseVersion(other);\n if (!x || !y) {\n return 0;\n }\n\n return compare(x, y);\n }\n\n matches(version: string, range: string): boolean {\n const v = parseVersion(version);\n if (!v) {\n return false;\n }\n\n const u = parseVersion(range);\n if (u) {\n // A bare version acts as a min-version range, but it should\n // still respect stability: a stable pin must not match a\n // pre-release version.\n if (v.prerelease && !u.prerelease) {\n return false;\n }\n return compare(v, u) >= 0;\n }\n\n const r = parseRange(range);\n if (!r) {\n return false;\n }\n\n return matches(v, r);\n }\n}\n\nexport const api: VersioningApi = new NugetVersioningApi();\n\nexport default api;\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  //#region lib/util/cache/package/namespaces.d.ts
2
- declare const packageCacheNamespaces: readonly ['_test-namespace', 'changelog-bitbucket-notes@v2', 'changelog-bitbucket-release', 'changelog-bitbucket-server-notes@v2', 'changelog-bitbucket-server-release', 'changelog-forgejo-notes@v2', 'changelog-forgejo-release', 'changelog-gitea-notes@v2', 'changelog-gitea-release', 'changelog-github-notes@v2', 'changelog-github-release', 'changelog-gitlab-notes@v2', 'changelog-gitlab-release', 'datasource-artifactory', 'datasource-aws-machine-image', 'datasource-aws-rds', 'datasource-aws-eks-addon', 'datasource-azure-bicep-resource', 'datasource-azure-pipelines-tasks', 'datasource-azure-tags', 'datasource-bazel', 'datasource-bitbucket-tags', 'datasource-bitbucket-server-tags', 'datasource-bitrise', 'datasource-buildpacks-registry', 'datasource-cdnjs', 'datasource-conan', 'datasource-conda', 'datasource-cpan', 'datasource-crate-metadata', 'datasource-crate', 'datasource-deb', 'datasource-deno', 'datasource-docker-architecture', 'datasource-docker-hub-cache', 'datasource-docker-digest', 'datasource-docker-hub-tags', 'datasource-docker-imageconfig', 'datasource-docker-labels', 'datasource-docker-releases-v2', 'datasource-docker-tags', 'datasource-dotnet-version', 'datasource-elm-package', 'datasource-endoflife-date', 'datasource-galaxy-collection', 'datasource-galaxy', 'datasource-git-refs', 'datasource-git-tags', 'datasource-git', 'datasource-forgejo-releases', 'datasource-forgejo-tags', 'datasource-gitea-releases', 'datasource-gitea-tags', 'datasource-github-digest', 'datasource-github-release-attachments', 'datasource-gitlab-packages', 'datasource-gitlab-releases', 'datasource-gitlab-tags', 'datasource-glasskube-packages', 'datasource-go-direct', 'datasource-go-proxy', 'datasource-go', 'datasource-golang-version', 'datasource-gradle-version', 'datasource-helm', 'datasource-hermit', 'datasource-hex', 'datasource-hexpm-bob', 'datasource-java-version', 'datasource-jenkins-plugins', 'datasource-jsr', 'datasource-maven:cache-provider', 'datasource-maven:metadata-not-found', 'datasource-maven:pom-cache-provider', 'datasource-maven:postprocess-reject', 'datasource-nextcloud', 'datasource-node-version', 'datasource-npm:cache-provider', 'datasource-nuget-v3', 'datasource-orb', 'datasource-packagist', 'datasource-pod', 'datasource-python-version', 'datasource-repology', 'datasource-rpm', 'datasource-ruby-version', 'datasource-rubygems', 'datasource-rust-version', 'datasource-sbt-package', 'datasource-terraform-module', 'datasource-terraform-provider', 'datasource-terraform', 'datasource-typst:cache-provider', 'datasource-typst:registry-releases', 'datasource-unity3d', 'datasource-unity3d-packages', 'github-branches-datasource-v1', 'github-releases-datasource-v2', 'github-tags-datasource-v2', 'merge-confidence', 'preset', 'terraform-provider-hash', 'url-sha256'];
2
+ declare const packageCacheNamespaces: readonly ['_test-namespace', 'changelog-bitbucket-notes@v2', 'changelog-bitbucket-release', 'changelog-bitbucket-server-notes@v2', 'changelog-bitbucket-server-release', 'changelog-forgejo-notes@v2', 'changelog-forgejo-release', 'changelog-gitea-notes@v2', 'changelog-gitea-release', 'changelog-github-notes@v2', 'changelog-github-release', 'changelog-gitlab-notes@v2', 'changelog-gitlab-release', 'datasource-apk', 'datasource-artifactory', 'datasource-aws-machine-image', 'datasource-aws-rds', 'datasource-aws-eks-addon', 'datasource-azure-bicep-resource', 'datasource-azure-pipelines-tasks', 'datasource-azure-tags', 'datasource-bazel', 'datasource-bitbucket-tags', 'datasource-bitbucket-server-tags', 'datasource-bitrise', 'datasource-buildpacks-registry', 'datasource-cdnjs', 'datasource-conan', 'datasource-conda', 'datasource-cpan', 'datasource-crate-metadata', 'datasource-crate', 'datasource-deb', 'datasource-deno', 'datasource-docker-architecture', 'datasource-docker-hub-cache', 'datasource-docker-digest', 'datasource-docker-hub-tags', 'datasource-docker-imageconfig', 'datasource-docker-labels', 'datasource-docker-releases-v2', 'datasource-docker-tags', 'datasource-dotnet-version', 'datasource-elm-package', 'datasource-endoflife-date', 'datasource-galaxy-collection', 'datasource-galaxy', 'datasource-git-refs', 'datasource-git-tags', 'datasource-git', 'datasource-forgejo-releases', 'datasource-forgejo-tags', 'datasource-gitea-releases', 'datasource-gitea-tags', 'datasource-github-digest', 'datasource-github-release-attachments', 'datasource-gitlab-packages', 'datasource-gitlab-releases', 'datasource-gitlab-tags', 'datasource-glasskube-packages', 'datasource-go-direct', 'datasource-go-proxy', 'datasource-go', 'datasource-golang-version', 'datasource-gradle-version', 'datasource-helm', 'datasource-hermit', 'datasource-hex', 'datasource-hexpm-bob', 'datasource-java-version', 'datasource-jenkins-plugins', 'datasource-jsr', 'datasource-maven:cache-provider', 'datasource-maven:metadata-not-found', 'datasource-maven:pom-cache-provider', 'datasource-maven:postprocess-reject', 'datasource-nextcloud', 'datasource-node-version', 'datasource-npm:cache-provider', 'datasource-nuget-v3', 'datasource-orb', 'datasource-packagist', 'datasource-pod', 'datasource-python-version', 'datasource-repology', 'datasource-rpm', 'datasource-ruby-version', 'datasource-rubygems', 'datasource-rust-version', 'datasource-sbt-package', 'datasource-terraform-module', 'datasource-terraform-provider', 'datasource-terraform', 'datasource-typst:cache-provider', 'datasource-typst:registry-releases', 'datasource-unity3d', 'datasource-unity3d-packages', 'github-branches-datasource-v1', 'github-releases-datasource-v2', 'github-tags-datasource-v2', 'merge-confidence', 'preset', 'terraform-provider-hash', 'url-sha256'];
3
3
  type PackageCacheNamespace = (typeof packageCacheNamespaces)[number] | `datasource-releases-${string}`;
4
4
  //#endregion
5
5
  export { PackageCacheNamespace, packageCacheNamespaces };
@@ -14,6 +14,7 @@ const packageCacheNamespaces = [
14
14
  "changelog-github-release",
15
15
  "changelog-gitlab-notes@v2",
16
16
  "changelog-gitlab-release",
17
+ "datasource-apk",
17
18
  "datasource-artifactory",
18
19
  "datasource-aws-machine-image",
19
20
  "datasource-aws-rds",
@@ -1 +1 @@
1
- {"version":3,"file":"namespaces.js","names":[],"sources":["../../../../lib/util/cache/package/namespaces.ts"],"sourcesContent":["// v8 ignore file -- constant namespace list, no executable logic to cover\n/* IMPORTANT:\n * These namespaces below are used as part of the cacheTtlOverride feature\n * It's OK to add to them (e.g. for new datasources) but we should avoid\n * backwards-incompatible changes in non-major releases\n */\n\nexport const packageCacheNamespaces = [\n '_test-namespace',\n 'changelog-bitbucket-notes@v2',\n 'changelog-bitbucket-release',\n 'changelog-bitbucket-server-notes@v2',\n 'changelog-bitbucket-server-release',\n 'changelog-forgejo-notes@v2',\n 'changelog-forgejo-release',\n 'changelog-gitea-notes@v2',\n 'changelog-gitea-release',\n 'changelog-github-notes@v2',\n 'changelog-github-release',\n 'changelog-gitlab-notes@v2',\n 'changelog-gitlab-release',\n 'datasource-artifactory',\n 'datasource-aws-machine-image',\n 'datasource-aws-rds',\n 'datasource-aws-eks-addon',\n 'datasource-azure-bicep-resource',\n 'datasource-azure-pipelines-tasks',\n 'datasource-azure-tags',\n 'datasource-bazel',\n 'datasource-bitbucket-tags',\n 'datasource-bitbucket-server-tags',\n 'datasource-bitrise',\n 'datasource-buildpacks-registry',\n 'datasource-cdnjs',\n 'datasource-conan',\n 'datasource-conda',\n 'datasource-cpan',\n 'datasource-crate-metadata',\n 'datasource-crate',\n 'datasource-deb',\n 'datasource-deno',\n 'datasource-docker-architecture',\n 'datasource-docker-hub-cache',\n 'datasource-docker-digest',\n 'datasource-docker-hub-tags',\n 'datasource-docker-imageconfig',\n 'datasource-docker-labels',\n 'datasource-docker-releases-v2',\n 'datasource-docker-tags',\n 'datasource-dotnet-version',\n 'datasource-elm-package',\n 'datasource-endoflife-date',\n 'datasource-galaxy-collection',\n 'datasource-galaxy',\n 'datasource-git-refs',\n 'datasource-git-tags',\n 'datasource-git',\n 'datasource-forgejo-releases',\n 'datasource-forgejo-tags',\n 'datasource-gitea-releases',\n 'datasource-gitea-tags',\n 'datasource-github-digest',\n 'datasource-github-release-attachments',\n 'datasource-gitlab-packages',\n 'datasource-gitlab-releases',\n 'datasource-gitlab-tags',\n 'datasource-glasskube-packages',\n 'datasource-go-direct',\n 'datasource-go-proxy',\n 'datasource-go',\n 'datasource-golang-version',\n 'datasource-gradle-version',\n 'datasource-helm',\n 'datasource-hermit',\n 'datasource-hex',\n 'datasource-hexpm-bob',\n 'datasource-java-version',\n 'datasource-jenkins-plugins',\n 'datasource-jsr',\n 'datasource-maven:cache-provider',\n 'datasource-maven:metadata-not-found',\n 'datasource-maven:pom-cache-provider',\n 'datasource-maven:postprocess-reject',\n 'datasource-nextcloud',\n 'datasource-node-version',\n 'datasource-npm:cache-provider',\n 'datasource-nuget-v3',\n 'datasource-orb',\n 'datasource-packagist',\n 'datasource-pod',\n 'datasource-python-version',\n 'datasource-repology',\n 'datasource-rpm',\n 'datasource-ruby-version',\n 'datasource-rubygems',\n 'datasource-rust-version',\n 'datasource-sbt-package',\n 'datasource-terraform-module',\n 'datasource-terraform-provider',\n 'datasource-terraform',\n 'datasource-typst:cache-provider',\n 'datasource-typst:registry-releases',\n 'datasource-unity3d',\n 'datasource-unity3d-packages',\n 'github-branches-datasource-v1',\n 'github-releases-datasource-v2',\n 'github-tags-datasource-v2',\n 'merge-confidence',\n 'preset',\n 'terraform-provider-hash',\n 'url-sha256',\n] as const;\n\nexport type PackageCacheNamespace =\n | (typeof packageCacheNamespaces)[number]\n | `datasource-releases-${string}`;\n\nexport type CombinedKey =\n `datasource-mem:pkg-fetch:${PackageCacheNamespace}:${string}`;\n"],"mappings":";;AAOA,MAAa,yBAAyB;CACpC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF"}
1
+ {"version":3,"file":"namespaces.js","names":[],"sources":["../../../../lib/util/cache/package/namespaces.ts"],"sourcesContent":["// v8 ignore file -- constant namespace list, no executable logic to cover\n/* IMPORTANT:\n * These namespaces below are used as part of the cacheTtlOverride feature\n * It's OK to add to them (e.g. for new datasources) but we should avoid\n * backwards-incompatible changes in non-major releases\n */\n\nexport const packageCacheNamespaces = [\n '_test-namespace',\n 'changelog-bitbucket-notes@v2',\n 'changelog-bitbucket-release',\n 'changelog-bitbucket-server-notes@v2',\n 'changelog-bitbucket-server-release',\n 'changelog-forgejo-notes@v2',\n 'changelog-forgejo-release',\n 'changelog-gitea-notes@v2',\n 'changelog-gitea-release',\n 'changelog-github-notes@v2',\n 'changelog-github-release',\n 'changelog-gitlab-notes@v2',\n 'changelog-gitlab-release',\n 'datasource-apk',\n 'datasource-artifactory',\n 'datasource-aws-machine-image',\n 'datasource-aws-rds',\n 'datasource-aws-eks-addon',\n 'datasource-azure-bicep-resource',\n 'datasource-azure-pipelines-tasks',\n 'datasource-azure-tags',\n 'datasource-bazel',\n 'datasource-bitbucket-tags',\n 'datasource-bitbucket-server-tags',\n 'datasource-bitrise',\n 'datasource-buildpacks-registry',\n 'datasource-cdnjs',\n 'datasource-conan',\n 'datasource-conda',\n 'datasource-cpan',\n 'datasource-crate-metadata',\n 'datasource-crate',\n 'datasource-deb',\n 'datasource-deno',\n 'datasource-docker-architecture',\n 'datasource-docker-hub-cache',\n 'datasource-docker-digest',\n 'datasource-docker-hub-tags',\n 'datasource-docker-imageconfig',\n 'datasource-docker-labels',\n 'datasource-docker-releases-v2',\n 'datasource-docker-tags',\n 'datasource-dotnet-version',\n 'datasource-elm-package',\n 'datasource-endoflife-date',\n 'datasource-galaxy-collection',\n 'datasource-galaxy',\n 'datasource-git-refs',\n 'datasource-git-tags',\n 'datasource-git',\n 'datasource-forgejo-releases',\n 'datasource-forgejo-tags',\n 'datasource-gitea-releases',\n 'datasource-gitea-tags',\n 'datasource-github-digest',\n 'datasource-github-release-attachments',\n 'datasource-gitlab-packages',\n 'datasource-gitlab-releases',\n 'datasource-gitlab-tags',\n 'datasource-glasskube-packages',\n 'datasource-go-direct',\n 'datasource-go-proxy',\n 'datasource-go',\n 'datasource-golang-version',\n 'datasource-gradle-version',\n 'datasource-helm',\n 'datasource-hermit',\n 'datasource-hex',\n 'datasource-hexpm-bob',\n 'datasource-java-version',\n 'datasource-jenkins-plugins',\n 'datasource-jsr',\n 'datasource-maven:cache-provider',\n 'datasource-maven:metadata-not-found',\n 'datasource-maven:pom-cache-provider',\n 'datasource-maven:postprocess-reject',\n 'datasource-nextcloud',\n 'datasource-node-version',\n 'datasource-npm:cache-provider',\n 'datasource-nuget-v3',\n 'datasource-orb',\n 'datasource-packagist',\n 'datasource-pod',\n 'datasource-python-version',\n 'datasource-repology',\n 'datasource-rpm',\n 'datasource-ruby-version',\n 'datasource-rubygems',\n 'datasource-rust-version',\n 'datasource-sbt-package',\n 'datasource-terraform-module',\n 'datasource-terraform-provider',\n 'datasource-terraform',\n 'datasource-typst:cache-provider',\n 'datasource-typst:registry-releases',\n 'datasource-unity3d',\n 'datasource-unity3d-packages',\n 'github-branches-datasource-v1',\n 'github-releases-datasource-v2',\n 'github-tags-datasource-v2',\n 'merge-confidence',\n 'preset',\n 'terraform-provider-hash',\n 'url-sha256',\n] as const;\n\nexport type PackageCacheNamespace =\n | (typeof packageCacheNamespaces)[number]\n | `datasource-releases-${string}`;\n\nexport type CombinedKey =\n `datasource-mem:pkg-fetch:${PackageCacheNamespace}:${string}`;\n"],"mappings":";;AAOA,MAAa,yBAAyB;CACpC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF"}
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": "44.62.1",
4
+ "version": "44.63.0",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "renovate": "dist/renovate.js",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$id": "https://docs.renovatebot.com/renovate-schema.json",
3
- "title": "JSON schema for Renovate 44.62.1 config files (https://renovatebot.com/)",
3
+ "title": "JSON schema for Renovate 44.63.0 config files (https://renovatebot.com/)",
4
4
  "$schema": "http://json-schema.org/draft-07/schema#",
5
- "x-renovate-version": "44.62.1",
5
+ "x-renovate-version": "44.63.0",
6
6
  "allowComments": true,
7
7
  "type": "object",
8
8
  "definitions": {