296 Commits

Author SHA1 Message Date
Tobias Bosch
79fc1e3959 fix(compiler): apply element bindings before host bindings () 2017-03-01 12:17:43 -08:00
Victor Berchet
d1182af1a4 refactor: change remaining <template> to <ng-template> () 2017-03-01 08:02:37 -08:00
Tobias Bosch
126fda2613 perf: delete pre-view-engine core, compiler, platform-browser, etc code ()
After the introduction of the view engine, we can drop a lot of code that is not used any more.

This should reduce the size of the app bundles because a lot of this code was not being properly tree-shaken by today's tools even though it was dead code.
2017-02-27 23:08:19 -08:00
Tobias Bosch
d2e42567a6 fix(core): call lifecycle hooks for siblings in declaration order 2017-02-27 14:50:41 -08:00
Tobias Bosch
14d37fe052 refactor(core): move NodeType and ProviderType into NodeFlags
Also removes `ng-reflect` attributes for element properties.
2017-02-27 14:50:41 -08:00
Tobias Bosch
436a179552 fix(animations): properly cache renderer and namespace triggers ()
- Don’t use the animation renderer if a component
  used style encapsulation but no animations.
- The `AnimationRenderer` should be cached in the same
  lifecycle as its delegate.
- Trigger names need to be namespaced per component type.
2017-02-24 12:10:19 -08:00
Matias Niemelä
93ddd38107 refactor(animations): make modules and bundles into plural Animations () 2017-02-24 09:36:58 -08:00
Victor Berchet
bf8eb41248 feat(compiler): introduce <ng-template>, deprecate <template> and template attribute
The rationale of this change is to improve the inter-operability with web
components that might make use of the `<template>` tag.

DEPRECATION

The template tags and template attribute are deprecated:

    <template ngFor [ngFor]=items let-item><li>...</li></template>
    <li template="ngFor: let item of items">...</li>

should be rewritten as:

    <ng-template ngFor [ngFor]=items let-item><li>...</li></ng-template>

Note that they still be supported in 4.x with a deprecartion warning in
development mode.

MIGRATION

- `template` tags (or elements with a `template` attribute) should be rewritten
as a `ng-template` tag,
- `ng-content` selectors should be updated to referto a `ng-template` where they
use to refer to a template: `<ng-content selector="template[attr]">` should be
rewritten as `<ng-content selector="ng-template[attr]">`
- if you consume a component relying on your templates being actual `template`
elements (that is they include a `<ng-content selector="template[attr]">`). You
should  still migrate to `ng-template` and make use of `ngProjectAs` to override
the way `ng-content` sees the template:
`<ng-template projectAs="template[attr]">`
- while `template` elements are deprecated in 4.x they continue to work.
2017-02-23 20:03:16 -08:00
Tobias Bosch
4b54c0e23f refactor(core): enable new animations dsl
Also deletes old tests that are not needed any
more with the new view engine.
2017-02-23 13:59:16 -08:00
Tobias Bosch
ccb636c2e9 refactor: deprecate RootRenderer / Renderer
Use `RendererV2` instead of `Renderer` now. `Renderer` can still be injected
and delegates to `RendererV2`.

Use `RendererFactoryV2` instead of `RootRenderer`. `RootRenderer` cannot be used
anymore.

BREAKING CHANGE:
- `RootRenderer` cannot be used any more, use `RendererFactoryV2` instead.
  Note: `Renderer` can still be injected/used, but is deprecated.
2017-02-23 13:59:16 -08:00
Matias Niemelä
e8d2743cfb feat(animations): noop animation module and zone fixes () 2017-02-23 08:51:00 -08:00
Tobias Bosch
ab3527c99b refactor(core): view engine - misc
- fix bug when detaching view from `ApplicationRef`
- fix integration of adding `ng-reflect` attributes
  in debug mode.
2017-02-23 08:26:47 -08:00
Tobias Bosch
5049a50bf6 fix(core): host bindings and host listeners for animations
Host bindings / listeners for animation properties should use
the renderer of the component view.
2017-02-23 08:26:47 -08:00
Matias Niemelä
830393d234 refactor(animations): support browser animation rendering () 2017-02-22 15:14:49 -08:00
Tobias Bosch
90226f7714 refactor(core): conditionally disable tests for the view engine. 2017-02-21 09:12:21 -08:00
Tobias Bosch
32012a1ffb refactor(core): view engine - move handleEvent function from view to element
Some versions of TypeScript are super slow to compile functions that
contain a lot of `if` conditions in them. Splitting the handle event
expressions per element is similar to what we did in the old codegen.
2017-02-21 09:12:21 -08:00
Tobias Bosch
58ba4f0409 fix(compiler): make view engine work with Aot 2017-02-21 09:12:21 -08:00
Victor Berchet
d6a58f9f70 feat(core): make new Inject() optional for deps specified as InjectionToken ()
fixes 
2017-02-20 16:20:45 -08:00
Tobias Bosch
b9f17a9cb2 fix: make all tests green with new view engine and JIT
Note that this does not yet include enabling the view engine
by default.

Included refactoring:
- view engine: split namespace of elements / attributes already
  when creating the `NodeDef`
- view engine: when injecting the old `Renderer`, use an implementation
  that is based on `RendererV2`
- view engine: store view queries in the component view, not
  on the host element
2017-02-17 17:18:55 -08:00
Tobias Bosch
0fa3895d5b feat(compiler): implement style encapsulation for new view engine ()
Included refactoring:
- splits the `RendererV2` into a `RendererFactoryV2` and a `RendererV2`
- makes the `DebugRendererV2` a private class in `@angular/core`
- remove `setBindingDebugInfo` from `RendererV2`, but rename `RendererV2.setText` to 
  `RendererV2.setValue` and allow it on comments and text nodes.

Part of 
2017-02-16 13:55:55 -08:00
Tobias Bosch
4e7752a12a feat(compiler): integrate compiler with view engine ()
Aspects: di, query, content projection

Included refactoring:
- use a number as query id
- use a bloom filter for aggregating matched queries of nested elements
- separate static vs dynamic queries

Part of 
2017-02-15 08:36:49 -08:00
Victor Berchet
bb9c7ae6e7 feat: RendererV2 integration () 2017-02-14 21:03:18 -08:00
vikerman
b4d444a0a7 feat(platform-server): add API to render Module and ModuleFactory to string ()
- PlatformState provides an interface to serialize the current Platform State as a string or Document.

- renderModule and renderModuleFactory are convenience methods to wait for Angular Application to stabilize and then render the state to a string.

- refactor code to remove defaultDoc from DomAdapter and inject DOCUMENT where it's needed.
2017-02-14 16:14:40 -08:00
Tobias Bosch
e4e9dbe33d feat(compiler): integrate compiler with view engine - change detection tests work ()
Included refactoring:
- make ViewData.parentIndex point to component provider index
- split NodeType.Provider into Provider / Directive / Pipe
- make purePipe take the real pipe as argument to detect changes
- order change detection:
  1) directive props
  2) renderer props

Part of 

PR Close 
2017-02-13 17:02:00 -06:00
Dzmitry Shylovich
1cfbefebe3 fix(platform-browser): should not throw for debug attrs containing $ ()
Closes 

PR Close 
2017-02-10 15:03:05 -06:00
Tobias Bosch
baa654a234 feat(compiler): integrate compiler with view engine - main integration tests work ()
Part of 

PR Close 
2017-02-10 14:10:03 -06:00
Vikram Subramanian
c4817988ca feat(core): add isStable Observable property to ApplicationRef to indicate when it's stable and unstable ()
PR Close 
2017-02-09 12:07:33 -06:00
Tobias Bosch
24af51a623 fix(core): view engine - fix perf regressions ()
- Make sure `NodeDef`s don’t fall into dictionary mode.
- Use strategy pattern to add debug information / checks, instead of constantly checking for `isDevMode`.
- introduce a very light weight `RendererV2` interface to not have duplicate
  code paths for direct and non direct rendering

The strategy pattern is implemented via the new `Services` object.

Part of 

PR Close 
2017-02-08 14:42:22 -06:00
Miško Hevery
c33fda2607 perf: Don’t subclass Error; resulting in smaller binary ()
Subclassing errors is problematic since Error returns a
new instance. All of the patching which we do than prevent
proper application of source maps.

PR Close 
2017-02-07 19:18:26 -06:00
Tobias Bosch
14d7844b2b feat(core): view engine - integrate with ComponentFactory ()
`ComponentFactory`s can now be created from a `ViewDefinitionFactory` via
`RefFactory.createComponentFactory`.

This commit also:
- splits `Services` into `Refs` and `RootData`
- changes `ViewState` into a bitmask
- implements `ViewContainerRef.move`

Part of 

PR Close 
2017-02-03 15:07:12 -06:00
Tobias Bosch
a05e50fda3 feat(core): view engine - add missing DI features ()
Part of 

PR Close 
2017-02-01 14:16:01 -06:00
Tobias Bosch
45e1e36477 feat(core): view engine - add support for OnPush and detached views. ()
Part of 

PR Close 
2017-02-01 14:15:47 -06:00
Tobias Bosch
08ff67ea11 feat(core): view engine - add WrappedValue support ()
Part of 
2017-02-01 14:15:38 -06:00
Tobias Bosch
0a29574d98 feat(core): view engine - support content projection ()
Part of 

PR Close 
2017-02-01 09:29:51 -06:00
Tobias Bosch
52b21275f4 feat(core): view engine - add debug information ()
Creates debug information for the renderer,
and also reports errors relative to the
declaration place in the template.

Part of 

PR Close 
2017-01-31 16:21:54 -06:00
Dzmitry Shylovich
ff290af38c fix(common): introduce isObservable method ()
Closes 

PR Close 
2017-01-31 12:14:19 -06:00
Dzmitry Shylovich
863285a4b0 fix(core): add bootstrapped modules into platform modules list ()
Closes 

PR Close 
2017-01-29 12:09:46 -06:00
Jason Aden
c37af2af5a refactor(core): simplify ReflectiveInjector by removing code for Dart implementation ()
ReflectiveInjector previously used two strategies for resolving dependencies. These
were to support the Dart implementation, but are no longer needed. A result of this
PR is there is no longer a 20 dependency limit and the generated code is smaller.

PR Close 
2017-01-27 13:22:32 -08:00
Tobias Bosch
f802194c18 refactor(core): have different data types for each node. ()
Also have a new node type for queries.

This leads to less memory usage and better performance.

Deep Tree Benchmark results (depth 11):
- createAndDestroy (view engine vs current codegen):
  * pureScriptTime: 78.80+-4% vs 72.34+-4%
  * scriptTime: 78.80+-4% vs 90.71+-9%
  * gc: 5371.66+-108% vs 9717.53+-174%
  * i.e. faster when gc is also considered and about 2x less memory usage!
- update unchanged

Part of 
PR Close 
2017-01-27 12:08:54 -06:00
Tobias Bosch
1e729d7ba2 feat(core): add query support to view engine
Part of 
closes 
2017-01-25 17:44:56 -08:00
Tobias Bosch
fc8694ed11 refactor(core): view engine, refactor runtime data
Structure in a better way, in preparation for queries.
2017-01-25 17:44:42 -08:00
Tobias Bosch
65417374f1 feat(core): add pure expression support to view engine
Part of 
2017-01-24 10:10:31 -08:00
Tobias Bosch
0adb97bffb feat(core): add event support to view engine
Part of 
2017-01-24 10:10:31 -08:00
Tobias Bosch
2f87eb52fe feat(core): add initial view engine ()
The new view engine allows our codegen to produce less code,
as it can interpret view definitions during runtime.

The view engine is not feature complete yet, but already
allows to implement a tree benchmark based on it.

Part of 
2017-01-20 13:10:57 -08:00
Miško Hevery
d169c2434e feat(core): Add type information to injector.get() ()
- Introduce `InjectionToken<T>` which is a parameterized and type-safe
  version of `OpaqueToken`.

DEPRECATION:
- `OpaqueToken` is now deprecated, use `InjectionToken<T>` instead.
- `Injector.get(token: any, notFoundValue?: any): any` is now deprecated
  use the same method which is now overloaded as
  `Injector.get<T>(token: Type<T>|InjectionToken<T>, notFoundValue?: T): T;`.

Migration
- Replace `OpaqueToken` with `InjectionToken<?>` and parameterize it.
- Migrate your code to only use `Type<?>` or `InjectionToken<?>` as
  injection tokens. Using other tokens will not be supported in the
  future.

BREAKING CHANGE:
- Because `injector.get()` is now parameterize it is possible that code
  which used to work no longer type checks. Example would be if one
  injects `Foo` but configures it as `{provide: Foo, useClass: MockFoo}`.
  The injection instance will be that of `MockFoo` but the type will be
  `Foo` instead of `any` as in the past. This means that it was possible
  to call a method on `MockFoo` in the past which now will fail type
  check. See this example:

```
class Foo {}
class MockFoo extends Foo {
  setupMock();
}

var PROVIDERS = [
  {provide: Foo, useClass: MockFoo}
];

...

function myTest(injector: Injector) {
  var foo = injector.get(Foo);
  // This line used to work since `foo` used to be `any` before this
  // change, it will now be `Foo`, and `Foo` does not have `setUpMock()`.
  // The fix is to downcast: `injector.get(Foo) as MockFoo`.
  foo.setUpMock();
}
```

PR Close 
2017-01-17 15:34:54 -06:00
Victor Berchet
9aeb8c5357 refactor(test): <template>/<ng-container>/*-directives
- remove outer `<div>` in tests,
- use `<ng-container>` instead of `<template>` where possible,
- use *... instead of template (tag or attr) where possible.

Fixes 
2017-01-09 19:33:38 -05:00
Victor Berchet
78f42c7aa1 refactor(Compiler): misc cleanup 2017-01-09 19:32:01 -05:00
Joao Dias
8c7e93bebe fix(core): Add type information to differs
CHANGES:

- Remove unused `onDestroy` method on the `KeyValueDiffer` and
  `IterableDiffer`.

DEPRECATION:

- `CollectionChangeRecord` is renamed to `IterableChangeRecord`.
  `CollectionChangeRecord` is aliased to `IterableChangeRecord` and is
  marked as `@deprecated`. It will be removed in `v5.x.x`.
- Deprecate `DefaultIterableDiffer` as it is private class which
  was erroneously exposed.
- Deprecate `KeyValueDiffers#factories` as it is private field which
  was erroneously exposed.
- Deprecate `IterableDiffers#factories` as it is private field which
  was erroneously exposed.

BREAKING CHANGE:

- `IterableChangeRecord` is now an interface and parameterized on `<V>`.
  This should not be an issue unless your code does
  `new IterableChangeRecord` which it should not have a reason to do.
- `KeyValueChangeRecord` is now an interface and parameterized on `<V>`.
  This should not be an issue unless your code does
  `new IterableChangeRecord` which it should not have a reason to do.

Original PR 

Fixes 
2017-01-09 18:56:34 -05:00
Matias Niemelä
9211a22039 feat(animations): support function types in transitions
Closes 
Closes 
2017-01-06 19:29:46 -05:00
Matias Niemelä
3f67ab074a feat(animations): expose the triggerName within the transition event
Closes 
2017-01-06 19:29:45 -05:00