diff --git a/lib/utils/config/definitions.js b/lib/utils/config/definitions.js index ec54d731beb4c..512ea8af98cb4 100644 --- a/lib/utils/config/definitions.js +++ b/lib/utils/config/definitions.js @@ -1526,7 +1526,10 @@ define('save-exact', { Dependencies saved to package.json will be configured with an exact version rather than using npm's default semver range operator. `, - flatten, + flatten (key, obj, flatOptions) { + // just call the save-prefix flattener, it reads from obj['save-exact'] + definitions['save-prefix'].flatten('save-prefix', obj, flatOptions) + }, }) define('save-optional', { @@ -1595,6 +1598,7 @@ define('save-prefix', { `, flatten (key, obj, flatOptions) { flatOptions.savePrefix = obj['save-exact'] ? '' : obj['save-prefix'] + obj['save-prefix'] = flatOptions.savePrefix }, }) diff --git a/test/lib/utils/config/definitions.js b/test/lib/utils/config/definitions.js index 49e51ace1aa30..0b80b34d55771 100644 --- a/test/lib/utils/config/definitions.js +++ b/test/lib/utils/config/definitions.js @@ -760,3 +760,18 @@ t.test('save-prefix', t => { t.strictSame(flat, { savePrefix: '~1.2.3' }) t.end() }) + +t.test('save-exact', t => { + const obj = { + 'save-exact': true, + 'save-prefix': '~1.2.3', + } + const flat = {} + definitions['save-exact'] + .flatten('save-exact', { ...obj, 'save-exact': true }, flat) + t.strictSame(flat, { savePrefix: '' }) + definitions['save-exact'] + .flatten('save-exact', { ...obj, 'save-exact': false }, flat) + t.strictSame(flat, { savePrefix: '~1.2.3' }) + t.end() +}) diff --git a/test/lib/utils/config/flatten.js b/test/lib/utils/config/flatten.js index 6fc91b4847e38..7e13563920888 100644 --- a/test/lib/utils/config/flatten.js +++ b/test/lib/utils/config/flatten.js @@ -17,7 +17,6 @@ const obj = { const flat = flatten(obj) t.strictSame(flat, { saveType: 'dev', - saveExact: true, savePrefix: '', '@foobar:registry': 'https://foo.bar.com/', '//foo.bar.com:_authToken': 'foobarbazquuxasdf', @@ -30,7 +29,6 @@ t.strictSame(flat, { process.env.NODE = '/usr/local/bin/node.exe' flatten({ 'save-dev': false }, flat) t.strictSame(flat, { - saveExact: true, savePrefix: '', '@foobar:registry': 'https://foo.bar.com/', '//foo.bar.com:_authToken': 'foobarbazquuxasdf',