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.
- package/dist/config/presets/internal/workarounds.preset.js +7 -0
- package/dist/config/presets/internal/workarounds.preset.js.map +1 -1
- package/dist/config/validation-helpers/utils.js +15 -2
- package/dist/config/validation-helpers/utils.js.map +1 -1
- package/dist/modules/datasource/api.js +2 -0
- package/dist/modules/datasource/api.js.map +1 -1
- package/dist/modules/datasource/apk/index.js +181 -0
- package/dist/modules/datasource/apk/index.js.map +1 -0
- package/dist/modules/datasource/apk/parser.js +55 -0
- package/dist/modules/datasource/apk/parser.js.map +1 -0
- package/dist/modules/datasource/apk/url.js +96 -0
- package/dist/modules/datasource/apk/url.js.map +1 -0
- package/dist/modules/datasource/artifactory/index.js +1 -1
- package/dist/modules/datasource/postprocess-release.js +1 -1
- package/dist/modules/datasource/postprocess-release.js.map +1 -1
- package/dist/modules/datasource/pypi/index.js +1 -1
- package/dist/modules/datasource/ruby-version/index.js +1 -1
- package/dist/modules/manager/fingerprint.generated.js +43 -43
- package/dist/modules/manager/fingerprint.generated.js.map +1 -1
- package/dist/modules/manager/mix/artifacts.js +1 -1
- package/dist/modules/manager/mix/artifacts.js.map +1 -1
- package/dist/modules/manager/pep621/processors/uv.js +20 -12
- package/dist/modules/manager/pep621/processors/uv.js.map +1 -1
- package/dist/modules/manager/pep621/schema.js +2 -1
- package/dist/modules/manager/pep621/schema.js.map +1 -1
- package/dist/modules/versioning/nuget/index.js +5 -1
- package/dist/modules/versioning/nuget/index.js.map +1 -1
- package/dist/util/cache/package/namespaces.d.ts +1 -1
- package/dist/util/cache/package/namespaces.js +1 -0
- package/dist/util/cache/package/namespaces.js.map +1 -1
- package/package.json +1 -1
- package/renovate-schema.json +2 -2
|
@@ -202,6 +202,13 @@ const presets = {
|
|
|
202
202
|
],
|
|
203
203
|
versioning: "docker"
|
|
204
204
|
},
|
|
205
|
+
{
|
|
206
|
+
description: "Use partial semver versioning for partial mise Java versions so rolling versions (e.g. 21) are not upgraded to full-precision versions (e.g. 21.0.11+9.0.LTS).",
|
|
207
|
+
matchCurrentValue: "/^\\d+(?:\\.\\d+)?$/",
|
|
208
|
+
matchDatasources: ["java-version"],
|
|
209
|
+
matchManagers: ["mise"],
|
|
210
|
+
versioning: "semver-partial"
|
|
211
|
+
},
|
|
205
212
|
{
|
|
206
213
|
allowedVersions: "/^(?:jdk|jdk-all|jre)-(?:8|11|17|21|25)(?:\\.|-|$)/",
|
|
207
214
|
description: "Limit Java runtime versions to LTS releases. To receive all major releases add `workarounds:javaLTSVersions` to the `ignorePresets` array.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workarounds.preset.js","names":[],"sources":["../../../../lib/config/presets/internal/workarounds.preset.ts"],"sourcesContent":["import type { Preset } from '../types.ts';\n\nexport const presets: Record<string, Preset> = {\n all: {\n extends: [\n 'workarounds:mavenCommonsAncientVersion',\n 'workarounds:ignoreSpringCloudNumeric',\n 'workarounds:ignoreWeb3jCoreWithOldReleaseTimestamp',\n 'workarounds:ignoreHttp4sDigestMilestones',\n 'workarounds:typesNodeVersioning',\n 'workarounds:nodeDockerVersioning',\n 'workarounds:doNotUpgradeFromAlpineStableToEdge',\n 'workarounds:supportRedHatImageVersion',\n 'workarounds:javaLTSVersions',\n 'workarounds:disableEclipseLifecycleMapping',\n 'workarounds:disableGradleReplacements',\n 'workarounds:disableMavenParentRoot',\n 'workarounds:containerbase',\n 'workarounds:bitnamiDockerImageVersioning',\n 'workarounds:clamavDockerImageVersioning',\n 'workarounds:grafanaDockerImageVersioning',\n 'workarounds:k3sKubernetesVersioning',\n 'workarounds:rke2KubernetesVersioning',\n 'workarounds:libericaJdkDockerVersioning',\n 'workarounds:ubuntuDockerVersioning',\n ],\n overrideDescription: [\n 'Apply crowd-sourced workarounds for known problems with packages.',\n ],\n },\n bitnamiDockerImageVersioning: {\n description: 'Use custom regex versioning for bitnami images',\n packageRules: [\n {\n matchCurrentValue:\n '/^(?<major>\\\\d+)(?:\\\\.(?<minor>\\\\d+)(?:\\\\.(?<patch>\\\\d+))?)?-(?<compatibility>.+)-(?<build>\\\\d+)(?:-r(?<revision>\\\\d+))?$/',\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'bitnami/**',\n 'docker.io/bitnami/**',\n 'gcr.io/bitnami-containers/**',\n '*-docker.pkg.dev/vmw-app-catalog/**',\n ],\n versioning:\n 'regex:^(?<major>\\\\d+)(?:\\\\.(?<minor>\\\\d+)(?:\\\\.(?<patch>\\\\d+))?)?(:?-(?<compatibility>.+)-(?<build>\\\\d+)(?:-r(?<revision>\\\\d+))?)?$',\n },\n ],\n },\n clamavDockerImageVersioning: {\n description: 'Use custom regex versioning for ClamAV images',\n packageRules: [\n {\n matchDatasources: ['docker'],\n matchPackageNames: ['clamav/clamav', 'clamav/clamav-debian'],\n versioning:\n 'regex:^(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)(\\\\.(?<patch>\\\\d+))?(-(?<build>\\\\d+))?(_(?<compatibility>.+))?$',\n },\n ],\n },\n containerbase: {\n description: 'Add some containerbase overrides.',\n packageRules: [\n {\n description:\n 'Use node versioning for `(containerbase|renovate)/node` images',\n matchDatasources: ['docker'],\n matchPackageNames: [\n '/^(?:(?:docker|ghcr)\\\\.io/)?(?:containerbase|renovate)/node$/',\n ],\n versioning: 'node',\n },\n ],\n },\n disableEclipseLifecycleMapping: {\n description: 'Disable Eclipse m2e lifecycle-mapping placeholder package.',\n packageRules: [\n {\n enabled: false,\n matchDatasources: ['maven'],\n matchPackageNames: ['org.eclipse.m2e:lifecycle-mapping'],\n },\n ],\n },\n disableGradleReplacements: {\n description: 'Disable package replacement updates for gradle dependencies.',\n packageRules: [\n {\n enabled: false,\n matchManagers: ['gradle'],\n matchUpdateTypes: ['replacement'],\n },\n ],\n },\n disableMavenParentRoot: {\n description:\n 'Avoid version fetching for Maven packages detected as project root.',\n packageRules: [\n {\n enabled: false,\n matchDepTypes: ['parent-root'],\n matchManagers: ['maven'],\n },\n ],\n },\n doNotUpgradeFromAlpineStableToEdge: {\n description: 'Do not upgrade from Alpine stable to edge.',\n packageRules: [\n {\n allowedVersions: '<20000000',\n matchCurrentVersion: '!/^\\\\d{8}$/',\n matchDatasources: ['docker'],\n matchDepNames: ['alpine'],\n },\n {\n allowedVersions: '<20000000',\n matchCurrentVersion: '!/^\\\\d{8}$/',\n matchDatasources: ['docker'],\n matchPackageNames: ['alpine'],\n },\n ],\n },\n grafanaDockerImageVersioning: {\n description: 'Support security releases on Grafana (product) images',\n packageRules: [\n {\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'grafana/grafana',\n 'docker.io/grafana/grafana',\n 'grafana/grafana-enterprise',\n 'docker.io/grafana/grafana-enterprise',\n ],\n versioning:\n 'regex:^(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(?:-security-(?<build>\\\\d+))?(?:-(?<compatibility>.*))?$',\n },\n ],\n },\n ignoreHttp4sDigestMilestones: {\n description: 'Ignore `http4s` digest-based `1.x` milestones.',\n packageRules: [\n {\n allowedVersions: `!/^1\\\\.0-\\\\d+-[a-fA-F0-9]{7}$/`,\n matchManagers: ['sbt'],\n matchPackageNames: ['org.http4s:**'],\n },\n ],\n },\n ignoreSpringCloudNumeric: {\n description: 'Ignore spring cloud `1.x` releases.',\n packageRules: [\n {\n allowedVersions: '/^[A-Z]/',\n matchDatasources: ['maven'],\n matchPackageNames: [\n 'org.springframework.cloud:spring-cloud-starter-parent',\n ],\n },\n ],\n },\n ignoreWeb3jCoreWithOldReleaseTimestamp: {\n description: 'Ignore `web3j` `5.0.0` release.',\n packageRules: [\n {\n allowedVersions: '!/^5\\\\.0\\\\.0/',\n matchDatasources: ['maven'],\n matchPackageNames: ['org.web3j:core'],\n },\n ],\n },\n javaLTSVersions: {\n description: 'Limit Java runtime versions to LTS releases.',\n packageRules: [\n {\n allowedVersions: '/^(?:8|11|17|21|25)(?:\\\\.|-|$)/',\n description:\n 'Limit Java runtime versions to LTS releases. To receive all major releases add `workarounds:javaLTSVersions` to the `ignorePresets` array.',\n matchDatasources: ['docker', 'java-version'],\n matchPackageNames: [\n 'eclipse-temurin',\n 'amazoncorretto',\n 'adoptopenjdk',\n 'openjdk',\n 'java',\n 'java-jdk',\n 'java-jre',\n 'sapmachine',\n '/^azul/zulu-openjdk/',\n '/^bellsoft/liberica-openj(dk|re)-/',\n '/^cimg/openjdk/',\n ],\n versioning:\n 'regex:^(?<major>\\\\d+)?(\\\\.(?<minor>\\\\d+))?(\\\\.(?<patch>\\\\d+))?([\\\\._+](?<build>(\\\\d\\\\.?)+)(LTS)?)?(-(?<compatibility>.*))?$',\n },\n {\n allowedVersions: '/^(?:8|11|17|21|25)(?:\\\\.|-|$)/',\n description:\n 'Limit Java runtime versions to LTS releases. To receive all major releases add `workarounds:javaLTSVersions` to the `ignorePresets` array.',\n matchDatasources: ['docker', 'java-version'],\n matchDepNames: [\n 'eclipse-temurin',\n 'amazoncorretto',\n 'adoptopenjdk',\n 'openjdk',\n 'java',\n 'java-jre',\n 'sapmachine',\n ],\n versioning:\n 'regex:^(?<major>\\\\d+)?(\\\\.(?<minor>\\\\d+))?(\\\\.(?<patch>\\\\d+))?([\\\\._+](?<build>(\\\\d\\\\.?)+)(LTS)?)?(-(?<compatibility>.*))?$',\n },\n {\n description:\n 'Use docker versioning for major-only Java image tags so rolling tags (e.g. 21-jre) are not upgraded to full-precision tags (e.g. 21.0.11_10-jre).',\n matchCurrentValue: '/^\\\\d+(-|$)/',\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'eclipse-temurin',\n 'amazoncorretto',\n 'adoptopenjdk',\n 'openjdk',\n 'java',\n 'java-jdk',\n 'java-jre',\n 'sapmachine',\n '/^azul/zulu-openjdk/',\n '/^bellsoft/liberica-openj(dk|re)-/',\n '/^cimg/openjdk/',\n ],\n versioning: 'docker',\n },\n {\n description:\n 'Use docker versioning for major-only Java image tags so rolling tags (e.g. 21-jre) are not upgraded to full-precision tags (e.g. 21.0.11_10-jre).',\n matchCurrentValue: '/^\\\\d+(-|$)/',\n matchDatasources: ['docker'],\n matchDepNames: [\n 'eclipse-temurin',\n 'amazoncorretto',\n 'adoptopenjdk',\n 'openjdk',\n 'java',\n 'java-jre',\n 'sapmachine',\n ],\n versioning: 'docker',\n },\n {\n allowedVersions: '/^(?:jdk|jdk-all|jre)-(?:8|11|17|21|25)(?:\\\\.|-|$)/',\n description:\n 'Limit Java runtime versions to LTS releases. To receive all major releases add `workarounds:javaLTSVersions` to the `ignorePresets` array.',\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'bellsoft/hardened-liberica-runtime-container',\n 'bellsoft/liberica-runtime-container',\n ],\n },\n ],\n },\n k3sKubernetesVersioning: {\n description: 'Use custom regex versioning for k3s-io/k3s',\n packageRules: [\n {\n matchDatasources: ['github-releases'],\n matchPackageNames: ['k3s-io/k3s'],\n versioning:\n 'regex:^v(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(?:-(?<prerelease>[a-z]+\\\\d+))?(?<compatibility>\\\\+k3s)(?<build>\\\\d+)$',\n },\n ],\n },\n libericaJdkDockerVersioning: {\n description:\n 'Use custom regex versioning for bellsoft/liberica-runtime-container',\n packageRules: [\n {\n description: 'Liberica JDK Lite version optimized for the Cloud',\n matchCurrentValue: '/^jdk-[^a][^l]{2}/',\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'bellsoft/hardened-liberica-runtime-container',\n 'bellsoft/liberica-runtime-container',\n ],\n versioning:\n 'regex:^jdk-(?<major>\\\\d+)?(\\\\.(?<minor>\\\\d+))?(\\\\.(?<patch>\\\\d+))?([\\\\._+](?<build>(\\\\d\\\\.?)+))?(-(?<compatibility>.*))?$',\n },\n {\n description:\n 'Liberica JDK that can be used to create a custom runtime with a help of jlink tool',\n matchCurrentValue: '/^jdk-all/',\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'bellsoft/hardened-liberica-runtime-container',\n 'bellsoft/liberica-runtime-container',\n ],\n versioning:\n 'regex:^jdk-all-(?<major>\\\\d+)?(\\\\.(?<minor>\\\\d+))?(\\\\.(?<patch>\\\\d+))?([\\\\._+](?<build>(\\\\d\\\\.?)+))?(-(?<compatibility>.*))?$',\n },\n {\n description:\n 'Liberica JRE (only the runtime without the rest of JDK tools) for running Java applications',\n matchCurrentValue: '/^jre-/',\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'bellsoft/hardened-liberica-runtime-container',\n 'bellsoft/liberica-runtime-container',\n ],\n versioning:\n 'regex:^jre-(?<major>\\\\d+)?(\\\\.(?<minor>\\\\d+))?(\\\\.(?<patch>\\\\d+))?([\\\\._+](?<build>(\\\\d\\\\.?)+))?(-(?<compatibility>.*))?$',\n },\n ],\n },\n mavenCommonsAncientVersion: {\n description: 'Fix some problems with very old Maven commons versions.',\n packageRules: [\n {\n allowedVersions: '!/^200\\\\d{5}(\\\\.\\\\d+)?/',\n matchDatasources: ['maven', 'sbt-package'],\n matchPackageNames: ['commons-**'],\n },\n ],\n },\n nodeDockerVersioning: {\n description: 'Use node versioning for `node` docker images.',\n packageRules: [\n {\n matchDatasources: ['docker'],\n // copied from https://github.com/renovatebot/renovate/blob/a471762e137619c06e73a678d6b63ca984da7dba/lib/config/presets/internal/group.ts#L351\n matchPackageNames: [\n '/(?:^|/)node$/', // node or ends with \"/node, except those below\"\n '!calico/node',\n '!docker.io/calico/node',\n '!ghcr.io/devcontainers/features/node',\n '!kindest/node',\n '!docker.io/kindest/node',\n ],\n versionCompatibility: '^(?<version>[^-]+)(?<compatibility>-.*)?$',\n versioning: 'node',\n },\n ],\n },\n rke2KubernetesVersioning: {\n description: 'Use custom regex versioning for rancher/rke2',\n packageRules: [\n {\n matchDatasources: ['github-releases'],\n matchPackageNames: ['rancher/rke2'],\n versioning:\n 'regex:^v(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(?:-(?<prerelease>[a-z]+\\\\d+))?(?<compatibility>\\\\+rke2r)(?<build>\\\\d+)$',\n },\n ],\n },\n supportRedHatImageVersion: {\n description:\n 'Use specific versioning for Red Hat-maintained container images.',\n packageRules: [\n {\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'registry.access.redhat.com/rhel',\n 'registry.access.redhat.com/rhel-atomic',\n 'registry.access.redhat.com/rhel-init',\n 'registry.access.redhat.com/rhel-minimal',\n 'registry.access.redhat.com/rhceph/**',\n 'registry.access.redhat.com/rhgs3/**',\n 'registry.access.redhat.com/rhel7**',\n 'registry.access.redhat.com/rhel8/**',\n 'registry.access.redhat.com/rhel9/**',\n 'registry.access.redhat.com/rhscl/**',\n 'registry.access.redhat.com/ubi*{,/}**',\n 'redhat/**',\n ],\n versioning: 'redhat',\n },\n ],\n },\n typesNodeVersioning: {\n description: 'Use node versioning for `@types/node`.',\n packageRules: [\n {\n matchManagers: ['npm'],\n matchPackageNames: ['@types/node'],\n versioning: `node`,\n },\n ],\n },\n ubuntuDockerVersioning: {\n description: 'Use ubuntu versioning for `ubuntu` docker images.',\n packageRules: [\n {\n matchDatasources: ['docker'],\n matchDepNames: ['ubuntu'],\n versioning: 'ubuntu',\n },\n ],\n },\n};\n"],"mappings":";AAEA,MAAa,UAAkC;CAC7C,KAAK;EACH,SAAS;GACP;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,qBAAqB,CACnB,mEACF;CACF;CACA,8BAA8B;EAC5B,aAAa;EACb,cAAc,CACZ;GACE,mBACE;GACF,kBAAkB,CAAC,QAAQ;GAC3B,mBAAmB;IACjB;IACA;IACA;IACA;GACF;GACA,YACE;EACJ,CACF;CACF;CACA,6BAA6B;EAC3B,aAAa;EACb,cAAc,CACZ;GACE,kBAAkB,CAAC,QAAQ;GAC3B,mBAAmB,CAAC,iBAAiB,sBAAsB;GAC3D,YACE;EACJ,CACF;CACF;CACA,eAAe;EACb,aAAa;EACb,cAAc,CACZ;GACE,aACE;GACF,kBAAkB,CAAC,QAAQ;GAC3B,mBAAmB,CACjB,+DACF;GACA,YAAY;EACd,CACF;CACF;CACA,gCAAgC;EAC9B,aAAa;EACb,cAAc,CACZ;GACE,SAAS;GACT,kBAAkB,CAAC,OAAO;GAC1B,mBAAmB,CAAC,mCAAmC;EACzD,CACF;CACF;CACA,2BAA2B;EACzB,aAAa;EACb,cAAc,CACZ;GACE,SAAS;GACT,eAAe,CAAC,QAAQ;GACxB,kBAAkB,CAAC,aAAa;EAClC,CACF;CACF;CACA,wBAAwB;EACtB,aACE;EACF,cAAc,CACZ;GACE,SAAS;GACT,eAAe,CAAC,aAAa;GAC7B,eAAe,CAAC,OAAO;EACzB,CACF;CACF;CACA,oCAAoC;EAClC,aAAa;EACb,cAAc,CACZ;GACE,iBAAiB;GACjB,qBAAqB;GACrB,kBAAkB,CAAC,QAAQ;GAC3B,eAAe,CAAC,QAAQ;EAC1B,GACA;GACE,iBAAiB;GACjB,qBAAqB;GACrB,kBAAkB,CAAC,QAAQ;GAC3B,mBAAmB,CAAC,QAAQ;EAC9B,CACF;CACF;CACA,8BAA8B;EAC5B,aAAa;EACb,cAAc,CACZ;GACE,kBAAkB,CAAC,QAAQ;GAC3B,mBAAmB;IACjB;IACA;IACA;IACA;GACF;GACA,YACE;EACJ,CACF;CACF;CACA,8BAA8B;EAC5B,aAAa;EACb,cAAc,CACZ;GACE,iBAAiB;GACjB,eAAe,CAAC,KAAK;GACrB,mBAAmB,CAAC,eAAe;EACrC,CACF;CACF;CACA,0BAA0B;EACxB,aAAa;EACb,cAAc,CACZ;GACE,iBAAiB;GACjB,kBAAkB,CAAC,OAAO;GAC1B,mBAAmB,CACjB,uDACF;EACF,CACF;CACF;CACA,wCAAwC;EACtC,aAAa;EACb,cAAc,CACZ;GACE,iBAAiB;GACjB,kBAAkB,CAAC,OAAO;GAC1B,mBAAmB,CAAC,gBAAgB;EACtC,CACF;CACF;CACA,iBAAiB;EACf,aAAa;EACb,cAAc;GACZ;IACE,iBAAiB;IACjB,aACE;IACF,kBAAkB,CAAC,UAAU,cAAc;IAC3C,mBAAmB;KACjB;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IACF;IACA,YACE;GACJ;GACA;IACE,iBAAiB;IACjB,aACE;IACF,kBAAkB,CAAC,UAAU,cAAc;IAC3C,eAAe;KACb;KACA;KACA;KACA;KACA;KACA;KACA;IACF;IACA,YACE;GACJ;GACA;IACE,aACE;IACF,mBAAmB;IACnB,kBAAkB,CAAC,QAAQ;IAC3B,mBAAmB;KACjB;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IACF;IACA,YAAY;GACd;GACA;IACE,aACE;IACF,mBAAmB;IACnB,kBAAkB,CAAC,QAAQ;IAC3B,eAAe;KACb;KACA;KACA;KACA;KACA;KACA;KACA;IACF;IACA,YAAY;GACd;GACA;IACE,iBAAiB;IACjB,aACE;IACF,kBAAkB,CAAC,QAAQ;IAC3B,mBAAmB,CACjB,gDACA,qCACF;GACF;EACF;CACF;CACA,yBAAyB;EACvB,aAAa;EACb,cAAc,CACZ;GACE,kBAAkB,CAAC,iBAAiB;GACpC,mBAAmB,CAAC,YAAY;GAChC,YACE;EACJ,CACF;CACF;CACA,6BAA6B;EAC3B,aACE;EACF,cAAc;GACZ;IACE,aAAa;IACb,mBAAmB;IACnB,kBAAkB,CAAC,QAAQ;IAC3B,mBAAmB,CACjB,gDACA,qCACF;IACA,YACE;GACJ;GACA;IACE,aACE;IACF,mBAAmB;IACnB,kBAAkB,CAAC,QAAQ;IAC3B,mBAAmB,CACjB,gDACA,qCACF;IACA,YACE;GACJ;GACA;IACE,aACE;IACF,mBAAmB;IACnB,kBAAkB,CAAC,QAAQ;IAC3B,mBAAmB,CACjB,gDACA,qCACF;IACA,YACE;GACJ;EACF;CACF;CACA,4BAA4B;EAC1B,aAAa;EACb,cAAc,CACZ;GACE,iBAAiB;GACjB,kBAAkB,CAAC,SAAS,aAAa;GACzC,mBAAmB,CAAC,YAAY;EAClC,CACF;CACF;CACA,sBAAsB;EACpB,aAAa;EACb,cAAc,CACZ;GACE,kBAAkB,CAAC,QAAQ;GAE3B,mBAAmB;IACjB;IACA;IACA;IACA;IACA;IACA;GACF;GACA,sBAAsB;GACtB,YAAY;EACd,CACF;CACF;CACA,0BAA0B;EACxB,aAAa;EACb,cAAc,CACZ;GACE,kBAAkB,CAAC,iBAAiB;GACpC,mBAAmB,CAAC,cAAc;GAClC,YACE;EACJ,CACF;CACF;CACA,2BAA2B;EACzB,aACE;EACF,cAAc,CACZ;GACE,kBAAkB,CAAC,QAAQ;GAC3B,mBAAmB;IACjB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GACA,YAAY;EACd,CACF;CACF;CACA,qBAAqB;EACnB,aAAa;EACb,cAAc,CACZ;GACE,eAAe,CAAC,KAAK;GACrB,mBAAmB,CAAC,aAAa;GACjC,YAAY;EACd,CACF;CACF;CACA,wBAAwB;EACtB,aAAa;EACb,cAAc,CACZ;GACE,kBAAkB,CAAC,QAAQ;GAC3B,eAAe,CAAC,QAAQ;GACxB,YAAY;EACd,CACF;CACF;AACF"}
|
|
1
|
+
{"version":3,"file":"workarounds.preset.js","names":[],"sources":["../../../../lib/config/presets/internal/workarounds.preset.ts"],"sourcesContent":["import type { Preset } from '../types.ts';\n\nexport const presets: Record<string, Preset> = {\n all: {\n extends: [\n 'workarounds:mavenCommonsAncientVersion',\n 'workarounds:ignoreSpringCloudNumeric',\n 'workarounds:ignoreWeb3jCoreWithOldReleaseTimestamp',\n 'workarounds:ignoreHttp4sDigestMilestones',\n 'workarounds:typesNodeVersioning',\n 'workarounds:nodeDockerVersioning',\n 'workarounds:doNotUpgradeFromAlpineStableToEdge',\n 'workarounds:supportRedHatImageVersion',\n 'workarounds:javaLTSVersions',\n 'workarounds:disableEclipseLifecycleMapping',\n 'workarounds:disableGradleReplacements',\n 'workarounds:disableMavenParentRoot',\n 'workarounds:containerbase',\n 'workarounds:bitnamiDockerImageVersioning',\n 'workarounds:clamavDockerImageVersioning',\n 'workarounds:grafanaDockerImageVersioning',\n 'workarounds:k3sKubernetesVersioning',\n 'workarounds:rke2KubernetesVersioning',\n 'workarounds:libericaJdkDockerVersioning',\n 'workarounds:ubuntuDockerVersioning',\n ],\n overrideDescription: [\n 'Apply crowd-sourced workarounds for known problems with packages.',\n ],\n },\n bitnamiDockerImageVersioning: {\n description: 'Use custom regex versioning for bitnami images',\n packageRules: [\n {\n matchCurrentValue:\n '/^(?<major>\\\\d+)(?:\\\\.(?<minor>\\\\d+)(?:\\\\.(?<patch>\\\\d+))?)?-(?<compatibility>.+)-(?<build>\\\\d+)(?:-r(?<revision>\\\\d+))?$/',\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'bitnami/**',\n 'docker.io/bitnami/**',\n 'gcr.io/bitnami-containers/**',\n '*-docker.pkg.dev/vmw-app-catalog/**',\n ],\n versioning:\n 'regex:^(?<major>\\\\d+)(?:\\\\.(?<minor>\\\\d+)(?:\\\\.(?<patch>\\\\d+))?)?(:?-(?<compatibility>.+)-(?<build>\\\\d+)(?:-r(?<revision>\\\\d+))?)?$',\n },\n ],\n },\n clamavDockerImageVersioning: {\n description: 'Use custom regex versioning for ClamAV images',\n packageRules: [\n {\n matchDatasources: ['docker'],\n matchPackageNames: ['clamav/clamav', 'clamav/clamav-debian'],\n versioning:\n 'regex:^(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)(\\\\.(?<patch>\\\\d+))?(-(?<build>\\\\d+))?(_(?<compatibility>.+))?$',\n },\n ],\n },\n containerbase: {\n description: 'Add some containerbase overrides.',\n packageRules: [\n {\n description:\n 'Use node versioning for `(containerbase|renovate)/node` images',\n matchDatasources: ['docker'],\n matchPackageNames: [\n '/^(?:(?:docker|ghcr)\\\\.io/)?(?:containerbase|renovate)/node$/',\n ],\n versioning: 'node',\n },\n ],\n },\n disableEclipseLifecycleMapping: {\n description: 'Disable Eclipse m2e lifecycle-mapping placeholder package.',\n packageRules: [\n {\n enabled: false,\n matchDatasources: ['maven'],\n matchPackageNames: ['org.eclipse.m2e:lifecycle-mapping'],\n },\n ],\n },\n disableGradleReplacements: {\n description: 'Disable package replacement updates for gradle dependencies.',\n packageRules: [\n {\n enabled: false,\n matchManagers: ['gradle'],\n matchUpdateTypes: ['replacement'],\n },\n ],\n },\n disableMavenParentRoot: {\n description:\n 'Avoid version fetching for Maven packages detected as project root.',\n packageRules: [\n {\n enabled: false,\n matchDepTypes: ['parent-root'],\n matchManagers: ['maven'],\n },\n ],\n },\n doNotUpgradeFromAlpineStableToEdge: {\n description: 'Do not upgrade from Alpine stable to edge.',\n packageRules: [\n {\n allowedVersions: '<20000000',\n matchCurrentVersion: '!/^\\\\d{8}$/',\n matchDatasources: ['docker'],\n matchDepNames: ['alpine'],\n },\n {\n allowedVersions: '<20000000',\n matchCurrentVersion: '!/^\\\\d{8}$/',\n matchDatasources: ['docker'],\n matchPackageNames: ['alpine'],\n },\n ],\n },\n grafanaDockerImageVersioning: {\n description: 'Support security releases on Grafana (product) images',\n packageRules: [\n {\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'grafana/grafana',\n 'docker.io/grafana/grafana',\n 'grafana/grafana-enterprise',\n 'docker.io/grafana/grafana-enterprise',\n ],\n versioning:\n 'regex:^(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(?:-security-(?<build>\\\\d+))?(?:-(?<compatibility>.*))?$',\n },\n ],\n },\n ignoreHttp4sDigestMilestones: {\n description: 'Ignore `http4s` digest-based `1.x` milestones.',\n packageRules: [\n {\n allowedVersions: `!/^1\\\\.0-\\\\d+-[a-fA-F0-9]{7}$/`,\n matchManagers: ['sbt'],\n matchPackageNames: ['org.http4s:**'],\n },\n ],\n },\n ignoreSpringCloudNumeric: {\n description: 'Ignore spring cloud `1.x` releases.',\n packageRules: [\n {\n allowedVersions: '/^[A-Z]/',\n matchDatasources: ['maven'],\n matchPackageNames: [\n 'org.springframework.cloud:spring-cloud-starter-parent',\n ],\n },\n ],\n },\n ignoreWeb3jCoreWithOldReleaseTimestamp: {\n description: 'Ignore `web3j` `5.0.0` release.',\n packageRules: [\n {\n allowedVersions: '!/^5\\\\.0\\\\.0/',\n matchDatasources: ['maven'],\n matchPackageNames: ['org.web3j:core'],\n },\n ],\n },\n javaLTSVersions: {\n description: 'Limit Java runtime versions to LTS releases.',\n packageRules: [\n {\n allowedVersions: '/^(?:8|11|17|21|25)(?:\\\\.|-|$)/',\n description:\n 'Limit Java runtime versions to LTS releases. To receive all major releases add `workarounds:javaLTSVersions` to the `ignorePresets` array.',\n matchDatasources: ['docker', 'java-version'],\n matchPackageNames: [\n 'eclipse-temurin',\n 'amazoncorretto',\n 'adoptopenjdk',\n 'openjdk',\n 'java',\n 'java-jdk',\n 'java-jre',\n 'sapmachine',\n '/^azul/zulu-openjdk/',\n '/^bellsoft/liberica-openj(dk|re)-/',\n '/^cimg/openjdk/',\n ],\n versioning:\n 'regex:^(?<major>\\\\d+)?(\\\\.(?<minor>\\\\d+))?(\\\\.(?<patch>\\\\d+))?([\\\\._+](?<build>(\\\\d\\\\.?)+)(LTS)?)?(-(?<compatibility>.*))?$',\n },\n {\n allowedVersions: '/^(?:8|11|17|21|25)(?:\\\\.|-|$)/',\n description:\n 'Limit Java runtime versions to LTS releases. To receive all major releases add `workarounds:javaLTSVersions` to the `ignorePresets` array.',\n matchDatasources: ['docker', 'java-version'],\n matchDepNames: [\n 'eclipse-temurin',\n 'amazoncorretto',\n 'adoptopenjdk',\n 'openjdk',\n 'java',\n 'java-jre',\n 'sapmachine',\n ],\n versioning:\n 'regex:^(?<major>\\\\d+)?(\\\\.(?<minor>\\\\d+))?(\\\\.(?<patch>\\\\d+))?([\\\\._+](?<build>(\\\\d\\\\.?)+)(LTS)?)?(-(?<compatibility>.*))?$',\n },\n {\n description:\n 'Use docker versioning for major-only Java image tags so rolling tags (e.g. 21-jre) are not upgraded to full-precision tags (e.g. 21.0.11_10-jre).',\n matchCurrentValue: '/^\\\\d+(-|$)/',\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'eclipse-temurin',\n 'amazoncorretto',\n 'adoptopenjdk',\n 'openjdk',\n 'java',\n 'java-jdk',\n 'java-jre',\n 'sapmachine',\n '/^azul/zulu-openjdk/',\n '/^bellsoft/liberica-openj(dk|re)-/',\n '/^cimg/openjdk/',\n ],\n versioning: 'docker',\n },\n {\n description:\n 'Use docker versioning for major-only Java image tags so rolling tags (e.g. 21-jre) are not upgraded to full-precision tags (e.g. 21.0.11_10-jre).',\n matchCurrentValue: '/^\\\\d+(-|$)/',\n matchDatasources: ['docker'],\n matchDepNames: [\n 'eclipse-temurin',\n 'amazoncorretto',\n 'adoptopenjdk',\n 'openjdk',\n 'java',\n 'java-jre',\n 'sapmachine',\n ],\n versioning: 'docker',\n },\n {\n description:\n 'Use partial semver versioning for partial mise Java versions so rolling versions (e.g. 21) are not upgraded to full-precision versions (e.g. 21.0.11+9.0.LTS).',\n matchCurrentValue: '/^\\\\d+(?:\\\\.\\\\d+)?$/',\n matchDatasources: ['java-version'],\n matchManagers: ['mise'],\n versioning: 'semver-partial',\n },\n {\n allowedVersions: '/^(?:jdk|jdk-all|jre)-(?:8|11|17|21|25)(?:\\\\.|-|$)/',\n description:\n 'Limit Java runtime versions to LTS releases. To receive all major releases add `workarounds:javaLTSVersions` to the `ignorePresets` array.',\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'bellsoft/hardened-liberica-runtime-container',\n 'bellsoft/liberica-runtime-container',\n ],\n },\n ],\n },\n k3sKubernetesVersioning: {\n description: 'Use custom regex versioning for k3s-io/k3s',\n packageRules: [\n {\n matchDatasources: ['github-releases'],\n matchPackageNames: ['k3s-io/k3s'],\n versioning:\n 'regex:^v(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(?:-(?<prerelease>[a-z]+\\\\d+))?(?<compatibility>\\\\+k3s)(?<build>\\\\d+)$',\n },\n ],\n },\n libericaJdkDockerVersioning: {\n description:\n 'Use custom regex versioning for bellsoft/liberica-runtime-container',\n packageRules: [\n {\n description: 'Liberica JDK Lite version optimized for the Cloud',\n matchCurrentValue: '/^jdk-[^a][^l]{2}/',\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'bellsoft/hardened-liberica-runtime-container',\n 'bellsoft/liberica-runtime-container',\n ],\n versioning:\n 'regex:^jdk-(?<major>\\\\d+)?(\\\\.(?<minor>\\\\d+))?(\\\\.(?<patch>\\\\d+))?([\\\\._+](?<build>(\\\\d\\\\.?)+))?(-(?<compatibility>.*))?$',\n },\n {\n description:\n 'Liberica JDK that can be used to create a custom runtime with a help of jlink tool',\n matchCurrentValue: '/^jdk-all/',\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'bellsoft/hardened-liberica-runtime-container',\n 'bellsoft/liberica-runtime-container',\n ],\n versioning:\n 'regex:^jdk-all-(?<major>\\\\d+)?(\\\\.(?<minor>\\\\d+))?(\\\\.(?<patch>\\\\d+))?([\\\\._+](?<build>(\\\\d\\\\.?)+))?(-(?<compatibility>.*))?$',\n },\n {\n description:\n 'Liberica JRE (only the runtime without the rest of JDK tools) for running Java applications',\n matchCurrentValue: '/^jre-/',\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'bellsoft/hardened-liberica-runtime-container',\n 'bellsoft/liberica-runtime-container',\n ],\n versioning:\n 'regex:^jre-(?<major>\\\\d+)?(\\\\.(?<minor>\\\\d+))?(\\\\.(?<patch>\\\\d+))?([\\\\._+](?<build>(\\\\d\\\\.?)+))?(-(?<compatibility>.*))?$',\n },\n ],\n },\n mavenCommonsAncientVersion: {\n description: 'Fix some problems with very old Maven commons versions.',\n packageRules: [\n {\n allowedVersions: '!/^200\\\\d{5}(\\\\.\\\\d+)?/',\n matchDatasources: ['maven', 'sbt-package'],\n matchPackageNames: ['commons-**'],\n },\n ],\n },\n nodeDockerVersioning: {\n description: 'Use node versioning for `node` docker images.',\n packageRules: [\n {\n matchDatasources: ['docker'],\n // copied from https://github.com/renovatebot/renovate/blob/a471762e137619c06e73a678d6b63ca984da7dba/lib/config/presets/internal/group.ts#L351\n matchPackageNames: [\n '/(?:^|/)node$/', // node or ends with \"/node, except those below\"\n '!calico/node',\n '!docker.io/calico/node',\n '!ghcr.io/devcontainers/features/node',\n '!kindest/node',\n '!docker.io/kindest/node',\n ],\n versionCompatibility: '^(?<version>[^-]+)(?<compatibility>-.*)?$',\n versioning: 'node',\n },\n ],\n },\n rke2KubernetesVersioning: {\n description: 'Use custom regex versioning for rancher/rke2',\n packageRules: [\n {\n matchDatasources: ['github-releases'],\n matchPackageNames: ['rancher/rke2'],\n versioning:\n 'regex:^v(?<major>\\\\d+)\\\\.(?<minor>\\\\d+)\\\\.(?<patch>\\\\d+)(?:-(?<prerelease>[a-z]+\\\\d+))?(?<compatibility>\\\\+rke2r)(?<build>\\\\d+)$',\n },\n ],\n },\n supportRedHatImageVersion: {\n description:\n 'Use specific versioning for Red Hat-maintained container images.',\n packageRules: [\n {\n matchDatasources: ['docker'],\n matchPackageNames: [\n 'registry.access.redhat.com/rhel',\n 'registry.access.redhat.com/rhel-atomic',\n 'registry.access.redhat.com/rhel-init',\n 'registry.access.redhat.com/rhel-minimal',\n 'registry.access.redhat.com/rhceph/**',\n 'registry.access.redhat.com/rhgs3/**',\n 'registry.access.redhat.com/rhel7**',\n 'registry.access.redhat.com/rhel8/**',\n 'registry.access.redhat.com/rhel9/**',\n 'registry.access.redhat.com/rhscl/**',\n 'registry.access.redhat.com/ubi*{,/}**',\n 'redhat/**',\n ],\n versioning: 'redhat',\n },\n ],\n },\n typesNodeVersioning: {\n description: 'Use node versioning for `@types/node`.',\n packageRules: [\n {\n matchManagers: ['npm'],\n matchPackageNames: ['@types/node'],\n versioning: `node`,\n },\n ],\n },\n ubuntuDockerVersioning: {\n description: 'Use ubuntu versioning for `ubuntu` docker images.',\n packageRules: [\n {\n matchDatasources: ['docker'],\n matchDepNames: ['ubuntu'],\n versioning: 'ubuntu',\n },\n ],\n },\n};\n"],"mappings":";AAEA,MAAa,UAAkC;CAC7C,KAAK;EACH,SAAS;GACP;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,qBAAqB,CACnB,mEACF;CACF;CACA,8BAA8B;EAC5B,aAAa;EACb,cAAc,CACZ;GACE,mBACE;GACF,kBAAkB,CAAC,QAAQ;GAC3B,mBAAmB;IACjB;IACA;IACA;IACA;GACF;GACA,YACE;EACJ,CACF;CACF;CACA,6BAA6B;EAC3B,aAAa;EACb,cAAc,CACZ;GACE,kBAAkB,CAAC,QAAQ;GAC3B,mBAAmB,CAAC,iBAAiB,sBAAsB;GAC3D,YACE;EACJ,CACF;CACF;CACA,eAAe;EACb,aAAa;EACb,cAAc,CACZ;GACE,aACE;GACF,kBAAkB,CAAC,QAAQ;GAC3B,mBAAmB,CACjB,+DACF;GACA,YAAY;EACd,CACF;CACF;CACA,gCAAgC;EAC9B,aAAa;EACb,cAAc,CACZ;GACE,SAAS;GACT,kBAAkB,CAAC,OAAO;GAC1B,mBAAmB,CAAC,mCAAmC;EACzD,CACF;CACF;CACA,2BAA2B;EACzB,aAAa;EACb,cAAc,CACZ;GACE,SAAS;GACT,eAAe,CAAC,QAAQ;GACxB,kBAAkB,CAAC,aAAa;EAClC,CACF;CACF;CACA,wBAAwB;EACtB,aACE;EACF,cAAc,CACZ;GACE,SAAS;GACT,eAAe,CAAC,aAAa;GAC7B,eAAe,CAAC,OAAO;EACzB,CACF;CACF;CACA,oCAAoC;EAClC,aAAa;EACb,cAAc,CACZ;GACE,iBAAiB;GACjB,qBAAqB;GACrB,kBAAkB,CAAC,QAAQ;GAC3B,eAAe,CAAC,QAAQ;EAC1B,GACA;GACE,iBAAiB;GACjB,qBAAqB;GACrB,kBAAkB,CAAC,QAAQ;GAC3B,mBAAmB,CAAC,QAAQ;EAC9B,CACF;CACF;CACA,8BAA8B;EAC5B,aAAa;EACb,cAAc,CACZ;GACE,kBAAkB,CAAC,QAAQ;GAC3B,mBAAmB;IACjB;IACA;IACA;IACA;GACF;GACA,YACE;EACJ,CACF;CACF;CACA,8BAA8B;EAC5B,aAAa;EACb,cAAc,CACZ;GACE,iBAAiB;GACjB,eAAe,CAAC,KAAK;GACrB,mBAAmB,CAAC,eAAe;EACrC,CACF;CACF;CACA,0BAA0B;EACxB,aAAa;EACb,cAAc,CACZ;GACE,iBAAiB;GACjB,kBAAkB,CAAC,OAAO;GAC1B,mBAAmB,CACjB,uDACF;EACF,CACF;CACF;CACA,wCAAwC;EACtC,aAAa;EACb,cAAc,CACZ;GACE,iBAAiB;GACjB,kBAAkB,CAAC,OAAO;GAC1B,mBAAmB,CAAC,gBAAgB;EACtC,CACF;CACF;CACA,iBAAiB;EACf,aAAa;EACb,cAAc;GACZ;IACE,iBAAiB;IACjB,aACE;IACF,kBAAkB,CAAC,UAAU,cAAc;IAC3C,mBAAmB;KACjB;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IACF;IACA,YACE;GACJ;GACA;IACE,iBAAiB;IACjB,aACE;IACF,kBAAkB,CAAC,UAAU,cAAc;IAC3C,eAAe;KACb;KACA;KACA;KACA;KACA;KACA;KACA;IACF;IACA,YACE;GACJ;GACA;IACE,aACE;IACF,mBAAmB;IACnB,kBAAkB,CAAC,QAAQ;IAC3B,mBAAmB;KACjB;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IACF;IACA,YAAY;GACd;GACA;IACE,aACE;IACF,mBAAmB;IACnB,kBAAkB,CAAC,QAAQ;IAC3B,eAAe;KACb;KACA;KACA;KACA;KACA;KACA;KACA;IACF;IACA,YAAY;GACd;GACA;IACE,aACE;IACF,mBAAmB;IACnB,kBAAkB,CAAC,cAAc;IACjC,eAAe,CAAC,MAAM;IACtB,YAAY;GACd;GACA;IACE,iBAAiB;IACjB,aACE;IACF,kBAAkB,CAAC,QAAQ;IAC3B,mBAAmB,CACjB,gDACA,qCACF;GACF;EACF;CACF;CACA,yBAAyB;EACvB,aAAa;EACb,cAAc,CACZ;GACE,kBAAkB,CAAC,iBAAiB;GACpC,mBAAmB,CAAC,YAAY;GAChC,YACE;EACJ,CACF;CACF;CACA,6BAA6B;EAC3B,aACE;EACF,cAAc;GACZ;IACE,aAAa;IACb,mBAAmB;IACnB,kBAAkB,CAAC,QAAQ;IAC3B,mBAAmB,CACjB,gDACA,qCACF;IACA,YACE;GACJ;GACA;IACE,aACE;IACF,mBAAmB;IACnB,kBAAkB,CAAC,QAAQ;IAC3B,mBAAmB,CACjB,gDACA,qCACF;IACA,YACE;GACJ;GACA;IACE,aACE;IACF,mBAAmB;IACnB,kBAAkB,CAAC,QAAQ;IAC3B,mBAAmB,CACjB,gDACA,qCACF;IACA,YACE;GACJ;EACF;CACF;CACA,4BAA4B;EAC1B,aAAa;EACb,cAAc,CACZ;GACE,iBAAiB;GACjB,kBAAkB,CAAC,SAAS,aAAa;GACzC,mBAAmB,CAAC,YAAY;EAClC,CACF;CACF;CACA,sBAAsB;EACpB,aAAa;EACb,cAAc,CACZ;GACE,kBAAkB,CAAC,QAAQ;GAE3B,mBAAmB;IACjB;IACA;IACA;IACA;IACA;IACA;GACF;GACA,sBAAsB;GACtB,YAAY;EACd,CACF;CACF;CACA,0BAA0B;EACxB,aAAa;EACb,cAAc,CACZ;GACE,kBAAkB,CAAC,iBAAiB;GACpC,mBAAmB,CAAC,cAAc;GAClC,YACE;EACJ,CACF;CACF;CACA,2BAA2B;EACzB,aACE;EACF,cAAc,CACZ;GACE,kBAAkB,CAAC,QAAQ;GAC3B,mBAAmB;IACjB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GACA,YAAY;EACd,CACF;CACF;CACA,qBAAqB;EACnB,aAAa;EACb,cAAc,CACZ;GACE,eAAe,CAAC,KAAK;GACrB,mBAAmB,CAAC,aAAa;GACjC,YAAY;EACd,CACF;CACF;CACA,wBAAwB;EACtB,aAAa;EACb,cAAc,CACZ;GACE,kBAAkB,CAAC,QAAQ;GAC3B,eAAe,CAAC,QAAQ;GACxB,YAAY;EACd,CACF;CACF;AACF"}
|
|
@@ -54,10 +54,18 @@ function validateRegexManagerFields(customManager, currentPath, errors) {
|
|
|
54
54
|
topic: ConfigValidationTopic.Error,
|
|
55
55
|
message: "Each Custom Manager `matchStrings` array must have at least one item."
|
|
56
56
|
});
|
|
57
|
-
for (const field of ["
|
|
57
|
+
for (const field of ["datasource"]) if (!hasField(customManager, field)) errors.push({
|
|
58
58
|
topic: ConfigValidationTopic.Error,
|
|
59
59
|
message: `Regex Managers must contain ${field}Template configuration or regex group named ${field}`
|
|
60
60
|
});
|
|
61
|
+
const versionFields = ["currentValue", "currentDigest"];
|
|
62
|
+
if (!versionFields.some((field) => hasField(customManager, field))) {
|
|
63
|
+
const templateFields = versionFields.map((field) => `${field}Template`).join(" or ");
|
|
64
|
+
errors.push({
|
|
65
|
+
topic: ConfigValidationTopic.Error,
|
|
66
|
+
message: `Regex Managers must contain ${versionFields.join(" or ")}, their template variants (${templateFields}) or regex groups named after configuration fields`
|
|
67
|
+
});
|
|
68
|
+
}
|
|
61
69
|
if (!["depName", "packageName"].some((field) => hasField(customManager, field))) errors.push({
|
|
62
70
|
topic: ConfigValidationTopic.Error,
|
|
63
71
|
message: `Regex Managers must contain depName or packageName regex groups or templates`
|
|
@@ -81,10 +89,15 @@ function validateJSONataManagerFields(customManager, currentPath, errors) {
|
|
|
81
89
|
topic: ConfigValidationTopic.Error,
|
|
82
90
|
message: `Each Custom Manager must contain a non-empty matchStrings array`
|
|
83
91
|
});
|
|
84
|
-
for (const field of ["
|
|
92
|
+
for (const field of ["datasource"]) if (!hasField(customManager, field)) errors.push({
|
|
85
93
|
topic: ConfigValidationTopic.Error,
|
|
86
94
|
message: `JSONata Managers must contain ${field}Template configuration or ${field} in the query `
|
|
87
95
|
});
|
|
96
|
+
const versionFields = ["currentValue", "currentDigest"];
|
|
97
|
+
if (!versionFields.some((field) => hasField(customManager, field))) errors.push({
|
|
98
|
+
topic: ConfigValidationTopic.Error,
|
|
99
|
+
message: `JSONata Managers must contain ${versionFields.join(" or ")} in the query or their templates`
|
|
100
|
+
});
|
|
88
101
|
if (!["depName", "packageName"].some((field) => hasField(customManager, field))) errors.push({
|
|
89
102
|
topic: ConfigValidationTopic.Error,
|
|
90
103
|
message: `JSONata Managers must contain depName or packageName in the query or their templates`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":[],"sources":["../../../lib/config/validation-helpers/utils.ts"],"sourcesContent":["import {\n isNonEmptyArray,\n isNonEmptyString,\n isNumber,\n isString,\n} from '@sindresorhus/is';\nimport jsonata from 'jsonata';\nimport { logger } from '../../logger/index.ts';\nimport type { RegexManagerTemplates } from '../../modules/manager/custom/regex/types.ts';\nimport type { CustomManager } from '../../modules/manager/custom/types.ts';\nimport { regEx } from '../../util/regex.ts';\nimport type { ValidationMessage } from '../types.ts';\nimport { ConfigValidationTopic } from './types.ts';\n\nexport function getParentName(parentPath: string | undefined): string {\n return parentPath\n ? parentPath\n .replace(regEx(/\\.?encrypted$/), '')\n .replace(regEx(/\\[\\d+\\]$/), '')\n .split('.')\n .pop()!\n : '.';\n}\n\nexport function validatePlainObject(\n val: Record<string, unknown>,\n): true | string {\n for (const [key, value] of Object.entries(val)) {\n if (!isString(value)) {\n return key;\n }\n }\n return true;\n}\n\nexport function validateNumber(\n key: string,\n val: unknown,\n allowsNegative: boolean,\n currentPath?: string,\n subKey?: string,\n): ValidationMessage[] {\n const errors: ValidationMessage[] = [];\n const path = `${currentPath}${subKey ? `.${subKey}` : ''}`;\n if (isNumber(val)) {\n if (val < 0 && !allowsNegative) {\n errors.push({\n topic: ConfigValidationTopic.Error,\n message: `Configuration option \\`${path}\\` should be a positive integer. Found negative value instead.`,\n });\n }\n } else {\n errors.push({\n topic: ConfigValidationTopic.Error,\n message: `Configuration option \\`${path}\\` should be an integer. Found: ${JSON.stringify(\n val,\n )} (${typeof val}).`,\n });\n }\n\n return errors;\n}\n\n/** An option is a false global if it has the same name as a global only option\n * but is actually just the field of a non global option or field an children of the non global option\n * eg. token: it's global option used as Renovate's token as well and\n * also it can be the token used for a platform inside the hostRules configuration\n */\nexport function isFalseGlobal(\n optionName: string,\n parentPath?: string,\n): boolean {\n // v8 ignore else -- TODO: add test #40625\n if (\n parentPath?.includes('hostRules') &&\n (optionName === 'token' ||\n optionName === 'username' ||\n optionName === 'password')\n ) {\n return true;\n }\n\n return false;\n}\n\nfunction hasField(customManager: CustomManager, field: string): boolean {\n const templateField = `${field}Template` as keyof RegexManagerTemplates;\n const fieldStr =\n customManager.customType === 'regex' ? `(?<${field}>` : field;\n return !!(\n customManager[templateField] ??\n customManager.matchStrings?.some((matchString) =>\n matchString.includes(fieldStr),\n )\n );\n}\n\nexport function validateRegexManagerFields(\n customManager: CustomManager,\n currentPath: string,\n errors: ValidationMessage[],\n): void {\n if (isNonEmptyArray(customManager.matchStrings)) {\n for (const matchString of customManager.matchStrings) {\n try {\n regEx(matchString);\n } catch (err) {\n logger.debug(\n { err },\n 'customManager.matchStrings regEx validation error',\n );\n errors.push({\n topic: ConfigValidationTopic.Error,\n message: `Invalid regExp for ${currentPath}: \\`${matchString}\\``,\n });\n }\n }\n } else {\n errors.push({\n topic: ConfigValidationTopic.Error,\n message:\n 'Each Custom Manager `matchStrings` array must have at least one item.',\n });\n }\n\n const mandatoryFields = ['
|
|
1
|
+
{"version":3,"file":"utils.js","names":[],"sources":["../../../lib/config/validation-helpers/utils.ts"],"sourcesContent":["import {\n isNonEmptyArray,\n isNonEmptyString,\n isNumber,\n isString,\n} from '@sindresorhus/is';\nimport jsonata from 'jsonata';\nimport { logger } from '../../logger/index.ts';\nimport type { RegexManagerTemplates } from '../../modules/manager/custom/regex/types.ts';\nimport type { CustomManager } from '../../modules/manager/custom/types.ts';\nimport { regEx } from '../../util/regex.ts';\nimport type { ValidationMessage } from '../types.ts';\nimport { ConfigValidationTopic } from './types.ts';\n\nexport function getParentName(parentPath: string | undefined): string {\n return parentPath\n ? parentPath\n .replace(regEx(/\\.?encrypted$/), '')\n .replace(regEx(/\\[\\d+\\]$/), '')\n .split('.')\n .pop()!\n : '.';\n}\n\nexport function validatePlainObject(\n val: Record<string, unknown>,\n): true | string {\n for (const [key, value] of Object.entries(val)) {\n if (!isString(value)) {\n return key;\n }\n }\n return true;\n}\n\nexport function validateNumber(\n key: string,\n val: unknown,\n allowsNegative: boolean,\n currentPath?: string,\n subKey?: string,\n): ValidationMessage[] {\n const errors: ValidationMessage[] = [];\n const path = `${currentPath}${subKey ? `.${subKey}` : ''}`;\n if (isNumber(val)) {\n if (val < 0 && !allowsNegative) {\n errors.push({\n topic: ConfigValidationTopic.Error,\n message: `Configuration option \\`${path}\\` should be a positive integer. Found negative value instead.`,\n });\n }\n } else {\n errors.push({\n topic: ConfigValidationTopic.Error,\n message: `Configuration option \\`${path}\\` should be an integer. Found: ${JSON.stringify(\n val,\n )} (${typeof val}).`,\n });\n }\n\n return errors;\n}\n\n/** An option is a false global if it has the same name as a global only option\n * but is actually just the field of a non global option or field an children of the non global option\n * eg. token: it's global option used as Renovate's token as well and\n * also it can be the token used for a platform inside the hostRules configuration\n */\nexport function isFalseGlobal(\n optionName: string,\n parentPath?: string,\n): boolean {\n // v8 ignore else -- TODO: add test #40625\n if (\n parentPath?.includes('hostRules') &&\n (optionName === 'token' ||\n optionName === 'username' ||\n optionName === 'password')\n ) {\n return true;\n }\n\n return false;\n}\n\nfunction hasField(customManager: CustomManager, field: string): boolean {\n const templateField = `${field}Template` as keyof RegexManagerTemplates;\n const fieldStr =\n customManager.customType === 'regex' ? `(?<${field}>` : field;\n return !!(\n customManager[templateField] ??\n customManager.matchStrings?.some((matchString) =>\n matchString.includes(fieldStr),\n )\n );\n}\n\nexport function validateRegexManagerFields(\n customManager: CustomManager,\n currentPath: string,\n errors: ValidationMessage[],\n): void {\n if (isNonEmptyArray(customManager.matchStrings)) {\n for (const matchString of customManager.matchStrings) {\n try {\n regEx(matchString);\n } catch (err) {\n logger.debug(\n { err },\n 'customManager.matchStrings regEx validation error',\n );\n errors.push({\n topic: ConfigValidationTopic.Error,\n message: `Invalid regExp for ${currentPath}: \\`${matchString}\\``,\n });\n }\n }\n } else {\n errors.push({\n topic: ConfigValidationTopic.Error,\n message:\n 'Each Custom Manager `matchStrings` array must have at least one item.',\n });\n }\n\n const mandatoryFields = ['datasource'];\n for (const field of mandatoryFields) {\n if (!hasField(customManager, field)) {\n errors.push({\n topic: ConfigValidationTopic.Error,\n message: `Regex Managers must contain ${field}Template configuration or regex group named ${field}`,\n });\n }\n }\n\n const versionFields = ['currentValue', 'currentDigest'];\n if (!versionFields.some((field) => hasField(customManager, field))) {\n const templateFields = versionFields\n .map((field) => `${field}Template`)\n .join(' or ');\n errors.push({\n topic: ConfigValidationTopic.Error,\n message: `Regex Managers must contain ${versionFields.join(' or ')}, their template variants (${templateFields}) or regex groups named after configuration fields`,\n });\n }\n\n const nameFields = ['depName', 'packageName'];\n if (!nameFields.some((field) => hasField(customManager, field))) {\n errors.push({\n topic: ConfigValidationTopic.Error,\n message: `Regex Managers must contain depName or packageName regex groups or templates`,\n });\n }\n}\n\nexport function validateJSONataManagerFields(\n customManager: CustomManager,\n currentPath: string,\n errors: ValidationMessage[],\n): void {\n if (!isNonEmptyString(customManager.fileFormat)) {\n errors.push({\n topic: ConfigValidationTopic.Error,\n message: 'Each JSONata manager must contain a fileFormat field.',\n });\n }\n\n if (isNonEmptyArray(customManager.matchStrings)) {\n for (const matchString of customManager.matchStrings) {\n try {\n jsonata(matchString);\n } catch (err) {\n logger.debug(\n { err },\n 'customManager.matchStrings JSONata query validation error',\n );\n errors.push({\n topic: ConfigValidationTopic.Error,\n message: `Invalid JSONata query for ${currentPath}: \\`${matchString}\\``,\n });\n }\n }\n } else {\n errors.push({\n topic: ConfigValidationTopic.Error,\n message: `Each Custom Manager must contain a non-empty matchStrings array`,\n });\n }\n\n const mandatoryFields = ['datasource'];\n for (const field of mandatoryFields) {\n if (!hasField(customManager, field)) {\n errors.push({\n topic: ConfigValidationTopic.Error,\n message: `JSONata Managers must contain ${field}Template configuration or ${field} in the query `,\n });\n }\n }\n\n const versionFields = ['currentValue', 'currentDigest'];\n if (!versionFields.some((field) => hasField(customManager, field))) {\n errors.push({\n topic: ConfigValidationTopic.Error,\n message: `JSONata Managers must contain ${versionFields.join(' or ')} in the query or their templates`,\n });\n }\n\n const nameFields = ['depName', 'packageName'];\n if (!nameFields.some((field) => hasField(customManager, field))) {\n errors.push({\n topic: ConfigValidationTopic.Error,\n message: `JSONata Managers must contain depName or packageName in the query or their templates`,\n });\n }\n}\n"],"mappings":";;;;;;AAcA,SAAgB,cAAc,YAAwC;CACpE,OAAO,aACH,WACG,QAAQ,MAAM,eAAe,GAAG,EAAE,CAAC,CACnC,QAAQ,MAAM,UAAU,GAAG,EAAE,CAAC,CAC9B,MAAM,GAAG,CAAC,CACV,IAAI,IACP;AACN;AAEA,SAAgB,oBACd,KACe;CACf,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,GAAG,GAC3C,IAAI,CAAC,SAAS,KAAK,GACjB,OAAO;CAGX,OAAO;AACT;AAEA,SAAgB,eACd,KACA,KACA,gBACA,aACA,QACqB;CACrB,MAAM,SAA8B,CAAC;CACrC,MAAM,OAAO,GAAG,cAAc,SAAS,IAAI,WAAW;CACtD,IAAI,SAAS,GAAG,GACV;MAAA,MAAM,KAAK,CAAC,gBACd,OAAO,KAAK;GACV,OAAO,sBAAsB;GAC7B,SAAS,0BAA0B,KAAK;EAC1C,CAAC;CAAA,OAGH,OAAO,KAAK;EACV,OAAO,sBAAsB;EAC7B,SAAS,0BAA0B,KAAK,kCAAkC,KAAK,UAC7E,GACF,EAAE,IAAI,OAAO,IAAI;CACnB,CAAC;CAGH,OAAO;AACT;;;;;;AAOA,SAAgB,cACd,YACA,YACS;;CAET,IACE,YAAY,SAAS,WAAW,MAC/B,eAAe,WACd,eAAe,cACf,eAAe,aAEjB,OAAO;CAGT,OAAO;AACT;AAEA,SAAS,SAAS,eAA8B,OAAwB;CACtE,MAAM,gBAAgB,GAAG,MAAM;CAC/B,MAAM,WACJ,cAAc,eAAe,UAAU,MAAM,MAAM,KAAK;CAC1D,OAAO,CAAC,EACN,cAAc,kBACd,cAAc,cAAc,MAAM,gBAChC,YAAY,SAAS,QAAQ,CAC/B;AAEJ;AAEA,SAAgB,2BACd,eACA,aACA,QACM;CACN,IAAI,gBAAgB,cAAc,YAAY,GAC5C,KAAK,MAAM,eAAe,cAAc,cACtC,IAAI;EACF,MAAM,WAAW;CACnB,SAAS,KAAK;EACZ,OAAO,MACL,EAAE,IAAI,GACN,mDACF;EACA,OAAO,KAAK;GACV,OAAO,sBAAsB;GAC7B,SAAS,sBAAsB,YAAY,MAAM,YAAY;EAC/D,CAAC;CACH;MAGF,OAAO,KAAK;EACV,OAAO,sBAAsB;EAC7B,SACE;CACJ,CAAC;CAIH,KAAK,MAAM,SAAS,CADK,YACS,GAChC,IAAI,CAAC,SAAS,eAAe,KAAK,GAChC,OAAO,KAAK;EACV,OAAO,sBAAsB;EAC7B,SAAS,+BAA+B,MAAM,8CAA8C;CAC9F,CAAC;CAIL,MAAM,gBAAgB,CAAC,gBAAgB,eAAe;CACtD,IAAI,CAAC,cAAc,MAAM,UAAU,SAAS,eAAe,KAAK,CAAC,GAAG;EAClE,MAAM,iBAAiB,cACpB,KAAK,UAAU,GAAG,MAAM,SAAS,CAAC,CAClC,KAAK,MAAM;EACd,OAAO,KAAK;GACV,OAAO,sBAAsB;GAC7B,SAAS,+BAA+B,cAAc,KAAK,MAAM,EAAE,6BAA6B,eAAe;EACjH,CAAC;CACH;CAGA,IAAI,CAAC,CADe,WAAW,aACjB,CAAC,CAAC,MAAM,UAAU,SAAS,eAAe,KAAK,CAAC,GAC5D,OAAO,KAAK;EACV,OAAO,sBAAsB;EAC7B,SAAS;CACX,CAAC;AAEL;AAEA,SAAgB,6BACd,eACA,aACA,QACM;CACN,IAAI,CAAC,iBAAiB,cAAc,UAAU,GAC5C,OAAO,KAAK;EACV,OAAO,sBAAsB;EAC7B,SAAS;CACX,CAAC;CAGH,IAAI,gBAAgB,cAAc,YAAY,GAC5C,KAAK,MAAM,eAAe,cAAc,cACtC,IAAI;EACF,QAAQ,WAAW;CACrB,SAAS,KAAK;EACZ,OAAO,MACL,EAAE,IAAI,GACN,2DACF;EACA,OAAO,KAAK;GACV,OAAO,sBAAsB;GAC7B,SAAS,6BAA6B,YAAY,MAAM,YAAY;EACtE,CAAC;CACH;MAGF,OAAO,KAAK;EACV,OAAO,sBAAsB;EAC7B,SAAS;CACX,CAAC;CAIH,KAAK,MAAM,SAAS,CADK,YACS,GAChC,IAAI,CAAC,SAAS,eAAe,KAAK,GAChC,OAAO,KAAK;EACV,OAAO,sBAAsB;EAC7B,SAAS,iCAAiC,MAAM,4BAA4B,MAAM;CACpF,CAAC;CAIL,MAAM,gBAAgB,CAAC,gBAAgB,eAAe;CACtD,IAAI,CAAC,cAAc,MAAM,UAAU,SAAS,eAAe,KAAK,CAAC,GAC/D,OAAO,KAAK;EACV,OAAO,sBAAsB;EAC7B,SAAS,iCAAiC,cAAc,KAAK,MAAM,EAAE;CACvE,CAAC;CAIH,IAAI,CAAC,CADe,WAAW,aACjB,CAAC,CAAC,MAAM,UAAU,SAAS,eAAe,KAAK,CAAC,GAC5D,OAAO,KAAK;EACV,OAAO,sBAAsB;EAC7B,SAAS;CACX,CAAC;AAEL"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ApkDatasource } from "./apk/index.js";
|
|
1
2
|
import { ArtifactoryDatasource } from "./artifactory/index.js";
|
|
2
3
|
import { AwsEKSAddonDataSource } from "./aws-eks-addon/index.js";
|
|
3
4
|
import { AwsMachineImageDatasource } from "./aws-machine-image/index.js";
|
|
@@ -81,6 +82,7 @@ import { Unity3dDatasource } from "./unity3d/index.js";
|
|
|
81
82
|
import { Unity3dPackagesDatasource } from "./unity3d-packages/index.js";
|
|
82
83
|
//#region lib/modules/datasource/api.ts
|
|
83
84
|
const api = /* @__PURE__ */ new Map();
|
|
85
|
+
api.set(ApkDatasource.id, new ApkDatasource());
|
|
84
86
|
api.set(ArtifactoryDatasource.id, new ArtifactoryDatasource());
|
|
85
87
|
api.set(AwsEKSAddonDataSource.id, new AwsEKSAddonDataSource());
|
|
86
88
|
api.set(AwsMachineImageDatasource.id, new AwsMachineImageDatasource());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","names":[],"sources":["../../../lib/modules/datasource/api.ts"],"sourcesContent":["import { ArtifactoryDatasource } from './artifactory/index.ts';\nimport { AwsEKSAddonDataSource } from './aws-eks-addon/index.ts';\nimport { AwsMachineImageDatasource } from './aws-machine-image/index.ts';\nimport { AwsRdsDatasource } from './aws-rds/index.ts';\nimport { AzureBicepResourceDatasource } from './azure-bicep-resource/index.ts';\nimport { AzurePipelinesTasksDatasource } from './azure-pipelines-tasks/index.ts';\nimport { AzureTagsDatasource } from './azure-tags/index.ts';\nimport { BazelDatasource } from './bazel/index.ts';\nimport { BitbucketServerTagsDatasource } from './bitbucket-server-tags/index.ts';\nimport { BitbucketTagsDatasource } from './bitbucket-tags/index.ts';\nimport { BitriseDatasource } from './bitrise/index.ts';\nimport { BuildpacksRegistryDatasource } from './buildpacks-registry/index.ts';\nimport { CdnjsDatasource } from './cdnjs/index.ts';\nimport { ClojureDatasource } from './clojure/index.ts';\nimport { ConanDatasource } from './conan/index.ts';\nimport { CondaDatasource } from './conda/index.ts';\nimport { CpanDatasource } from './cpan/index.ts';\nimport { CrateDatasource } from './crate/index.ts';\nimport { CustomDatasource } from './custom/index.ts';\nimport { DartDatasource } from './dart/index.ts';\nimport { DartVersionDatasource } from './dart-version/index.ts';\nimport { DebDatasource } from './deb/index.ts';\nimport { DenoDatasource } from './deno/index.ts';\nimport { DevboxDatasource } from './devbox/index.ts';\nimport { DockerDatasource } from './docker/index.ts';\nimport { DotnetVersionDatasource } from './dotnet-version/index.ts';\nimport { ElmPackageDatasource } from './elm-package/index.ts';\nimport { EndoflifeDateDatasource } from './endoflife-date/index.ts';\nimport { FlutterVersionDatasource } from './flutter-version/index.ts';\nimport { ForgejoReleasesDatasource } from './forgejo-releases/index.ts';\nimport { ForgejoTagsDatasource } from './forgejo-tags/index.ts';\nimport { GalaxyDatasource } from './galaxy/index.ts';\nimport { GalaxyCollectionDatasource } from './galaxy-collection/index.ts';\nimport { GitRefsDatasource } from './git-refs/index.ts';\nimport { GitTagsDatasource } from './git-tags/index.ts';\nimport { GiteaReleasesDatasource } from './gitea-releases/index.ts';\nimport { GiteaTagsDatasource } from './gitea-tags/index.ts';\nimport { GithubDigestDatasource } from './github-digest/index.ts';\nimport { GithubReleaseAttachmentsDatasource } from './github-release-attachments/index.ts';\nimport { GithubReleasesDatasource } from './github-releases/index.ts';\nimport { GithubRunnersDatasource } from './github-runners/index.ts';\nimport { GithubTagsDatasource } from './github-tags/index.ts';\nimport { GitlabPackagesDatasource } from './gitlab-packages/index.ts';\nimport { GitlabReleasesDatasource } from './gitlab-releases/index.ts';\nimport { GitlabTagsDatasource } from './gitlab-tags/index.ts';\nimport { GlasskubePackagesDatasource } from './glasskube-packages/index.ts';\nimport { GoDatasource } from './go/index.ts';\nimport { GolangVersionDatasource } from './golang-version/index.ts';\nimport { GradleVersionDatasource } from './gradle-version/index.ts';\nimport { HackageDatasource } from './hackage/index.ts';\nimport { HelmDatasource } from './helm/index.ts';\nimport { HermitDatasource } from './hermit/index.ts';\nimport { HexDatasource } from './hex/index.ts';\nimport { HexpmBobDatasource } from './hexpm-bob/index.ts';\nimport { JavaVersionDatasource } from './java-version/index.ts';\nimport { JenkinsPluginsDatasource } from './jenkins-plugins/index.ts';\nimport { JsrDatasource } from './jsr/index.ts';\nimport { KubernetesApiDatasource } from './kubernetes-api/index.ts';\nimport { MavenDatasource } from './maven/index.ts';\nimport { NextcloudDatasource } from './nextcloud/index.ts';\nimport { NodeVersionDatasource } from './node-version/index.ts';\nimport { NpmDatasource } from './npm/index.ts';\nimport { NugetDatasource } from './nuget/index.ts';\nimport { OrbDatasource } from './orb/index.ts';\nimport { PackagistDatasource } from './packagist/index.ts';\nimport { PodDatasource } from './pod/index.ts';\nimport { PuppetForgeDatasource } from './puppet-forge/index.ts';\nimport { PypiDatasource } from './pypi/index.ts';\nimport { PythonVersionDatasource } from './python-version/index.ts';\nimport { RepologyDatasource } from './repology/index.ts';\nimport { RpmDatasource } from './rpm/index.ts';\nimport { RubyVersionDatasource } from './ruby-version/index.ts';\nimport { RubygemsDatasource } from './rubygems/index.ts';\nimport { RustVersionDatasource } from './rust-version/index.ts';\nimport { SbtPackageDatasource } from './sbt-package/index.ts';\nimport { SbtPluginDatasource } from './sbt-plugin/index.ts';\nimport { TerraformModuleDatasource } from './terraform-module/index.ts';\nimport { TerraformProviderDatasource } from './terraform-provider/index.ts';\nimport type { DatasourceApi } from './types.ts';\nimport { TypstDatasource } from './typst/index.ts';\nimport { Unity3dDatasource } from './unity3d/index.ts';\nimport { Unity3dPackagesDatasource } from './unity3d-packages/index.ts';\n\nconst api = new Map<string, DatasourceApi>();\nexport default api;\n\napi.set(ArtifactoryDatasource.id, new ArtifactoryDatasource());\napi.set(AwsEKSAddonDataSource.id, new AwsEKSAddonDataSource());\napi.set(AwsMachineImageDatasource.id, new AwsMachineImageDatasource());\napi.set(AwsRdsDatasource.id, new AwsRdsDatasource());\napi.set(AzureBicepResourceDatasource.id, new AzureBicepResourceDatasource());\napi.set(AzurePipelinesTasksDatasource.id, new AzurePipelinesTasksDatasource());\napi.set(AzureTagsDatasource.id, new AzureTagsDatasource());\napi.set(BazelDatasource.id, new BazelDatasource());\napi.set(BitbucketServerTagsDatasource.id, new BitbucketServerTagsDatasource());\napi.set(BitbucketTagsDatasource.id, new BitbucketTagsDatasource());\napi.set(BitriseDatasource.id, new BitriseDatasource());\napi.set(BuildpacksRegistryDatasource.id, new BuildpacksRegistryDatasource());\napi.set(CdnjsDatasource.id, new CdnjsDatasource());\napi.set(ClojureDatasource.id, new ClojureDatasource());\napi.set(ConanDatasource.id, new ConanDatasource());\napi.set(CondaDatasource.id, new CondaDatasource());\napi.set(CpanDatasource.id, new CpanDatasource());\napi.set(CrateDatasource.id, new CrateDatasource());\napi.set(CustomDatasource.id, new CustomDatasource());\napi.set(DartDatasource.id, new DartDatasource());\napi.set(DartVersionDatasource.id, new DartVersionDatasource());\napi.set(DebDatasource.id, new DebDatasource());\napi.set(DenoDatasource.id, new DenoDatasource());\napi.set(DevboxDatasource.id, new DevboxDatasource());\napi.set(DockerDatasource.id, new DockerDatasource());\napi.set(DotnetVersionDatasource.id, new DotnetVersionDatasource());\napi.set(ElmPackageDatasource.id, new ElmPackageDatasource());\napi.set(EndoflifeDateDatasource.id, new EndoflifeDateDatasource());\napi.set(FlutterVersionDatasource.id, new FlutterVersionDatasource());\napi.set(ForgejoReleasesDatasource.id, new ForgejoReleasesDatasource());\napi.set(ForgejoTagsDatasource.id, new ForgejoTagsDatasource());\napi.set(GalaxyDatasource.id, new GalaxyDatasource());\napi.set(GalaxyCollectionDatasource.id, new GalaxyCollectionDatasource());\napi.set(GitRefsDatasource.id, new GitRefsDatasource());\napi.set(GitTagsDatasource.id, new GitTagsDatasource());\napi.set(GiteaReleasesDatasource.id, new GiteaReleasesDatasource());\napi.set(GiteaTagsDatasource.id, new GiteaTagsDatasource());\napi.set(GithubDigestDatasource.id, new GithubDigestDatasource());\napi.set(\n GithubReleaseAttachmentsDatasource.id,\n new GithubReleaseAttachmentsDatasource(),\n);\napi.set(GithubReleasesDatasource.id, new GithubReleasesDatasource());\napi.set(GithubRunnersDatasource.id, new GithubRunnersDatasource());\napi.set(GithubTagsDatasource.id, new GithubTagsDatasource());\napi.set(GitlabPackagesDatasource.id, new GitlabPackagesDatasource());\napi.set(GitlabReleasesDatasource.id, new GitlabReleasesDatasource());\napi.set(GitlabTagsDatasource.id, new GitlabTagsDatasource());\napi.set(GlasskubePackagesDatasource.id, new GlasskubePackagesDatasource());\napi.set(GoDatasource.id, new GoDatasource());\napi.set(GolangVersionDatasource.id, new GolangVersionDatasource());\napi.set(GradleVersionDatasource.id, new GradleVersionDatasource());\napi.set(HackageDatasource.id, new HackageDatasource());\napi.set(HelmDatasource.id, new HelmDatasource());\napi.set(HermitDatasource.id, new HermitDatasource());\napi.set(HexDatasource.id, new HexDatasource());\napi.set(HexpmBobDatasource.id, new HexpmBobDatasource());\napi.set(JavaVersionDatasource.id, new JavaVersionDatasource());\napi.set(JenkinsPluginsDatasource.id, new JenkinsPluginsDatasource());\napi.set(JsrDatasource.id, new JsrDatasource());\napi.set(KubernetesApiDatasource.id, new KubernetesApiDatasource());\napi.set(MavenDatasource.id, new MavenDatasource());\napi.set(NextcloudDatasource.id, new NextcloudDatasource());\napi.set(NodeVersionDatasource.id, new NodeVersionDatasource());\napi.set(NpmDatasource.id, new NpmDatasource());\napi.set(NugetDatasource.id, new NugetDatasource());\napi.set(OrbDatasource.id, new OrbDatasource());\napi.set(PackagistDatasource.id, new PackagistDatasource());\napi.set(PodDatasource.id, new PodDatasource());\napi.set(PuppetForgeDatasource.id, new PuppetForgeDatasource());\napi.set(PypiDatasource.id, new PypiDatasource());\napi.set(PythonVersionDatasource.id, new PythonVersionDatasource());\napi.set(RepologyDatasource.id, new RepologyDatasource());\napi.set(RpmDatasource.id, new RpmDatasource());\napi.set(RubyVersionDatasource.id, new RubyVersionDatasource());\napi.set(RubygemsDatasource.id, new RubygemsDatasource());\napi.set(RustVersionDatasource.id, new RustVersionDatasource());\napi.set(SbtPackageDatasource.id, new SbtPackageDatasource());\napi.set(SbtPluginDatasource.id, new SbtPluginDatasource());\napi.set(TerraformModuleDatasource.id, new TerraformModuleDatasource());\napi.set(TerraformProviderDatasource.id, new TerraformProviderDatasource());\napi.set(TypstDatasource.id, new TypstDatasource());\napi.set(Unity3dDatasource.id, new Unity3dDatasource());\napi.set(Unity3dPackagesDatasource.id, new Unity3dPackagesDatasource());\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"api.js","names":[],"sources":["../../../lib/modules/datasource/api.ts"],"sourcesContent":["import { ApkDatasource } from './apk/index.ts';\nimport { ArtifactoryDatasource } from './artifactory/index.ts';\nimport { AwsEKSAddonDataSource } from './aws-eks-addon/index.ts';\nimport { AwsMachineImageDatasource } from './aws-machine-image/index.ts';\nimport { AwsRdsDatasource } from './aws-rds/index.ts';\nimport { AzureBicepResourceDatasource } from './azure-bicep-resource/index.ts';\nimport { AzurePipelinesTasksDatasource } from './azure-pipelines-tasks/index.ts';\nimport { AzureTagsDatasource } from './azure-tags/index.ts';\nimport { BazelDatasource } from './bazel/index.ts';\nimport { BitbucketServerTagsDatasource } from './bitbucket-server-tags/index.ts';\nimport { BitbucketTagsDatasource } from './bitbucket-tags/index.ts';\nimport { BitriseDatasource } from './bitrise/index.ts';\nimport { BuildpacksRegistryDatasource } from './buildpacks-registry/index.ts';\nimport { CdnjsDatasource } from './cdnjs/index.ts';\nimport { ClojureDatasource } from './clojure/index.ts';\nimport { ConanDatasource } from './conan/index.ts';\nimport { CondaDatasource } from './conda/index.ts';\nimport { CpanDatasource } from './cpan/index.ts';\nimport { CrateDatasource } from './crate/index.ts';\nimport { CustomDatasource } from './custom/index.ts';\nimport { DartDatasource } from './dart/index.ts';\nimport { DartVersionDatasource } from './dart-version/index.ts';\nimport { DebDatasource } from './deb/index.ts';\nimport { DenoDatasource } from './deno/index.ts';\nimport { DevboxDatasource } from './devbox/index.ts';\nimport { DockerDatasource } from './docker/index.ts';\nimport { DotnetVersionDatasource } from './dotnet-version/index.ts';\nimport { ElmPackageDatasource } from './elm-package/index.ts';\nimport { EndoflifeDateDatasource } from './endoflife-date/index.ts';\nimport { FlutterVersionDatasource } from './flutter-version/index.ts';\nimport { ForgejoReleasesDatasource } from './forgejo-releases/index.ts';\nimport { ForgejoTagsDatasource } from './forgejo-tags/index.ts';\nimport { GalaxyDatasource } from './galaxy/index.ts';\nimport { GalaxyCollectionDatasource } from './galaxy-collection/index.ts';\nimport { GitRefsDatasource } from './git-refs/index.ts';\nimport { GitTagsDatasource } from './git-tags/index.ts';\nimport { GiteaReleasesDatasource } from './gitea-releases/index.ts';\nimport { GiteaTagsDatasource } from './gitea-tags/index.ts';\nimport { GithubDigestDatasource } from './github-digest/index.ts';\nimport { GithubReleaseAttachmentsDatasource } from './github-release-attachments/index.ts';\nimport { GithubReleasesDatasource } from './github-releases/index.ts';\nimport { GithubRunnersDatasource } from './github-runners/index.ts';\nimport { GithubTagsDatasource } from './github-tags/index.ts';\nimport { GitlabPackagesDatasource } from './gitlab-packages/index.ts';\nimport { GitlabReleasesDatasource } from './gitlab-releases/index.ts';\nimport { GitlabTagsDatasource } from './gitlab-tags/index.ts';\nimport { GlasskubePackagesDatasource } from './glasskube-packages/index.ts';\nimport { GoDatasource } from './go/index.ts';\nimport { GolangVersionDatasource } from './golang-version/index.ts';\nimport { GradleVersionDatasource } from './gradle-version/index.ts';\nimport { HackageDatasource } from './hackage/index.ts';\nimport { HelmDatasource } from './helm/index.ts';\nimport { HermitDatasource } from './hermit/index.ts';\nimport { HexDatasource } from './hex/index.ts';\nimport { HexpmBobDatasource } from './hexpm-bob/index.ts';\nimport { JavaVersionDatasource } from './java-version/index.ts';\nimport { JenkinsPluginsDatasource } from './jenkins-plugins/index.ts';\nimport { JsrDatasource } from './jsr/index.ts';\nimport { KubernetesApiDatasource } from './kubernetes-api/index.ts';\nimport { MavenDatasource } from './maven/index.ts';\nimport { NextcloudDatasource } from './nextcloud/index.ts';\nimport { NodeVersionDatasource } from './node-version/index.ts';\nimport { NpmDatasource } from './npm/index.ts';\nimport { NugetDatasource } from './nuget/index.ts';\nimport { OrbDatasource } from './orb/index.ts';\nimport { PackagistDatasource } from './packagist/index.ts';\nimport { PodDatasource } from './pod/index.ts';\nimport { PuppetForgeDatasource } from './puppet-forge/index.ts';\nimport { PypiDatasource } from './pypi/index.ts';\nimport { PythonVersionDatasource } from './python-version/index.ts';\nimport { RepologyDatasource } from './repology/index.ts';\nimport { RpmDatasource } from './rpm/index.ts';\nimport { RubyVersionDatasource } from './ruby-version/index.ts';\nimport { RubygemsDatasource } from './rubygems/index.ts';\nimport { RustVersionDatasource } from './rust-version/index.ts';\nimport { SbtPackageDatasource } from './sbt-package/index.ts';\nimport { SbtPluginDatasource } from './sbt-plugin/index.ts';\nimport { TerraformModuleDatasource } from './terraform-module/index.ts';\nimport { TerraformProviderDatasource } from './terraform-provider/index.ts';\nimport type { DatasourceApi } from './types.ts';\nimport { TypstDatasource } from './typst/index.ts';\nimport { Unity3dDatasource } from './unity3d/index.ts';\nimport { Unity3dPackagesDatasource } from './unity3d-packages/index.ts';\n\nconst api = new Map<string, DatasourceApi>();\nexport default api;\n\napi.set(ApkDatasource.id, new ApkDatasource());\napi.set(ArtifactoryDatasource.id, new ArtifactoryDatasource());\napi.set(AwsEKSAddonDataSource.id, new AwsEKSAddonDataSource());\napi.set(AwsMachineImageDatasource.id, new AwsMachineImageDatasource());\napi.set(AwsRdsDatasource.id, new AwsRdsDatasource());\napi.set(AzureBicepResourceDatasource.id, new AzureBicepResourceDatasource());\napi.set(AzurePipelinesTasksDatasource.id, new AzurePipelinesTasksDatasource());\napi.set(AzureTagsDatasource.id, new AzureTagsDatasource());\napi.set(BazelDatasource.id, new BazelDatasource());\napi.set(BitbucketServerTagsDatasource.id, new BitbucketServerTagsDatasource());\napi.set(BitbucketTagsDatasource.id, new BitbucketTagsDatasource());\napi.set(BitriseDatasource.id, new BitriseDatasource());\napi.set(BuildpacksRegistryDatasource.id, new BuildpacksRegistryDatasource());\napi.set(CdnjsDatasource.id, new CdnjsDatasource());\napi.set(ClojureDatasource.id, new ClojureDatasource());\napi.set(ConanDatasource.id, new ConanDatasource());\napi.set(CondaDatasource.id, new CondaDatasource());\napi.set(CpanDatasource.id, new CpanDatasource());\napi.set(CrateDatasource.id, new CrateDatasource());\napi.set(CustomDatasource.id, new CustomDatasource());\napi.set(DartDatasource.id, new DartDatasource());\napi.set(DartVersionDatasource.id, new DartVersionDatasource());\napi.set(DebDatasource.id, new DebDatasource());\napi.set(DenoDatasource.id, new DenoDatasource());\napi.set(DevboxDatasource.id, new DevboxDatasource());\napi.set(DockerDatasource.id, new DockerDatasource());\napi.set(DotnetVersionDatasource.id, new DotnetVersionDatasource());\napi.set(ElmPackageDatasource.id, new ElmPackageDatasource());\napi.set(EndoflifeDateDatasource.id, new EndoflifeDateDatasource());\napi.set(FlutterVersionDatasource.id, new FlutterVersionDatasource());\napi.set(ForgejoReleasesDatasource.id, new ForgejoReleasesDatasource());\napi.set(ForgejoTagsDatasource.id, new ForgejoTagsDatasource());\napi.set(GalaxyDatasource.id, new GalaxyDatasource());\napi.set(GalaxyCollectionDatasource.id, new GalaxyCollectionDatasource());\napi.set(GitRefsDatasource.id, new GitRefsDatasource());\napi.set(GitTagsDatasource.id, new GitTagsDatasource());\napi.set(GiteaReleasesDatasource.id, new GiteaReleasesDatasource());\napi.set(GiteaTagsDatasource.id, new GiteaTagsDatasource());\napi.set(GithubDigestDatasource.id, new GithubDigestDatasource());\napi.set(\n GithubReleaseAttachmentsDatasource.id,\n new GithubReleaseAttachmentsDatasource(),\n);\napi.set(GithubReleasesDatasource.id, new GithubReleasesDatasource());\napi.set(GithubRunnersDatasource.id, new GithubRunnersDatasource());\napi.set(GithubTagsDatasource.id, new GithubTagsDatasource());\napi.set(GitlabPackagesDatasource.id, new GitlabPackagesDatasource());\napi.set(GitlabReleasesDatasource.id, new GitlabReleasesDatasource());\napi.set(GitlabTagsDatasource.id, new GitlabTagsDatasource());\napi.set(GlasskubePackagesDatasource.id, new GlasskubePackagesDatasource());\napi.set(GoDatasource.id, new GoDatasource());\napi.set(GolangVersionDatasource.id, new GolangVersionDatasource());\napi.set(GradleVersionDatasource.id, new GradleVersionDatasource());\napi.set(HackageDatasource.id, new HackageDatasource());\napi.set(HelmDatasource.id, new HelmDatasource());\napi.set(HermitDatasource.id, new HermitDatasource());\napi.set(HexDatasource.id, new HexDatasource());\napi.set(HexpmBobDatasource.id, new HexpmBobDatasource());\napi.set(JavaVersionDatasource.id, new JavaVersionDatasource());\napi.set(JenkinsPluginsDatasource.id, new JenkinsPluginsDatasource());\napi.set(JsrDatasource.id, new JsrDatasource());\napi.set(KubernetesApiDatasource.id, new KubernetesApiDatasource());\napi.set(MavenDatasource.id, new MavenDatasource());\napi.set(NextcloudDatasource.id, new NextcloudDatasource());\napi.set(NodeVersionDatasource.id, new NodeVersionDatasource());\napi.set(NpmDatasource.id, new NpmDatasource());\napi.set(NugetDatasource.id, new NugetDatasource());\napi.set(OrbDatasource.id, new OrbDatasource());\napi.set(PackagistDatasource.id, new PackagistDatasource());\napi.set(PodDatasource.id, new PodDatasource());\napi.set(PuppetForgeDatasource.id, new PuppetForgeDatasource());\napi.set(PypiDatasource.id, new PypiDatasource());\napi.set(PythonVersionDatasource.id, new PythonVersionDatasource());\napi.set(RepologyDatasource.id, new RepologyDatasource());\napi.set(RpmDatasource.id, new RpmDatasource());\napi.set(RubyVersionDatasource.id, new RubyVersionDatasource());\napi.set(RubygemsDatasource.id, new RubygemsDatasource());\napi.set(RustVersionDatasource.id, new RustVersionDatasource());\napi.set(SbtPackageDatasource.id, new SbtPackageDatasource());\napi.set(SbtPluginDatasource.id, new SbtPluginDatasource());\napi.set(TerraformModuleDatasource.id, new TerraformModuleDatasource());\napi.set(TerraformProviderDatasource.id, new TerraformProviderDatasource());\napi.set(TypstDatasource.id, new TypstDatasource());\napi.set(Unity3dDatasource.id, new Unity3dDatasource());\napi.set(Unity3dPackagesDatasource.id, new Unity3dPackagesDatasource());\n"],"mappings":"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"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { logger } from "../../../logger/index.js";
|
|
2
|
+
import { joinUrlParts } from "../../../util/url.js";
|
|
3
|
+
import { ExternalHostError } from "../../../types/errors/external-host-error.js";
|
|
4
|
+
import { cachePathExists, createCacheWriteStream, ensureCacheDir, pipeline, rmCache } from "../../../util/fs/index.js";
|
|
5
|
+
import { id } from "../../versioning/loose/index.js";
|
|
6
|
+
import { withCache } from "../../../util/cache/package/with-cache.js";
|
|
7
|
+
import { RequestError } from "../../../util/http/got.js";
|
|
8
|
+
import "../../../util/http/index.js";
|
|
9
|
+
import { asTimestamp } from "../../../util/timestamp.js";
|
|
10
|
+
import { Datasource } from "../datasource.js";
|
|
11
|
+
import { parseApkIndexFile } from "./parser.js";
|
|
12
|
+
import { constructComponentUrls } from "./url.js";
|
|
13
|
+
import { isNonEmptyObject } from "@sindresorhus/is";
|
|
14
|
+
import { randomUUID } from "node:crypto";
|
|
15
|
+
import upath from "upath";
|
|
16
|
+
import { extract } from "tar";
|
|
17
|
+
const defaultConfig = {
|
|
18
|
+
commitMessageTopic: "{{{depName}}} APK package",
|
|
19
|
+
commitMessageExtra: "to {{#if isMajor}}{{{prettyNewMajor}}}{{else}}{{{prettyNewVersion}}}{{/if}}"
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Groups packages by name so that a lookup does not scan the whole index.
|
|
23
|
+
*
|
|
24
|
+
* An index holds thousands of packages, and a name can appear more than once
|
|
25
|
+
* when the component serves multiple versions of it.
|
|
26
|
+
*/
|
|
27
|
+
function groupPackagesByName(packages) {
|
|
28
|
+
const packagesByName = {};
|
|
29
|
+
for (const pkg of packages) {
|
|
30
|
+
packagesByName[pkg.name] ??= [];
|
|
31
|
+
packagesByName[pkg.name].push(pkg);
|
|
32
|
+
}
|
|
33
|
+
return packagesByName;
|
|
34
|
+
}
|
|
35
|
+
var ApkDatasource = class ApkDatasource extends Datasource {
|
|
36
|
+
static id = "apk";
|
|
37
|
+
defaultVersioning = id;
|
|
38
|
+
/**
|
|
39
|
+
* Alpine APK repositories are laid out as
|
|
40
|
+
* `{base}/{branch}/{component}/{arch}/APKINDEX.tar.gz`, and `/etc/apk/repositories`
|
|
41
|
+
* holds one entry per component.
|
|
42
|
+
*
|
|
43
|
+
* For Renovate, the path segments are encoded as query parameters so that a single
|
|
44
|
+
* registry URL can cover multiple components.
|
|
45
|
+
*
|
|
46
|
+
* The following query parameter is required:
|
|
47
|
+
* - arch: e.g. x86_64, aarch64, armv7
|
|
48
|
+
*
|
|
49
|
+
* The following query parameters are optional, as repositories such as Wolfi serve
|
|
50
|
+
* their index directly below the repository root:
|
|
51
|
+
* - branch: latest-stable, v3.19, edge or any other Alpine branch
|
|
52
|
+
* - components: comma separated list of components, e.g. main,community,testing
|
|
53
|
+
*/
|
|
54
|
+
defaultRegistryUrls = ["https://dl-cdn.alpinelinux.org/alpine?branch=latest-stable&components=main&arch=x86_64"];
|
|
55
|
+
defaultConfig = defaultConfig;
|
|
56
|
+
customRegistrySupport = true;
|
|
57
|
+
registryStrategy = "merge";
|
|
58
|
+
releaseTimestampSupport = true;
|
|
59
|
+
releaseTimestampNote = "The release timestamp is determined from the `buildDate` field in the results.";
|
|
60
|
+
constructor() {
|
|
61
|
+
super(ApkDatasource.id);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Gets all available packages from a single APK component, keyed by package name
|
|
65
|
+
*/
|
|
66
|
+
async _getPackages(componentUrl) {
|
|
67
|
+
logger.debug(`Fetching APK packages from ${componentUrl}`);
|
|
68
|
+
const extractId = randomUUID();
|
|
69
|
+
const cacheDir = await ensureCacheDir(upath.join("apk", extractId));
|
|
70
|
+
const tarFile = upath.join(cacheDir, "APKINDEX.tar.gz");
|
|
71
|
+
const extractedFile = upath.join(cacheDir, "APKINDEX");
|
|
72
|
+
try {
|
|
73
|
+
const indexUrl = joinUrlParts(componentUrl, "APKINDEX.tar.gz");
|
|
74
|
+
logger.debug(`Attempting to download ${indexUrl}`);
|
|
75
|
+
const readStream = this.http.stream(indexUrl);
|
|
76
|
+
const writeStream = createCacheWriteStream(tarFile);
|
|
77
|
+
await pipeline(readStream, writeStream);
|
|
78
|
+
await extract({
|
|
79
|
+
file: tarFile,
|
|
80
|
+
cwd: cacheDir,
|
|
81
|
+
filter: (path) => upath.basename(path) === "APKINDEX"
|
|
82
|
+
});
|
|
83
|
+
if (!await cachePathExists(extractedFile)) {
|
|
84
|
+
logger.warn({ componentUrl }, "APKINDEX file not found in tar archive");
|
|
85
|
+
return {};
|
|
86
|
+
}
|
|
87
|
+
logger.debug("Successfully extracted APKINDEX content");
|
|
88
|
+
let packages = [];
|
|
89
|
+
try {
|
|
90
|
+
packages = await parseApkIndexFile(extractedFile);
|
|
91
|
+
} catch (err) {
|
|
92
|
+
logger.warn({
|
|
93
|
+
componentUrl,
|
|
94
|
+
err
|
|
95
|
+
}, "Error parsing APK index file");
|
|
96
|
+
return {};
|
|
97
|
+
}
|
|
98
|
+
logger.debug({
|
|
99
|
+
componentUrl,
|
|
100
|
+
packageCount: packages.length
|
|
101
|
+
}, "Successfully parsed APK index");
|
|
102
|
+
return groupPackagesByName(packages);
|
|
103
|
+
} catch (err) {
|
|
104
|
+
if (err instanceof RequestError) {
|
|
105
|
+
const statusCode = err.response?.statusCode;
|
|
106
|
+
if (statusCode === 429 || statusCode && statusCode >= 500) throw new ExternalHostError(err);
|
|
107
|
+
throw err;
|
|
108
|
+
}
|
|
109
|
+
logger.warn({
|
|
110
|
+
componentUrl,
|
|
111
|
+
err
|
|
112
|
+
}, "Error extracting APK index from tar.gz");
|
|
113
|
+
return {};
|
|
114
|
+
} finally {
|
|
115
|
+
await rmCache(cacheDir);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
getPackages(componentUrl) {
|
|
119
|
+
return withCache({
|
|
120
|
+
namespace: `datasource-${ApkDatasource.id}`,
|
|
121
|
+
key: componentUrl,
|
|
122
|
+
ttlMinutes: 60,
|
|
123
|
+
fallback: true,
|
|
124
|
+
shouldCacheResult: isNonEmptyObject
|
|
125
|
+
}, () => this._getPackages(componentUrl));
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Gets releases for a specific package from APK repositories
|
|
129
|
+
*/
|
|
130
|
+
async getReleases({ packageName, registryUrl }) {
|
|
131
|
+
/* v8 ignore if -- should never happen */
|
|
132
|
+
if (!registryUrl) return null;
|
|
133
|
+
logger.debug(`Getting APK releases for ${packageName} from ${registryUrl}`);
|
|
134
|
+
const componentUrls = constructComponentUrls(registryUrl);
|
|
135
|
+
let result = null;
|
|
136
|
+
const seenVersions = /* @__PURE__ */ new Set();
|
|
137
|
+
for (const componentUrl of componentUrls) try {
|
|
138
|
+
const matchingPackages = (await this.getPackages(componentUrl))[packageName];
|
|
139
|
+
if (!matchingPackages) {
|
|
140
|
+
logger.debug({
|
|
141
|
+
packageName,
|
|
142
|
+
componentUrl
|
|
143
|
+
}, "No matching packages found");
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
const releases = [];
|
|
147
|
+
for (const pkg of matchingPackages) {
|
|
148
|
+
if (seenVersions.has(pkg.version)) continue;
|
|
149
|
+
seenVersions.add(pkg.version);
|
|
150
|
+
releases.push({
|
|
151
|
+
version: pkg.version,
|
|
152
|
+
releaseTimestamp: pkg.buildDate ? asTimestamp(pkg.buildDate * 1e3) : void 0
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
logger.trace({
|
|
156
|
+
packageName,
|
|
157
|
+
componentUrl,
|
|
158
|
+
releaseCount: releases.length,
|
|
159
|
+
releases
|
|
160
|
+
}, "Found APK releases");
|
|
161
|
+
result ??= {
|
|
162
|
+
releases: [],
|
|
163
|
+
registryUrl
|
|
164
|
+
};
|
|
165
|
+
result.homepage ??= matchingPackages.find((pkg) => pkg.url)?.url;
|
|
166
|
+
result.releases.push(...releases);
|
|
167
|
+
} catch (err) {
|
|
168
|
+
if (err instanceof ExternalHostError) throw err;
|
|
169
|
+
logger.debug({
|
|
170
|
+
packageName,
|
|
171
|
+
componentUrl,
|
|
172
|
+
err
|
|
173
|
+
}, "Skipping APK component due to an error");
|
|
174
|
+
}
|
|
175
|
+
return result;
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
//#endregion
|
|
179
|
+
export { ApkDatasource };
|
|
180
|
+
|
|
181
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["looseVersioning","fs.ensureCacheDir","fs.createCacheWriteStream","fs.pipeline","tarExtract","fs.cachePathExists","HttpError","fs.rmCache"],"sources":["../../../../lib/modules/datasource/apk/index.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport { isNonEmptyObject } from '@sindresorhus/is';\nimport { extract as tarExtract } from 'tar';\nimport upath from 'upath';\nimport { logger } from '../../../logger/index.ts';\nimport { ExternalHostError } from '../../../types/errors/external-host-error.ts';\nimport { withCache } from '../../../util/cache/package/with-cache.ts';\nimport * as fs from '../../../util/fs/index.ts';\nimport { HttpError } from '../../../util/http/index.ts';\nimport { asTimestamp } from '../../../util/timestamp.ts';\nimport { joinUrlParts } from '../../../util/url.ts';\nimport { id as looseVersioning } from '../../versioning/loose/index.ts';\nimport { Datasource } from '../datasource.ts';\nimport type { GetReleasesConfig, Release, ReleaseResult } from '../types.ts';\nimport { parseApkIndexFile } from './parser.ts';\nimport type { ApkPackage } from './types.ts';\nimport { constructComponentUrls } from './url.ts';\n\nexport const apkDatasourceId = 'apk';\n\nconst defaultConfig = {\n commitMessageTopic: '{{{depName}}} APK package',\n commitMessageExtra:\n 'to {{#if isMajor}}{{{prettyNewMajor}}}{{else}}{{{prettyNewVersion}}}{{/if}}',\n};\n\n/**\n * Groups packages by name so that a lookup does not scan the whole index.\n *\n * An index holds thousands of packages, and a name can appear more than once\n * when the component serves multiple versions of it.\n */\nfunction groupPackagesByName(\n packages: ApkPackage[],\n): Record<string, ApkPackage[]> {\n const packagesByName: Record<string, ApkPackage[]> = {};\n\n for (const pkg of packages) {\n packagesByName[pkg.name] ??= [];\n packagesByName[pkg.name].push(pkg);\n }\n\n return packagesByName;\n}\n\nexport class ApkDatasource extends Datasource {\n static readonly id = apkDatasourceId;\n\n override readonly defaultVersioning = looseVersioning;\n\n /**\n * Alpine APK repositories are laid out as\n * `{base}/{branch}/{component}/{arch}/APKINDEX.tar.gz`, and `/etc/apk/repositories`\n * holds one entry per component.\n *\n * For Renovate, the path segments are encoded as query parameters so that a single\n * registry URL can cover multiple components.\n *\n * The following query parameter is required:\n * - arch: e.g. x86_64, aarch64, armv7\n *\n * The following query parameters are optional, as repositories such as Wolfi serve\n * their index directly below the repository root:\n * - branch: latest-stable, v3.19, edge or any other Alpine branch\n * - components: comma separated list of components, e.g. main,community,testing\n */\n override readonly defaultRegistryUrls = [\n 'https://dl-cdn.alpinelinux.org/alpine?branch=latest-stable&components=main&arch=x86_64',\n ];\n\n override readonly defaultConfig = defaultConfig;\n\n override readonly customRegistrySupport = true;\n\n override readonly registryStrategy = 'merge';\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the `buildDate` field in the results.';\n\n constructor() {\n super(ApkDatasource.id);\n }\n\n /**\n * Gets all available packages from a single APK component, keyed by package name\n */\n private async _getPackages(\n componentUrl: string,\n ): Promise<Record<string, ApkPackage[]>> {\n logger.debug(`Fetching APK packages from ${componentUrl}`);\n\n const extractId = randomUUID();\n const cacheDir = await fs.ensureCacheDir(upath.join('apk', extractId));\n const tarFile = upath.join(cacheDir, 'APKINDEX.tar.gz');\n const extractedFile = upath.join(cacheDir, 'APKINDEX');\n\n try {\n const indexUrl = joinUrlParts(componentUrl, 'APKINDEX.tar.gz');\n logger.debug(`Attempting to download ${indexUrl}`);\n const readStream = this.http.stream(indexUrl);\n const writeStream = fs.createCacheWriteStream(tarFile);\n await fs.pipeline(readStream, writeStream);\n\n await tarExtract({\n file: tarFile,\n cwd: cacheDir,\n filter: (path) => upath.basename(path) === 'APKINDEX',\n });\n\n if (!(await fs.cachePathExists(extractedFile))) {\n logger.warn({ componentUrl }, 'APKINDEX file not found in tar archive');\n return {};\n }\n\n logger.debug('Successfully extracted APKINDEX content');\n\n let packages: ApkPackage[] = [];\n try {\n packages = await parseApkIndexFile(extractedFile);\n } catch (err) {\n logger.warn({ componentUrl, err }, 'Error parsing APK index file');\n return {};\n }\n\n logger.debug(\n { componentUrl, packageCount: packages.length },\n 'Successfully parsed APK index',\n );\n\n return groupPackagesByName(packages);\n } catch (err) {\n if (err instanceof HttpError) {\n const statusCode = err.response?.statusCode;\n if (statusCode === 429 || (statusCode && statusCode >= 500)) {\n throw new ExternalHostError(err);\n }\n // The caller logs the failure once for the component it was skipping\n throw err;\n }\n\n logger.warn(\n { componentUrl, err },\n 'Error extracting APK index from tar.gz',\n );\n return {};\n } finally {\n await fs.rmCache(cacheDir);\n }\n }\n\n private getPackages(\n componentUrl: string,\n ): Promise<Record<string, ApkPackage[]>> {\n return withCache(\n {\n namespace: `datasource-${ApkDatasource.id}`,\n key: componentUrl,\n ttlMinutes: 60,\n fallback: true,\n // Soft failures resolve to an empty index, which must not be cached as a valid one\n shouldCacheResult: isNonEmptyObject,\n },\n () => this._getPackages(componentUrl),\n );\n }\n\n /**\n * Gets releases for a specific package from APK repositories\n */\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore if -- should never happen */\n if (!registryUrl) {\n return null;\n }\n\n logger.debug(`Getting APK releases for ${packageName} from ${registryUrl}`);\n\n const componentUrls = constructComponentUrls(registryUrl);\n let result: ReleaseResult | null = null;\n // A package can be served by more than one component, so the same version\n // must not be reported twice\n const seenVersions = new Set<string>();\n\n for (const componentUrl of componentUrls) {\n try {\n const packages = await this.getPackages(componentUrl);\n const matchingPackages = packages[packageName];\n\n if (!matchingPackages) {\n logger.debug(\n { packageName, componentUrl },\n 'No matching packages found',\n );\n continue;\n }\n\n const releases: Release[] = [];\n for (const pkg of matchingPackages) {\n if (seenVersions.has(pkg.version)) {\n continue;\n }\n seenVersions.add(pkg.version);\n releases.push({\n version: pkg.version,\n releaseTimestamp: pkg.buildDate\n ? asTimestamp(pkg.buildDate * 1000)\n : undefined,\n });\n }\n\n logger.trace(\n {\n packageName,\n componentUrl,\n releaseCount: releases.length,\n releases,\n },\n 'Found APK releases',\n );\n\n result ??= { releases: [], registryUrl };\n result.homepage ??= matchingPackages.find((pkg) => pkg.url)?.url;\n result.releases.push(...releases);\n } catch (err) {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug(\n { packageName, componentUrl, err },\n 'Skipping APK component due to an error',\n );\n }\n }\n\n return result;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAoBA,MAAM,gBAAgB;CACpB,oBAAoB;CACpB,oBACE;AACJ;;;;;;;AAQA,SAAS,oBACP,UAC8B;CAC9B,MAAM,iBAA+C,CAAC;CAEtD,KAAK,MAAM,OAAO,UAAU;EAC1B,eAAe,IAAI,UAAU,CAAC;EAC9B,eAAe,IAAI,KAAK,CAAC,KAAK,GAAG;CACnC;CAEA,OAAO;AACT;AAEA,IAAa,gBAAb,MAAa,sBAAsB,WAAW;CAC5C,OAAgB,KAAA;CAEhB,oBAAsCA;;;;;;;;;;;;;;;;;CAkBtC,sBAAwC,CACtC,wFACF;CAEA,gBAAkC;CAElC,wBAA0C;CAE1C,mBAAqC;CAErC,0BAA4C;CAC5C,uBACE;CAEF,cAAc;EACZ,MAAM,cAAc,EAAE;CACxB;;;;CAKA,MAAc,aACZ,cACuC;EACvC,OAAO,MAAM,8BAA8B,cAAc;EAEzD,MAAM,YAAY,WAAW;EAC7B,MAAM,WAAW,MAAMC,eAAkB,MAAM,KAAK,OAAO,SAAS,CAAC;EACrE,MAAM,UAAU,MAAM,KAAK,UAAU,iBAAiB;EACtD,MAAM,gBAAgB,MAAM,KAAK,UAAU,UAAU;EAErD,IAAI;GACF,MAAM,WAAW,aAAa,cAAc,iBAAiB;GAC7D,OAAO,MAAM,0BAA0B,UAAU;GACjD,MAAM,aAAa,KAAK,KAAK,OAAO,QAAQ;GAC5C,MAAM,cAAcC,uBAA0B,OAAO;GACrD,MAAMC,SAAY,YAAY,WAAW;GAEzC,MAAMC,QAAW;IACf,MAAM;IACN,KAAK;IACL,SAAS,SAAS,MAAM,SAAS,IAAI,MAAM;GAC7C,CAAC;GAED,IAAI,CAAE,MAAMC,gBAAmB,aAAa,GAAI;IAC9C,OAAO,KAAK,EAAE,aAAa,GAAG,wCAAwC;IACtE,OAAO,CAAC;GACV;GAEA,OAAO,MAAM,yCAAyC;GAEtD,IAAI,WAAyB,CAAC;GAC9B,IAAI;IACF,WAAW,MAAM,kBAAkB,aAAa;GAClD,SAAS,KAAK;IACZ,OAAO,KAAK;KAAE;KAAc;IAAI,GAAG,8BAA8B;IACjE,OAAO,CAAC;GACV;GAEA,OAAO,MACL;IAAE;IAAc,cAAc,SAAS;GAAO,GAC9C,+BACF;GAEA,OAAO,oBAAoB,QAAQ;EACrC,SAAS,KAAK;GACZ,IAAI,eAAeC,cAAW;IAC5B,MAAM,aAAa,IAAI,UAAU;IACjC,IAAI,eAAe,OAAQ,cAAc,cAAc,KACrD,MAAM,IAAI,kBAAkB,GAAG;IAGjC,MAAM;GACR;GAEA,OAAO,KACL;IAAE;IAAc;GAAI,GACpB,wCACF;GACA,OAAO,CAAC;EACV,UAAU;GACR,MAAMC,QAAW,QAAQ;EAC3B;CACF;CAEA,YACE,cACuC;EACvC,OAAO,UACL;GACE,WAAW,cAAc,cAAc;GACvC,KAAK;GACL,YAAY;GACZ,UAAU;GAEV,mBAAmB;EACrB,SACM,KAAK,aAAa,YAAY,CACtC;CACF;;;;CAKA,MAAM,YAAY,EAChB,aACA,eACmD;;EAEnD,IAAI,CAAC,aACH,OAAO;EAGT,OAAO,MAAM,4BAA4B,YAAY,QAAQ,aAAa;EAE1E,MAAM,gBAAgB,uBAAuB,WAAW;EACxD,IAAI,SAA+B;EAGnC,MAAM,+BAAe,IAAI,IAAY;EAErC,KAAK,MAAM,gBAAgB,eACzB,IAAI;GAEF,MAAM,oBAAmB,MADF,KAAK,YAAY,YAAY,EAAA,CAClB;GAElC,IAAI,CAAC,kBAAkB;IACrB,OAAO,MACL;KAAE;KAAa;IAAa,GAC5B,4BACF;IACA;GACF;GAEA,MAAM,WAAsB,CAAC;GAC7B,KAAK,MAAM,OAAO,kBAAkB;IAClC,IAAI,aAAa,IAAI,IAAI,OAAO,GAC9B;IAEF,aAAa,IAAI,IAAI,OAAO;IAC5B,SAAS,KAAK;KACZ,SAAS,IAAI;KACb,kBAAkB,IAAI,YAClB,YAAY,IAAI,YAAY,GAAI,IAChC,KAAA;IACN,CAAC;GACH;GAEA,OAAO,MACL;IACE;IACA;IACA,cAAc,SAAS;IACvB;GACF,GACA,oBACF;GAEA,WAAW;IAAE,UAAU,CAAC;IAAG;GAAY;GACvC,OAAO,aAAa,iBAAiB,MAAM,QAAQ,IAAI,GAAG,CAAC,EAAE;GAC7D,OAAO,SAAS,KAAK,GAAG,QAAQ;EAClC,SAAS,KAAK;GACZ,IAAI,eAAe,mBACjB,MAAM;GAER,OAAO,MACL;IAAE;IAAa;IAAc;GAAI,GACjC,wCACF;EACF;EAGF,OAAO;CACT;AACF"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { logger } from "../../../logger/index.js";
|
|
2
|
+
import { createCacheReadStream } from "../../../util/fs/index.js";
|
|
3
|
+
import is from "@sindresorhus/is";
|
|
4
|
+
import readline from "node:readline";
|
|
5
|
+
//#region lib/modules/datasource/apk/parser.ts
|
|
6
|
+
function applyApkIndexLine(line, packageInfo) {
|
|
7
|
+
const colonIndex = line.indexOf(":");
|
|
8
|
+
if (colonIndex === -1) return;
|
|
9
|
+
const key = line.substring(0, colonIndex);
|
|
10
|
+
const value = line.substring(colonIndex + 1).trim();
|
|
11
|
+
switch (key) {
|
|
12
|
+
case "P":
|
|
13
|
+
packageInfo.name = value;
|
|
14
|
+
break;
|
|
15
|
+
case "V":
|
|
16
|
+
packageInfo.version = value;
|
|
17
|
+
break;
|
|
18
|
+
case "U":
|
|
19
|
+
packageInfo.url = value;
|
|
20
|
+
break;
|
|
21
|
+
case "t": packageInfo.buildDate = parseInt(value, 10);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function flushApkPackage(packageInfo) {
|
|
25
|
+
if (packageInfo.name && packageInfo.version) return packageInfo;
|
|
26
|
+
if (is.nonEmptyObject(packageInfo)) logger.warn({ packageInfo }, "Skipping package entry due to missing required fields");
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Parses an APK index file line-by-line to avoid loading large indexes into memory.
|
|
31
|
+
*
|
|
32
|
+
* @param extractedFile - Path to the extracted `APKINDEX` file (relative to Renovate cache).
|
|
33
|
+
*/
|
|
34
|
+
async function parseApkIndexFile(extractedFile) {
|
|
35
|
+
logger.debug(`Parsing APK index file ${extractedFile}`);
|
|
36
|
+
const packages = [];
|
|
37
|
+
const rl = readline.createInterface({
|
|
38
|
+
input: createCacheReadStream(extractedFile),
|
|
39
|
+
terminal: false
|
|
40
|
+
});
|
|
41
|
+
let packageInfo = {};
|
|
42
|
+
for await (const line of rl) if (line === "") {
|
|
43
|
+
const pkg = flushApkPackage(packageInfo);
|
|
44
|
+
if (pkg) packages.push(pkg);
|
|
45
|
+
packageInfo = {};
|
|
46
|
+
} else applyApkIndexLine(line, packageInfo);
|
|
47
|
+
const last = flushApkPackage(packageInfo);
|
|
48
|
+
if (last) packages.push(last);
|
|
49
|
+
logger.debug(`Parsed ${packages.length} packages from APK index`);
|
|
50
|
+
return packages;
|
|
51
|
+
}
|
|
52
|
+
//#endregion
|
|
53
|
+
export { parseApkIndexFile };
|
|
54
|
+
|
|
55
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","names":["fs.createCacheReadStream"],"sources":["../../../../lib/modules/datasource/apk/parser.ts"],"sourcesContent":["import readline from 'node:readline';\nimport is from '@sindresorhus/is';\nimport { logger } from '../../../logger/index.ts';\nimport * as fs from '../../../util/fs/index.ts';\nimport type { ApkPackage } from './types.ts';\n\nfunction applyApkIndexLine(\n line: string,\n packageInfo: Partial<ApkPackage>,\n): void {\n const colonIndex = line.indexOf(':');\n if (colonIndex === -1) {\n return;\n }\n\n // get fields based on the PKGINFO spec - https://wiki.alpinelinux.org/wiki/Apk_spec\n const key = line.substring(0, colonIndex);\n const value = line.substring(colonIndex + 1).trim();\n\n switch (key) {\n case 'P':\n packageInfo.name = value;\n break;\n case 'V':\n packageInfo.version = value;\n break;\n case 'U':\n packageInfo.url = value;\n break;\n case 't':\n packageInfo.buildDate = parseInt(value, 10);\n break;\n default:\n break;\n }\n}\n\nfunction flushApkPackage(packageInfo: Partial<ApkPackage>): ApkPackage | null {\n if (packageInfo.name && packageInfo.version) {\n return packageInfo as ApkPackage;\n }\n if (is.nonEmptyObject(packageInfo)) {\n logger.warn(\n { packageInfo },\n 'Skipping package entry due to missing required fields',\n );\n }\n return null;\n}\n\n/**\n * Parses an APK index file line-by-line to avoid loading large indexes into memory.\n *\n * @param extractedFile - Path to the extracted `APKINDEX` file (relative to Renovate cache).\n */\nexport async function parseApkIndexFile(\n extractedFile: string,\n): Promise<ApkPackage[]> {\n logger.debug(`Parsing APK index file ${extractedFile}`);\n\n const packages: ApkPackage[] = [];\n const rl = readline.createInterface({\n input: fs.createCacheReadStream(extractedFile),\n terminal: false,\n });\n\n let packageInfo: Partial<ApkPackage> = {};\n\n for await (const line of rl) {\n if (line === '') {\n const pkg = flushApkPackage(packageInfo);\n if (pkg) {\n packages.push(pkg);\n }\n packageInfo = {};\n } else {\n applyApkIndexLine(line, packageInfo);\n }\n }\n\n const last = flushApkPackage(packageInfo);\n if (last) {\n packages.push(last);\n }\n\n logger.debug(`Parsed ${packages.length} packages from APK index`);\n return packages;\n}\n"],"mappings":";;;;;AAMA,SAAS,kBACP,MACA,aACM;CACN,MAAM,aAAa,KAAK,QAAQ,GAAG;CACnC,IAAI,eAAe,IACjB;CAIF,MAAM,MAAM,KAAK,UAAU,GAAG,UAAU;CACxC,MAAM,QAAQ,KAAK,UAAU,aAAa,CAAC,CAAC,CAAC,KAAK;CAElD,QAAQ,KAAR;EACE,KAAK;GACH,YAAY,OAAO;GACnB;EACF,KAAK;GACH,YAAY,UAAU;GACtB;EACF,KAAK;GACH,YAAY,MAAM;GAClB;EACF,KAAK,KACH,YAAY,YAAY,SAAS,OAAO,EAAE;CAI9C;AACF;AAEA,SAAS,gBAAgB,aAAqD;CAC5E,IAAI,YAAY,QAAQ,YAAY,SAClC,OAAO;CAET,IAAI,GAAG,eAAe,WAAW,GAC/B,OAAO,KACL,EAAE,YAAY,GACd,uDACF;CAEF,OAAO;AACT;;;;;;AAOA,eAAsB,kBACpB,eACuB;CACvB,OAAO,MAAM,0BAA0B,eAAe;CAEtD,MAAM,WAAyB,CAAC;CAChC,MAAM,KAAK,SAAS,gBAAgB;EAClC,OAAOA,sBAAyB,aAAa;EAC7C,UAAU;CACZ,CAAC;CAED,IAAI,cAAmC,CAAC;CAExC,WAAW,MAAM,QAAQ,IACvB,IAAI,SAAS,IAAI;EACf,MAAM,MAAM,gBAAgB,WAAW;EACvC,IAAI,KACF,SAAS,KAAK,GAAG;EAEnB,cAAc,CAAC;CACjB,OACE,kBAAkB,MAAM,WAAW;CAIvC,MAAM,OAAO,gBAAgB,WAAW;CACxC,IAAI,MACF,SAAS,KAAK,IAAI;CAGpB,OAAO,MAAM,UAAU,SAAS,OAAO,yBAAyB;CAChE,OAAO;AACT"}
|