diff --git a/packages/angular_devkit/architect/bin/architect.ts b/packages/angular_devkit/architect/bin/architect.ts index c835fed8394c..8c0770f6cab3 100644 --- a/packages/angular_devkit/architect/bin/architect.ts +++ b/packages/angular_devkit/architect/bin/architect.ts @@ -205,6 +205,15 @@ function parseOptions(args: string[]): Options { } } + for (const key of Object.keys(CLI_OPTION_DEFINITIONS)) { + const value = values[key]; + if (value === 'true') { + values[key] = true; + } else if (value === 'false') { + values[key] = false; + } + } + return { positionals, builderOptions, diff --git a/packages/angular_devkit/schematics_cli/bin/schematics.ts b/packages/angular_devkit/schematics_cli/bin/schematics.ts index 8420e520dd39..91a658d0ced8 100644 --- a/packages/angular_devkit/schematics_cli/bin/schematics.ts +++ b/packages/angular_devkit/schematics_cli/bin/schematics.ts @@ -568,6 +568,15 @@ function parseOptions(args: string[]): Options { } } + for (const key of Object.keys(CLI_OPTION_DEFINITIONS)) { + const value = values[key]; + if (value === 'true') { + values[key] = true; + } else if (value === 'false') { + values[key] = false; + } + } + return { _: positionals, schematicOptions, diff --git a/packages/angular_devkit/schematics_cli/test/schematics_spec.ts b/packages/angular_devkit/schematics_cli/test/schematics_spec.ts index e6d54b6ddb34..0eb8e87a014d 100644 --- a/packages/angular_devkit/schematics_cli/test/schematics_spec.ts +++ b/packages/angular_devkit/schematics_cli/test/schematics_spec.ts @@ -59,6 +59,33 @@ describe('schematics-cli binary', () => { expect(res).toEqual(0); }); + it('handles boolean CLI options with explicit inline false values', async () => { + const args = ['blank', 'foo', '--dry-run', '--debug=false']; + const res = await main({ args, stdout, stderr }); + const output = stripVTControlCharacters(stdout.read()?.toString() || ''); + expect(output).not.toMatch(/Debug mode enabled/); + expect(output).toMatch(/Dry run enabled\./); + expect(res).toEqual(0); + }); + + it('does not display help when --help=false is passed', async () => { + const args = ['blank', 'foo', '--dry-run', '--help=false']; + const res = await main({ args, stdout, stderr }); + const output = stripVTControlCharacters(stdout.read()?.toString() || ''); + expect(output).not.toMatch(/schematics \[collection-name:\]schematic-name/); + expect(output).toMatch(/Dry run enabled\./); + expect(res).toEqual(0); + }); + + it('does not list schematics when --list-schematics=false is passed', async () => { + const args = ['blank', 'foo', '--dry-run', '--list-schematics=false']; + const res = await main({ args, stdout, stderr }); + const output = stripVTControlCharacters(stdout.read()?.toString() || ''); + expect(output).not.toMatch(/blank/); + expect(output).toMatch(/Dry run enabled\./); + expect(res).toEqual(0); + }); + it('error when no name is provided', async () => { const args = ['blank']; const res = await main({ args, stdout, stderr });