Skip to content

Boolean options not parsed correctly on schematics cli #12150

Description

@alexeagle

From @TinyMan on January 14, 2018 17:11

Bug Report or Feature Request (mark with an x)

- [x] bug report -> please search issues before submitting
- [ ] feature request

Area

- [x] devkit
- [ ] schematics

Versions

> node --version
v8.9.4
> npm --version
5.6.0
> ver
Microsoft Windows [version 10.0.16299.192]

> npm list -g --depth=0
+-- UNMET PEER DEPENDENCY @angular-devkit/schematics@0.0.48
+-- @angular-devkit/schematics-cli@0.0.5
+-- @angular/cli@1.6.4
+-- @schematics/angular@0.1.13
+-- @types/node@7.0.31
+-- eslint@4.0.0
+-- npm@5.6.0
+-- rxjs@5.5.6
+-- typescript@2.6.2
`-- watchify@3.9.0

npm ERR! peer dep missing: @angular-devkit/schematics@0.0.46, required by @schematics/angular@0.1.13
npm ERR! peer dep missing: @angular-devkit/schematics@0.0.46, required by @schematics/schematics@0.0.13
npm ERR! peer dep missing: @angular-devkit/schematics@0.0.46, required by @schematics/angular@0.1.13

Repro steps

> schematics @schematics/angular:module --name test --routing true

The log given by the failure

Schematic input does not validate against the Schema: {"name":"test","routing":"true","path":"app","sourceDir":"src","routingScope":"Child","spec":true,"flat":false,"commonModule":true}
Errors:
  .routing should be boolean

Desired functionality

Boolean options should be parsed.
Right now it is true if only --routing is specified but it fails with --routing false or --routing true.
For --routing option it is not really a problem because by default it is false: we can set it to true with --routing.
However it is blocking for custom schematics with boolean option that defaults to true: we can't set it to false.

Mention any other details that might be useful

Only the arguments specified here are parsed as booleans:
https://github.com/angular/devkit/blob/c88d991344a910903c2178b537a919c9da2de03f/packages/angular_devkit/schematics_cli/bin/schematics.ts#L102

After this minimist assigns the string "true" or "false" to the option hence the error.

Copied from original issue: angular/devkit#393

Activity

  1. modified the milestone: needsTriage on Sep 4, 2018
  2. modified the milestones: needsTriage, Backlog on Sep 7, 2018
  3. dxvladislavvolkov commented on Sep 25, 2018

    @dxvladislavvolkov

    Any news about this?

  4. musou1500 commented on Sep 27, 2018

    @musou1500

    How about using coerceTypes option?
    here is a coercion rules https://github.com/epoberezkin/ajv/blob/master/COERCION.md

    The patch will be as follows.

    diff --git a/packages/angular_devkit/core/src/json/schema/registry.ts b/packages/angular_devkit/core/src/json/schema/registry.ts
    index 06321af8..5638fa08 100644
    --- a/packages/angular_devkit/core/src/json/schema/registry.ts
    +++ b/packages/angular_devkit/core/src/json/schema/registry.ts
    @@ -115,6 +115,7 @@ export class CoreSchemaRegistry implements SchemaRegistry {
           loadSchema: (uri: string) => this._fetch(uri),
           schemaId: 'auto',
           passContext: true,
    +      coerceTypes: true
         });
    
         this._ajv.addMetaSchema(require('ajv/lib/refs/json-schema-draft-04.json'));
  5. added a commit that references this issue on Mar 2, 2022
    5330d52
  6. angular-automatic-lock-bot commented on Apr 2, 2022

    @angular-automatic-lock-bot

    This issue has been automatically locked due to inactivity.
    Please file a new issue if you are encountering a similar or related problem.

    Read more about our automatic conversation locking policy.

    This action has been performed automatically by a bot.

  7. locked and limited conversation to collaborators on Apr 2, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions