Skip to content

Angular Non AOT compiler doesn't emit class decorators in specific cases #39574

Closed

Description

@ratoaq2

🐞 bug report

Affected Package

Angular Non AOT compiler (Jit Mode)

Is this a regression?

Yes, the very same scenario works on Angular 8.x

Description

Given that AOT is disabled ("aot": false in angular.json)
Given a class that is responsible of configuring "class decorators", if I decorate a regular typescript class with a decorator generated by that class, the compiled javascript doesn't emit the class decorator properly.

class DecoratorBuilder {
  customClassDecorator<T extends { new (...args: any[]): {} }>(constructor: T) {
    console.log('Class Decorated');
    return class extends constructor {
      myName = 'Decorated Foobar';
    };
  }
}

export function ClassDecorators() {
  return new DecoratorBuilder();
}

@ClassDecorators().customClassDecorator
class MyNonAngularClass {
  myName = 'foobar';
}

🔬 Minimal Reproduction

https://github.com/ratoaq2/angular-non-aot-class-decorator

Just start the app:
npm install
npm start

access http://localhost:4200
You should see: Hello Decorated Foobar!
But you see: Hello foobar!

If you enable "aot": true, it works correctly. But that's not an option because I also face this issue in my spec tests where I can't enable aot.

🔥 Exception or Error

No exception or error

🌍 Your Environment

Angular Version:


Angular CLI: 10.0.8
Node: 12.18.4
OS: win32 x64

Angular: 10.0.14
... animations, common, compiler, compiler-cli, core, forms
... platform-browser, platform-browser-dynamic, router
Ivy Workspace: No

Package                           Version
-----------------------------------------------------------
@angular-devkit/architect         0.1000.8
@angular-devkit/build-angular     0.1000.8
@angular-devkit/build-optimizer   0.1000.8
@angular-devkit/build-webpack     0.1000.8
@angular-devkit/core              10.0.8
@angular-devkit/schematics        10.0.8
@angular/cli                      10.0.8
@ngtools/webpack                  10.0.8
@schematics/angular               10.0.8
@schematics/update                0.1000.8
rxjs                              6.5.5
typescript                        3.9.7
webpack                           4.43.0

Anything else relevant?
It doesn't seem to be a typescript issue

Activity

  1. petebacondarwin commented on Nov 5, 2020

    @petebacondarwin
    Contributor

    I think that this is more related to the CLI processing than the framework compilation. But @alan-agius4 is looking into it.
    Transferring to the CLI repo...

  2. petebacondarwin commented on Nov 5, 2020

    @petebacondarwin
    Contributor

    Actually it is caused by a transform (constructorParametersDownlevelTransform) that is held in the FW repository. So transferring back!

  3. added
    area: compilerIssues related to `ngc`, Angular's template compiler
    P3An issue that is relevant to core functions, but does not impede progress. Important, but not urgent
    on Nov 5, 2020
  4. added this to the Backlog milestone on Nov 5, 2020
  5. ratoaq2 commented on Nov 5, 2020

    @ratoaq2
    Author

    Thanks for the quick response.
    Is this kind of issue going to be fixed only on latest version 10.2.x? Or can I expect it to also be fixed on 10.0.x?

  6. ahnpnl commented on Nov 5, 2020

    @ahnpnl
    Contributor

    Hi, will this be fixed for v9 as well ? Downlevel transformer in v9 locates in CLI repo but I don't see any PRs to fix this issue there for v9.

  7. petebacondarwin commented on Nov 5, 2020

    @petebacondarwin
    Contributor

    The PR for this issue will land on master, RC and patch branches. The patch branch is currently 10.2.x.
    It will not be backported to 10.0.x nor 9.x.

  8. added a commit that references this issue on Nov 6, 2020
    f51cf29
  9. added a commit that references this issue on Nov 6, 2020
    1c6cf8a
  10. angular-automatic-lock-bot commented on Dec 7, 2020

    @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.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3An issue that is relevant to core functions, but does not impede progress. Important, but not urgentarea: compilerIssues related to `ngc`, Angular's template compilerstate: has PR

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions