From 0af1be577d5ef15ceffdcb8e2f7fe9b97e89f9ca Mon Sep 17 00:00:00 2001
From: Maksim <m.v.sharipov@gmail.com>
Date: Fri, 25 Mar 2022 20:39:14 +0100
Subject: [PATCH] refactor(migrations): ignoreNpmrcFile (#14802)

---
 lib/config/migration.ts                       |  5 ---
 .../ignore-npmrc-file-migration.spec.ts       | 38 +++++++++++++++++++
 .../custom/ignore-npmrc-file-migration.ts     | 15 ++++++++
 lib/config/migrations/migrations-service.ts   |  2 +
 4 files changed, 55 insertions(+), 5 deletions(-)
 create mode 100644 lib/config/migrations/custom/ignore-npmrc-file-migration.spec.ts
 create mode 100644 lib/config/migrations/custom/ignore-npmrc-file-migration.ts

diff --git a/lib/config/migration.ts b/lib/config/migration.ts
index cee715845a..2f56ec68e8 100644
--- a/lib/config/migration.ts
+++ b/lib/config/migration.ts
@@ -122,11 +122,6 @@ export function migrateConfig(
           regEx(/{{depNameShort}}/g),
           '{{depName}}'
         );
-      } else if (key === 'ignoreNpmrcFile') {
-        delete migratedConfig.ignoreNpmrcFile;
-        if (!is.string(migratedConfig.npmrc)) {
-          migratedConfig.npmrc = '';
-        }
       } else if (
         key === 'branchPrefix' &&
         is.string(val) &&
diff --git a/lib/config/migrations/custom/ignore-npmrc-file-migration.spec.ts b/lib/config/migrations/custom/ignore-npmrc-file-migration.spec.ts
new file mode 100644
index 0000000000..9d32f66197
--- /dev/null
+++ b/lib/config/migrations/custom/ignore-npmrc-file-migration.spec.ts
@@ -0,0 +1,38 @@
+import { IgnoreNpmrcFileMigration } from './ignore-npmrc-file-migration';
+
+describe('config/migrations/custom/ignore-npmrc-file-migration', () => {
+  it('should init npmrc field', () => {
+    expect(IgnoreNpmrcFileMigration).toMigrate(
+      {
+        ignoreNpmrcFile: true,
+      },
+      {
+        npmrc: '',
+      }
+    );
+  });
+
+  it('should not change npmrc field if it represents string value', () => {
+    expect(IgnoreNpmrcFileMigration).toMigrate(
+      {
+        ignoreNpmrcFile: true,
+        npmrc: '',
+      },
+      {
+        npmrc: '',
+      }
+    );
+  });
+
+  it('should change npmrc field if it not represents string value', () => {
+    expect(IgnoreNpmrcFileMigration).toMigrate(
+      {
+        ignoreNpmrcFile: true,
+        npmrc: true,
+      } as any,
+      {
+        npmrc: '',
+      }
+    );
+  });
+});
diff --git a/lib/config/migrations/custom/ignore-npmrc-file-migration.ts b/lib/config/migrations/custom/ignore-npmrc-file-migration.ts
new file mode 100644
index 0000000000..b64b2129a1
--- /dev/null
+++ b/lib/config/migrations/custom/ignore-npmrc-file-migration.ts
@@ -0,0 +1,15 @@
+import is from '@sindresorhus/is';
+import { AbstractMigration } from '../base/abstract-migration';
+
+export class IgnoreNpmrcFileMigration extends AbstractMigration {
+  override readonly deprecated = true;
+  override readonly propertyName = 'ignoreNpmrcFile';
+
+  override run(): void {
+    const npmrc = this.get('npmrc');
+
+    if (!is.string(npmrc)) {
+      this.setHard('npmrc', '');
+    }
+  }
+}
diff --git a/lib/config/migrations/migrations-service.ts b/lib/config/migrations/migrations-service.ts
index 69b2cff800..1d0eb9938f 100644
--- a/lib/config/migrations/migrations-service.ts
+++ b/lib/config/migrations/migrations-service.ts
@@ -16,6 +16,7 @@ import { EnabledManagersMigration } from './custom/enabled-managers-migration';
 import { GoModTidyMigration } from './custom/go-mod-tidy-migration';
 import { HostRulesMigration } from './custom/host-rules-migration';
 import { IgnoreNodeModulesMigration } from './custom/ignore-node-modules-migration';
+import { IgnoreNpmrcFileMigration } from './custom/ignore-npmrc-file-migration';
 import { PackageNameMigration } from './custom/package-name-migration';
 import { PackagePatternMigration } from './custom/package-pattern-migration';
 import { PackagesMigration } from './custom/packages-migration';
@@ -78,6 +79,7 @@ export class MigrationsService {
     GoModTidyMigration,
     HostRulesMigration,
     IgnoreNodeModulesMigration,
+    IgnoreNpmrcFileMigration,
     PackageNameMigration,
     PackagePatternMigration,
     PackagesMigration,
-- 
GitLab