From 4f65356ba4464d1386d44c7ddc3cfe4c3e5c1072 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Thu, 14 Dec 2017 09:56:52 +0100
Subject: [PATCH] feat: support mergeable strings in config for npmrc

---
 lib/config/definitions.js                    |  1 +
 lib/config/index.js                          |  2 ++
 test/config/__snapshots__/index.spec.js.snap |  7 +++++++
 test/config/index.spec.js                    | 10 ++++++++++
 4 files changed, 20 insertions(+)

diff --git a/lib/config/definitions.js b/lib/config/definitions.js
index 99ef310377..c518f6a587 100644
--- a/lib/config/definitions.js
+++ b/lib/config/definitions.js
@@ -154,6 +154,7 @@ const options = [
     description: 'String copy of npmrc file. Use \\n instead of line breaks',
     stage: 'branch',
     type: 'string',
+    mergeable: 'true',
   },
   {
     name: 'yarnrc',
diff --git a/lib/config/index.js b/lib/config/index.js
index 97c850a381..60ca1a110c 100644
--- a/lib/config/index.js
+++ b/lib/config/index.js
@@ -126,6 +126,8 @@ function mergeChildConfig(parentConfig, childConfig) {
         config[option.name] = (parentConfig[option.name] || []).concat(
           config[option.name] || []
         );
+      } else if (option.type === 'string') {
+        config[option.name] = parentConfig[option.name] + config[option.name];
       } else {
         config[option.name] = {
           ...parentConfig[option.name],
diff --git a/test/config/__snapshots__/index.spec.js.snap b/test/config/__snapshots__/index.spec.js.snap
index 73df5d60dc..56c31694d8 100644
--- a/test/config/__snapshots__/index.spec.js.snap
+++ b/test/config/__snapshots__/index.spec.js.snap
@@ -1,5 +1,12 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
+exports[`config/index mergeChildConfig(parentConfig, childConfig) handles mergeable strings 1`] = `
+"_auth=abcd-abcd-abcd-abcd
+always-auth=true
+registry=some-registry
+"
+`;
+
 exports[`config/index mergeChildConfig(parentConfig, childConfig) merges 1`] = `
 Object {
   "branchName": "{{branchPrefix}}lock-file-maintenance",
diff --git a/test/config/index.spec.js b/test/config/index.spec.js
index 582a3cddd9..87ddd5924f 100644
--- a/test/config/index.spec.js
+++ b/test/config/index.spec.js
@@ -235,5 +235,15 @@ describe('config/index', () => {
       const config = configParser.mergeChildConfig(parentConfig, undefined);
       expect(config).toMatchObject(parentConfig);
     });
+    it('handles mergeable strings', () => {
+      const parentConfig = { ...defaultConfig };
+      parentConfig.npmrc = '_auth=abcd-abcd-abcd-abcd\n';
+      const childConfig = {
+        npmrc: 'always-auth=true\nregistry=some-registry\n',
+      };
+      const configParser = require('../../lib/config/index.js');
+      const config = configParser.mergeChildConfig(parentConfig, childConfig);
+      expect(config.npmrc).toMatchSnapshot();
+    });
   });
 });
-- 
GitLab