renovate 44.62.2 → 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.
@@ -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":"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"}
@@ -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"}
@@ -0,0 +1,96 @@
1
+ import { regEx } from "../../../util/regex.js";
2
+ import { isNotNullOrUndefined } from "../../../util/array.js";
3
+ import { joinUrlParts, parseUrl } from "../../../util/url.js";
4
+ //#region lib/modules/datasource/apk/url.ts
5
+ const REQUIRED_PARAMS = ["arch"];
6
+ const OPTIONAL_PARAMS = ["branch", "components"];
7
+ const KNOWN_PARAMS = [...REQUIRED_PARAMS, ...OPTIONAL_PARAMS];
8
+ const validSegment = regEx(/^[A-Za-z0-9][A-Za-z0-9._+-]*$/);
9
+ /**
10
+ * Constructs the `APKINDEX` directory URLs from the given registry URL.
11
+ *
12
+ * @param registryUrl - The base URL of the registry, with the path segments encoded as query parameters.
13
+ * @returns One URL per component.
14
+ * @throws Will throw an error if the registry URL cannot be parsed, or if the query
15
+ * parameters are missing, unknown or malformed.
16
+ *
17
+ * @example
18
+ * // Returns ['https://dl-cdn.alpinelinux.org/alpine/v3.19/main/x86_64',
19
+ * // 'https://dl-cdn.alpinelinux.org/alpine/v3.19/community/x86_64']
20
+ * constructComponentUrls('https://dl-cdn.alpinelinux.org/alpine?branch=v3.19&components=main,community&arch=x86_64');
21
+ */
22
+ function constructComponentUrls(registryUrl) {
23
+ try {
24
+ const url = parseUrl(registryUrl);
25
+ if (!url) throw new Error("Cannot parse URL");
26
+ validateParams(url);
27
+ const arch = validateSegment("arch", url.searchParams.get("arch"));
28
+ const branch = getBranch(url);
29
+ const components = getComponents(url);
30
+ for (const param of KNOWN_PARAMS) url.searchParams.delete(param);
31
+ url.hash = "";
32
+ const baseUrl = url.toString();
33
+ return components.map((component) => joinUrlParts(baseUrl, ...[
34
+ branch,
35
+ component,
36
+ arch
37
+ ].filter(isNotNullOrUndefined)));
38
+ } catch (error) {
39
+ throw new Error(`Invalid apk repo URL: ${registryUrl} - see documentation: ${error.message}`);
40
+ }
41
+ }
42
+ /**
43
+ * Validates that the required parameters are present, and that no unknown parameters are given.
44
+ *
45
+ * Unknown parameters are rejected so that a typo such as `component=main` fails loudly
46
+ * instead of being silently treated as a repository without components.
47
+ *
48
+ * @param url - The URL to validate.
49
+ * @throws Will throw an error if a required parameter is missing or an unknown parameter is present.
50
+ */
51
+ function validateParams(url) {
52
+ for (const param of REQUIRED_PARAMS) if (!url.searchParams.has(param)) throw new Error(`Missing required query parameter '${param}'`);
53
+ for (const param of url.searchParams.keys()) if (!KNOWN_PARAMS.includes(param)) throw new Error(`Unknown query parameter '${param}'`);
54
+ }
55
+ /**
56
+ * Validates a single parameter value which is used as a path segment.
57
+ *
58
+ * @param param - The name of the query parameter, used for the error message.
59
+ * @param value - The value to validate.
60
+ * @returns The validated value.
61
+ * @throws Will throw an error if the value is not usable as a path segment.
62
+ */
63
+ function validateSegment(param, value) {
64
+ if (!validSegment.test(value)) throw new Error(`Invalid '${param}' query parameter: '${value}'`);
65
+ return value;
66
+ }
67
+ /**
68
+ * Retrieves the branch from the URL.
69
+ *
70
+ * Repositories such as Wolfi have no branch in their path, so `null` is returned
71
+ * when `branch` is absent.
72
+ *
73
+ * @param url - The URL to retrieve the branch from.
74
+ * @returns The branch, or `null` when there is none.
75
+ */
76
+ function getBranch(url) {
77
+ const branch = url.searchParams.get("branch");
78
+ return branch === null ? null : validateSegment("branch", branch);
79
+ }
80
+ /**
81
+ * Retrieves the components from the URL.
82
+ *
83
+ * Repositories such as Wolfi serve their index directly below the repository
84
+ * root, so a single component-less URL is returned when `components` is absent.
85
+ *
86
+ * @param url - The URL to retrieve the components from.
87
+ * @returns The list of components, or `[undefined]` when there are none.
88
+ */
89
+ function getComponents(url) {
90
+ const components = url.searchParams.get("components")?.split(",").map((component) => component.trim()).filter((component) => component !== "").map((component) => validateSegment("components", component));
91
+ return components?.length ? components : [void 0];
92
+ }
93
+ //#endregion
94
+ export { constructComponentUrls };
95
+
96
+ //# sourceMappingURL=url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.js","names":[],"sources":["../../../../lib/modules/datasource/apk/url.ts"],"sourcesContent":["import { isNotNullOrUndefined } from '../../../util/array.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { joinUrlParts, parseUrl } from '../../../util/url.ts';\n\nconst REQUIRED_PARAMS = ['arch'];\nconst OPTIONAL_PARAMS = ['branch', 'components'];\nconst KNOWN_PARAMS = [...REQUIRED_PARAMS, ...OPTIONAL_PARAMS];\n\n// Parameter values become path segments verbatim, so anything which could escape\n// or reshape the resulting URL is rejected\nconst validSegment = regEx(/^[A-Za-z0-9][A-Za-z0-9._+-]*$/);\n\n/**\n * Constructs the `APKINDEX` directory URLs from the given registry URL.\n *\n * @param registryUrl - The base URL of the registry, with the path segments encoded as query parameters.\n * @returns One URL per component.\n * @throws Will throw an error if the registry URL cannot be parsed, or if the query\n * parameters are missing, unknown or malformed.\n *\n * @example\n * // Returns ['https://dl-cdn.alpinelinux.org/alpine/v3.19/main/x86_64',\n * // 'https://dl-cdn.alpinelinux.org/alpine/v3.19/community/x86_64']\n * constructComponentUrls('https://dl-cdn.alpinelinux.org/alpine?branch=v3.19&components=main,community&arch=x86_64');\n */\nexport function constructComponentUrls(registryUrl: string): string[] {\n try {\n const url = parseUrl(registryUrl);\n if (!url) {\n throw new Error('Cannot parse URL');\n }\n\n validateParams(url);\n\n const arch = validateSegment('arch', url.searchParams.get('arch')!);\n const branch = getBranch(url);\n const components = getComponents(url);\n\n // The parameters describe the path, so they are stripped before the segments\n // are appended. Unknown parameters are rejected above, so nothing else remains.\n for (const param of KNOWN_PARAMS) {\n url.searchParams.delete(param);\n }\n url.hash = '';\n const baseUrl = url.toString();\n\n return components.map((component) =>\n joinUrlParts(\n baseUrl,\n ...[branch, component, arch].filter(isNotNullOrUndefined),\n ),\n );\n } catch (error) {\n throw new Error(\n `Invalid apk repo URL: ${registryUrl} - see documentation: ${error.message}`,\n );\n }\n}\n\n/**\n * Validates that the required parameters are present, and that no unknown parameters are given.\n *\n * Unknown parameters are rejected so that a typo such as `component=main` fails loudly\n * instead of being silently treated as a repository without components.\n *\n * @param url - The URL to validate.\n * @throws Will throw an error if a required parameter is missing or an unknown parameter is present.\n */\nfunction validateParams(url: URL): void {\n for (const param of REQUIRED_PARAMS) {\n if (!url.searchParams.has(param)) {\n throw new Error(`Missing required query parameter '${param}'`);\n }\n }\n\n for (const param of url.searchParams.keys()) {\n if (!KNOWN_PARAMS.includes(param)) {\n throw new Error(`Unknown query parameter '${param}'`);\n }\n }\n}\n\n/**\n * Validates a single parameter value which is used as a path segment.\n *\n * @param param - The name of the query parameter, used for the error message.\n * @param value - The value to validate.\n * @returns The validated value.\n * @throws Will throw an error if the value is not usable as a path segment.\n */\nfunction validateSegment(param: string, value: string): string {\n if (!validSegment.test(value)) {\n throw new Error(`Invalid '${param}' query parameter: '${value}'`);\n }\n\n return value;\n}\n\n/**\n * Retrieves the branch from the URL.\n *\n * Repositories such as Wolfi have no branch in their path, so `null` is returned\n * when `branch` is absent.\n *\n * @param url - The URL to retrieve the branch from.\n * @returns The branch, or `null` when there is none.\n */\nfunction getBranch(url: URL): string | null {\n const branch = url.searchParams.get('branch');\n\n return branch === null ? null : validateSegment('branch', branch);\n}\n\n/**\n * Retrieves the components from the URL.\n *\n * Repositories such as Wolfi serve their index directly below the repository\n * root, so a single component-less URL is returned when `components` is absent.\n *\n * @param url - The URL to retrieve the components from.\n * @returns The list of components, or `[undefined]` when there are none.\n */\nfunction getComponents(url: URL): (string | undefined)[] {\n const components = url.searchParams\n .get('components')\n ?.split(',')\n .map((component) => component.trim())\n .filter((component) => component !== '')\n .map((component) => validateSegment('components', component));\n\n return components?.length ? components : [undefined];\n}\n"],"mappings":";;;;AAIA,MAAM,kBAAkB,CAAC,MAAM;AAC/B,MAAM,kBAAkB,CAAC,UAAU,YAAY;AAC/C,MAAM,eAAe,CAAC,GAAG,iBAAiB,GAAG,eAAe;AAI5D,MAAM,eAAe,MAAM,+BAA+B;;;;;;;;;;;;;;AAe1D,SAAgB,uBAAuB,aAA+B;CACpE,IAAI;EACF,MAAM,MAAM,SAAS,WAAW;EAChC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,kBAAkB;EAGpC,eAAe,GAAG;EAElB,MAAM,OAAO,gBAAgB,QAAQ,IAAI,aAAa,IAAI,MAAM,CAAE;EAClE,MAAM,SAAS,UAAU,GAAG;EAC5B,MAAM,aAAa,cAAc,GAAG;EAIpC,KAAK,MAAM,SAAS,cAClB,IAAI,aAAa,OAAO,KAAK;EAE/B,IAAI,OAAO;EACX,MAAM,UAAU,IAAI,SAAS;EAE7B,OAAO,WAAW,KAAK,cACrB,aACE,SACA,GAAG;GAAC;GAAQ;GAAW;EAAI,CAAC,CAAC,OAAO,oBAAoB,CAC1D,CACF;CACF,SAAS,OAAO;EACd,MAAM,IAAI,MACR,yBAAyB,YAAY,wBAAwB,MAAM,SACrE;CACF;AACF;;;;;;;;;;AAWA,SAAS,eAAe,KAAgB;CACtC,KAAK,MAAM,SAAS,iBAClB,IAAI,CAAC,IAAI,aAAa,IAAI,KAAK,GAC7B,MAAM,IAAI,MAAM,qCAAqC,MAAM,EAAE;CAIjE,KAAK,MAAM,SAAS,IAAI,aAAa,KAAK,GACxC,IAAI,CAAC,aAAa,SAAS,KAAK,GAC9B,MAAM,IAAI,MAAM,4BAA4B,MAAM,EAAE;AAG1D;;;;;;;;;AAUA,SAAS,gBAAgB,OAAe,OAAuB;CAC7D,IAAI,CAAC,aAAa,KAAK,KAAK,GAC1B,MAAM,IAAI,MAAM,YAAY,MAAM,sBAAsB,MAAM,EAAE;CAGlE,OAAO;AACT;;;;;;;;;;AAWA,SAAS,UAAU,KAAyB;CAC1C,MAAM,SAAS,IAAI,aAAa,IAAI,QAAQ;CAE5C,OAAO,WAAW,OAAO,OAAO,gBAAgB,UAAU,MAAM;AAClE;;;;;;;;;;AAWA,SAAS,cAAc,KAAkC;CACvD,MAAM,aAAa,IAAI,aACpB,IAAI,YAAY,CAAC,EAChB,MAAM,GAAG,CAAC,CACX,KAAK,cAAc,UAAU,KAAK,CAAC,CAAC,CACpC,QAAQ,cAAc,cAAc,EAAE,CAAC,CACvC,KAAK,cAAc,gBAAgB,cAAc,SAAS,CAAC;CAE9D,OAAO,YAAY,SAAS,aAAa,CAAC,KAAA,CAAS;AACrD"}
@@ -2,11 +2,11 @@ import { regEx } from "../../../util/regex.js";
2
2
  import { logger } from "../../../logger/index.js";
3
3
  import { joinUrlParts } from "../../../util/url.js";
4
4
  import { withCache } from "../../../util/cache/package/with-cache.js";
5
- import { parse } from "../../../util/html.js";
6
5
  import { RequestError } from "../../../util/http/got.js";
7
6
  import "../../../util/http/index.js";
8
7
  import { asTimestamp } from "../../../util/timestamp.js";
9
8
  import { Datasource } from "../datasource.js";
9
+ import { parse } from "../../../util/html.js";
10
10
  import { datasource } from "./common.js";
11
11
  //#region lib/modules/datasource/artifactory/index.ts
12
12
  var ArtifactoryDatasource = class extends Datasource {
@@ -6,11 +6,11 @@ import { ensureTrailingSlash, parseUrl } from "../../../util/url.js";
6
6
  import { ExternalHostError } from "../../../types/errors/external-host-error.js";
7
7
  import { Json } from "../../../util/schema-utils/index.js";
8
8
  import { id } from "../../versioning/pep440/index.js";
9
- import { parse } from "../../../util/html.js";
10
9
  import { RequestError } from "../../../util/http/got.js";
11
10
  import "../../../util/http/index.js";
12
11
  import { asTimestamp } from "../../../util/timestamp.js";
13
12
  import { Datasource } from "../datasource.js";
13
+ import { parse } from "../../../util/html.js";
14
14
  import { getGoogleAuthToken } from "../util.js";
15
15
  import { isGitHubRepo, normalizePythonDepName } from "./common.js";
16
16
  import { PypiResponse, PypiSimpleResponse } from "./schema.js";
@@ -3,9 +3,9 @@ import { logger } from "../../../logger/index.js";
3
3
  import { ExternalHostError } from "../../../types/errors/external-host-error.js";
4
4
  import { id, isVersion } from "../../versioning/ruby/index.js";
5
5
  import { withCache } from "../../../util/cache/package/with-cache.js";
6
- import { parse } from "../../../util/html.js";
7
6
  import { asTimestamp } from "../../../util/timestamp.js";
8
7
  import { Datasource } from "../datasource.js";
8
+ import { parse } from "../../../util/html.js";
9
9
  //#region lib/modules/datasource/ruby-version/index.ts
10
10
  var RubyVersionDatasource = class RubyVersionDatasource extends Datasource {
11
11
  static id = "ruby-version";
@@ -1,5 +1,5 @@
1
1
  //#region lib/util/cache/package/namespaces.d.ts
2
- declare const packageCacheNamespaces: readonly ['_test-namespace', 'changelog-bitbucket-notes@v2', 'changelog-bitbucket-release', 'changelog-bitbucket-server-notes@v2', 'changelog-bitbucket-server-release', 'changelog-forgejo-notes@v2', 'changelog-forgejo-release', 'changelog-gitea-notes@v2', 'changelog-gitea-release', 'changelog-github-notes@v2', 'changelog-github-release', 'changelog-gitlab-notes@v2', 'changelog-gitlab-release', 'datasource-artifactory', 'datasource-aws-machine-image', 'datasource-aws-rds', 'datasource-aws-eks-addon', 'datasource-azure-bicep-resource', 'datasource-azure-pipelines-tasks', 'datasource-azure-tags', 'datasource-bazel', 'datasource-bitbucket-tags', 'datasource-bitbucket-server-tags', 'datasource-bitrise', 'datasource-buildpacks-registry', 'datasource-cdnjs', 'datasource-conan', 'datasource-conda', 'datasource-cpan', 'datasource-crate-metadata', 'datasource-crate', 'datasource-deb', 'datasource-deno', 'datasource-docker-architecture', 'datasource-docker-hub-cache', 'datasource-docker-digest', 'datasource-docker-hub-tags', 'datasource-docker-imageconfig', 'datasource-docker-labels', 'datasource-docker-releases-v2', 'datasource-docker-tags', 'datasource-dotnet-version', 'datasource-elm-package', 'datasource-endoflife-date', 'datasource-galaxy-collection', 'datasource-galaxy', 'datasource-git-refs', 'datasource-git-tags', 'datasource-git', 'datasource-forgejo-releases', 'datasource-forgejo-tags', 'datasource-gitea-releases', 'datasource-gitea-tags', 'datasource-github-digest', 'datasource-github-release-attachments', 'datasource-gitlab-packages', 'datasource-gitlab-releases', 'datasource-gitlab-tags', 'datasource-glasskube-packages', 'datasource-go-direct', 'datasource-go-proxy', 'datasource-go', 'datasource-golang-version', 'datasource-gradle-version', 'datasource-helm', 'datasource-hermit', 'datasource-hex', 'datasource-hexpm-bob', 'datasource-java-version', 'datasource-jenkins-plugins', 'datasource-jsr', 'datasource-maven:cache-provider', 'datasource-maven:metadata-not-found', 'datasource-maven:pom-cache-provider', 'datasource-maven:postprocess-reject', 'datasource-nextcloud', 'datasource-node-version', 'datasource-npm:cache-provider', 'datasource-nuget-v3', 'datasource-orb', 'datasource-packagist', 'datasource-pod', 'datasource-python-version', 'datasource-repology', 'datasource-rpm', 'datasource-ruby-version', 'datasource-rubygems', 'datasource-rust-version', 'datasource-sbt-package', 'datasource-terraform-module', 'datasource-terraform-provider', 'datasource-terraform', 'datasource-typst:cache-provider', 'datasource-typst:registry-releases', 'datasource-unity3d', 'datasource-unity3d-packages', 'github-branches-datasource-v1', 'github-releases-datasource-v2', 'github-tags-datasource-v2', 'merge-confidence', 'preset', 'terraform-provider-hash', 'url-sha256'];
2
+ declare const packageCacheNamespaces: readonly ['_test-namespace', 'changelog-bitbucket-notes@v2', 'changelog-bitbucket-release', 'changelog-bitbucket-server-notes@v2', 'changelog-bitbucket-server-release', 'changelog-forgejo-notes@v2', 'changelog-forgejo-release', 'changelog-gitea-notes@v2', 'changelog-gitea-release', 'changelog-github-notes@v2', 'changelog-github-release', 'changelog-gitlab-notes@v2', 'changelog-gitlab-release', 'datasource-apk', 'datasource-artifactory', 'datasource-aws-machine-image', 'datasource-aws-rds', 'datasource-aws-eks-addon', 'datasource-azure-bicep-resource', 'datasource-azure-pipelines-tasks', 'datasource-azure-tags', 'datasource-bazel', 'datasource-bitbucket-tags', 'datasource-bitbucket-server-tags', 'datasource-bitrise', 'datasource-buildpacks-registry', 'datasource-cdnjs', 'datasource-conan', 'datasource-conda', 'datasource-cpan', 'datasource-crate-metadata', 'datasource-crate', 'datasource-deb', 'datasource-deno', 'datasource-docker-architecture', 'datasource-docker-hub-cache', 'datasource-docker-digest', 'datasource-docker-hub-tags', 'datasource-docker-imageconfig', 'datasource-docker-labels', 'datasource-docker-releases-v2', 'datasource-docker-tags', 'datasource-dotnet-version', 'datasource-elm-package', 'datasource-endoflife-date', 'datasource-galaxy-collection', 'datasource-galaxy', 'datasource-git-refs', 'datasource-git-tags', 'datasource-git', 'datasource-forgejo-releases', 'datasource-forgejo-tags', 'datasource-gitea-releases', 'datasource-gitea-tags', 'datasource-github-digest', 'datasource-github-release-attachments', 'datasource-gitlab-packages', 'datasource-gitlab-releases', 'datasource-gitlab-tags', 'datasource-glasskube-packages', 'datasource-go-direct', 'datasource-go-proxy', 'datasource-go', 'datasource-golang-version', 'datasource-gradle-version', 'datasource-helm', 'datasource-hermit', 'datasource-hex', 'datasource-hexpm-bob', 'datasource-java-version', 'datasource-jenkins-plugins', 'datasource-jsr', 'datasource-maven:cache-provider', 'datasource-maven:metadata-not-found', 'datasource-maven:pom-cache-provider', 'datasource-maven:postprocess-reject', 'datasource-nextcloud', 'datasource-node-version', 'datasource-npm:cache-provider', 'datasource-nuget-v3', 'datasource-orb', 'datasource-packagist', 'datasource-pod', 'datasource-python-version', 'datasource-repology', 'datasource-rpm', 'datasource-ruby-version', 'datasource-rubygems', 'datasource-rust-version', 'datasource-sbt-package', 'datasource-terraform-module', 'datasource-terraform-provider', 'datasource-terraform', 'datasource-typst:cache-provider', 'datasource-typst:registry-releases', 'datasource-unity3d', 'datasource-unity3d-packages', 'github-branches-datasource-v1', 'github-releases-datasource-v2', 'github-tags-datasource-v2', 'merge-confidence', 'preset', 'terraform-provider-hash', 'url-sha256'];
3
3
  type PackageCacheNamespace = (typeof packageCacheNamespaces)[number] | `datasource-releases-${string}`;
4
4
  //#endregion
5
5
  export { PackageCacheNamespace, packageCacheNamespaces };
@@ -14,6 +14,7 @@ const packageCacheNamespaces = [
14
14
  "changelog-github-release",
15
15
  "changelog-gitlab-notes@v2",
16
16
  "changelog-gitlab-release",
17
+ "datasource-apk",
17
18
  "datasource-artifactory",
18
19
  "datasource-aws-machine-image",
19
20
  "datasource-aws-rds",
@@ -1 +1 @@
1
- {"version":3,"file":"namespaces.js","names":[],"sources":["../../../../lib/util/cache/package/namespaces.ts"],"sourcesContent":["// v8 ignore file -- constant namespace list, no executable logic to cover\n/* IMPORTANT:\n * These namespaces below are used as part of the cacheTtlOverride feature\n * It's OK to add to them (e.g. for new datasources) but we should avoid\n * backwards-incompatible changes in non-major releases\n */\n\nexport const packageCacheNamespaces = [\n '_test-namespace',\n 'changelog-bitbucket-notes@v2',\n 'changelog-bitbucket-release',\n 'changelog-bitbucket-server-notes@v2',\n 'changelog-bitbucket-server-release',\n 'changelog-forgejo-notes@v2',\n 'changelog-forgejo-release',\n 'changelog-gitea-notes@v2',\n 'changelog-gitea-release',\n 'changelog-github-notes@v2',\n 'changelog-github-release',\n 'changelog-gitlab-notes@v2',\n 'changelog-gitlab-release',\n 'datasource-artifactory',\n 'datasource-aws-machine-image',\n 'datasource-aws-rds',\n 'datasource-aws-eks-addon',\n 'datasource-azure-bicep-resource',\n 'datasource-azure-pipelines-tasks',\n 'datasource-azure-tags',\n 'datasource-bazel',\n 'datasource-bitbucket-tags',\n 'datasource-bitbucket-server-tags',\n 'datasource-bitrise',\n 'datasource-buildpacks-registry',\n 'datasource-cdnjs',\n 'datasource-conan',\n 'datasource-conda',\n 'datasource-cpan',\n 'datasource-crate-metadata',\n 'datasource-crate',\n 'datasource-deb',\n 'datasource-deno',\n 'datasource-docker-architecture',\n 'datasource-docker-hub-cache',\n 'datasource-docker-digest',\n 'datasource-docker-hub-tags',\n 'datasource-docker-imageconfig',\n 'datasource-docker-labels',\n 'datasource-docker-releases-v2',\n 'datasource-docker-tags',\n 'datasource-dotnet-version',\n 'datasource-elm-package',\n 'datasource-endoflife-date',\n 'datasource-galaxy-collection',\n 'datasource-galaxy',\n 'datasource-git-refs',\n 'datasource-git-tags',\n 'datasource-git',\n 'datasource-forgejo-releases',\n 'datasource-forgejo-tags',\n 'datasource-gitea-releases',\n 'datasource-gitea-tags',\n 'datasource-github-digest',\n 'datasource-github-release-attachments',\n 'datasource-gitlab-packages',\n 'datasource-gitlab-releases',\n 'datasource-gitlab-tags',\n 'datasource-glasskube-packages',\n 'datasource-go-direct',\n 'datasource-go-proxy',\n 'datasource-go',\n 'datasource-golang-version',\n 'datasource-gradle-version',\n 'datasource-helm',\n 'datasource-hermit',\n 'datasource-hex',\n 'datasource-hexpm-bob',\n 'datasource-java-version',\n 'datasource-jenkins-plugins',\n 'datasource-jsr',\n 'datasource-maven:cache-provider',\n 'datasource-maven:metadata-not-found',\n 'datasource-maven:pom-cache-provider',\n 'datasource-maven:postprocess-reject',\n 'datasource-nextcloud',\n 'datasource-node-version',\n 'datasource-npm:cache-provider',\n 'datasource-nuget-v3',\n 'datasource-orb',\n 'datasource-packagist',\n 'datasource-pod',\n 'datasource-python-version',\n 'datasource-repology',\n 'datasource-rpm',\n 'datasource-ruby-version',\n 'datasource-rubygems',\n 'datasource-rust-version',\n 'datasource-sbt-package',\n 'datasource-terraform-module',\n 'datasource-terraform-provider',\n 'datasource-terraform',\n 'datasource-typst:cache-provider',\n 'datasource-typst:registry-releases',\n 'datasource-unity3d',\n 'datasource-unity3d-packages',\n 'github-branches-datasource-v1',\n 'github-releases-datasource-v2',\n 'github-tags-datasource-v2',\n 'merge-confidence',\n 'preset',\n 'terraform-provider-hash',\n 'url-sha256',\n] as const;\n\nexport type PackageCacheNamespace =\n | (typeof packageCacheNamespaces)[number]\n | `datasource-releases-${string}`;\n\nexport type CombinedKey =\n `datasource-mem:pkg-fetch:${PackageCacheNamespace}:${string}`;\n"],"mappings":";;AAOA,MAAa,yBAAyB;CACpC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF"}
1
+ {"version":3,"file":"namespaces.js","names":[],"sources":["../../../../lib/util/cache/package/namespaces.ts"],"sourcesContent":["// v8 ignore file -- constant namespace list, no executable logic to cover\n/* IMPORTANT:\n * These namespaces below are used as part of the cacheTtlOverride feature\n * It's OK to add to them (e.g. for new datasources) but we should avoid\n * backwards-incompatible changes in non-major releases\n */\n\nexport const packageCacheNamespaces = [\n '_test-namespace',\n 'changelog-bitbucket-notes@v2',\n 'changelog-bitbucket-release',\n 'changelog-bitbucket-server-notes@v2',\n 'changelog-bitbucket-server-release',\n 'changelog-forgejo-notes@v2',\n 'changelog-forgejo-release',\n 'changelog-gitea-notes@v2',\n 'changelog-gitea-release',\n 'changelog-github-notes@v2',\n 'changelog-github-release',\n 'changelog-gitlab-notes@v2',\n 'changelog-gitlab-release',\n 'datasource-apk',\n 'datasource-artifactory',\n 'datasource-aws-machine-image',\n 'datasource-aws-rds',\n 'datasource-aws-eks-addon',\n 'datasource-azure-bicep-resource',\n 'datasource-azure-pipelines-tasks',\n 'datasource-azure-tags',\n 'datasource-bazel',\n 'datasource-bitbucket-tags',\n 'datasource-bitbucket-server-tags',\n 'datasource-bitrise',\n 'datasource-buildpacks-registry',\n 'datasource-cdnjs',\n 'datasource-conan',\n 'datasource-conda',\n 'datasource-cpan',\n 'datasource-crate-metadata',\n 'datasource-crate',\n 'datasource-deb',\n 'datasource-deno',\n 'datasource-docker-architecture',\n 'datasource-docker-hub-cache',\n 'datasource-docker-digest',\n 'datasource-docker-hub-tags',\n 'datasource-docker-imageconfig',\n 'datasource-docker-labels',\n 'datasource-docker-releases-v2',\n 'datasource-docker-tags',\n 'datasource-dotnet-version',\n 'datasource-elm-package',\n 'datasource-endoflife-date',\n 'datasource-galaxy-collection',\n 'datasource-galaxy',\n 'datasource-git-refs',\n 'datasource-git-tags',\n 'datasource-git',\n 'datasource-forgejo-releases',\n 'datasource-forgejo-tags',\n 'datasource-gitea-releases',\n 'datasource-gitea-tags',\n 'datasource-github-digest',\n 'datasource-github-release-attachments',\n 'datasource-gitlab-packages',\n 'datasource-gitlab-releases',\n 'datasource-gitlab-tags',\n 'datasource-glasskube-packages',\n 'datasource-go-direct',\n 'datasource-go-proxy',\n 'datasource-go',\n 'datasource-golang-version',\n 'datasource-gradle-version',\n 'datasource-helm',\n 'datasource-hermit',\n 'datasource-hex',\n 'datasource-hexpm-bob',\n 'datasource-java-version',\n 'datasource-jenkins-plugins',\n 'datasource-jsr',\n 'datasource-maven:cache-provider',\n 'datasource-maven:metadata-not-found',\n 'datasource-maven:pom-cache-provider',\n 'datasource-maven:postprocess-reject',\n 'datasource-nextcloud',\n 'datasource-node-version',\n 'datasource-npm:cache-provider',\n 'datasource-nuget-v3',\n 'datasource-orb',\n 'datasource-packagist',\n 'datasource-pod',\n 'datasource-python-version',\n 'datasource-repology',\n 'datasource-rpm',\n 'datasource-ruby-version',\n 'datasource-rubygems',\n 'datasource-rust-version',\n 'datasource-sbt-package',\n 'datasource-terraform-module',\n 'datasource-terraform-provider',\n 'datasource-terraform',\n 'datasource-typst:cache-provider',\n 'datasource-typst:registry-releases',\n 'datasource-unity3d',\n 'datasource-unity3d-packages',\n 'github-branches-datasource-v1',\n 'github-releases-datasource-v2',\n 'github-tags-datasource-v2',\n 'merge-confidence',\n 'preset',\n 'terraform-provider-hash',\n 'url-sha256',\n] as const;\n\nexport type PackageCacheNamespace =\n | (typeof packageCacheNamespaces)[number]\n | `datasource-releases-${string}`;\n\nexport type CombinedKey =\n `datasource-mem:pkg-fetch:${PackageCacheNamespace}:${string}`;\n"],"mappings":";;AAOA,MAAa,yBAAyB;CACpC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "renovate",
3
3
  "description": "Automated dependency updates. Flexible so you don't need to be.",
4
- "version": "44.62.2",
4
+ "version": "44.63.0",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "renovate": "dist/renovate.js",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$id": "https://docs.renovatebot.com/renovate-schema.json",
3
- "title": "JSON schema for Renovate 44.62.2 config files (https://renovatebot.com/)",
3
+ "title": "JSON schema for Renovate 44.63.0 config files (https://renovatebot.com/)",
4
4
  "$schema": "http://json-schema.org/draft-07/schema#",
5
- "x-renovate-version": "44.62.2",
5
+ "x-renovate-version": "44.63.0",
6
6
  "allowComments": true,
7
7
  "type": "object",
8
8
  "definitions": {