From 4b7066c9b78169638baed7f7faefbbcd3705f5a4 Mon Sep 17 00:00:00 2001 From: Anton Golub Date: Mon, 3 Aug 2020 11:49:50 +0400 Subject: [PATCH] fix: process optional deps during manifest update --- lib/createInlinePluginCreator.js | 13 ++++++++++--- lib/getManifest.js | 3 +-- lib/multiSemanticRelease.js | 11 ++++++----- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/lib/createInlinePluginCreator.js b/lib/createInlinePluginCreator.js index 170c193..7ca607b 100644 --- a/lib/createInlinePluginCreator.js +++ b/lib/createInlinePluginCreator.js @@ -3,6 +3,7 @@ const debug = require("debug")("msr:inlinePlugin"); const getCommitsFiltered = require("./getCommitsFiltered"); const { getManifest, getIndent } = require("./getManifest"); const hasChangedDeep = require("./hasChangedDeep"); +const { get } = require("lodash"); /** * Create an inline plugin creator for a multirelease. @@ -32,6 +33,11 @@ function createInlinePluginCreator(packages, multiContext, synchronizer, flags) // Get and parse manifest file contents. const manifest = getManifest(path); const indent = getIndent(path); + const updateDependency = (scope, name, version) => { + if (get(manifest, `${scope}.${name}`)) { + manifest[scope][name] = version; + } + }; // Loop through localDeps to update dependencies/devDependencies/peerDependencies in manifest. pkg._localDeps.forEach((d) => { @@ -43,9 +49,10 @@ function createInlinePluginCreator(packages, multiContext, synchronizer, flags) throw Error(`Cannot release because dependency ${d.name} has not been released`); // Update version of dependency in manifest. - if (manifest.dependencies.hasOwnProperty(d.name)) manifest.dependencies[d.name] = release.version; - if (manifest.devDependencies.hasOwnProperty(d.name)) manifest.devDependencies[d.name] = release.version; - if (manifest.peerDependencies.hasOwnProperty(d.name)) manifest.peerDependencies[d.name] = release.version; + updateDependency("dependencies", d.name, release.version); + updateDependency("devDependencies", d.name, release.version); + updateDependency("peerDependencies", d.name, release.version); + updateDependency("optionalDependencies", d.name, release.version); }); // Write package.json back out. diff --git a/lib/getManifest.js b/lib/getManifest.js index 220fcc0..5990383 100644 --- a/lib/getManifest.js +++ b/lib/getManifest.js @@ -78,8 +78,7 @@ function getManifest(path) { // Check dependencies. const checkDeps = (scope) => { - if (!manifest.hasOwnProperty(scope)) manifest[scope] = {}; - else if (typeof manifest[scope] !== "object") + if (manifest.hasOwnProperty(scope) && typeof manifest[scope] !== "object") throw new SyntaxError(`Package ${scope} must be object: "${path}"`); }; diff --git a/lib/multiSemanticRelease.js b/lib/multiSemanticRelease.js index afdd073..991b89a 100644 --- a/lib/multiSemanticRelease.js +++ b/lib/multiSemanticRelease.js @@ -120,11 +120,12 @@ async function getPackage(path, { options: globalOptions, env, cwd, stdout, stde const name = manifest.name; // Combine list of all dependency names. - const deps = [ - ...Object.keys(manifest.dependencies), - ...Object.keys(manifest.devDependencies), - ...Object.keys(manifest.peerDependencies), - ]; + const deps = Object.keys({ + ...manifest.dependencies, + ...manifest.devDependencies, + ...manifest.peerDependencies, + ...manifest.optionalDependencies, + }); // Load the package-specific options. const { options: pkgOptions } = await getConfig(dir);