diff --git a/src/utils/generate/parseParams.ts b/src/utils/generate/parseParams.ts index 10e4348b8..ef830b156 100644 --- a/src/utils/generate/parseParams.ts +++ b/src/utils/generate/parseParams.ts @@ -7,7 +7,12 @@ export function paramParser(inputs?: string[]) { if (!input.includes('=')) { throw new Error(`Invalid param ${input}. It must be in the format of --param name1=value1 name2=value2 `); } - const [paramName, paramValue] = input.split(/=(.+)/, 2); + // Split on the first `=` only, so values may contain `=` and may be empty + // (e.g. `name=` sets an empty value). A capturing-group regex split dropped + // params with an empty value entirely. + const separatorIndex = input.indexOf('='); + const paramName = input.slice(0, separatorIndex); + const paramValue = input.slice(separatorIndex + 1); params[String(paramName)] = paramValue; } return params; diff --git a/test/unit/utils/generate/parseParams.test.ts b/test/unit/utils/generate/parseParams.test.ts index 1fa7f0ada..16f26d320 100644 --- a/test/unit/utils/generate/parseParams.test.ts +++ b/test/unit/utils/generate/parseParams.test.ts @@ -27,10 +27,9 @@ describe('parseParams utilities', () => { expect(result).to.deep.equal({ url: 'http://example.com?foo=bar' }); }); - it('should handle input with trailing equals (no capture after =)', () => { - // The regex (.+) requires at least one char after =, so 'name=' won't split properly - const result = paramParser(['name=value']); - expect(result).to.have.property('name', 'value'); + it('should parse a param with an empty value (trailing equals)', () => { + const result = paramParser(['name=']); + expect(result).to.deep.equal({ name: '' }); }); it('should throw error for input without equals sign', () => {