Skip to content

Commit 23c5eb9

Browse files
authored
fix: Use the private value as long as it isn't undefined (#327)
Related: npm/cli#8246
1 parent fc95b2d commit 23c5eb9

File tree

2 files changed

+49
-4
lines changed

2 files changed

+49
-4
lines changed

lib/default-input.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,8 @@ exports.type = yes ? type : prompt('type', type, (data) => {
267267
return data
268268
})
269269

270-
const initPrivate = package.private || getConfig('private')
271-
if (initPrivate === true) {
272-
exports.private = true
270+
// Only include private field if it already exists or if explicitly set in config
271+
const configPrivate = getConfig('private')
272+
if (package.private !== undefined || configPrivate !== undefined) {
273+
exports.private = package.private !== undefined ? package.private : configPrivate
273274
}

test/private-defaults.js

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ t.test('private field with init-private false', async (t) => {
1818
config: { yes: 'yes', 'init-private': false },
1919
})
2020

21-
t.equal(data.private, undefined, 'private field set to false is undefined')
21+
t.equal(data.private, false, 'private field set to false is undefined')
2222
})
2323

2424
t.test('private field without init-private', async (t) => {
@@ -28,3 +28,47 @@ t.test('private field without init-private', async (t) => {
2828

2929
t.equal(data.private, undefined, 'private not set in by default')
3030
})
31+
32+
t.test('respects existing private field in package.json', async (t) => {
33+
const { data } = await setup(t, __filename, {
34+
testdir: {
35+
'package.json': JSON.stringify({
36+
name: 'existing-package',
37+
version: '1.0.0',
38+
private: true,
39+
}),
40+
},
41+
config: { yes: 'yes' },
42+
})
43+
44+
t.equal(data.private, true, 'keeps existing private value from package.json')
45+
})
46+
47+
t.test('existing private field takes precedence over config', async (t) => {
48+
const { data } = await setup(t, __filename, {
49+
testdir: {
50+
'package.json': JSON.stringify({
51+
name: 'existing-package',
52+
version: '1.0.0',
53+
private: true,
54+
}),
55+
},
56+
config: { yes: 'yes', 'init-private': false },
57+
})
58+
59+
t.equal(data.private, true, 'existing package.json private field takes precedence over config')
60+
})
61+
62+
t.test('adds private from config when existing package has no private field', async t => {
63+
const { data } = await setup(t, __filename, {
64+
testdir: {
65+
'package.json': JSON.stringify({
66+
name: 'existing-package',
67+
version: '1.0.0',
68+
}),
69+
},
70+
config: { yes: 'yes', 'init-private': true },
71+
})
72+
73+
t.equal(data.private, true, 'adds private field from config when not in existing package')
74+
})

0 commit comments

Comments
 (0)