diff --git a/lib/default-input.js b/lib/default-input.js index fe13f67..34985a2 100644 --- a/lib/default-input.js +++ b/lib/default-input.js @@ -267,7 +267,8 @@ exports.type = yes ? type : prompt('type', type, (data) => { return data }) -const initPrivate = package.private || getConfig('private') -if (initPrivate === true) { - exports.private = true +// Only include private field if it already exists or if explicitly set in config +const configPrivate = getConfig('private') +if (package.private !== undefined || configPrivate !== undefined) { + exports.private = package.private !== undefined ? package.private : configPrivate } diff --git a/test/private-defaults.js b/test/private-defaults.js index cf3dafa..ac077f4 100644 --- a/test/private-defaults.js +++ b/test/private-defaults.js @@ -18,7 +18,7 @@ t.test('private field with init-private false', async (t) => { config: { yes: 'yes', 'init-private': false }, }) - t.equal(data.private, undefined, 'private field set to false is undefined') + t.equal(data.private, false, 'private field set to false is undefined') }) t.test('private field without init-private', async (t) => { @@ -28,3 +28,47 @@ t.test('private field without init-private', async (t) => { t.equal(data.private, undefined, 'private not set in by default') }) + +t.test('respects existing private field in package.json', async (t) => { + const { data } = await setup(t, __filename, { + testdir: { + 'package.json': JSON.stringify({ + name: 'existing-package', + version: '1.0.0', + private: true, + }), + }, + config: { yes: 'yes' }, + }) + + t.equal(data.private, true, 'keeps existing private value from package.json') +}) + +t.test('existing private field takes precedence over config', async (t) => { + const { data } = await setup(t, __filename, { + testdir: { + 'package.json': JSON.stringify({ + name: 'existing-package', + version: '1.0.0', + private: true, + }), + }, + config: { yes: 'yes', 'init-private': false }, + }) + + t.equal(data.private, true, 'existing package.json private field takes precedence over config') +}) + +t.test('adds private from config when existing package has no private field', async t => { + const { data } = await setup(t, __filename, { + testdir: { + 'package.json': JSON.stringify({ + name: 'existing-package', + version: '1.0.0', + }), + }, + config: { yes: 'yes', 'init-private': true }, + }) + + t.equal(data.private, true, 'adds private field from config when not in existing package') +})