From 103d8fbf68464a7fb919b3258dc8d39238839d79 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Sat, 11 Aug 2018 11:24:38 +0200
Subject: [PATCH] feat: prettyDepType (#2376)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Adds field prettyDepType available for templates, currently used for npm only. Allows for PR titles like “Update devDependency left-pad to v1.3.0” instead of default “Update dependency left-pad to v1.3.0”.

To enable in PR titles: add this configuration: `"commitMessageTopic": "{{prettyDepType}} {{depName}}”`

This is not enabled by default as otherwise it could lead to the reopening of previously manually-closed PRs.

Closes #2371, Closes #1863
---
 lib/config/templates/default/pr-body.hbs      |  2 +-
 lib/manager/npm/extract/index.js              | 17 ++++----
 lib/workers/repository/updates/generate.js    |  2 +
 .../extract/__snapshots__/index.spec.js.snap  | 40 +++++++++++++++++++
 .../__snapshots__/flatten.spec.js.snap        |  4 +-
 5 files changed, 54 insertions(+), 11 deletions(-)

diff --git a/lib/config/templates/default/pr-body.hbs b/lib/config/templates/default/pr-body.hbs
index a90a433c4f..7fc80ef2fb 100644
--- a/lib/config/templates/default/pr-body.hbs
+++ b/lib/config/templates/default/pr-body.hbs
@@ -1,4 +1,4 @@
-This Pull Request {{#if isRollback}}rolls back{{else}}updates{{/if}} dependency {{#if repositoryUrl}}[{{{depName}}}]({{{repositoryUrl}}}){{else}}`{{{depName}}}`{{/if}} from `{{#unless isRange}}{{#unless isPin}}v{{/unless}}{{/unless}}{{{currentValue}}}` to `{{#unless isRange}}v{{/unless}}{{{newValue}}}`{{#if isRollback}}. This is necessary and important because `v{{{currentValue}}}` cannot be found in the npm registry - probably because of it being unpublished.{{/if}}
+This Pull Request {{#if isRollback}}rolls back{{else}}updates{{/if}} {{#if prettyDepType}}{{{prettyDepType}}}{{else}}dependency{{/if}} {{#if repositoryUrl}}[{{{depName}}}]({{{repositoryUrl}}}){{else}}`{{{depName}}}`{{/if}} from `{{#unless isRange}}{{#unless isPin}}v{{/unless}}{{/unless}}{{{currentValue}}}` to `{{#unless isRange}}v{{/unless}}{{{newValue}}}`{{#if isRollback}}. This is necessary and important because `v{{{currentValue}}}` cannot be found in the npm registry - probably because of it being unpublished.{{/if}}
 {{#if hasTypes}}
 
 This PR also includes an upgrade to the corresponding [@types/{{{depName}}}](https://npmjs.com/package/@types/{{{depName}}}) package.
diff --git a/lib/manager/npm/extract/index.js b/lib/manager/npm/extract/index.js
index 75d0087778..2c2224f5a3 100644
--- a/lib/manager/npm/extract/index.js
+++ b/lib/manager/npm/extract/index.js
@@ -104,14 +104,14 @@ async function extractDependencies(content, packageFile, config) {
     lernaClient = lernaJson.npmClient || 'npm';
   }
 
-  const depTypes = [
-    'dependencies',
-    'devDependencies',
-    'optionalDependencies',
-    'peerDependencies',
-    'engines',
-  ];
-  for (const depType of depTypes) {
+  const depTypes = {
+    dependencies: 'dependency',
+    devDependencies: 'devDependency',
+    optionalDependencies: 'optionalDependency',
+    peerDependencies: 'peerDependency',
+    engines: 'engine',
+  };
+  for (const depType of Object.keys(depTypes)) {
     if (packageJson[depType]) {
       try {
         for (const [depName, version] of Object.entries(packageJson[depType])) {
@@ -154,6 +154,7 @@ async function extractDependencies(content, packageFile, config) {
             dep.commitMessageTopic = 'Node.js';
             dep.major = { enabled: false };
           }
+          dep.prettyDepType = depTypes[depType];
           deps.push(dep);
         }
       } catch (err) /* istanbul ignore next */ {
diff --git a/lib/workers/repository/updates/generate.js b/lib/workers/repository/updates/generate.js
index e718ea106c..ff916fa9d8 100644
--- a/lib/workers/repository/updates/generate.js
+++ b/lib/workers/repository/updates/generate.js
@@ -35,6 +35,8 @@ function generateBranchConfig(branchUpgrades) {
   let releaseTimestamp;
   for (const branchUpgrade of branchUpgrades) {
     let upgrade = { ...branchUpgrade };
+    upgrade.prettyDepType =
+      upgrade.prettyDepType || upgrade.depType || 'dependency';
     if (useGroupSettings) {
       // Now overwrite original config with group config
       upgrade = mergeChildConfig(upgrade, upgrade.group);
diff --git a/test/manager/npm/extract/__snapshots__/index.spec.js.snap b/test/manager/npm/extract/__snapshots__/index.spec.js.snap
index 5d102ec103..06582bb4bf 100644
--- a/test/manager/npm/extract/__snapshots__/index.spec.js.snap
+++ b/test/manager/npm/extract/__snapshots__/index.spec.js.snap
@@ -7,6 +7,7 @@ Object {
       "currentValue": "1.6.0",
       "depName": "angular",
       "depType": "dependencies",
+      "prettyDepType": "dependency",
       "purl": "pkg:npm/angular",
       "versionScheme": "semver",
     },
@@ -14,6 +15,7 @@ Object {
       "currentValue": "1.6.0",
       "depName": "@angular/cli",
       "depType": "devDependencies",
+      "prettyDepType": "devDependency",
       "purl": "pkg:npm/%40angular/cli",
       "versionScheme": "semver",
     },
@@ -21,6 +23,7 @@ Object {
       "currentValue": "*",
       "depName": "foo",
       "depType": "devDependencies",
+      "prettyDepType": "devDependency",
       "purl": "pkg:npm/foo",
       "skipReason": "any-version",
       "versionScheme": "semver",
@@ -29,6 +32,7 @@ Object {
       "currentValue": "file:../foo/bar",
       "depName": "bar",
       "depType": "devDependencies",
+      "prettyDepType": "devDependency",
       "skipReason": "file",
       "versionScheme": "semver",
     },
@@ -36,6 +40,7 @@ Object {
       "currentValue": "",
       "depName": "baz",
       "depType": "devDependencies",
+      "prettyDepType": "devDependency",
       "purl": "pkg:npm/baz",
       "skipReason": "empty",
       "versionScheme": "semver",
@@ -44,6 +49,7 @@ Object {
       "currentValue": "latest",
       "depName": "other",
       "depType": "devDependencies",
+      "prettyDepType": "devDependency",
       "skipReason": "unknown-version",
       "versionScheme": "semver",
     },
@@ -51,6 +57,7 @@ Object {
       "currentValue": ">=1.7.0 <2.0.0",
       "depName": "atom",
       "depType": "engines",
+      "prettyDepType": "engine",
       "skipReason": "unknown-engines",
       "versionScheme": "semver",
     },
@@ -62,6 +69,7 @@ Object {
       "major": Object {
         "enabled": false,
       },
+      "prettyDepType": "engine",
       "purl": "pkg:github/nodejs/node?sanitize=true",
       "versionScheme": "semver",
     },
@@ -70,6 +78,7 @@ Object {
       "currentValue": "^8.0.0",
       "depName": "npm",
       "depType": "engines",
+      "prettyDepType": "engine",
       "purl": "pkg:npm/npm",
       "versionScheme": "semver",
     },
@@ -78,6 +87,7 @@ Object {
       "currentValue": "disabled",
       "depName": "yarn",
       "depType": "engines",
+      "prettyDepType": "engine",
       "purl": "pkg:npm/yarn",
       "skipReason": "unknown-version",
       "versionScheme": "semver",
@@ -105,6 +115,7 @@ Object {
       "currentValue": "6.5.0",
       "depName": "autoprefixer",
       "depType": "dependencies",
+      "prettyDepType": "dependency",
       "purl": "pkg:npm/autoprefixer",
       "versionScheme": "semver",
     },
@@ -112,6 +123,7 @@ Object {
       "currentValue": "~1.6.0",
       "depName": "bower",
       "depType": "dependencies",
+      "prettyDepType": "dependency",
       "purl": "pkg:npm/bower",
       "versionScheme": "semver",
     },
@@ -119,6 +131,7 @@ Object {
       "currentValue": "13.1.0",
       "depName": "browserify",
       "depType": "dependencies",
+      "prettyDepType": "dependency",
       "purl": "pkg:npm/browserify",
       "versionScheme": "semver",
     },
@@ -126,6 +139,7 @@ Object {
       "currentValue": "0.9.2",
       "depName": "browserify-css",
       "depType": "dependencies",
+      "prettyDepType": "dependency",
       "purl": "pkg:npm/browserify-css",
       "versionScheme": "semver",
     },
@@ -133,6 +147,7 @@ Object {
       "currentValue": "=0.22.0",
       "depName": "cheerio",
       "depType": "dependencies",
+      "prettyDepType": "dependency",
       "purl": "pkg:npm/cheerio",
       "versionScheme": "semver",
     },
@@ -140,6 +155,7 @@ Object {
       "currentValue": "1.21.0",
       "depName": "config",
       "depType": "dependencies",
+      "prettyDepType": "dependency",
       "purl": "pkg:npm/config",
       "versionScheme": "semver",
     },
@@ -147,6 +163,7 @@ Object {
       "currentValue": "^1.5.8",
       "depName": "angular",
       "depType": "devDependencies",
+      "prettyDepType": "devDependency",
       "purl": "pkg:npm/angular",
       "versionScheme": "semver",
     },
@@ -154,6 +171,7 @@ Object {
       "currentValue": "1.5.8",
       "depName": "angular-touch",
       "depType": "devDependencies",
+      "prettyDepType": "devDependency",
       "purl": "pkg:npm/angular-touch",
       "versionScheme": "semver",
     },
@@ -161,6 +179,7 @@ Object {
       "currentValue": "1.5.8",
       "depName": "angular-sanitize",
       "depType": "devDependencies",
+      "prettyDepType": "devDependency",
       "purl": "pkg:npm/angular-sanitize",
       "versionScheme": "semver",
     },
@@ -168,6 +187,7 @@ Object {
       "currentValue": "4.0.0-beta.1",
       "depName": "@angular/core",
       "depType": "devDependencies",
+      "prettyDepType": "devDependency",
       "purl": "pkg:npm/%40angular/core",
       "versionScheme": "semver",
     },
@@ -214,6 +234,7 @@ Object {
       "currentValue": "6.5.0",
       "depName": "autoprefixer",
       "depType": "dependencies",
+      "prettyDepType": "dependency",
       "purl": "pkg:npm/autoprefixer",
       "versionScheme": "semver",
     },
@@ -221,6 +242,7 @@ Object {
       "currentValue": "~1.6.0",
       "depName": "bower",
       "depType": "dependencies",
+      "prettyDepType": "dependency",
       "purl": "pkg:npm/bower",
       "versionScheme": "semver",
     },
@@ -228,6 +250,7 @@ Object {
       "currentValue": "13.1.0",
       "depName": "browserify",
       "depType": "dependencies",
+      "prettyDepType": "dependency",
       "purl": "pkg:npm/browserify",
       "versionScheme": "semver",
     },
@@ -235,6 +258,7 @@ Object {
       "currentValue": "0.9.2",
       "depName": "browserify-css",
       "depType": "dependencies",
+      "prettyDepType": "dependency",
       "purl": "pkg:npm/browserify-css",
       "versionScheme": "semver",
     },
@@ -242,6 +266,7 @@ Object {
       "currentValue": "=0.22.0",
       "depName": "cheerio",
       "depType": "dependencies",
+      "prettyDepType": "dependency",
       "purl": "pkg:npm/cheerio",
       "versionScheme": "semver",
     },
@@ -249,6 +274,7 @@ Object {
       "currentValue": "1.21.0",
       "depName": "config",
       "depType": "dependencies",
+      "prettyDepType": "dependency",
       "purl": "pkg:npm/config",
       "versionScheme": "semver",
     },
@@ -256,6 +282,7 @@ Object {
       "currentValue": "^1.5.8",
       "depName": "angular",
       "depType": "devDependencies",
+      "prettyDepType": "devDependency",
       "purl": "pkg:npm/angular",
       "versionScheme": "semver",
     },
@@ -263,6 +290,7 @@ Object {
       "currentValue": "1.5.8",
       "depName": "angular-touch",
       "depType": "devDependencies",
+      "prettyDepType": "devDependency",
       "purl": "pkg:npm/angular-touch",
       "versionScheme": "semver",
     },
@@ -270,6 +298,7 @@ Object {
       "currentValue": "1.5.8",
       "depName": "angular-sanitize",
       "depType": "devDependencies",
+      "prettyDepType": "devDependency",
       "purl": "pkg:npm/angular-sanitize",
       "versionScheme": "semver",
     },
@@ -277,6 +306,7 @@ Object {
       "currentValue": "4.0.0-beta.1",
       "depName": "@angular/core",
       "depType": "devDependencies",
+      "prettyDepType": "devDependency",
       "purl": "pkg:npm/%40angular/core",
       "versionScheme": "semver",
     },
@@ -303,6 +333,7 @@ Object {
       "currentValue": "6.5.0",
       "depName": "autoprefixer",
       "depType": "dependencies",
+      "prettyDepType": "dependency",
       "purl": "pkg:npm/autoprefixer",
       "versionScheme": "semver",
     },
@@ -310,6 +341,7 @@ Object {
       "currentValue": "~1.6.0",
       "depName": "bower",
       "depType": "dependencies",
+      "prettyDepType": "dependency",
       "purl": "pkg:npm/bower",
       "versionScheme": "semver",
     },
@@ -317,6 +349,7 @@ Object {
       "currentValue": "13.1.0",
       "depName": "browserify",
       "depType": "dependencies",
+      "prettyDepType": "dependency",
       "purl": "pkg:npm/browserify",
       "versionScheme": "semver",
     },
@@ -324,6 +357,7 @@ Object {
       "currentValue": "0.9.2",
       "depName": "browserify-css",
       "depType": "dependencies",
+      "prettyDepType": "dependency",
       "purl": "pkg:npm/browserify-css",
       "versionScheme": "semver",
     },
@@ -331,6 +365,7 @@ Object {
       "currentValue": "=0.22.0",
       "depName": "cheerio",
       "depType": "dependencies",
+      "prettyDepType": "dependency",
       "purl": "pkg:npm/cheerio",
       "versionScheme": "semver",
     },
@@ -338,6 +373,7 @@ Object {
       "currentValue": "1.21.0",
       "depName": "config",
       "depType": "dependencies",
+      "prettyDepType": "dependency",
       "purl": "pkg:npm/config",
       "versionScheme": "semver",
     },
@@ -345,6 +381,7 @@ Object {
       "currentValue": "^1.5.8",
       "depName": "angular",
       "depType": "devDependencies",
+      "prettyDepType": "devDependency",
       "purl": "pkg:npm/angular",
       "versionScheme": "semver",
     },
@@ -352,6 +389,7 @@ Object {
       "currentValue": "1.5.8",
       "depName": "angular-touch",
       "depType": "devDependencies",
+      "prettyDepType": "devDependency",
       "purl": "pkg:npm/angular-touch",
       "versionScheme": "semver",
     },
@@ -359,6 +397,7 @@ Object {
       "currentValue": "1.5.8",
       "depName": "angular-sanitize",
       "depType": "devDependencies",
+      "prettyDepType": "devDependency",
       "purl": "pkg:npm/angular-sanitize",
       "versionScheme": "semver",
     },
@@ -366,6 +405,7 @@ Object {
       "currentValue": "4.0.0-beta.1",
       "depName": "@angular/core",
       "depType": "devDependencies",
+      "prettyDepType": "devDependency",
       "purl": "pkg:npm/%40angular/core",
       "versionScheme": "semver",
     },
diff --git a/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap b/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap
index 84c5517342..5ee73749b5 100644
--- a/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap
+++ b/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap
@@ -40,7 +40,7 @@ Array [
     "npmToken": null,
     "npmrc": null,
     "packageFile": "package.json ",
-    "prBody": "This Pull Request {{#if isRollback}}rolls back{{else}}updates{{/if}} dependency {{#if repositoryUrl}}[{{{depName}}}]({{{repositoryUrl}}}){{else}}\`{{{depName}}}\`{{/if}} from \`{{#unless isRange}}{{#unless isPin}}v{{/unless}}{{/unless}}{{{currentValue}}}\` to \`{{#unless isRange}}v{{/unless}}{{{newValue}}}\`{{#if isRollback}}. This is necessary and important because \`v{{{currentValue}}}\` cannot be found in the npm registry - probably because of it being unpublished.{{/if}}\\n{{#if hasTypes}}\\n\\nThis PR also includes an upgrade to the corresponding [@types/{{{depName}}}](https://npmjs.com/package/@types/{{{depName}}}) package.\\n{{/if}}\\n{{#if releases.length}}\\n\\n{{#if schedule}}\\n**Note**: This PR was created on a configured schedule (\\"{{{schedule}}}\\"{{#if timezone}} in timezone \`{{{timezone}}}\`{{/if}}) and will not receive updates outside those times.\\n{{/if}}\\n\\n{{#if isPin}}\\n**Important**: Renovate will wait until you have merged this Pin request before creating PRs for any *upgrades*. If you do not wish to pin anything, please update your config accordingly instead of leaving this PR open.\\n{{/if}}\\n{{#if hasReleaseNotes}}\\n\\n<details>\\n<summary>Release Notes</summary>\\n\\n{{#each releases as |release|}}\\n{{#if release.releaseNotes}}\\n### [{{#if release.releaseNotes.name}}{{{release.releaseNotes.name}}}{{else}}\`v{{{release.version}}}\`{{/if}}]({{{release.releaseNotes.url}}})\\n{{#if release.compare.url}}\\n[Compare Source]({{release.compare.url}})\\n{{/if}}\\n{{{release.releaseNotes.body}}}\\n\\n---\\n\\n{{/if}}\\n{{/each}}\\n</details>\\n{{/if}}\\n\\n{{/if}}\\n\\n{{#if hasErrors}}\\n\\n---\\n\\n# Errors\\n\\nRenovate encountered some errors when processing your repository, so you are being notified here even if they do not directly apply to this PR.\\n\\n{{#each errors as |error|}}\\n-   \`{{error.depName}}\`: {{error.message}}\\n{{/each}}\\n{{/if}}\\n\\n{{#if hasWarnings}}\\n\\n---\\n\\n# Warnings\\n\\nPlease make sure the following warnings are safe to ignore:\\n\\n{{#each warnings as |warning|}}\\n-   \`{{warning.depName}}\`: {{warning.message}}\\n{{/each}}\\n{{/if}}",
+    "prBody": "This Pull Request {{#if isRollback}}rolls back{{else}}updates{{/if}} {{#if prettyDepType}}{{{prettyDepType}}}{{else}}dependency{{/if}} {{#if repositoryUrl}}[{{{depName}}}]({{{repositoryUrl}}}){{else}}\`{{{depName}}}\`{{/if}} from \`{{#unless isRange}}{{#unless isPin}}v{{/unless}}{{/unless}}{{{currentValue}}}\` to \`{{#unless isRange}}v{{/unless}}{{{newValue}}}\`{{#if isRollback}}. This is necessary and important because \`v{{{currentValue}}}\` cannot be found in the npm registry - probably because of it being unpublished.{{/if}}\\n{{#if hasTypes}}\\n\\nThis PR also includes an upgrade to the corresponding [@types/{{{depName}}}](https://npmjs.com/package/@types/{{{depName}}}) package.\\n{{/if}}\\n{{#if releases.length}}\\n\\n{{#if schedule}}\\n**Note**: This PR was created on a configured schedule (\\"{{{schedule}}}\\"{{#if timezone}} in timezone \`{{{timezone}}}\`{{/if}}) and will not receive updates outside those times.\\n{{/if}}\\n\\n{{#if isPin}}\\n**Important**: Renovate will wait until you have merged this Pin request before creating PRs for any *upgrades*. If you do not wish to pin anything, please update your config accordingly instead of leaving this PR open.\\n{{/if}}\\n{{#if hasReleaseNotes}}\\n\\n<details>\\n<summary>Release Notes</summary>\\n\\n{{#each releases as |release|}}\\n{{#if release.releaseNotes}}\\n### [{{#if release.releaseNotes.name}}{{{release.releaseNotes.name}}}{{else}}\`v{{{release.version}}}\`{{/if}}]({{{release.releaseNotes.url}}})\\n{{#if release.compare.url}}\\n[Compare Source]({{release.compare.url}})\\n{{/if}}\\n{{{release.releaseNotes.body}}}\\n\\n---\\n\\n{{/if}}\\n{{/each}}\\n</details>\\n{{/if}}\\n\\n{{/if}}\\n\\n{{#if hasErrors}}\\n\\n---\\n\\n# Errors\\n\\nRenovate encountered some errors when processing your repository, so you are being notified here even if they do not directly apply to this PR.\\n\\n{{#each errors as |error|}}\\n-   \`{{error.depName}}\`: {{error.message}}\\n{{/each}}\\n{{/if}}\\n\\n{{#if hasWarnings}}\\n\\n---\\n\\n# Warnings\\n\\nPlease make sure the following warnings are safe to ignore:\\n\\n{{#each warnings as |warning|}}\\n-   \`{{warning.depName}}\`: {{warning.message}}\\n{{/each}}\\n{{/if}}",
     "prConcurrentLimit": 0,
     "prCreation": "immediate",
     "prHourlyLimit": 0,
@@ -107,7 +107,7 @@ Array [
     "npmToken": null,
     "npmrc": null,
     "packageFile": "package.json ",
-    "prBody": "This Pull Request {{#if isRollback}}rolls back{{else}}updates{{/if}} dependency {{#if repositoryUrl}}[{{{depName}}}]({{{repositoryUrl}}}){{else}}\`{{{depName}}}\`{{/if}} from \`{{#unless isRange}}{{#unless isPin}}v{{/unless}}{{/unless}}{{{currentValue}}}\` to \`{{#unless isRange}}v{{/unless}}{{{newValue}}}\`{{#if isRollback}}. This is necessary and important because \`v{{{currentValue}}}\` cannot be found in the npm registry - probably because of it being unpublished.{{/if}}\\n{{#if hasTypes}}\\n\\nThis PR also includes an upgrade to the corresponding [@types/{{{depName}}}](https://npmjs.com/package/@types/{{{depName}}}) package.\\n{{/if}}\\n{{#if releases.length}}\\n\\n{{#if schedule}}\\n**Note**: This PR was created on a configured schedule (\\"{{{schedule}}}\\"{{#if timezone}} in timezone \`{{{timezone}}}\`{{/if}}) and will not receive updates outside those times.\\n{{/if}}\\n\\n{{#if isPin}}\\n**Important**: Renovate will wait until you have merged this Pin request before creating PRs for any *upgrades*. If you do not wish to pin anything, please update your config accordingly instead of leaving this PR open.\\n{{/if}}\\n{{#if hasReleaseNotes}}\\n\\n<details>\\n<summary>Release Notes</summary>\\n\\n{{#each releases as |release|}}\\n{{#if release.releaseNotes}}\\n### [{{#if release.releaseNotes.name}}{{{release.releaseNotes.name}}}{{else}}\`v{{{release.version}}}\`{{/if}}]({{{release.releaseNotes.url}}})\\n{{#if release.compare.url}}\\n[Compare Source]({{release.compare.url}})\\n{{/if}}\\n{{{release.releaseNotes.body}}}\\n\\n---\\n\\n{{/if}}\\n{{/each}}\\n</details>\\n{{/if}}\\n\\n{{/if}}\\n\\n{{#if hasErrors}}\\n\\n---\\n\\n# Errors\\n\\nRenovate encountered some errors when processing your repository, so you are being notified here even if they do not directly apply to this PR.\\n\\n{{#each errors as |error|}}\\n-   \`{{error.depName}}\`: {{error.message}}\\n{{/each}}\\n{{/if}}\\n\\n{{#if hasWarnings}}\\n\\n---\\n\\n# Warnings\\n\\nPlease make sure the following warnings are safe to ignore:\\n\\n{{#each warnings as |warning|}}\\n-   \`{{warning.depName}}\`: {{warning.message}}\\n{{/each}}\\n{{/if}}",
+    "prBody": "This Pull Request {{#if isRollback}}rolls back{{else}}updates{{/if}} {{#if prettyDepType}}{{{prettyDepType}}}{{else}}dependency{{/if}} {{#if repositoryUrl}}[{{{depName}}}]({{{repositoryUrl}}}){{else}}\`{{{depName}}}\`{{/if}} from \`{{#unless isRange}}{{#unless isPin}}v{{/unless}}{{/unless}}{{{currentValue}}}\` to \`{{#unless isRange}}v{{/unless}}{{{newValue}}}\`{{#if isRollback}}. This is necessary and important because \`v{{{currentValue}}}\` cannot be found in the npm registry - probably because of it being unpublished.{{/if}}\\n{{#if hasTypes}}\\n\\nThis PR also includes an upgrade to the corresponding [@types/{{{depName}}}](https://npmjs.com/package/@types/{{{depName}}}) package.\\n{{/if}}\\n{{#if releases.length}}\\n\\n{{#if schedule}}\\n**Note**: This PR was created on a configured schedule (\\"{{{schedule}}}\\"{{#if timezone}} in timezone \`{{{timezone}}}\`{{/if}}) and will not receive updates outside those times.\\n{{/if}}\\n\\n{{#if isPin}}\\n**Important**: Renovate will wait until you have merged this Pin request before creating PRs for any *upgrades*. If you do not wish to pin anything, please update your config accordingly instead of leaving this PR open.\\n{{/if}}\\n{{#if hasReleaseNotes}}\\n\\n<details>\\n<summary>Release Notes</summary>\\n\\n{{#each releases as |release|}}\\n{{#if release.releaseNotes}}\\n### [{{#if release.releaseNotes.name}}{{{release.releaseNotes.name}}}{{else}}\`v{{{release.version}}}\`{{/if}}]({{{release.releaseNotes.url}}})\\n{{#if release.compare.url}}\\n[Compare Source]({{release.compare.url}})\\n{{/if}}\\n{{{release.releaseNotes.body}}}\\n\\n---\\n\\n{{/if}}\\n{{/each}}\\n</details>\\n{{/if}}\\n\\n{{/if}}\\n\\n{{#if hasErrors}}\\n\\n---\\n\\n# Errors\\n\\nRenovate encountered some errors when processing your repository, so you are being notified here even if they do not directly apply to this PR.\\n\\n{{#each errors as |error|}}\\n-   \`{{error.depName}}\`: {{error.message}}\\n{{/each}}\\n{{/if}}\\n\\n{{#if hasWarnings}}\\n\\n---\\n\\n# Warnings\\n\\nPlease make sure the following warnings are safe to ignore:\\n\\n{{#each warnings as |warning|}}\\n-   \`{{warning.depName}}\`: {{warning.message}}\\n{{/each}}\\n{{/if}}",
     "prConcurrentLimit": 0,
     "prCreation": "immediate",
     "prHourlyLimit": 0,
-- 
GitLab