c4e039a43a
In ESM2015 bundles, a class with decorators may be emitted as follows: ```javascript var MyClass_1; let MyClass = MyClass_1 = class MyClass {}; MyClass.decorators = [/* here be decorators */]; ``` Such a class has two declarations: the publicly visible `let MyClass` and the implementation `class MyClass {}` node. In #32539 a refactoring took place to handle such classes more consistently, however the logic to find static properties was mistakenly kept identical to its broken state before the refactor, by looking for static properties on the implementation symbol (the one for `class MyClass {}`) whereas the static properties need to be obtained from the symbol corresponding with the `let MyClass` declaration, as that is where the `decorators` property is assigned to in the example above. This commit fixes the behavior by looking for static properties on the public declaration symbol. This fixes an issue where decorators were not found for classes that do in fact have decorators, therefore preventing the classes from being compiled for Ivy. Fixes #31791 PR Close #32619 |
||
---|---|---|
.. | ||
src | ||
test | ||
BUILD.bazel | ||
README.md | ||
index.ts | ||
main-ngcc.ts |
README.md
Angular Compatibility Compiler (ngcc)
This compiler will convert node_modules
compiled with ngc
, into node_modules
which
appear to have been compiled with ngtsc
.
This conversion will allow such "legacy" packages to be used by the Ivy rendering engine.
Building
The project is built using Bazel:
yarn bazel build //packages/compiler-cli/ngcc
Unit Testing
The unit tests are built and run using Bazel:
yarn bazel test //packages/compiler-cli/ngcc/test
Integration Testing
There are tests that check the behavior of the overall executable:
yarn bazel test //packages/compiler-cli/ngcc/test:integration