130 Commits

Author SHA1 Message Date
Joey Perrott
d1ea1f4c7f build: update license headers to reference Google LLC ()
Update the license headers throughout the repository to reference Google LLC
rather than Google Inc, for the required license headers.

PR Close 
2020-05-26 14:26:58 -04:00
Matias Niemelä
420b9be1c1 refactor: disable sanitization for [style] and [style.prop] bindings ()
This patch is the first of many commits to disable sanitization for
[stlye.prop] and [style] bindings in Angular.

Historically, style-based sanitization has only been required for old
IE browsers (IE6 and IE7). Since Angular does not support these old
browsers at all, there is no reason for the framework to support
style-based sanitization.

PR Close 
2020-05-06 15:00:22 -07:00
Joey Perrott
698b0288be build: reformat repo to new clang@1.4.0 ()
PR Close 
2020-04-14 12:08:36 -07:00
Rado Kirov
294e56d529 refactor(platform-browser): Hoist functions to workaround optimization bug. ()
Technically, function definitions can live anywhere because they are
hoisted. However, in this case Closure optimizations break when exported
function definitions are referred in another static object that is
exported.

The bad pattern is:
```
exports const obj = {f};
export function f() {...}
```

which turns to the following in Closure's module system:
```
goog.module('m');

exports.obj = {f};

function f() {...}
exports.f = f;
```

which badly optimizes to (note module objects are collapsed)
```
var b = a; var a = function() {...};  // now b is undefined.
```

This is an optimizer bug and should be fixed in Closure, but in the
meantime this change is a noop and will unblock other changes we want to
make.

PR Close 
2020-02-25 13:12:27 -08:00
Andrew Kushnir
ae0253f34a fix(ivy): set namespace for host elements of dynamically created components ()
Prior to this change, element namespace was not set for host elements of dynamically created components that resulted in incorrect rendering in a browser. This commit adds the logic to pick and set correct namespace for host element when component is created dynamically.

PR Close 
2020-02-07 17:22:53 -08:00
George Kalpakas
669df70da5 fix(ivy): ensure DebugNode/DebugElement are tree-shakeable in Ivy ()
There are different `DebugNode`/`DebugElement` implementations (and
associated helper functions) for ViewEngine and Ivy. Additionally, these
classes/functions, which are defined inside the `core` package, are
imported by the `platform-browser` package.

Previously, this code was not tree-shaken as expected in Ivy. 
partially addressed the issue, but only for the case where `core` and
`platform-browser` end up in the same closure after webpack's scope
hoisting. In cases where this is not the case, our webpack/terser based
tooling is not capable of tree-shaking it.

This commit fixes the problem, by ensuring that the code retained in Ivy
mode (due to the cross-package import) does not unnecessarily reference
`DebugNode`/`DebugElement`, allowing the code to be tree-shaken away.
This results in a 7.6KB reduction in the size of the main angular.io
bundle.

Jira issue: [FW-1802](https://angular-team.atlassian.net/browse/FW-1802)

PR Close 
2020-01-28 15:57:57 -08:00
George Kalpakas
9e351b8fe1 refactor: remove unused imports ()
PR Close 
2020-01-28 15:57:57 -08:00
Andrew Scott
32b72f39f0 fix(ivy): ensure eventListeners added outside angular context are not called... ()
by DebugElement.triggerEventHandler. ZoneJS tracks the eventListeners on
a node but we need to be able to differentiate between those added by
Angular and those that were added outside the Angular context. This fix
aligns with the behavior that was present in View Engine (not calling
those listeners). If we decide later that we want to call those
listeners, we still need a way to differentiate between those that
we have wrapped in dom_renderer and those that were not (because they
were added outside the Angular context).

PR Close 
2020-01-22 15:38:13 -08:00
Pete Bacon Darwin
e511bfcab5 fix(ivy): ensure that the correct document is available ()
Most of the use of `document` in the framework is within
the DI so they just inject the `DOCUMENT` token and are done.

Ivy is special because it does not rely upon the DI and must
get hold of the document some other way. There are a limited
number of places relevant to ivy that currently consume a global
document object.

The solution is modelled on the `LOCALE_ID` approach, which has
`getLocaleId()` and `setLocaleId()` top-level functions for ivy (see
`core/src/render3/i18n.ts`).  In the rest of Angular (i.e. using DI) the
`LOCALE_ID` token has a provider that also calls setLocaleId() to
ensure that ivy has the same value.

This commit defines `getDocument()` and `setDocument() `top-level
functions for ivy. Wherever ivy needs the global `document`, it calls
`getDocument()` instead.  Each of the platforms (e.g. Browser, Server,
WebWorker) have providers for `DOCUMENT`. In each of those providers
they also call `setDocument()` accordingly.

Fixes 

PR Close 
2019-11-11 14:01:04 -08:00
JiaLiPassion
d8be830fce fix: resolve event listeners not correct when registered outside of ngZone ()
Close .

PR Close 
2019-11-11 14:00:31 -08:00
JiaLiPassion
53d13c3fc6 refactor: rename unpatched event flag in Zone from BLACK_LISTED_EVENTS to UNPATCHED_EVENTS ()
Closes 

PR Close 
2019-10-04 08:44:58 -07:00
Filipe Silva
5f095a501e fix(core): initialize global ngDevMode without toplevel side effects ()
Fix 

PR Close 
2019-09-11 20:31:14 -04:00
Pawel Kozlowski
72807101ed perf(ivy): check for animation synthetic props in dev mode only ()
PR Close 
2019-09-10 14:16:55 -04:00
Kara Erickson
89434e09c2 refactor(core): move Meta methods that only have one version from DomAdapter ()
PR Close 
2019-09-03 11:59:39 -07:00
Kara Erickson
1a7c79746d refactor(core): move misc methods that only have one version from DomAdapter ()
PR Close 
2019-09-03 11:59:39 -07:00
Kara Erickson
c207ad80fd refactor(core): move DomAdapter style methods to ServerRenderer ()
PR Close 
2019-09-03 11:59:39 -07:00
Kara Erickson
970b58b13f refactor(core): move server-only DomAdapter methods into ServerRenderer ()
PR Close 
2019-09-03 11:59:39 -07:00
Misko Hevery
1537791f06 perf(core): Make PlatformLocation tree-shakable ()
Convert `PlatformLocation` into a tree-shakable provider.

PR Close 
2019-08-29 21:51:56 -07:00
Misko Hevery
77c382ccba feat(core): Adds DI support for providedIn: 'platform'|'any' ()
Extend the vocabulary of the `providedIn` to also include  `'platform'` and `'any'`` scope.
```
@Injectable({
  providedId: 'platform', // tree shakable injector for platform injector
})
class MyService {...}
```

PR Close 
2019-08-29 21:51:56 -07:00
Misko Hevery
8a47b48912 refactor: Move dom_adapter.ts to @angular/common ()
This work is needed in preparation for turning tokens into tree-shakable injectables.

PR Close 
2019-08-29 21:51:56 -07:00
George Kalpakas
cc288aec3d docs(platform-browser): remove redundant JSDoc tag from BROWSER_SANITIZATION_PROVIDERS__POST_R3__ ()
The JSDoc tag was introduced in  and was not intentional according
to [this discussion on Slack][1].

[1]: https://angular-team.slack.com/archives/CHB51S90D/p1566322373094100?thread_ts=1566292123.093500&cid=CHB51S90D

PR Close 
2019-08-28 21:34:42 -07:00
Kara Erickson
b094936d72 refactor(core): remove more misc unused utilities from DomAdapters ()
PR Close 
2019-08-28 17:10:30 -07:00
Kara Erickson
f3e4cb491e refactor(core): remove testing-only event utilities from DomAdapters ()
PR Close 
2019-08-28 17:10:30 -07:00
Kara Erickson
cb5701f8d9 refactor(core): remove testing-only node getters and invoke() from DomAdapters ()
PR Close 
2019-08-28 17:10:30 -07:00
Kara Erickson
c0680602f9 refactor(core): remove testing-only childNodes() and firstChild() fns from DomAdapters ()
PR Close 
2019-08-28 17:10:30 -07:00
Kara Erickson
30dabdf8fc refactor(core): remove testing-only DOM manipulation utils from DomAdapters ()
PR Close 
2019-08-28 17:10:30 -07:00
Kara Erickson
ede5786d1e refactor(core): remove testing-only style utils from DomAdapters ()
PR Close 
2019-08-28 17:10:29 -07:00
Kara Erickson
cf4b944865 refactor(core): remove misc dom utils from DomAdapters ()
PR Close 
2019-08-26 10:39:09 -07:00
Kara Erickson
28c8b03797 refactor(core): remove shadow dom utility from DomAdapters ()
PR Close 
2019-08-26 10:39:09 -07:00
Kara Erickson
24127a2492 refactor(core): remove misc, completely unused functions from DomAdapter ()
PR Close 
2019-08-26 10:39:09 -07:00
Kara Erickson
bceeeba405 refactor(core): remove animation utilities from DomAdapters ()
PR Close 
2019-08-26 10:39:09 -07:00
Kara Erickson
7bcd42e7be refactor(core): remove cookie and comment testing utilities from DomAdapters ()
PR Close 
2019-08-26 10:39:09 -07:00
Kara Erickson
4908a5cffc refactor(core): remove unused attribute utilities from DomAdapters ()
PR Close 
2019-08-26 10:39:09 -07:00
Kara Erickson
c3f9893d81 refactor(core): remove innerHTML and outerHTML testing utilities from DomAdapters ()
PR Close 
2019-08-26 10:39:09 -07:00
Kara Erickson
de8ebbdfd0 feat(ivy): make Hammer support tree-shakable ()
Currently, it's not possible to tree-shake away the
coordination layer between HammerJS and Angular's
EventManager. This means that you get the HammerJS
support code in your production bundle whether or
not you actually use the library.

This commit removes the Hammer providers from the
default platform_browser providers list and instead
provides them as part of a `HammerModule`. Apps on
Ivy just need to import the `HammerModule` at root
to turn on Hammer support. Otherwise all Hammer code
will tree-shake away. View Engine apps will require
no change.

BREAKING CHANGE

Previously, in Ivy applications, Hammer providers
were included by default. With this commit, apps
that want Hammer support must import `HammerModule`
in their root module.

PR Close 
2019-08-21 11:43:51 -07:00
Miško Hevery
64770571b2 perf: don't create holey arrays ()
Don't use `Array` constructor with the size value (ex. `new Array(5)`) - this will create a `HOLEY_ELEMENTS` array (even if this array is filled in later on!);

https://v8.dev/blog/elements-kinds
https://stackoverflow.com/questions/32054170/how-to-resize-an-array

PR Close 
2019-08-21 08:27:43 -07:00
Miško Hevery
2e4d17f3a9 perf(core): make sanitization tree-shakable in Ivy mode ()
In VE the `Sanitizer` is always available in `BrowserModule` because the VE retrieves it using injection.

In Ivy the injection is optional and we have instructions instead of component definition arrays. The implication of this is that in Ivy the instructions can pull in the sanitizer only when they are working with a property which is known to be unsafe. Because the Injection is optional this works even if no Sanitizer is present. So in Ivy we first use the sanitizer which is pulled in by the instruction, unless one is available through the `Injector` then we use that one instead.

This PR does few things:
1) It makes `Sanitizer` optional in Ivy.
2) It makes `DomSanitizer` tree shakable.
3) It aligns the semantics of Ivy `Sanitizer` with that of the Ivy sanitization rules.
4) It refactors `DomSanitizer` to use same functions as Ivy sanitization for consistency.

PR Close 
2019-08-15 10:30:12 -07:00
Kristiyan Kostadinov
184d270725 fix(ivy): DebugElement.triggerEventHandler not picking up events registered via Renderer2 ()
Fixes Ivy's `DebugElement.triggerEventHandler` to picking up events that have been registered through a `Renderer2`, unlike ViewEngine.

This PR resolves FW-1480.

PR Close 
2019-08-01 10:13:07 -07:00
Paul Gschwendtner
10a1e1974b fix(platform-browser): debug element query predicates not compatible with strictFunctionTypes ()
Currently developers can use the `By` class to construct common
`DebugElement` query predicates. e.g. `By.directive(MyDirective)`.

The `directive()` and `all()` predicates are currently returning
a predicate that works for `DebugElement` nodes. This return type
is too strict since the predicate is not specific to `DebugElement`
instances and can also apply to `DebugNode` instances.

Meaning that developers are currently able to use the `directive()`
predicate when using `queryAllNodes()`. This is a common practice
but will break when the project is compiled with TypeScript's
`--strictFunctionTypes` flag as the `DebugElement` predicate type
is not assignable to predicates for `DebugNode`. In order to make
these predicates usable with `--strictFuntionTypes` enabled, we
adjust the predicate type to reflect what is actually needed for
evaluation of the predicate.

PR Close 
2019-07-18 14:21:26 -07:00
Paul Gschwendtner
18f0c2f1d4 refactor(platform-browser): compatibility with typescript strict flag ()
As part of FW-1265, the `@angular/platform-browser` package is made compatible
with the TypeScript `--strict` flag. Read more about the strict flag [here](https://www.typescriptlang.org/docs/handbook/compiler-options.html)

PR Close 
2019-07-18 14:21:26 -07:00
Misko Hevery
975845596d perf(ivy): use string concatination instead template string ()
PR Close 
2019-05-23 10:30:58 -07:00
Ben Lesh
d7eaae6f22 refactor(ivy): Move instructions back to ɵɵ ()
There is an encoding issue with using delta `Δ`, where the browser will attempt to detect the file encoding if the character set is not explicitly declared on a `<script/>` tag, and Chrome will find the `Δ` character and decide it is window-1252 encoding, which misinterprets the `Δ` character to be some other character that is not a valid JS identifier character

So back to the frog eyes we go.

```
    __
   /ɵɵ\
  ( -- ) - I am ineffable. I am forever.
 _/    \_
/  \  /  \
==  ==  ==
```

PR Close 
2019-05-20 16:37:47 -07:00
Filipe Silva
ac34a1429b refactor: remove toplevel property accesses ()
PR Close 
2019-05-16 12:08:49 -07:00
Ben Lesh
cf86ed7b29 refactor(ivy): migrate ɵɵ prefix back to Δ ()
Now that issues are resolved with Closure compiler, we can move back to our desired prefix of `Δ`.

PR Close 
2019-05-14 16:52:15 -07:00
Kara Erickson
71b8b355a6 fix(ivy): remove debug utilities from ivy production builds ()
Prior to this commit, we were pulling DebugNode and DebugElement
into production builds because BrowserModule automatically pulled
in NgProbe and thus getDebugNode. In Ivy, this is not necessary
because Ivy has its own set of debug utilities. We should use these
existing tools instead of NgProbe.

This commit adds an Ivy switch so we do not pull in NgProbe utilities
when running with Ivy. This saves us ~8KB in prod builds.

PR Close 
2019-04-26 11:04:47 -07:00
Adam Plumer
3a9d2473ca feat: remove deprecated DOCUMENT token from platform-browser ()
PR Close 
2019-04-25 14:40:16 -07:00
Jason Aden
152d99eef0 feat(common): add @angular/common/upgrade package for $location-related APIs ()
AngularJS's `$location` service doesn't have a direct counterpart in Angular. This is largely because the `Location` service in Angular was pulled out of the `Router`, but was not purpose-built to stand on its own.

This commit adds a new `@angular/common/upgrade` package with the beginnings of a new `LocationUpgradeService`. This service will more closely match the API of AngularJS and provide a way to replace the `$location` service from AngularJS.

PR Close 
2019-04-24 13:49:29 -07:00
Jason Aden
b635fe80cc feat(common): add APIs to read component pieces of URL ()
Without this change, the framework doesn't surface URL parts such as hostname, protocol, and port. This makes it difficult to rebuild a complete URL. This change provides new APIs to read these values.

PR Close 
2019-04-24 13:49:29 -07:00
Jason Aden
b44b14368f feat(common): add ability to retrieve the state from Location service ()
Previously there wasn't a way to retrieve `history.state` from the `Location` service. The only time the framework exposed this value was in navigation events. This meant if you weren't using the Angular router, there wasn't a way to get access to this `history.state` value other than going directly to the DOM.

This PR adds an API to retrieve the value of `history.state`. This will be useful and needed to provide a backwards-compatible `Location` service that can emulate AngularJS's `$location` service since we will need to be able to read the state data in order to produce AngularJS location transition events.

This feature will additionally be useful to any application that wants to access state data through Angular rather than going directly to the DOM APIs.

PR Close 
2019-04-24 13:49:28 -07:00
Alex Rickabaugh
b0578061ce refactor(ivy): use ɵɵ instead of Δ for now ()
The `Δ` caused issue with other infrastructure, and we are temporarily
changing it to `ɵɵ`.

This commit also patches ts_api_guardian_test and AIO to understand `ɵɵ`.

PR Close 
2019-04-11 16:27:56 -07:00