Skip to content

Commit c69cae8

Browse files
committed
fix(config): use exclusive for save types
1 parent 0d4c023 commit c69cae8

2 files changed

Lines changed: 43 additions & 0 deletions

File tree

workspaces/config/lib/definitions/definitions.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1695,10 +1695,16 @@ const definitions = {
16951695
default: false,
16961696
type: Boolean,
16971697
short: 'D',
1698+
exclusive: ['save-optional', 'save-peer', 'save-prod'],
16981699
description: `
16991700
Save installed packages to a package.json file as \`devDependencies\`.
17001701
`,
17011702
flatten (key, obj, flatOptions) {
1703+
if (obj['save-dev'] && obj['save-optional']) {
1704+
const msg = '--save-dev and --save-optional are mutually exclusive, last one wins'
1705+
log.warn('invalid', msg)
1706+
}
1707+
17021708
if (!obj[key]) {
17031709
if (flatOptions.saveType === 'dev') {
17041710
delete flatOptions.saveType
@@ -1726,11 +1732,17 @@ const definitions = {
17261732
default: false,
17271733
type: Boolean,
17281734
short: 'O',
1735+
exclusive: ['save-dev', 'save-peer', 'save-prod'],
17291736
description: `
17301737
Save installed packages to a package.json file as
17311738
\`optionalDependencies\`.
17321739
`,
17331740
flatten (key, obj, flatOptions) {
1741+
if (obj['save-dev'] && obj['save-optional']) {
1742+
const msg = '--save-dev and --save-optional are mutually exclusive, last one wins'
1743+
log.warn('invalid', msg)
1744+
}
1745+
17341746
if (!obj[key]) {
17351747
if (flatOptions.saveType === 'optional') {
17361748
delete flatOptions.saveType
@@ -1754,6 +1766,7 @@ const definitions = {
17541766
'save-peer': new Definition('save-peer', {
17551767
default: false,
17561768
type: Boolean,
1769+
exclusive: ['save-dev', 'save-optional', 'save-prod'],
17571770
description: `
17581771
Save installed packages to a package.json file as \`peerDependencies\`
17591772
`,
@@ -1799,6 +1812,7 @@ const definitions = {
17991812
default: false,
18001813
type: Boolean,
18011814
short: 'P',
1815+
exclusive: ['save-dev', 'save-optional', 'save-peer'],
18021816
description: `
18031817
Save installed packages into \`dependencies\` specifically. This is
18041818
useful if a package already exists in \`devDependencies\` or

workspaces/config/test/definitions/definitions.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -693,6 +693,35 @@ t.test('saveType', t => {
693693
t.end()
694694
})
695695

696+
t.test('save-dev && save-optional warn when used together', t => {
697+
const warn = []
698+
const base = require('proc-log')
699+
const fakeLog = {
700+
...base.log,
701+
warn: (...args) => warn.push(args),
702+
}
703+
704+
const defs = mockDefs({
705+
'proc-log': {
706+
...base,
707+
log: fakeLog,
708+
},
709+
})
710+
711+
const obj = { 'save-dev': true, 'save-optional': true }
712+
const flat = {}
713+
714+
defs['save-dev'].flatten('save-dev', obj, flat)
715+
defs['save-optional'].flatten('save-optional', obj, flat)
716+
717+
t.strictSame(warn, [
718+
['invalid', '--save-dev and --save-optional are mutually exclusive, last one wins'],
719+
['invalid', '--save-dev and --save-optional are mutually exclusive, last one wins'],
720+
])
721+
722+
t.end()
723+
})
724+
696725
t.end()
697726
})
698727

0 commit comments

Comments
 (0)