angular-cn/packages
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
..
animations build: convert entry_point to label (#30627) 2019-06-11 00:03:11 +00:00
bazel style: fix inline comment typo (#32090) 2019-08-12 07:06:00 -07:00
benchpress build: TypeScript 3.5 upgrade (#31615) 2019-07-25 17:05:23 -07:00
common fix(common): update $locationShim to notify onChange listeners before emitting AngularJS events (#32037) 2019-08-13 14:23:57 -07:00
compiler feat(compiler): allow selector-less directives as base classes (#31379) 2019-08-14 12:03:05 -07:00
compiler-cli fix(ivy): in ngcc, handle inline exports in commonjs code (#32129) 2019-08-15 14:45:59 -07:00
core perf(core): make sanitization tree-shakable in Ivy mode (#31934) 2019-08-15 10:30:12 -07:00
docs refactor: move angular source to /packages rather than modules/@angular 2017-03-08 16:29:27 -08:00
elements fix(elements): handle falsy initial value (#31604) 2019-07-18 14:26:37 -07:00
examples docs(forms): use a number as input value for formControlName (#30606) 2019-08-13 14:21:25 -07:00
forms feat(forms): formControlName also accepts a number (#30606) 2019-08-13 14:21:25 -07:00
http refactor: fix remaining typescript strict flag failures (#30993) 2019-07-18 14:21:25 -07:00
language-service refactor(language-service): Cleanup diagnostics (#32152) 2019-08-15 12:51:46 -07:00
platform-browser perf(core): make sanitization tree-shakable in Ivy mode (#31934) 2019-08-15 10:30:12 -07:00
platform-browser-dynamic perf(core): make sanitization tree-shakable in Ivy mode (#31934) 2019-08-15 10:30:12 -07:00
platform-server fix(ivy): DebugElement.triggerEventHandler not picking up events registered via Renderer2 (#31845) 2019-08-01 10:13:07 -07:00
platform-webworker build: TypeScript 3.5 upgrade (#31615) 2019-07-25 17:05:23 -07:00
platform-webworker-dynamic build: convert entry_point to label (#30627) 2019-06-11 00:03:11 +00:00
private/testing test(ivy): add onlyInIvy perf counter expectations (#30339) 2019-05-09 11:22:00 -07:00
router docs(router): fix router description (#32136) 2019-08-14 14:09:02 -07:00
service-worker build: TypeScript 3.5 upgrade (#31615) 2019-07-25 17:05:23 -07:00
upgrade refactor(upgrade): avoid using static inherited method (#31986) 2019-08-05 10:01:33 -07:00
zone.js release: cut the zone.js-0.10.2 release (#32128) 2019-08-13 16:55:04 -07:00
BUILD.bazel refactor(core): ensure compatibility with typescript strict flag (#30993) 2019-07-18 14:21:25 -07:00
README.md Revert "docs: Remove unneeded file (#18106)" 2017-07-20 16:46:47 -05:00
empty.ts refactor: move angular source to /packages rather than modules/@angular 2017-03-08 16:29:27 -08:00
goog.d.ts fix(ivy): use goog.LOCALE for Closure Compiler to define default LOCALE_ID (#31519) 2019-07-16 13:02:10 -04:00
license-banner.txt build: bump year (#27880) 2019-01-11 11:15:59 -08:00
system.d.ts refactor: move angular source to /packages rather than modules/@angular 2017-03-08 16:29:27 -08:00
tsconfig-build-no-strict.json refactor(core): ensure compatibility with typescript strict flag (#30993) 2019-07-18 14:21:25 -07:00
tsconfig-build.json refactor(core): ensure compatibility with typescript strict flag (#30993) 2019-07-18 14:21:25 -07:00
tsconfig-test.json refactor: fix typescript strict flag failures in all tests (#30993) 2019-07-18 14:21:26 -07:00
tsconfig.json refactor: fix typescript strict flag failures in all tests (#30993) 2019-07-18 14:21:26 -07:00
types.d.ts build: switch to typescript's es2015 typings (#28570) 2019-02-06 14:17:55 -05:00

README.md

Angular

The sources for this package are in the main Angular repo. Please file issues and pull requests against that repo.

License: MIT