Commit Graph

22693 Commits

Author SHA1 Message Date
Dylan Hunn caeb162513 release: cut the v13.2.0-rc.0 release (#44765) 13.2.0-rc.0 2022-01-19 17:36:11 -08:00
Kristiyan Kostadinov ed21f5c753 feat(common): add injector input to ngTemplateOutlet (#44761)
Implements the new `injector` option from #44666 into `ngTemplateOutlet`.

PR Close #44761
2022-01-19 16:47:40 -08:00
Derek Cormier ec1057014b fix(docs-infra): fix date parsing in a flaky test (#44763)
Mock dates in EventsComponent tests are parsed in inconsistent ways
across platforms/browsers, which makes the comparison to the mocked
UTC "now" date behave differently causing the test to fail. This fix
ensures that the mocked "now" date is parsed in the same way as the
test dates to avoid inconsistencies.

PR Close #44763
2022-01-19 16:47:16 -08:00
Doug Parker fa835b5a29 feat(compiler-cli): enable extended diagnostics by default (#44712)
Refs #42966.

Extended diagnostics provide additional analysis about Angular templates by emitting warnings for specific patterns known to be error prone or cause developer confusion. Currently, there are two such diagnostics which are enabled by default:

* `invalidBananaInBox` emits a warning if a user writes a two-way binding backwards like `([foo])="bar"`, when they actually wanted `[(foo)]="bar"`.
* `nullishCoalescingNotNullable` emits a warning if a binding attempts to perform nullish coalescing (`??`) on a type which does not include `null` or `undefined`, such as `{{ foo ?? 'bar' }}` where `foo` is defined as `string` instead of `string | null`.

These diagnostics are enabled as warnings by default, but this can be configured in the `tsconfig.json` like so:

```jsonc
{
  "angularCompilerOptions": {
    "extendedDiagnostics": {
      // The categories to use for specific diagnostics.
      "checks": {
        // Maps check name to its category.
        "invalidBananaInBox": "suppress"
      },

      // The category to use for any diagnostics not listed in `checks` above.
      "defaultCategory": "error"
    }
  }
}
```

Allowed categories for a diagnostic are `warning` (default), `error`, or `suppress`. `warning` emits the diagnostic but allows the compilation to succeed, `error` *will* fail the compilation, while `suppress` will ignore the diagnostic altogether.

The initial release has two diagnostics, and we are hoping to expand this longer term to add more diagnostics and provide additional insight into Angular templates to detect and surface developer mistakes *before* hours of debugging are wasted.

PR Close #44712
2022-01-19 09:58:37 -08:00
Andrew Kushnir 4e95a316ce docs: deprecate unused config options from the CompilerOptions interface (#44749)
DEPRECATED:

Since Ivy, the CompilerOptions.useJit and CompilerOptions.missingTranslation config options are unused, passing them has no effect.

PR Close #44749
2022-01-19 09:42:40 -08:00
Andrew Kushnir 9c11183e74 docs: deprecate CachedResourceLoader and RESOURCE_CACHE_PROVIDER symbols (#44749)
DEPRECATED:

The `CachedResourceLoader` and `RESOURCE_CACHE_PROVIDER` symbols were previously necessary in some cases to test AOT-compiled components with View Engine, but they are no longer needed since Ivy.

PR Close #44749
2022-01-19 09:42:40 -08:00
Andrew Kushnir 9f12e7fea4 docs: deprecate ComponentFactory and ComponentFactoryResolver symbols (#44749)
DEPRECATED:

The `ComponentFactory` and `ComponentFactoryResolver` classes are deprecated. Since Ivy, there is no need to resolve Component factories. Please use other APIs where you Component classes can be used directly (without resolving their factories).

PR Close #44749
2022-01-19 09:42:40 -08:00
Dylan Hunn 2b01e17505 docs: release notes for the v13.1.3 release (#44758)
PR Close #44758
2022-01-19 09:40:37 -08:00
Yousaf Nawaz 34d2292323 docs: update deprecated form of the tap operator in http example (#44738)
update deprecated form of the tap operator. Instead of passing separate callback arguments, use an observer argument. Signatures taking separate callback arguments will be removed in v8. Details: https://rxjs.dev/deprecations/subscribe-arguments

DEPRECATED: tap operator subscribe signature is deprecated

Instead of passing separate callback arguments, use an observer argument. Signatures taking separate callback arguments will be removed in v8. Details: https://rxjs.dev/deprecations/subscribe-arguments

Closes #44708

PR Close #44738
2022-01-19 09:22:02 -08:00
Kristiyan Kostadinov b49ffcd50e feat(core): allow for injector to be specified when creating an embedded view (#44666)
Adds support for passing in an optional injector when creating an embedded view through `ViewContainerRef.createEmbeddedView` and `TemplateRef.createEmbeddedView`. The injector allows for the DI behavior to be customized within the specific template.

Fixes #14935.

PR Close #44666
2022-01-19 09:09:38 -08:00
Dylan Hunn fb27867ab8 Revert "refactor(forms): Move FormControl to an overridden exported constructor. (#44316)" (#44750)
This reverts commit cd5200ea68.

PR Close #44750
2022-01-18 19:54:51 -08:00
Ramesh Thiruchelvam bc03a2e3e3 refactor(core): make the error messages tree shakable (#44359)
Long error messages can be tree-shaken in the production build and replaced with error codes.

See: https://github.com/angular/angular/pull/44219#issuecomment-983216374

PR Close #44359
2022-01-18 17:38:10 -08:00
Dylan Hunn 41b8ecc9b8 refactor(forms): Make a couple small cleanups encountered while rebasing typed forms. (#44748)
These should all be no-ops publicly; they are just small issues encountered during a large rebase to bring typed-forms current.

PR Close #44748
2022-01-18 16:20:21 -08:00
dario-piotrowicz ece530faf5 refactor(animations): change errors type from any to string (#44726)
errors in the animations code are of type `any` but are consistently
used as if there were `string`s, change `any` to `string` to make
typing more accurate

PR Close #44726
2022-01-18 15:52:05 -08:00
Dylan Hunn cd5200ea68 refactor(forms): Move FormControl to an overridden exported constructor. (#44316)
This implementation change was originally proposed as part of Typed Forms, and will have major consequences for that project as described in the design doc. Submitting it separately will greatly simplify the risk of landing Typed Forms. This change should have no visible impact on normal users of FormControl.

See the Typed Forms design doc here: https://docs.google.com/document/d/1cWuBE-oo5WLtwkLFxbNTiaVQGNk8ipgbekZcKBeyxxo.

PR Close #44316
2022-01-18 14:51:53 -08:00
JoostK 1f6249dae8 refactor(compiler): remove directive matching from template compiler (#44731)
The directive matching pass that happens during template compilation is
redundant, since directive matching has already happened during the resolution
phase of ngtsc and only matching declarables are provided to the template
compiler. In JIT mode the declarables only become available after the primary
template compilation has completed, so there is no need to perform directive
matching in both JIT and AOT mode.

PR Close #44731
2022-01-18 14:51:08 -08:00
JoostK dac0430efd refactor(compiler): store modifiers in a bitmask instead of an array (#44731)
This commit slightly reduces memory usage of output AST by storing type
and statement modifiers as a bitmask instead of using an array.

PR Close #44731
2022-01-18 14:51:08 -08:00
JoostK 5efebf87be perf(compiler-cli): reduce analysis work during incremental rebuilds (#44731)
This commit reduces the analysis work that needs to happen during an
incremental rebuild by properly recording files for which no traits were found
in the set of files that have no traits, such that the same file doesn't have
to be reanalyzed during subsequent rebuilds. It also excludes shim files from
analysis.

PR Close #44731
2022-01-18 14:51:08 -08:00
Ramesh Thiruchelvam 4307b82058 refactor(common): make the error messages tree shakable (#44663)
Make Long error messages tree-shakable in the production build with error codes.

fixes #40096

PR Close #44663
2022-01-18 10:31:44 -08:00
AnkitSharma-007 ccb73c0ac8 docs: add Ankit to GDE resources (#44659)
PR Close #44659
2022-01-18 09:25:07 -08:00
Renovate Bot 35345b607c build: update angular (#44728)
PR Close #44728
2022-01-18 09:24:43 -08:00
JoostK b66e479cdb fix(ngcc): support element accesses for export declarations (#44669)
Bundlers like Rollup may use an element access expression for an export
declaration, which causes ngcc to ignore those export declarations possibly
resulting in incomplete processing of packages.

Element access syntax may be used when the declared name is not considered
as valid JS identifier, but bundlers may be conservative in determining whether
an identifier can be used (to emit a property access) and opt for a string
literal in an element access instead.

The element access syntax introduces a problem for ngcc, where it wouldn't
consider such export as class declaration, causing them to be skipped. The
ngtsc compiler is implemented with the assumption that all class declarations
use a `ts.Identifier` as name, whereas the element access is using a string
literal for the declared name. This makes it troublesome for ngcc to support
this syntax form in UMD bundles.

To work around the problem, this function transforms these access expressions
into regular property accesses. The source text is parsed to an AST to allow
finding the element accesses in a robust way, after which the affected text
ranges are replaced with property accesses in the original source text.

Closes #44037

PR Close #44669
2022-01-14 17:43:59 -08:00
shejialuo 6e0481572f docs(docs-infra): change the testing guide due to deprecation (#44674)
The jasmine used in the docs is

```typescript
expect(<variableName>).<matcher>(predicate, failOutput)
```

The new version should be

```typescript
expect(<variableName>).withContext(failOutput).<matcher>(predicate)
```

So, this commit mainly focuses on changing the former to latter with
format below

```typescript
expect(<variableName>)
  .withContext(failOutput)
  .<matcher>(predicate)
```

And for RxJs, see https://rxjs.dev/deprecations/subscribe-arguments.

> For example someone could name functions poorly and confuse the next
reader: `source$.subscribe(doSomething, doSomethingElse, lol)` with that
signature, you have to know unapparent details about subscribe, where
using a partial observer solves that neatly: `source$.subscribe({ next:
doSomething, error: doSomethingElse, complete: lol }`).

This commit also does this conversion.

Last, remove the unused imported `async` from file
`twain.component.marbles.spec.ts`.

PR Close #44674
2022-01-13 12:46:24 -08:00
Dylan Hunn c2da290659 feat(docs-infra): Add a new processor for @overriddenImplementation. (#44689)
This new processor, named `mergeOverriddenImplementation`, allows Dgeni to produce correct documentation for symbols with overridden exported constructors. For example, in the following example, the implementation documentation will be used, including the constructor signature:

```
export const Foo: FooCtor = FooImpl as FooCtor;
```

This is a major improvement over the current situation, in which no constructor signature is documented whatsoever.

PR Close #44689
2022-01-13 12:02:22 -08:00
dario-piotrowicz adc487fb75 fix(animations): apply setStyles to only rootTimelines (#44515)
during keyframe building only consider the root element's timelines
for the style setting, so that the states styles (applied with '*')
can be applied correctly

resolves #32133
resolves #28654

PR Close #44515
2022-01-13 12:01:50 -08:00
Renovate Bot d460e02d9e build: update all non-major dependencies (#44705)
PR Close #44705
2022-01-13 12:01:08 -08:00
Alan Agius f06b0d9d01 test: update integration payload size checks golden file (#44440)
This updates the size checks for Angular CLI version 13.1.3. The increase in size is due to changes in ESBuild.

Before
```js
class bS extends Wl {
  constructor(t, n, r, i) {
    super(t), (this.component = r);
    const o = Is(i + "-" + r.id, r.styles, []);
    n.addStyles(o),
      (this.contentAttr = "_ngcontent-%COMP%".replace(Gl, i + "-" + r.id)),
      (this.hostAttr = "_nghost-%COMP%".replace(Gl, i + "-" + r.id));
  }
  applyToHost(t) {
    super.setAttribute(t, this.hostAttr, "");
  }
  createElement(t, n) {
    const r = super.createElement(t, n);
    return super.setAttribute(r, this.contentAttr, ""), r;
  }
}
```

Now
```js
class ES extends Wl {
  constructor(t, n, r, i) {
    super(t), (this.component = r);
    const o = Is(i + "-" + r.id, r.styles, []);
    n.addStyles(o),
      (this.contentAttr = (function _S(e) {
        return "_ngcontent-%COMP%".replace(Gl, e);
      })(i + "-" + r.id)),
      (this.hostAttr = (function CS(e) {
        return "_nghost-%COMP%".replace(Gl, e);
      })(i + "-" + r.id));
  }
  applyToHost(t) {
    super.setAttribute(t, this.hostAttr, "");
  }
  createElement(t, n) {
    const r = super.createElement(t, n);
    return super.setAttribute(r, this.contentAttr, ""), r;
  }
}
```

PR Close #44440
2022-01-13 18:30:52 +00:00
Renovate Bot 5df46650b5 build: update angular (#44440)
PR Close #44440
2022-01-13 18:30:52 +00:00
Łukasz Holeczek 3517e51ab5 docs: add CoreUI UI Components Library to the resources list (#44613)
PR Close #44613
2022-01-13 18:27:51 +00:00
Joey Perrott 3c0446cd2d build: update shelljs dependencies to "^0.8.5" (#44697)
Update shelljs dependencies to ^0.8.5 to fix a vulnerability reported to shelljs.

PR Close #44697
2022-01-13 18:27:32 +00:00
Daniel Díaz 2189588ff0 docs: remove unnecessary parenthesis in View Encapsulation file (#44702)
PR Close #44702
2022-01-13 18:27:13 +00:00
dario-piotrowicz 432e518931 refactor(elements): remove the createCustomEvent function (#44703)
the createCustomEvent function's pupose is to create customEvents
even on browsers where `CustomEvent` is not a constructor,
`CustomEvent` is currently available in all supported browsers (since
IE11 support has ended), so remove the function as it is no longer
needed

PR Close #44703
2022-01-13 18:26:54 +00:00
Jessica Janiuk 290df4f806 refactor(animations): Remove unnecessary IE specific code (#44686)
There were a few places we were still checking for Internet Explorer. This removes the references throughout the animations package.

PR Close #44686
2022-01-12 20:43:23 +00:00
Andrew Kushnir 57d0ca18e7 ci: add golden files for runtime error codes (#44677)
Runtime error codes in the Core, Common and Forms packages were not included into the `public-api` group reviews. This commit creates the necessary golden files to keep track of further changes in the runtime codes.

This is a followup from https://github.com/angular/angular/pull/44398#issuecomment-1006910976.

PR Close #44677
2022-01-12 20:42:06 +00:00
iRealNirmal c7b210d484 refactor(forms): update email validator to inherit abstractValidator (#44545)
Modified email validator to inherit abstractValidator.

For every validato type different PR will be raised as discussed in #42378.

Closes #42267

PR Close #44545
2022-01-12 20:41:40 +00:00
Dmytro Mezhenskyi c888dfdea0 docs: add Decoded Frontend YT channel to resources list (#44278)
PR Close #44278
2022-01-12 20:41:17 +00:00
Andrew Scott 42ce3ac008 release: cut the v13.2.0-next.2 release (#44701) 13.2.0-next.2 2022-01-12 11:21:10 -08:00
Andrew Scott 555a57d505 docs: release notes for the v13.1.2 release (#44699) 2022-01-12 10:55:28 -08:00
wszgrcy e98b8f5879 docs: add miniprogram cross-platform development resource with resources.json (#44646)
PR Close #44646
2022-01-11 22:04:21 +00:00
George Kalpakas de0ae1b36a build(docs-infra): upgrade cli command docs sources to 9ac3df5d1 (#44682)
Updating [angular#master](https://github.com/angular/angular/tree/master) from
[cli-builds#master](https://github.com/angular/cli-builds/tree/master).

##
Relevant changes in
[commit range](https://github.com/angular/cli-builds/compare/481eb4544...9ac3df5d1):

**Modified**
- help/build.json

PR Close #44682
2022-01-11 22:04:01 +00:00
Alex Rickabaugh 92b23f4851 fix(compiler-cli): properly index <svg> elements (#44678)
In the `Element` node of a parsed `<svg>` element, the `name` is recorded
as `:svg:svg`. When the Angular Indexer ran over this element, it would
attempt to find this name in the template text and fail, as the namespace
portion of the name was added automatically at parse time and is of course
missing from the original template.

This commit changes the indexer to detect these namespaced elements and only
search for the tag name.

PR Close #44678
2022-01-11 19:16:18 +00:00
Alex Rickabaugh b8ed03b5ad fix(compiler): correct spans when parsing bindings with comments (#44678)
When parsing a binding with a comment at the end of the expression, the
parser previously had logic to offset the parsed spans by the length of the
comment. This logic seemed not to serve any useful purpose, and instead
resulted in the corruption of the spans. For example, in the expression
`{{foo // comment}}`, the parser would map the parsed `foo` `PropertyRead`
node at the location of the characters 'ent' from the comment suffix.

This commit removes that logic, correcting the parsed spans of such nodes in
the presence of comments. Removing this logic does not seem to have caused
any tests to fail.

PR Close #44678
2022-01-11 19:16:18 +00:00
Alex Rickabaugh f83fb3a5f9 fix(compiler-cli): handle property reads of ThisReceiver in the indexer (#44678)
Previously, the Angular Indexer made an assumption that in any binding to
a property of an `ImplicitReceiver`, the property name begins at the start
of the binding. This is true for normal reads from `ImplicitReceiver` as
the implicit receiver has no representation in the template.

However, `ThisReceiver` inherits from `ImplicitReceiver` and _does_ have a
template representation. Such a binding looks like `{{this.foo}}`. This
commit corrects the logic of the indexer to use the `nameSpan` of the
property binding instead of its `sourceSpan` to locate the identifier.

PR Close #44678
2022-01-11 19:16:18 +00:00
Doug Parker 83e6db4081 refactor(compiler-cli): add validation to extended template diagnostics configuration (#44391)
Refs #42966.

This validates the `tsconfig.json` options for extended template diagnostics. It verifies:
* `strictTemplates` must be enabled if `extendedDiagnostics` have any explicit configuration.
* `extendedDiagnostics.defaultCategory` must be a valid `DiagnosticCategoryLabel`.
* `extendedDiagnostics.checks` keys must all be real diagnostics.
* `extendedDiagnostics.checks` values must all be valid `DiagnosticCategoryLabel`s.

These include new error codes, each of which prints out the exact property that was the issue and what the available options are to fix them.

It does disallow the config:

```json
{
  "angularCompilerOptions": {
    "strictTemplates": false,
    "extendedDiagnostics": {
      "defaultCategory": "suppress"
    }
  }
}
```

Such a configuration is technically valid and could be executed, but will be rejected by this verification logic. There isn't much reason to ever do this, since users could just drop `extendedDiagnostics` altogether and get the intended effect. This is unlikely to be a significant issue for users, so it is considered invalid for now to keep the implementation simple.

PR Close #44391
2022-01-11 17:33:16 +00:00
Doug Parker 9e5ac51f69 refactor(compiler-cli): add defaultCategory option (#44391)
Refs #42966.

The `defaultCategory` option is used for any extended template diagnostics which do not have any specific category specified for them. It defaults to `warning`, since that is the most common behavior expected for users. This provides an easy way for users to promote all diagnostics to errors or suppress all diagnostics.

PR Close #44391
2022-01-11 17:33:16 +00:00
Doug Parker 0cf1322e4f refactor(compiler-cli): use configured diagnostic category when emitting warnings from extended template diagnostics (#44391)
Refs #42966.

This updates `TemplateContext` to include a new `makeTemplateDiagnostic()` function which automatically uses the correct diagnostic category for that check. This makes sure that each diagnostic is emitted with the correct category. It also implicitly passes some known values like `component` and `code` to make the extended template diagnostics a little simpler. Diagnostics which are suppressed are never instantiated at all, which acts as a slight performance optimization since any emitted diagnostics would be ignored anyways.

Unfortunately, diagnostics still have access to `ctx.templateTypeChecker.makeTemplateDiagnostic()` to manually create diagnostics with a different category. Both banana in box and nullish coalescing checks include tests to make sure they respect a manually configured category. This convention should hopefully give a reasonable certainty that new diagnostics will use the correct reporting function, even if that is not strictly enforced.

PR Close #44391
2022-01-11 17:33:16 +00:00
Doug Parker 416368a587 refactor(compiler-cli): add initial compiler options definitions for extended template diagnostics (#44391)
Refs #42966.

This includes a mapping of extended template diagnostics to their associated diagnostic category. It is generated from the list of diagnostic names, so the list should always be implicitly kept up to date. Usage looks like:

```json
{
  "angularCompilerOptions": {
    "extendedDiagnostics": {
      "checks": {
        "invalidBananaInBox": "error",
        "nullishCoalescingNotNullable": "suppress"
      }
    }
  }
}
```

PR Close #44391
2022-01-11 17:33:16 +00:00
Doug Parker 4033fdf5ca refactor(compiler-cli): add allDiagnosticFactories (#44391)
Refs #42966.

This is a static array of all the 1P extended template diagnostic factories built into the Angular compiler directly. It provides an encapsulated list of all diagnostics rather than requiring users to manually list each one individually.

PR Close #44391
2022-01-11 17:33:16 +00:00
Doug Parker 1446017e4b refactor(compiler-cli): call factories directly from extended template checker (#44391)
Refs #42966.

This moves extended template check factory invocations into the checker itself, where it can provide a more consistent API contract. Factories are called with compiler options and may return a `TemplateCheck` or `undefined` if the current options do not support that check. This allows `nullishCoalescingNotNullable` to disable itself when `strictNullChecks` is disabled without throwing errors. This gives extended template diagnostics a stronger abstraction model to define their behavior with.

PR Close #44391
2022-01-11 17:33:16 +00:00
Doug Parker ed74e3ad61 refactor(compiler-cli): add ExtendedTemplateDiagnosticName and TemplateCheckFactory (#44391)
Refs #42966.

The enum of extended template diagnostic names allows a global registry of first-party diagnostics with a developer-friendly string name which can be used for configuration. This name is used in the new `TemplateCheckFactory` to bind the name to a particular `ErrorCode` and make both available *before* constructing the actual template check, which is necessary to configure it appropriately.

PR Close #44391
2022-01-11 17:33:15 +00:00