Go to file
Kristiyan Kostadinov 7e33cb9626 fix(compiler-cli): generating invalid setClassMetadata call in ES5 for class with custom decorator (#39527)
When a class with a custom decorator is transpiled to ES5, it looks something like this:

```
var SomeClass = (function() {
  function SomeClass() {...};
  var SomeClass_1 = __decorate([Decorator()], SomeClass);
  SomeClass = SomeClass_1;
  return SomeClass;
})();
```

The problem is that if the class also has an Angular decorator that refers to the class itself
(e.g. `{provide: someToken, useClass: SomeClass}`), the generated `setClassMetadata` code will
be emitted after the IIFE, but will still refer to the intermediate `SomeClass_1` variable from
inside the IIFE. This happens, because we generate the `setClassMetadata` call directly from
the source AST which contains identifiers that TS will rename when it emits the ES5 code.

These changes resolve the issue by looking through the metadata AST and cloning any `Identifier`
that is referring to the class. Since TS doesn't have references to the clone, it won't rename
it when transpiling to ES5.

Fixes #39509.

PR Close #39527
2020-11-03 14:52:59 -08:00
.circleci ci: bust cache of stored node_modules on CircleCI (#39461) 2020-10-27 14:53:09 -07:00
.devcontainer build: update the recommended `Dockerfile` for VSCode remote development (#34697) 2020-01-09 13:31:14 -08:00
.github ci: update NgBot config to include more labels that indicate that ticket is triaged (#39494) 2020-10-29 12:25:47 -07:00
.ng-dev build: add PullApprove: disable as a caretaker note label (#39430) 2020-10-28 10:59:09 -07:00
.vscode build: Ignore .history for the xyz.local-history VSCode extension (#38121) 2020-07-17 13:33:39 -07:00
.yarn build: update to latest version of yarn (#38869) 2020-09-18 16:47:33 -07:00
aio build(docs-infra): ensure that deployment works on CI (#39535) 2020-11-02 12:24:34 -08:00
dev-infra fix(dev-infra): run fetches in the git client in quiet mode (#39503) 2020-11-02 16:41:47 -08:00
docs docs: fix `yarn bazel` commands to run in `--silent` mode in `BAZEL.md` (#39455) 2020-10-27 13:35:37 -07:00
goldens build: update to CLI 11.0.0-rc.1 (#39432) 2020-10-29 13:47:12 -07:00
integration build: update to @angular/cli@11.0.0-rc.0 (#39432) 2020-10-29 13:47:12 -07:00
modules fix(platform-webworker): remove platform-webworker and platform-webworker-dynamic (#38846) 2020-09-30 09:13:59 -04:00
packages fix(compiler-cli): generating invalid setClassMetadata call in ES5 for class with custom decorator (#39527) 2020-11-03 14:52:59 -08:00
scripts build: ensure script that build the Zone.js package can be run from any directory (#39455) 2020-10-27 13:35:37 -07:00
third_party fix(packaging): remove polyfills needed to run tests on IE9 and IE 10 (#38931) 2020-09-25 14:31:10 -04:00
tools build: update to cldr v37 (#39343) 2020-10-20 13:22:37 -07:00
.bazelignore build: add npm package manifest to npm_integration_test (#35669) 2020-02-26 12:58:35 -08:00
.bazelrc build: upgrade angular build, integration/bazel and @angular/bazel package to rule_nodejs 2.2.0 (#39182) 2020-10-08 11:54:59 -07:00
.bazelversion build: update bazelversion (#39351) 2020-10-21 11:59:40 -07:00
.clang-format feat(tooling): Add a .clang-format for automated JavaScript formatting. 2015-04-02 08:44:34 -07:00
.editorconfig build: use https link to editorconfig.org in .editorconfig (#27664) 2018-12-18 09:30:09 -08:00
.gitattributes test: fix ts api guardian and public guard tests on windows (#30105) 2019-04-26 16:32:22 -07:00
.gitignore build: add husky ignored files to .gitignore (#39388) 2020-10-27 11:07:22 -07:00
.gitmessage fix(platform-webworker): remove platform-webworker and platform-webworker-dynamic (#38846) 2020-09-30 09:13:59 -04:00
.mailmap build: add a Git .mailmap with my new name (#19550) 2017-10-09 14:35:30 -07:00
.nvmrc build: migrate to node@12.14.1 (#34955) 2020-01-27 09:31:22 -08:00
.pullapprove.yml ci: only check testing directories within packages/ for fw-testing (#39536) 2020-11-02 16:39:44 -08:00
.yarnrc build: update to latest version of yarn (#38869) 2020-09-18 16:47:33 -07:00
BUILD.bazel build: upgrade angular build, integration/bazel and @angular/bazel package to rule_nodejs 2.2.0 (#39182) 2020-10-08 11:54:59 -07:00
CHANGELOG.md docs: release notes for the v11.0.0-rc.1 release 2020-10-28 14:20:29 -07:00
CODE_OF_CONDUCT.md docs: add Discord as an official communication channel (#39149) 2020-10-14 10:23:15 -07:00
CONTRIBUTING.md docs(forms): update ngModel documentation (#39481) 2020-10-29 11:18:54 -07:00
LICENSE build: bump year (#34651) 2020-01-13 07:21:43 -08:00
README.md docs: update readme (#32084) 2020-10-15 14:08:17 -07:00
WORKSPACE build: update bazelversion (#39351) 2020-10-21 11:59:40 -07:00
browser-providers.conf.js ci: remove IE 9 and IE 10 from CI (#38931) 2020-09-25 14:31:10 -04:00
gulpfile.js build: revert back to downloading cldr-data directly rather than via npm (#39341) 2020-10-20 10:46:19 -07:00
karma-js.conf.js fix(core): detect DI parameters in JIT mode for downleveled ES2015 classes (#38463) 2020-08-17 10:55:37 -07:00
package.json build: update to CLI 11.0.0-rc.1 (#39432) 2020-10-29 13:47:12 -07:00
test-events.js build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
test-main.js fix(platform-webworker): remove platform-webworker and platform-webworker-dynamic (#38846) 2020-09-30 09:13:59 -04:00
tslint.json refactor(dev-infra): create ng-dev executable locally in the repo (#39089) 2020-10-22 13:36:14 -07:00
yarn.lock build: update to CLI 11.0.0-rc.1 (#39432) 2020-10-29 13:47:12 -07:00
yarn.lock.readme.md build: remove travisci leftovers (#27979) 2019-01-09 10:41:16 -08:00

README.md

Angular - One framework. Mobile & desktop.

angular-logo
Angular is a development platform for building mobile and desktop web applications
using Typescript/JavaScript and other languages.

www.angular.io

Contributing Guidelines · Submit an Issue · Blog

CI status   Angular on npm   Discord conversation


Documentation

Get started with Angular, learn the fundamentals and explore advanced topics on our documentation website.

Advanced

Development Setup

Prerequisites

Setting Up a Project

Intall the Angular CLI globally:

npm install -g @angular/cli

Create workspace:

ng new [PROJECT NAME]

Run the application:

cd [PROJECT NAME]
ng serve

Quickstart

Get started in 5 minutes.

Ecosystem

angular ecosystem logos

Changelog

Learn about the latest improvements.

Upgrading

Check out our upgrade guide to find out the best way to upgrade your project.

Contributing

Contributing Guidelines

Read through our contributing guidelines to learn about our submission process, coding rules and more.

Want to Help?

Want to file a bug, contribute some code, or improve documentation? Excellent! Read up on our guidelines for contributing and then check out one of our issues in the hotlist: community-help.

Code of Conduct

Help us keep Angular open and inclusive. Please read and follow our Code of Conduct.

Community

Join the conversation and help the community.

Love Angular badge

Love Angular? Give our repo a star ⬆️.