Commit Graph

16424 Commits

Author SHA1 Message Date
edfaab62bc fix(ivy): inherit static coercion members from base classes (#34296)
For Ivy's template type checker it is possible to let a directive
specify static members to allow a wider type for some input:

```typescript
export class MatSelect {
  @Input() disabled: boolean;

  static ngAcceptInputType_disabled: boolean | string;
}
```

This allows a binding to the `MatSelect.disabled` input to be of type
boolean or string, whereas the `disabled` property itself is only of
type boolean.

Up until now, any static `ngAcceptInputType_*` property was not
inherited for subclasses of a directive class. This is cumbersome, as
the directive's inputs are inherited, so any acceptance member should as
well. To resolve this limitation, this commit extends the flattening of
directive metadata to include the acceptance members.

Fixes #33830
Resolves FW-1759

PR Close #34296
2019-12-10 16:31:24 -08:00
059206b7b7 docs: add change detection to glossary (#34316)
PR Close #34316
2019-12-10 16:30:36 -08:00
74bbe3e413 refactor(ivy): avoid type coercion in saveNameToExportMap function (#34335)
TypeScript 3.7 flags `if` conditions that implicitly coerce a function/method definition. While checking for the `template` presence on a def (actually checking whether we work with Component) in `saveNameToExportMap`, the `if` condition had implicit type coercion. This commit updates the condition to use the `isComponentDef` function (that checks `def.template` against `null` internally) to avoid compilation errors with TypeScript 3.7.

PR Close #34335
2019-12-10 14:06:26 -08:00
46f9201e6f refactor(ivy): pull property read into a constant (#34290)
PR Close #34290
2019-12-10 10:33:20 -08:00
7b59159443 refactor(ivy): prevent -0 from being generated (#34290)
PR Close #34290
2019-12-10 10:33:20 -08:00
b0d5784b63 fix(ivy): handle SafeStyles in [style.prop] correctly (#34286)
Prior to this commit, values wrapped into SafeStyle were not handled correctly in [style.prop] bindings in case style sanitizer is present (when template contains some style props that require sanitization). Style sanitizer was not unwrapping values in case a given prop doesn't require sanitization.As a result, wrapped values were used as final styling values (see https://github.com/angular/angular/blob/master/packages/core/src/render3/styling/bindings.ts#L620). This commit updates the logic to unwrap safe values in sanitizer in case no sanitization is required.

PR Close #34286
2019-12-10 10:32:28 -08:00
7c2bb37e4e refactor(docs-infra): give more descriptive variable name (#34284)
Discussion:
https://github.com/angular/angular/pull/34213#discussion_r353249119

PR Close #34284
2019-12-10 09:18:36 -08:00
8c53de2cce docs: Fix links to Webpack docs (#34326)
The previous link, https://webpack.js.org/configuration/dev-server/#devserver-proxy, doesn't go directly to the proxy section.
PR Close #34326
2019-12-10 09:18:18 -08:00
3b3610164b fix(docs-infra): fix styling of embedded Table-of-Contents (#34312)
This commit fixes the following issues:
- Align text content with caret icon in embedded ToC header.
- Fix display of expand/collapse button at the bottom of embeded ToC.

These were accidentally broken in #32124, while fixing another
ToC-related issue. Some CSS rules in `_toc.scss` (e.g. those for
`.mat-icon` and `ul.toc-list`) were correctly moved out of the
`.toc-inner > button` block, but others (e.g. `&.toc-heading` and
`&.toc-more-items`) should not have been moved outside the
`.toc-inner > button` block.

_Before:_
![toc-styles before](https://user-images.githubusercontent.com/8604205/70441952-00df2380-1a9e-11ea-8fc7-d141cc8c9045.png)

_After:_
![toc-styles after](https://user-images.githubusercontent.com/8604205/70441953-0177ba00-1a9e-11ea-8af8-d497977009ae.png)

Closes #34300

PR Close #34312
2019-12-10 09:17:34 -08:00
0d07d8379b docs: fix broken links (#34311)
PR Close #34311
2019-12-10 09:17:13 -08:00
24d1f9e87c fix(ngcc): fix undecorated child migration when exportAs is present (#34014)
The undecorated child migration creates a synthetic decorator, which
contained `"exportAs": ["exportName"]` as obtained from the metadata of
the parent class. This is a problem, as `exportAs` needs to specified
as a comma-separated string instead of an array. This commit fixes the
bug by transforming the array of export names back to a comma-separated
string.

PR Close #34014
2019-12-09 16:13:10 -08:00
3cd43c1173 fix(ngcc): log Angular error codes correctly (#34014)
Replaces the "TS-99" sequence with just "NG", so that error codes are
logged correctly.

PR Close #34014
2019-12-09 16:13:10 -08:00
599dcd0d85 fix(ngcc): report diagnostics from migrations (#34014)
When ngcc is analyzing synthetically inserted decorators from a
migration, it is typically not expected that any diagnostics are
produced. In the situation where a diagnostic is produced, however, the
diagnostic would not be reported at all. This commit ensures that
diagnostics in migrations are reported.

PR Close #34014
2019-12-09 16:13:10 -08:00
60051ebb59 fix(compiler): switch to modern diagnostic formatting (#34234)
The compiler exports a `formatDiagnostics` function which consumers can use
to print both ts and ng diagnostics. However, this function was previously
using the "old" style TypeScript diagnostics, as opposed to the modern
diagnostic printer which uses terminal colors and prints additional context
information.

This commit updates `formatDiagnostics` to use the modern formatter, plus to
update Ivy's negative error codes to Angular 'NG' errors.

The Angular CLI needs a little more work to use this function for printing
TS diagnostics, but this commit alone should fix Bazel builds as ngc-wrapped
goes through `formatDiagnostics`.

PR Close #34234
2019-12-09 11:37:49 -08:00
e3d829fc66 docs: Adds NgModule into back-ticks (#34302)
PR Close #34302
2019-12-09 11:36:36 -08:00
1347064342 docs(core): add new example for HostListener (#34228)
PR Close #34228
2019-12-09 10:38:02 -08:00
d0160e71f9 refactor(ivy): minor cleanup in the listener instruction (#34255)
PR Close #34255
2019-12-09 10:36:16 -08:00
eb8cd6cb57 docs(forms): fix a punctuation error (#34278)
PR Close #34278
2019-12-09 10:35:04 -08:00
10a33efc3e fix(ivy): align TestBed.overrideProvider with what happens with providers in TestBed providers array (#33769)
In Ivy, if you do:
`TestBed.configureTestingModule({providers: [{provide: Service}]});`
the injector will attempt to inject Service as if it was simply listed
in the providers array like `{providers: [Service]}`
This fixes an inconsistency when similarly providing an override with no
`useValue` or `useFactory`.

PR Close #33769
2019-12-06 13:06:23 -08:00
26dba2180f fix(compiler): ensure localized strings are ES5 compatible for JIT mode (#34265)
Previously the JIT evaluated code for ivy localized strings included
backtick tagged template strings, which are not compatible with ES5
in legacy browsers such as IE 11.

Now the generated code is ES5 compatible.

Fixes #34246

PR Close #34265
2019-12-06 13:03:47 -08:00
24bbcafe78 fix(ivy): do not invoke change detection for destroyed views (#34241)
Prior to this commit, calling change detection for destroyed views resulted in errors being thrown in some cases. This commit adds a check to make sure change detection is invoked for non-destroyed views only.

PR Close #34241
2019-12-06 13:03:09 -08:00
af36bc6ba3 fix(ivy): properly parenthesize ternary expressions when emitted (#34221)
Previously, ternary expressions were emitted as:

condExpr ? trueCase : falseCase

However, this causes problems when ternary operations are nested. In
particular, a template expression of the form:

a?.b ? c : d

would have compiled to:

a == null ? null : a.b ? c : d

The ternary operator is right-associative, so that expression is interpreted
as:

a == null ? null : (a.b ? c : d)

when in reality left-associativity is desired in this particular instance:

(a == null ? null : a.b) ? c : d

This commit adds a check in the expression translator to detect such
left-associative usages of ternaries and to enforce such associativity with
parentheses when necessary.

A test is also added for the template type-checking expression translator,
to ensure it correctly produces right-associative expressions for ternaries
in the user's template.

Fixes #34087

PR Close #34221
2019-12-06 13:01:48 -08:00
6e944acaae build: remove compile build variable (#34280)
Remove the remaining check for compile build variable in the ng_module
rule.  Now that components is no longer relying on this build variable
we can safely remove it from our repository.

We will leave the remaining check for if the compile build variable is
used within our own repo, with plans to remove it in a couple months.
It is being kept in place to ensure that uncommitted local scripts for
our own development that we have locally, kill error as expected if
they still reference the compile build variable.

PR Close #34280
2019-12-06 11:04:22 -08:00
8288f8f0a4 ci: update sha of components repo for components unit test integrations (#34280)
Before updating to remove the compile build variable, we must update
the components unit test integrations to a sha  in the components
repo which no longer relies on the compile build variable.

PR Close #34280
2019-12-06 11:04:21 -08:00
5dcc7e4524 feat(docs-infra): add the ability to expose globals (#34237)
Adds the ability to expose global symbols in the API docs via the `@globalApi` tag. Also supports optionally setting a namespace which will be added to the name automatically (e.g. `foo` will be renamed to `ng.foo`). Relevant APIs should also be exported through the `global.ts` file which will show up under `core/global`.

PR Close #34237
2019-12-06 10:58:10 -08:00
7dfd327099 fix(language-service): Simplify resolution logic in banner (#34262)
Due to a bug in the existing banner, `typescript` module was require-d
instead of reusing the module passed in from tsserver.
This bug is caused by some source files in language-service that imports
`typescript` instead of `typescript/lib/tsserverlibrary`.
This is not an unsupported use case, it's just that when typescript is
resolved in the banner we have to be very careful about which modules to
"require".
The convoluted logic in the banner makes it very hard to detect
anomalies. This commit cleans it up and removes a lot of unneeded code.

This commit also removes `ts` import in typescript_host.ts and use `tss`
instead to make it less confusing.

PR Close #34262
2019-12-06 10:27:31 -08:00
6c70ba7376 docs: edit copy of getting started step 3 (#32820)
PR Close #32820
2019-12-06 10:27:01 -08:00
9a43749854 build(docs-infra): upgrade cli command docs sources to cbe25bfbf (#34268)
Updating [angular#9.0.x](https://github.com/angular/angular/tree/9.0.x) from [cli-builds#9.0.x](https://github.com/angular/cli-builds/tree/9.0.x).

##
Relevant changes in [commit range](128515a6a...cbe25bfbf):

**Modified**
- help/deploy.json

##

PR Close #34268
2019-12-06 10:26:07 -08:00
0e911f87b0 fix(language-service): Remove getExternalFiles() (#34260)
This commit removes the `getExternalFiles()` from the tsserver plugin.
This API is no longer needed now that we do not intend to support
external templates under the plugin mode.
Instead, the external files are added to the project only when they are
opened by the user.
For complete discussion, see https://github.com/angular/vscode-ng-language-service/issues/473

PR closes https://github.com/angular/vscode-ng-language-service/issues/469
PR closes https://github.com/angular/vscode-ng-language-service/issues/473

PR Close #34260
2019-12-05 13:13:21 -08:00
99745009a8 refactor(language-service): refactor the method TypeWrapper.name and PipeSymbol.selectSignature (#34177)
PR Close #34177
2019-12-05 13:12:45 -08:00
46393379e1 fix(language-service): apply suggestion (#34177)
PR Close #34177
2019-12-05 13:12:45 -08:00
b4680a64c5 fix(language-service): return the js primitive type name (#34177)
PR Close #34177
2019-12-05 13:12:45 -08:00
72a5a8cab7 fix(language-service): bug of accessing a string index signature using dot notation (#34177)
PR Close #34177
2019-12-05 13:12:45 -08:00
5f0703de16 perf: rename index to index_aot (#34258)
The renaming is needed so that js-web-frameworks benchmark test works
inside google.

PR Close #34258
2019-12-05 13:10:49 -08:00
178016b69e build: Enable ivy in google3 if ng_module attr is True (#34238)
This commit creates a way for `ng_module` rule to compile with Ivy based
on the `ivy` attribute. This enables google3 targets to pick the
compiler without using `define` flags.

PR Close #34238
2019-12-05 13:09:44 -08:00
ab85c39589 build: set upper version limit for yarn to <2 (#34236)
Rather than bumping up the allowed version of yarn on each release
we should instead just allow for anything within the major version
1 range.

PR Close #34236
2019-12-05 13:07:42 -08:00
50e115e609 fix(docs-infra): make header full-width and panels full-width on mobile screens (#34188)
On events page the header was not able to take full width when body exceeds viewport width of the screen So made the below body go overflow-x auto and resources page was taking 80% of the width which is okay on desktop but on mobile it should take 100% width put a media quer for it.

Fixes #34163

PR Close #34188
2019-12-05 13:06:37 -08:00
5aeb16f422 docs: fix migrations formatting (#33267)
PR Close #33267
2019-12-05 13:06:02 -08:00
81c8b83a8f docs: add David Shevitz to about page (#34222)
PR Close #34222
2019-12-05 11:20:00 -08:00
b4600cadbf ci: update saucelabs to use angular-framework account (#34233)
Currently all saucelabs usage in our repos is done using the same
account angular-ci.  By migrating to use individual accounts
for each repo, we can better track the usage for each repo as well
as providing concurrency limiting on a per repo basis.

Additionally, we no longer use two separate accounts based on being
on master or a PR branch, so this logic can be removed.

PR Close #34233
2019-12-05 10:21:43 -08:00
83ccaa6cec build: update to rules_nodejs 0.42.2 (#34243)
This release brings two bug fixes we're waiting on:
1) fix(builtin): additional_root_paths in pkg_web should also include paths in genfiles and bin dirs (https://github.com/bazelbuild/rules_nodejs/pull/1402), which is a pre-req for https://github.com/angular/angular/pull/34112
2) fix(typescript): fix for cross platform ts_devserver issue #1409 (https://github.com/bazelbuild/rules_nodejs/pull/1413) which resolves ts_devserver launcher template is platform specific #1409 (https://github.com/bazelbuild/rules_nodejs/issues/1409) --- this fixes an OSX developer workflow with --config=remote

This does not upgrade integration/bazel or integation/schematics. That will be done in another PR.

PR Close #34243
2019-12-05 10:20:32 -08:00
b5f2824913 build(docs-infra): upgrade cli command docs sources to 128515a6a (#34251)
Updating [angular#9.0.x](https://github.com/angular/angular/tree/9.0.x) from [cli-builds#9.0.x](https://github.com/angular/cli-builds/tree/9.0.x).

##
Relevant changes in [commit range](1dcc727ab...128515a6a):

**Modified**
- help/test.json

##

PR Close #34251
2019-12-05 10:14:25 -08:00
f87f011e7c docs: add documentation for server and Ivy without bundleDependencies (#34225)
PR Close #34225
2019-12-05 10:13:58 -08:00
4bf1bdc69a test(ngcc): update ngcc integration test dependencies (#34212)
This commit updates `@angular/material` and `@angular/cdk` to the
latest release candidate. Doing so exposed a bug in ngcc, which is fixed
by the preceding commit. Also the layout of these libraries changed, so
the checks in the integration test need a bit of tweaking.

PR Close #34212
2019-12-05 10:13:03 -08:00
69dd516666 fix(ngcc): ensure that bundle rootDir is the package path (#34212)
Previously the `rootDir` was set to the entry-point path but
this is incorrect if the source files are stored in a directory outside
the entry-point path. This is the case in the latest versions of the
Angular CDK.

Instead the `rootDir` should be the containing package path, which is
guaranteed to include all the source for the entry-point.

---

A symptom of this is an error when ngcc is trying to process the source of
an entry-point format after the entry-point's typings have already been
processed by a previous processing run.

During processing the `_toR3Reference()` function gets called which in turn
makes a call to `ReflectionHost.getDtsDeclaration()`. If the typings files
are also being processed this returns the node from the dts typings files.

But if we have already processed the typings files and are now processing
only an entry-point format without typings, the call to
`ReflectionHost.getDtsDeclaration()` returns `null`.

When this value is `null`, a JS `valueRef` is passed through as the DTS
`typeRef` to the `ReferenceEmitter`. In this case, the `ReferenceEmitter`
fails during `emit()` because no `ReferenceEmitStrategy` is able to provide
an emission:

1) The `LocalIdentifierStrategy` is not able help because in this case
`ImportMode` is `ForceNewImport`.
2) The `LogicalProjectStrategy` cannot find the JS file below the `rootDir`.

The second strategy failure is fixed by this PR.

Fixes https://github.com/angular/ngcc-validation/issues/495

PR Close #34212
2019-12-05 10:13:03 -08:00
aa2b5789a2 fix(docs-infra): add deprecated-api-item class to remaining deprecated items (#34192)
Fixes #31455

PR Close #34192
2019-12-05 10:12:11 -08:00
a97d2c06c5 docs: update Angular books list (#34062)
PR Close #34062
2019-12-05 10:11:26 -08:00
a616c429ab docs: edit copy of getting started step 2 (#32776)
PR Close #32776
2019-12-05 10:10:40 -08:00
1183075d16 Revert "fix(common): update closure locales to include directionality data (#34240)"
This reverts commit a02bde74d2.
2019-12-04 15:07:33 -08:00
a02bde74d2 fix(common): update closure locales to include directionality data (#34240)
When directionality data was added to @angular/common locales, only
the externally used locales were updated.  We need to additionally
update the closure locales which are synced into google3.

PR Close #34240
2019-12-04 15:04:18 -08:00