Go to file
Alex Rickabaugh 02bab8cf90 fix(ivy): in ngcc, handle inline exports in commonjs code (#32129)
One of the compiler's tasks is to enumerate the exports of a given ES
module. This can happen for example to resolve `foo.bar` where `foo` is a
namespace import:

```typescript
import * as foo from './foo';

@NgModule({
  directives: [foo.DIRECTIVES],
})
```

In this case, the compiler must enumerate the exports of `foo.ts` in order
to evaluate the expression `foo.DIRECTIVES`.

When this operation occurs under ngcc, it must deal with the different
module formats and types of exports that occur. In commonjs code, a problem
arises when certain exports are downleveled.

```typescript
export const DIRECTIVES = [
  FooDir,
  BarDir,
];
```

can be downleveled to:

```javascript
exports.DIRECTIVES = [
  FooDir,
  BarDir,
```

Previously, ngtsc and ngcc expected that any export would have an associated
`ts.Declaration` node. `export class`, `export function`, etc. all retain
`ts.Declaration`s even when downleveled. But the `export const` construct
above does not. Therefore, ngcc would not detect `DIRECTIVES` as an export
of `foo.ts`, and the evaluation of `foo.DIRECTIVES` would therefore fail.

To solve this problem, the core concept of an exported `Declaration`
according to the `ReflectionHost` API is split into a `ConcreteDeclaration`
which has a `ts.Declaration`, and an `InlineDeclaration` which instead has
a `ts.Expression`. Differentiating between these allows ngcc to return an
`InlineDeclaration` for `DIRECTIVES` and correctly keep track of this
export.

PR Close #32129
2019-08-15 14:45:59 -07:00
.circleci ci: update material-unit-tests job to latest commit (#31650) 2019-08-13 14:40:52 -07:00
.devcontainer build: add recommended config files for VSCode remote development (#30450) 2019-05-20 10:13:53 -07:00
.github ci: remove material-unit-tests failure blocklist (#32138) 2019-08-14 12:02:12 -07:00
.vscode build: add recommended config files for VSCode remote development (#30450) 2019-05-20 10:13:53 -07:00
aio docs: clarify hierarchical injectors (#28700) 2019-08-15 12:43:51 -07:00
docs build: add `ngcc` as a valid commit message scope (#32144) 2019-08-15 10:33:36 -07:00
integration perf(core): make sanitization tree-shakable in Ivy mode (#31934) 2019-08-15 10:30:12 -07:00
modules build: update to nodejs rules 0.34.0 and bazel 0.28.1 (#31824) 2019-07-26 15:01:25 -07:00
packages fix(ivy): in ngcc, handle inline exports in commonjs code (#32129) 2019-08-15 14:45:59 -07:00
scripts ci: remove material-unit-tests failure blocklist (#32138) 2019-08-14 12:02:12 -07:00
third_party feat(bazel): use rbe_autoconfig() and new container. (#29336) 2019-05-09 14:58:34 -07:00
tools build: add `ngcc` as a valid commit message scope (#32144) 2019-08-15 10:33:36 -07:00
.bazelignore build: update to rules_nodejs 0.32.2 (#31325) 2019-07-01 14:16:42 -07:00
.bazelrc build: Add incompatible_list_based_execution_strategy_selection flags back in (#31471) 2019-07-12 11:38:16 -04: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 recommended config files for VSCode remote development (#30450) 2019-05-20 10:13:53 -07:00
.mailmap build: add a Git .mailmap with my new name (#19550) 2017-10-09 14:35:30 -07:00
.nvmrc build: update .nvmrc file to correct node version (#25992) 2018-09-18 13:11:58 -07:00
BUILD.bazel build: update to rules_nodejs 0.32.2 (#31325) 2019-07-01 14:16:42 -07:00
CHANGELOG.md release: cut the v9.0.0-next.2 release 2019-08-12 13:46:30 -07:00
CODE_OF_CONDUCT.md docs: fix community tab in GitHub by copying CoC 2018-02-27 19:02:30 -08:00
CONTRIBUTING.md build: add `ngcc` as a valid commit message scope (#32144) 2019-08-15 10:33:36 -07:00
LICENSE build: bump year (#27880) 2019-01-11 11:15:59 -08:00
README.md docs: fix typo of Typescript to TypeScript (#32153) 2019-08-15 12:44:41 -07:00
WORKSPACE build: update to nodejs rules 0.34.0 and bazel 0.28.1 (#31824) 2019-07-26 15:01:25 -07:00
browser-providers.conf.js ci: lock chrome and firefox versions for saucelabs (#29529) 2019-03-27 12:38:13 -07:00
browser_repositories.bzl build(bazel): update to latest stable chromium 74 on osx and linux for karma under bazel (#30502) 2019-05-16 14:38:14 -07:00
gulpfile.js build(zone.js): add changelog gulptask for zone.js (#31852) 2019-07-26 11:30:08 -07:00
karma-js.conf.js build: rules_nodejs 0.26.0 & use @npm instead of @ngdeps now that downstream angular build uses angular bundles (#28871) 2019-02-28 12:06:36 -08:00
package.json release: cut the v9.0.0-next.2 release 2019-08-12 13:46:30 -07:00
protractor-perf.conf.js fixup! test(ivy): make the test run with benchpress (#30449) 2019-05-16 20:04:04 -07:00
renovate.json ci: update packageFiles to be renovated (#29071) 2019-03-05 09:43:23 -08:00
shims_for_IE.js Revert "refactor: add license header to JS files & format files (#12035)" 2016-10-04 14:06:41 -07:00
test-events.js fix(platform-browser): run BLACK_LISTED_EVENTS outside of ngZone (#18993) 2017-09-05 15:33:22 -05:00
test-main.js feat(upgrade): provide unit test helpers for wiring up injectors (#16848) 2019-06-20 17:04:01 -07:00
tslint.json refactor: remove toplevel property accesses (#29329) 2019-05-16 12:08:49 -07:00
yarn.lock build: secure yarn lock files (#31640) 2019-07-29 16:10:23 -07:00
yarn.lock.readme.md build: remove travisci leftovers (#27979) 2019-01-09 10:41:16 -08:00

README.md

CircleCI BrowserStack Status Join the chat at https://gitter.im/angular/angular npm version

Angular

Angular is a development platform for building mobile and desktop web applications using TypeScript/JavaScript and other languages.

Quickstart

Get started in 5 minutes.

Changelog

Learn about the latest improvements.

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.