Skip to content

Commit a4df2b9

Browse files
isaacswraithgar
authored andcommitted
config: Restore --dev flag, unify --omit flatteners
This consolidates all the various --include and --omit configuration flatteners into a single function, since they have to be interdependent in order to function properly. Fix: #2936 PR-URL: #2942 Credit: @isaacsClose: #2942 Reviewed-by: @wraithgar
1 parent 62b783a commit a4df2b9

File tree

5 files changed

+115
-45
lines changed

5 files changed

+115
-45
lines changed

‎docs/content/using-npm/config.md‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1382,6 +1382,14 @@ What authentication strategy to use with `adduser`/`login`.
13821382

13831383
`--cache-min=9999 (or bigger)` is an alias for `--prefer-offline`.
13841384

1385+
#### `dev`
1386+
1387+
* Default: false
1388+
* Type: Boolean
1389+
* DEPRECATED: Please use --include=dev instead.
1390+
1391+
Alias for `--include=dev`.
1392+
13851393
#### `init.author.email`
13861394

13871395
* Default: ""

‎lib/utils/config/definitions.js‎

Lines changed: 41 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,34 @@ const maybeReadFile = file =>{
2222
}
2323
}
2424

25+
constbuildOmitList=obj=>{
26+
constinclude=obj.include||[]
27+
constomit=obj.omit||[]
28+
29+
constonly=obj.only
30+
if(/^prod(uction)?$/.test(only)||obj.production)
31+
omit.push('dev')
32+
33+
if(/^dev/.test(obj.also))
34+
include.push('dev')
35+
36+
if(obj.dev)
37+
include.push('dev')
38+
39+
if(obj.optional===false)
40+
omit.push('optional')
41+
elseif(obj.optional===true)
42+
include.push('optional')
43+
44+
obj.omit=[...newSet(omit)].filter(type=>!include.includes(type))
45+
obj.include=[...newSet(include)]
46+
47+
if(obj.omit.includes('dev'))
48+
process.env.NODE_ENV='production'
49+
50+
returnobj.omit
51+
}
52+
2553
consteditor=process.env.EDITOR||
2654
process.env.VISUAL||
2755
(isWindows ? 'notepad.exe' : 'vi')
@@ -164,12 +192,6 @@ define('also',{
164192
`,
165193
deprecated: 'Please use --include=dev instead.',
166194
flatten(key,obj,flatOptions){
167-
if(!/^dev(elopment)?$/.test(obj.also))
168-
return
169-
170-
// add to include, and call the omit flattener
171-
obj.include=obj.include||[]
172-
obj.include.push('dev')
173195
definitions.omit.flatten('omit',obj,flatOptions)
174196
},
175197
})
@@ -477,6 +499,18 @@ define('description',{
477499
},
478500
})
479501

502+
define('dev',{
503+
default: false,
504+
type: Boolean,
505+
description: `
506+
Alias for \`--include=dev\`.
507+
`,
508+
deprecated: 'Please use --include=dev instead.',
509+
flatten(key,obj,flatOptions){
510+
definitions.omit.flatten('omit',obj,flatOptions)
511+
},
512+
})
513+
480514
define('diff',{
481515
default: [],
482516
type: [String,Array],
@@ -1218,10 +1252,7 @@ define('omit',{
12181252
scripts.
12191253
`,
12201254
flatten(key,obj,flatOptions){
1221-
constinclude=obj.include||[]
1222-
constomit=flatOptions.omit||[]
1223-
flatOptions.omit=omit.concat(obj[key])
1224-
.filter(type=>type&&!include.includes(type))
1255+
flatOptions.omit=buildOmitList(obj)
12251256
},
12261257
})
12271258

@@ -1236,12 +1267,6 @@ define('only',{
12361267
\`--omit=dev\`.
12371268
`,
12381269
flatten(key,obj,flatOptions){
1239-
constvalue=obj[key]
1240-
if(!/^prod(uction)?$/.test(value))
1241-
return
1242-
1243-
obj.omit=obj.omit||[]
1244-
obj.omit.push('dev')
12451270
definitions.omit.flatten('omit',obj,flatOptions)
12461271
},
12471272
})
@@ -1259,16 +1284,6 @@ define('optional',{
12591284
Alias for --include=optional or --omit=optional
12601285
`,
12611286
flatten(key,obj,flatOptions){
1262-
constvalue=obj[key]
1263-
if(value===null)
1264-
return
1265-
elseif(value===true){
1266-
obj.include=obj.include||[]
1267-
obj.include.push('optional')
1268-
}else{
1269-
obj.omit=obj.omit||[]
1270-
obj.omit.push('optional')
1271-
}
12721287
definitions.omit.flatten('omit',obj,flatOptions)
12731288
},
12741289
})
@@ -1385,12 +1400,6 @@ define('production',{
13851400
deprecated: 'Use `--omit=dev` instead.',
13861401
description: 'Alias for `--omit=dev`',
13871402
flatten(key,obj,flatOptions){
1388-
constvalue=obj[key]
1389-
if(!value)
1390-
return
1391-
1392-
obj.omit=obj.omit||[]
1393-
obj.omit.push('dev')
13941403
definitions.omit.flatten('omit',obj,flatOptions)
13951404
},
13961405
})

‎tap-snapshots/test-lib-utils-config-definitions.js-TAP.test.js‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ Array [
3232
"commit-hooks",
3333
"depth",
3434
"description",
35+
"dev",
3536
"diff",
3637
"diff-ignore-all-space",
3738
"diff-name-only",

‎tap-snapshots/test-lib-utils-config-describe-all.js-TAP.test.js‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1261,6 +1261,14 @@ What authentication strategy to use with \`adduser\`/\`login\`.
12611261
12621262
\`--cache-min=9999 (or bigger)\` is an alias for \`--prefer-offline\`.
12631263
1264+
#### \`dev\`
1265+
1266+
* Default: false
1267+
* Type: Boolean
1268+
* DEPRECATED: Please use --include=dev instead.
1269+
1270+
Alias for \`--include=dev\`.
1271+
12641272
#### \`init.author.email\`
12651273
12661274
* Default: ""

‎test/lib/utils/config/definitions.js‎

Lines changed: 57 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -194,18 +194,26 @@ t.test('flatteners that populate flat.omit array', t =>{
194194
// ignored if setting is not dev or development
195195
obj.also='ignored'
196196
definitions.also.flatten('also',obj,flat)
197-
t.strictSame(obj,{also: 'ignored'},'nothing done')
198-
t.strictSame(flat,{},'nothing done')
197+
t.strictSame(obj,{also: 'ignored',omit: [],include: []},'nothing done')
198+
t.strictSame(flat,{omit: []},'nothing done')
199199

200200
obj.also='development'
201201
definitions.also.flatten('also',obj,flat)
202-
t.strictSame(obj,{also: 'development',include: ['dev']},'marked dev as included')
202+
t.strictSame(obj,{
203+
also: 'development',
204+
omit: [],
205+
include: ['dev'],
206+
},'marked dev as included')
203207
t.strictSame(flat,{omit: []},'nothing omitted, so nothing changed')
204208

205209
obj.omit=['dev','optional']
206210
obj.include=[]
207211
definitions.also.flatten('also',obj,flat)
208-
t.strictSame(obj,{also: 'development',omit: ['dev','optional'],include: ['dev']},'marked dev as included')
212+
t.strictSame(obj,{
213+
also: 'development',
214+
omit: ['optional'],
215+
include: ['dev'],
216+
},'marked dev as included')
209217
t.strictSame(flat,{omit: ['optional']},'removed dev from omit')
210218
t.end()
211219
})
@@ -237,7 +245,7 @@ t.test('flatteners that populate flat.omit array', t =>{
237245
constflat={}
238246
constobj={only: 'asdf'}
239247
definitions.only.flatten('only',obj,flat)
240-
t.strictSame(flat,{},'ignored if value is not production')
248+
t.strictSame(flat,{omit: []},'ignored if value is not production')
241249

242250
obj.only='prod'
243251
definitions.only.flatten('only',obj,flat)
@@ -256,18 +264,30 @@ t.test('flatteners that populate flat.omit array', t =>{
256264
constobj={optional: null}
257265

258266
definitions.optional.flatten('optional',obj,flat)
259-
t.strictSame(obj,{optional: null},'do nothing by default')
260-
t.strictSame(flat,{},'do nothing by default')
267+
t.strictSame(obj,{
268+
optional: null,
269+
omit: [],
270+
include: [],
271+
},'do nothing by default')
272+
t.strictSame(flat,{omit: []},'do nothing by default')
261273

262274
obj.optional=true
263275
definitions.optional.flatten('optional',obj,flat)
264-
t.strictSame(obj,{include: ['optional'],optional: true},'include optional when set')
276+
t.strictSame(obj,{
277+
omit: [],
278+
optional: true,
279+
include: ['optional'],
280+
},'include optional when set')
265281
t.strictSame(flat,{omit: []},'nothing to omit in flatOptions')
266282

267283
deleteobj.include
268284
obj.optional=false
269285
definitions.optional.flatten('optional',obj,flat)
270-
t.strictSame(obj,{omit: ['optional'],optional: false},'omit optional when set false')
286+
t.strictSame(obj,{
287+
omit: ['optional'],
288+
optional: false,
289+
include: [],
290+
},'omit optional when set false')
271291
t.strictSame(flat,{omit: ['optional']},'omit optional when set false')
272292

273293
t.end()
@@ -277,25 +297,49 @@ t.test('flatteners that populate flat.omit array', t =>{
277297
constflat={}
278298
constobj={production: true}
279299
definitions.production.flatten('production',obj,flat)
280-
t.strictSame(obj,{production: true,omit: ['dev']},'--production sets --omit=dev')
300+
t.strictSame(obj,{
301+
production: true,
302+
omit: ['dev'],
303+
include: [],
304+
},'--production sets --omit=dev')
281305
t.strictSame(flat,{omit: ['dev']},'--production sets --omit=dev')
282306

283307
deleteobj.omit
284308
obj.production=false
285309
deleteflat.omit
286310
definitions.production.flatten('production',obj,flat)
287-
t.strictSame(obj,{production: false},'--no-production has no effect')
288-
t.strictSame(flat,{},'--no-production has no effect')
311+
t.strictSame(obj,{
312+
production: false,
313+
include: [],
314+
omit: [],
315+
},'--no-production has no effect')
316+
t.strictSame(flat,{omit: []},'--no-production has no effect')
289317

290318
obj.production=true
291319
obj.include=['dev']
292320
definitions.production.flatten('production',obj,flat)
293-
t.strictSame(obj,{production: true,include: ['dev'],omit: ['dev']},'omit and include dev')
321+
t.strictSame(obj,{
322+
production: true,
323+
include: ['dev'],
324+
omit: [],
325+
},'omit and include dev')
294326
t.strictSame(flat,{omit: []},'do not omit dev when included')
295327

296328
t.end()
297329
})
298330

331+
t.test('dev',t=>{
332+
constflat={}
333+
constobj={dev: true}
334+
definitions.dev.flatten('dev',obj,flat)
335+
t.strictSame(obj,{
336+
dev: true,
337+
omit: [],
338+
include: ['dev'],
339+
})
340+
t.end()
341+
})
342+
299343
t.end()
300344
})
301345

0 commit comments

Comments
(0)