From b9abb2242bae12ee8087c9b02763f3fafc703aae Mon Sep 17 00:00:00 2001 From: Huanyi Xie <74809554+xiehuanyi@users.noreply.github.com> Date: Tue, 6 Oct 2026 22:06:02 +0300 Subject: [PATCH] fix: activate zero-argument boolean defaults --- lib/yargs-parser.ts | 3 ++- test/yargs-parser.mjs | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/lib/yargs-parser.ts b/lib/yargs-parser.ts index 48a2d0f2..d18cd7d2 100644 --- a/lib/yargs-parser.ts +++ b/lib/yargs-parser.ts @@ -465,7 +465,8 @@ export class YargsParser { if (!isUndefined(argAfterEqualSign)) { error = Error(__('Argument unexpected for: %s', key)) } - setArg(key, defaultValue(key)) + const value = defaultValue(key) + setArg(key, typeof value === 'boolean' && guessType(key) === DefaultValuesForTypeKey.BOOLEAN ? true : value) return i } diff --git a/test/yargs-parser.mjs b/test/yargs-parser.mjs index 4c692375..6c2b9bdd 100644 --- a/test/yargs-parser.mjs +++ b/test/yargs-parser.mjs @@ -14,6 +14,32 @@ const require = createRequire(import.meta.url); should() describe('yargs-parser', function () { + it('activates zero-argument boolean defaults through every alias', function () { + for (const flag of ['-b', '--blah', '--bl']) { + const result = parser([flag, 'world'], { + narg: { b: 0 }, default: { b: false }, alias: { blah: ['b', 'bl'] } + }) + expect(result.b).to.equal(true) + expect(result.blah).to.equal(true) + expect(result.bl).to.equal(true) + expect(result._).to.deep.equal(['world']) + } + }) + + it('retains false zero-argument defaults when the flag is absent', function () { + const result = parser([], { narg: { b: 0 }, default: { b: false } }) + expect(result.b).to.equal(false) + }) + + it('retains explicitly typed zero-argument fallback values', function () { + const result = parser('--text --number', { + narg: { text: 0, number: 0 }, string: ['text'], number: ['number'], + default: { text: 'fallback', number: 42 } + }) + expect(result.text).to.equal('fallback') + expect(result.number).to.equal(42) + }) + it('should parse a "short boolean"', function () { const parse = parser(['-b']) parse.should.not.have.property('--')