From 49d851e5fd3a6bcd4667fb243880488bbfd46ccb Mon Sep 17 00:00:00 2001
From: Michael Kriese <michael.kriese@visualon.de>
Date: Thu, 9 Jun 2022 14:17:05 +0200
Subject: [PATCH] refactor: tighten typescript types (#15965)

---
 lib/config/migration.spec.ts                   |  4 +++-
 lib/config/migration.ts                        |  3 ++-
 .../custom/compatibility-migration.ts          |  2 +-
 lib/config/types.ts                            | 18 +++++++++++++-----
 lib/config/validation.spec.ts                  |  2 +-
 lib/modules/datasource/npm/npmrc.ts            |  4 +++-
 lib/workers/types.ts                           |  1 -
 tools/docs/presets.ts                          |  2 +-
 8 files changed, 24 insertions(+), 12 deletions(-)

diff --git a/lib/config/migration.spec.ts b/lib/config/migration.spec.ts
index 4376df82f8..e7b8dccef2 100644
--- a/lib/config/migration.spec.ts
+++ b/lib/config/migration.spec.ts
@@ -304,8 +304,10 @@ describe('config/migration', () => {
       expect(isMigrated).toBeTrue();
       expect(migratedConfig).toMatchSnapshot();
       expect(migratedConfig.lockFileMaintenance?.packageRules).toHaveLength(1);
+      // TODO: fix types #7154
       expect(
-        migratedConfig.lockFileMaintenance?.packageRules[0].respectLatest
+        (migratedConfig.lockFileMaintenance as RenovateConfig)
+          ?.packageRules?.[0].respectLatest
       ).toBeFalse();
     });
 
diff --git a/lib/config/migration.ts b/lib/config/migration.ts
index 3567714432..ac75c9d1db 100644
--- a/lib/config/migration.ts
+++ b/lib/config/migration.ts
@@ -221,7 +221,8 @@ export function migrateConfig(config: RenovateConfig): MigratedConfig {
         for (const [oldKey, ruleVal] of Object.entries(packageRule)) {
           const newKey = renameMap[oldKey as keyof typeof renameMap];
           if (newKey) {
-            packageRule[newKey] = ruleVal;
+            // TODO: fix types #7154
+            packageRule[newKey] = ruleVal as never;
             delete packageRule[oldKey];
           }
         }
diff --git a/lib/config/migrations/custom/compatibility-migration.ts b/lib/config/migrations/custom/compatibility-migration.ts
index a22ddb1485..69c44322bc 100644
--- a/lib/config/migrations/custom/compatibility-migration.ts
+++ b/lib/config/migrations/custom/compatibility-migration.ts
@@ -7,7 +7,7 @@ export class CompatibilityMigration extends AbstractMigration {
 
   override run(value: unknown): void {
     if (is.object(value)) {
-      this.setSafely('constraints', value);
+      this.setSafely('constraints', value as Record<string, string>);
     }
   }
 }
diff --git a/lib/config/types.ts b/lib/config/types.ts
index e49d86f2d5..962e19bbef 100644
--- a/lib/config/types.ts
+++ b/lib/config/types.ts
@@ -38,6 +38,7 @@ export interface RenovateSharedConfig {
   enabledManagers?: string[];
   extends?: string[];
   fileMatch?: string[];
+  force?: RenovateConfig;
   group?: GroupConfig;
   groupName?: string;
   groupSlug?: string;
@@ -58,6 +59,7 @@ export interface RenovateSharedConfig {
   productLinks?: Record<string, string>;
   prPriority?: number;
   rebaseLabel?: string;
+  respectLatest?: boolean;
   stopUpdatingLabel?: string;
   rebaseWhen?: string;
   recreateClosed?: boolean;
@@ -140,16 +142,18 @@ export interface LegacyAdminConfig {
 
   requireConfig?: RequiredConfig;
 }
+
 export type ExecutionMode = 'branch' | 'update';
 
-export type PostUpgradeTasks = {
+export interface PostUpgradeTasks {
   commands?: string[];
   fileFilters?: string[];
   executionMode: ExecutionMode;
-};
+}
 
-type UpdateConfig<T extends RenovateSharedConfig = RenovateSharedConfig> =
-  Partial<Record<UpdateType, T | null>>;
+export type UpdateConfig<
+  T extends RenovateSharedConfig = RenovateSharedConfig
+> = Partial<Record<UpdateType, T | null>>;
 
 export type RenovateRepository =
   | string
@@ -228,6 +232,8 @@ export interface RenovateConfig
 
   fetchReleaseNotes?: boolean;
   secrets?: Record<string, string>;
+
+  constraints?: Record<string, string>;
 }
 
 export interface AllConfig extends RenovateConfig, GlobalOnlyConfig {}
@@ -269,7 +275,8 @@ export type MergeStrategy =
 export interface PackageRule
   extends RenovateSharedConfig,
     UpdateConfig,
-    Record<string, any> {
+    Record<string, unknown> {
+  description?: string | string[];
   matchFiles?: string[];
   matchPaths?: string[];
   matchLanguages?: string[];
@@ -287,6 +294,7 @@ export interface PackageRule
   matchSourceUrlPrefixes?: string[];
   matchSourceUrls?: string[];
   matchUpdateTypes?: UpdateType[];
+  registryUrls?: string[];
 }
 
 export interface ValidationMessage {
diff --git a/lib/config/validation.spec.ts b/lib/config/validation.spec.ts
index 1d7f324648..e61740dc75 100644
--- a/lib/config/validation.spec.ts
+++ b/lib/config/validation.spec.ts
@@ -488,7 +488,7 @@ describe('config/validation', () => {
         constraints: { packageRules: [{}] },
       };
       const { warnings, errors } = await configValidation.validateConfig(
-        config,
+        config as never, // TODO: #15963
         true
       );
       expect(warnings).toHaveLength(0);
diff --git a/lib/modules/datasource/npm/npmrc.ts b/lib/modules/datasource/npm/npmrc.ts
index a643ea56df..fccb2d7fd4 100644
--- a/lib/modules/datasource/npm/npmrc.ts
+++ b/lib/modules/datasource/npm/npmrc.ts
@@ -173,7 +173,9 @@ export function resolveRegistryUrl(packageName: string): string {
       !matchPackagePrefixes ||
       packageName.startsWith(matchPackagePrefixes[0])
     ) {
-      registryUrl = registryUrls[0];
+      // TODO: fix types #7154
+      // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
+      registryUrl = registryUrls![0];
     }
   }
   return registryUrl;
diff --git a/lib/workers/types.ts b/lib/workers/types.ts
index 8b1f69c890..9abae80d88 100644
--- a/lib/workers/types.ts
+++ b/lib/workers/types.ts
@@ -40,7 +40,6 @@ export interface BranchUpgradeConfig
   excludeCommitPaths?: string[];
   githubName?: string;
   group?: GroupConfig;
-  constraints?: Record<string, string>;
   groupName?: string;
   groupSlug?: string;
   language?: string;
diff --git a/tools/docs/presets.ts b/tools/docs/presets.ts
index 9bbfa8c876..307cb31698 100644
--- a/tools/docs/presets.ts
+++ b/tools/docs/presets.ts
@@ -38,7 +38,7 @@ export async function generatePresets(dist: string): Promise<void> {
       delete value.description;
       if (!presetDescription) {
         if (value.packageRules?.[0].description) {
-          presetDescription = value.packageRules[0].description;
+          presetDescription = value.packageRules[0].description as string;
           delete value.packageRules[0].description;
         }
       }
-- 
GitLab