Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Passing null options to RunSchematicTask leads to CLI crash #21023

Open
2 of 15 tasks
da-mkay opened this issue Jun 2, 2021 · 4 comments · May be fixed by #21784
Open
2 of 15 tasks

Passing null options to RunSchematicTask leads to CLI crash #21023

da-mkay opened this issue Jun 2, 2021 · 4 comments · May be fixed by #21784

Comments

@da-mkay
Copy link

@da-mkay da-mkay commented Jun 2, 2021

🐞 Bug report

Command (mark with an x)

  • new
  • build
  • serve
  • test
  • e2e
  • generate
  • add
  • update
  • lint
  • extract-i18n
  • run
  • config
  • help
  • version
  • doc

Is this a regression?

Yes, the previous version in which this bug was not present was: 11.x

Description

Using context.addTask(new RunSchematicTask(schematicName, Options)) inside a schematic, we can schedule another schematic. Until (including) Angular 11 we could simply pass null as second Options parameter.
Starting with Angular 12 the CLI will crash with the error message Cannot read property 'project' of null.

🔬 Minimal Reproduction

Run a schematic (using ng add or ng g) that itself tries to run another schematic using context.addTask(new RunSchematicTask(schematicName, null)) (null is important here).

Since the ng-add schematic of @da-mkay/ng-builder-electron uses the above mentioned code you can use these commands to reproduce the issue:

$ ng new workspace --create-application=false
$ cd workspace
$ ng add @da-mkay/ng-builder-electron@0.2.0

(Version 0.2.0 is important as I will release a new version in a moment)

🔥 Exception or Error


Cannot read property 'project' of null

🌍 Your Environment


Angular CLI: 12.0.2
Node: 14.17.0
Package Manager: npm 6.14.13
OS: darwin x64

Angular: 12.0.2
... animations, cli, common, compiler, compiler-cli, core, forms
... platform-browser, platform-browser-dynamic, router

Package                      Version
------------------------------------------------------
@angular-devkit/architect    0.1200.2
@angular-devkit/core         12.0.2
@angular-devkit/schematics   12.0.2
@schematics/angular          12.0.2
rxjs                         6.6.7
typescript                   4.2.4

Anything else relevant?

The issue is caused by the following line inside SchematicCommand class:
https://github.com/angular/angular-cli/blob/master/packages/angular/cli/models/schematic-command.ts#L247

typeof (current as Record<string, unknown>).project === 'string'

Here, current is what we pass as second argument to the RunSchematicTask constructor (null). Since that parameter is typed as generic T, IMHO we should be able to pass null here. But maybe I'm wrong 😉

As a workaround I can pass {} instead of null to the RunSchematicTask constructor.

A solution would be to change the above line to:

typeof (current as Record<string, unknown>)?.project === 'string'

(added ?)

I can also create a PR for that gigantic change if needed 😋

@alan-agius4
Copy link
Collaborator

@alan-agius4 alan-agius4 commented Jun 2, 2021

Sounds like a reasonable change to me, but in this case we need to also fix the casting. Maybe even remove it.

Feel free to create a PR.

@martinakraus
Copy link

@martinakraus martinakraus commented Jun 6, 2021

If no one has taken this Issue yet I would love to use it for my first contribution to angular :)

@alan-agius4
Copy link
Collaborator

@alan-agius4 alan-agius4 commented Jun 6, 2021

@martinakraus, go for it!

@ddubrava
Copy link

@ddubrava ddubrava commented Sep 21, 2021

Good afternoon, I hope no one has been working on this issue for 3 months, so raising a PR

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

4 participants