@angular/core 11.1.0-next.4 → 11.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/bundles/core-testing.umd.js +2 -2
  2. package/bundles/core-testing.umd.js.map +1 -1
  3. package/bundles/core-testing.umd.min.js +2 -2
  4. package/bundles/core-testing.umd.min.js.map +1 -1
  5. package/bundles/core.umd.js +475 -342
  6. package/bundles/core.umd.js.map +1 -1
  7. package/bundles/core.umd.min.js +123 -124
  8. package/bundles/core.umd.min.js.map +1 -1
  9. package/core.d.ts +227 -144
  10. package/core.metadata.json +1 -1
  11. package/esm2015/core.js +33 -33
  12. package/esm2015/src/compiler/compiler_facade_interface.js +1 -1
  13. package/esm2015/src/core_render3_private_export.js +2 -2
  14. package/esm2015/src/di/injector_compatibility.js +39 -16
  15. package/esm2015/src/di/interface/injector.js +3 -2
  16. package/esm2015/src/di/metadata.js +22 -6
  17. package/esm2015/src/linker/compiler.js +2 -2
  18. package/esm2015/src/linker/element_ref.js +10 -1
  19. package/esm2015/src/linker/query_list.js +39 -11
  20. package/esm2015/src/linker/view_container_ref.js +2 -2
  21. package/esm2015/src/metadata/di.js +7 -3
  22. package/esm2015/src/metadata/view.js +2 -2
  23. package/esm2015/src/render3/component.js +2 -2
  24. package/esm2015/src/render3/di.js +17 -32
  25. package/esm2015/src/render3/error_code.js +27 -2
  26. package/esm2015/src/render3/index.js +2 -2
  27. package/esm2015/src/render3/instructions/lview_debug.js +24 -4
  28. package/esm2015/src/render3/interfaces/query.js +1 -1
  29. package/esm2015/src/render3/interfaces/view.js +1 -1
  30. package/esm2015/src/render3/jit/directive.js +3 -2
  31. package/esm2015/src/render3/jit/environment.js +1 -3
  32. package/esm2015/src/render3/query.js +28 -54
  33. package/esm2015/src/render3/view_ref.js +23 -12
  34. package/esm2015/src/util/array_utils.js +25 -1
  35. package/esm2015/src/util/dom.js +25 -12
  36. package/esm2015/src/version.js +1 -1
  37. package/esm2015/src/view/query.js +5 -5
  38. package/esm2015/src/view/types.js +1 -1
  39. package/esm2015/src/view/view.js +3 -2
  40. package/esm2015/testing/src/fake_async.js +2 -2
  41. package/fesm2015/core.js +422 -293
  42. package/fesm2015/core.js.map +1 -1
  43. package/fesm2015/testing.js +2 -2
  44. package/fesm2015/testing.js.map +1 -1
  45. package/package.json +1 -1
  46. package/schematics/migrations/static-queries/index.js +3 -8
  47. package/src/r3_symbols.d.ts +1 -2
  48. package/testing/testing.d.ts +1 -1
  49. package/testing.d.ts +1 -1
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v11.1.0-next.4
2
+ * @license Angular v11.1.1
3
3
  * (c) 2010-2020 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -379,7 +379,8 @@
379
379
  * found in the LICENSE file at https://angular.io/license
380
380
  */
381
381
  (function (InjectFlags) {
382
- // TODO(alxhub): make this 'const' when ngc no longer writes exports of it into ngfactory files.
382
+ // TODO(alxhub): make this 'const' (and remove `InternalInjectFlags` enum) when ngc no longer
383
+ // writes exports of it into ngfactory files.
383
384
  /** Check self and check parent injector if needed */
384
385
  InjectFlags[InjectFlags["Default"] = 0] = "Default";
385
386
  /**
@@ -565,7 +566,7 @@
565
566
  * Use Shadow DOM to encapsulate styles.
566
567
  *
567
568
  * For the DOM this means using modern [Shadow
568
- * DOM](https://w3c.github.io/webcomponents/spec/shadow/) and
569
+ * DOM](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM) and
569
570
  * creating a ShadowRoot for Component's Host Element.
570
571
  */
571
572
  ViewEncapsulation[ViewEncapsulation["ShadowDom"] = 3] = "ShadowDom";
@@ -1568,6 +1569,10 @@
1568
1569
  * Use of this source code is governed by an MIT-style license that can be
1569
1570
  * found in the LICENSE file at https://angular.io/license
1570
1571
  */
1572
+ // Base URL for the error details page.
1573
+ // Keep this value in sync with a similar const in
1574
+ // `packages/compiler-cli/src/ngtsc/diagnostics/src/error_code.ts`.
1575
+ var ERROR_DETAILS_PAGE_BASE_URL = 'https://angular.io/errors';
1571
1576
  var RuntimeError = /** @class */ (function (_super) {
1572
1577
  __extends(RuntimeError, _super);
1573
1578
  function RuntimeError(code, message) {
@@ -1577,10 +1582,31 @@
1577
1582
  }
1578
1583
  return RuntimeError;
1579
1584
  }(Error));
1585
+ // Contains a set of error messages that have details guides at angular.io.
1586
+ // Full list of available error guides can be found at https://angular.io/errors
1587
+ /* tslint:disable:no-toplevel-property-access */
1588
+ var RUNTIME_ERRORS_WITH_GUIDES = new Set([
1589
+ "100" /* EXPRESSION_CHANGED_AFTER_CHECKED */,
1590
+ "200" /* CYCLIC_DI_DEPENDENCY */,
1591
+ "201" /* PROVIDER_NOT_FOUND */,
1592
+ "300" /* MULTIPLE_COMPONENTS_MATCH */,
1593
+ "301" /* EXPORT_NOT_FOUND */,
1594
+ ]);
1595
+ /* tslint:enable:no-toplevel-property-access */
1580
1596
  /** Called to format a runtime error */
1581
1597
  function formatRuntimeError(code, message) {
1582
1598
  var fullCode = code ? "NG0" + code + ": " : '';
1583
- return "" + fullCode + message;
1599
+ var errorMessage = "" + fullCode + message;
1600
+ // Some runtime errors are still thrown without `ngDevMode` (for example
1601
+ // `throwProviderNotFoundError`), so we add `ngDevMode` check here to avoid pulling
1602
+ // `RUNTIME_ERRORS_WITH_GUIDES` symbol into prod bundles.
1603
+ // TODO: revisit all instances where `RuntimeError` is thrown and see if `ngDevMode` can be added
1604
+ // there instead to tree-shake more devmode-only code (and eventually remove `ngDevMode` check
1605
+ // from this code).
1606
+ if (ngDevMode && RUNTIME_ERRORS_WITH_GUIDES.has(code)) {
1607
+ errorMessage = errorMessage + ". Find more at " + ERROR_DETAILS_PAGE_BASE_URL + "/NG0" + code;
1608
+ }
1609
+ return errorMessage;
1584
1610
  }
1585
1611
 
1586
1612
  /**
@@ -3298,6 +3324,12 @@
3298
3324
  */
3299
3325
  var BLOOM_SIZE = 256;
3300
3326
  var BLOOM_MASK = BLOOM_SIZE - 1;
3327
+ /**
3328
+ * The number of bits that is represented by a single bloom bucket. JS bit operations are 32 bits,
3329
+ * so each bucket represents 32 distinct tokens which accounts for log2(32) = 5 bits of a bloom hash
3330
+ * number.
3331
+ */
3332
+ var BLOOM_BUCKET_BITS = 5;
3301
3333
  /** Counter used to generate unique IDs for directives. */
3302
3334
  var nextNgElementId = 0;
3303
3335
  /**
@@ -3324,25 +3356,15 @@
3324
3356
  }
3325
3357
  // We only have BLOOM_SIZE (256) slots in our bloom filter (8 buckets * 32 bits each),
3326
3358
  // so all unique IDs must be modulo-ed into a number from 0 - 255 to fit into the filter.
3327
- var bloomBit = id & BLOOM_MASK;
3359
+ var bloomHash = id & BLOOM_MASK;
3328
3360
  // Create a mask that targets the specific bit associated with the directive.
3329
3361
  // JS bit operations are 32 bits, so this will be a number between 2^0 and 2^31, corresponding
3330
3362
  // to bit positions 0 - 31 in a 32 bit integer.
3331
- var mask = 1 << bloomBit;
3332
- // Use the raw bloomBit number to determine which bloom filter bucket we should check
3333
- // e.g: bf0 = [0 - 31], bf1 = [32 - 63], bf2 = [64 - 95], bf3 = [96 - 127], etc
3334
- var b7 = bloomBit & 0x80;
3335
- var b6 = bloomBit & 0x40;
3336
- var b5 = bloomBit & 0x20;
3337
- var tData = tView.data;
3338
- if (b7) {
3339
- b6 ? (b5 ? (tData[injectorIndex + 7] |= mask) : (tData[injectorIndex + 6] |= mask)) :
3340
- (b5 ? (tData[injectorIndex + 5] |= mask) : (tData[injectorIndex + 4] |= mask));
3341
- }
3342
- else {
3343
- b6 ? (b5 ? (tData[injectorIndex + 3] |= mask) : (tData[injectorIndex + 2] |= mask)) :
3344
- (b5 ? (tData[injectorIndex + 1] |= mask) : (tData[injectorIndex] |= mask));
3345
- }
3363
+ var mask = 1 << bloomHash;
3364
+ // Each bloom bucket in `tData` represents `BLOOM_BUCKET_BITS` number of bits of `bloomHash`.
3365
+ // Any bits in `bloomHash` beyond `BLOOM_BUCKET_BITS` indicate the bucket offset that the mask
3366
+ // should be written to.
3367
+ tView.data[injectorIndex + (bloomHash >> BLOOM_BUCKET_BITS)] |= mask;
3346
3368
  }
3347
3369
  /**
3348
3370
  * Creates (or gets an existing) injector for a given element or container.
@@ -3838,21 +3860,10 @@
3838
3860
  // JS bit operations are 32 bits, so this will be a number between 2^0 and 2^31, corresponding
3839
3861
  // to bit positions 0 - 31 in a 32 bit integer.
3840
3862
  var mask = 1 << bloomHash;
3841
- var b7 = bloomHash & 0x80;
3842
- var b6 = bloomHash & 0x40;
3843
- var b5 = bloomHash & 0x20;
3844
- // Our bloom filter size is 256 bits, which is eight 32-bit bloom filter buckets:
3845
- // bf0 = [0 - 31], bf1 = [32 - 63], bf2 = [64 - 95], bf3 = [96 - 127], etc.
3846
- // Get the bloom filter value from the appropriate bucket based on the directive's bloomBit.
3847
- var value;
3848
- if (b7) {
3849
- value = b6 ? (b5 ? injectorView[injectorIndex + 7] : injectorView[injectorIndex + 6]) :
3850
- (b5 ? injectorView[injectorIndex + 5] : injectorView[injectorIndex + 4]);
3851
- }
3852
- else {
3853
- value = b6 ? (b5 ? injectorView[injectorIndex + 3] : injectorView[injectorIndex + 2]) :
3854
- (b5 ? injectorView[injectorIndex + 1] : injectorView[injectorIndex]);
3855
- }
3863
+ // Each bloom bucket in `injectorView` represents `BLOOM_BUCKET_BITS` number of bits of
3864
+ // `bloomHash`. Any bits in `bloomHash` beyond `BLOOM_BUCKET_BITS` indicate the bucket offset
3865
+ // that should be used.
3866
+ var value = injectorView[injectorIndex + (bloomHash >> BLOOM_BUCKET_BITS)];
3856
3867
  // If the bloom filter value has the bit corresponding to the directive's bloomBit flipped on,
3857
3868
  // this injector is a potential match.
3858
3869
  return !!(value & mask);
@@ -4205,6 +4216,10 @@
4205
4216
  * @deprecated Since 9.0.0. With Ivy, this property is no longer necessary.
4206
4217
  */
4207
4218
  var ANALYZE_FOR_ENTRY_COMPONENTS = new InjectionToken('AnalyzeForEntryComponents');
4219
+ // Stores the default value of `emitDistinctChangesOnly` when the `emitDistinctChangesOnly` is not
4220
+ // explicitly set. This value will be changed to `true` in v12.
4221
+ // TODO(misko): switch the default in v12 to `true`. See: packages/compiler/src/core.ts
4222
+ var emitDistinctChangesOnlyDefaultValue = false;
4208
4223
  /**
4209
4224
  * Base class for query metadata.
4210
4225
  *
@@ -4222,7 +4237,7 @@
4222
4237
  }());
4223
4238
  var ɵ0$1 = function (selector, data) {
4224
4239
  if (data === void 0) { data = {}; }
4225
- return (Object.assign({ selector: selector, first: false, isViewQuery: false, descendants: false }, data));
4240
+ return (Object.assign({ selector: selector, first: false, isViewQuery: false, descendants: false, emitDistinctChangesOnly: emitDistinctChangesOnlyDefaultValue }, data));
4226
4241
  };
4227
4242
  /**
4228
4243
  * ContentChildren decorator and metadata.
@@ -4247,7 +4262,7 @@
4247
4262
  var ContentChild = makePropDecorator('ContentChild', ɵ1, Query);
4248
4263
  var ɵ2 = function (selector, data) {
4249
4264
  if (data === void 0) { data = {}; }
4250
- return (Object.assign({ selector: selector, first: false, isViewQuery: true, descendants: true }, data));
4265
+ return (Object.assign({ selector: selector, first: false, isViewQuery: true, descendants: true, emitDistinctChangesOnly: emitDistinctChangesOnlyDefaultValue }, data));
4251
4266
  };
4252
4267
  /**
4253
4268
  * ViewChildren decorator and metadata.
@@ -4353,6 +4368,30 @@
4353
4368
  arr.push(items[i]);
4354
4369
  }
4355
4370
  }
4371
+ /**
4372
+ * Determines if the contents of two arrays is identical
4373
+ *
4374
+ * @param a first array
4375
+ * @param b second array
4376
+ * @param identityAccessor Optional function for extracting stable object identity from a value in
4377
+ * the array.
4378
+ */
4379
+ function arrayEquals(a, b, identityAccessor) {
4380
+ if (a.length !== b.length)
4381
+ return false;
4382
+ for (var i = 0; i < a.length; i++) {
4383
+ var valueA = a[i];
4384
+ var valueB = b[i];
4385
+ if (identityAccessor) {
4386
+ valueA = identityAccessor(valueA);
4387
+ valueB = identityAccessor(valueB);
4388
+ }
4389
+ if (valueB !== valueA) {
4390
+ return false;
4391
+ }
4392
+ }
4393
+ return true;
4394
+ }
4356
4395
  /**
4357
4396
  * Flattens an array.
4358
4397
  */
@@ -4935,42 +4974,237 @@
4935
4974
  * Use of this source code is governed by an MIT-style license that can be
4936
4975
  * found in the LICENSE file at https://angular.io/license
4937
4976
  */
4938
- var ɵ0$2 = function (token) { return ({ token: token }); };
4977
+ var _THROW_IF_NOT_FOUND = {};
4978
+ var THROW_IF_NOT_FOUND = _THROW_IF_NOT_FOUND;
4979
+ /*
4980
+ * Name of a property (that we patch onto DI decorator), which is used as an annotation of which
4981
+ * InjectFlag this decorator represents. This allows to avoid direct references to the DI decorators
4982
+ * in the code, thus making them tree-shakable.
4983
+ */
4984
+ var DI_DECORATOR_FLAG = '__NG_DI_FLAG__';
4985
+ var NG_TEMP_TOKEN_PATH = 'ngTempTokenPath';
4986
+ var NG_TOKEN_PATH = 'ngTokenPath';
4987
+ var NEW_LINE = /\n/gm;
4988
+ var NO_NEW_LINE = 'ɵ';
4989
+ var SOURCE = '__source';
4990
+ var ɵ0$2 = getClosureSafeProperty;
4991
+ var USE_VALUE = getClosureSafeProperty({ provide: String, useValue: ɵ0$2 });
4992
+ /**
4993
+ * Current injector value used by `inject`.
4994
+ * - `undefined`: it is an error to call `inject`
4995
+ * - `null`: `inject` can be called but there is no injector (limp-mode).
4996
+ * - Injector instance: Use the injector for resolution.
4997
+ */
4998
+ var _currentInjector = undefined;
4999
+ function setCurrentInjector(injector) {
5000
+ var former = _currentInjector;
5001
+ _currentInjector = injector;
5002
+ return former;
5003
+ }
5004
+ function injectInjectorOnly(token, flags) {
5005
+ if (flags === void 0) { flags = exports.InjectFlags.Default; }
5006
+ if (_currentInjector === undefined) {
5007
+ throw new Error("inject() must be called from an injection context");
5008
+ }
5009
+ else if (_currentInjector === null) {
5010
+ return injectRootLimpMode(token, undefined, flags);
5011
+ }
5012
+ else {
5013
+ return _currentInjector.get(token, flags & exports.InjectFlags.Optional ? null : undefined, flags);
5014
+ }
5015
+ }
5016
+ function ɵɵinject(token, flags) {
5017
+ if (flags === void 0) { flags = exports.InjectFlags.Default; }
5018
+ return (getInjectImplementation() || injectInjectorOnly)(resolveForwardRef(token), flags);
5019
+ }
5020
+ /**
5021
+ * Throws an error indicating that a factory function could not be generated by the compiler for a
5022
+ * particular class.
5023
+ *
5024
+ * This instruction allows the actual error message to be optimized away when ngDevMode is turned
5025
+ * off, saving bytes of generated code while still providing a good experience in dev mode.
5026
+ *
5027
+ * The name of the class is not mentioned here, but will be in the generated factory function name
5028
+ * and thus in the stack trace.
5029
+ *
5030
+ * @codeGenApi
5031
+ */
5032
+ function ɵɵinvalidFactoryDep(index) {
5033
+ var msg = ngDevMode ?
5034
+ "This constructor is not compatible with Angular Dependency Injection because its dependency at index " + index + " of the parameter list is invalid.\nThis can happen if the dependency type is a primitive like a string or if an ancestor of this class is missing an Angular decorator.\n\nPlease check that 1) the type for the parameter at index " + index + " is correct and 2) the correct Angular decorators are defined for this class and its ancestors." :
5035
+ 'invalid';
5036
+ throw new Error(msg);
5037
+ }
5038
+ /**
5039
+ * Injects a token from the currently active injector.
5040
+ *
5041
+ * Must be used in the context of a factory function such as one defined for an
5042
+ * `InjectionToken`. Throws an error if not called from such a context.
5043
+ *
5044
+ * Within such a factory function, using this function to request injection of a dependency
5045
+ * is faster and more type-safe than providing an additional array of dependencies
5046
+ * (as has been common with `useFactory` providers).
5047
+ *
5048
+ * @param token The injection token for the dependency to be injected.
5049
+ * @param flags Optional flags that control how injection is executed.
5050
+ * The flags correspond to injection strategies that can be specified with
5051
+ * parameter decorators `@Host`, `@Self`, `@SkipSef`, and `@Optional`.
5052
+ * @returns True if injection is successful, null otherwise.
5053
+ *
5054
+ * @usageNotes
5055
+ *
5056
+ * ### Example
5057
+ *
5058
+ * {@example core/di/ts/injector_spec.ts region='ShakableInjectionToken'}
5059
+ *
5060
+ * @publicApi
5061
+ */
5062
+ var inject = ɵɵinject;
5063
+ function injectArgs(types) {
5064
+ var args = [];
5065
+ for (var i = 0; i < types.length; i++) {
5066
+ var arg = resolveForwardRef(types[i]);
5067
+ if (Array.isArray(arg)) {
5068
+ if (arg.length === 0) {
5069
+ throw new Error('Arguments array must have arguments.');
5070
+ }
5071
+ var type = undefined;
5072
+ var flags = exports.InjectFlags.Default;
5073
+ for (var j = 0; j < arg.length; j++) {
5074
+ var meta = arg[j];
5075
+ var flag = getInjectFlag(meta);
5076
+ if (typeof flag === 'number') {
5077
+ // Special case when we handle @Inject decorator.
5078
+ if (flag === -1 /* Inject */) {
5079
+ type = meta.token;
5080
+ }
5081
+ else {
5082
+ flags |= flag;
5083
+ }
5084
+ }
5085
+ else {
5086
+ type = meta;
5087
+ }
5088
+ }
5089
+ args.push(ɵɵinject(type, flags));
5090
+ }
5091
+ else {
5092
+ args.push(ɵɵinject(arg));
5093
+ }
5094
+ }
5095
+ return args;
5096
+ }
5097
+ /**
5098
+ * Attaches a given InjectFlag to a given decorator using monkey-patching.
5099
+ * Since DI decorators can be used in providers `deps` array (when provider is configured using
5100
+ * `useFactory`) without initialization (e.g. `Host`) and as an instance (e.g. `new Host()`), we
5101
+ * attach the flag to make it available both as a static property and as a field on decorator
5102
+ * instance.
5103
+ *
5104
+ * @param decorator Provided DI decorator.
5105
+ * @param flag InjectFlag that should be applied.
5106
+ */
5107
+ function attachInjectFlag(decorator, flag) {
5108
+ decorator[DI_DECORATOR_FLAG] = flag;
5109
+ decorator.prototype[DI_DECORATOR_FLAG] = flag;
5110
+ return decorator;
5111
+ }
5112
+ /**
5113
+ * Reads monkey-patched property that contains InjectFlag attached to a decorator.
5114
+ *
5115
+ * @param token Token that may contain monkey-patched DI flags property.
5116
+ */
5117
+ function getInjectFlag(token) {
5118
+ return token[DI_DECORATOR_FLAG];
5119
+ }
5120
+ function catchInjectorError(e, token, injectorErrorName, source) {
5121
+ var tokenPath = e[NG_TEMP_TOKEN_PATH];
5122
+ if (token[SOURCE]) {
5123
+ tokenPath.unshift(token[SOURCE]);
5124
+ }
5125
+ e.message = formatError('\n' + e.message, tokenPath, injectorErrorName, source);
5126
+ e[NG_TOKEN_PATH] = tokenPath;
5127
+ e[NG_TEMP_TOKEN_PATH] = null;
5128
+ throw e;
5129
+ }
5130
+ function formatError(text, obj, injectorErrorName, source) {
5131
+ if (source === void 0) { source = null; }
5132
+ text = text && text.charAt(0) === '\n' && text.charAt(1) == NO_NEW_LINE ? text.substr(2) : text;
5133
+ var context = stringify(obj);
5134
+ if (Array.isArray(obj)) {
5135
+ context = obj.map(stringify).join(' -> ');
5136
+ }
5137
+ else if (typeof obj === 'object') {
5138
+ var parts = [];
5139
+ for (var key in obj) {
5140
+ if (obj.hasOwnProperty(key)) {
5141
+ var value = obj[key];
5142
+ parts.push(key + ':' + (typeof value === 'string' ? JSON.stringify(value) : stringify(value)));
5143
+ }
5144
+ }
5145
+ context = "{" + parts.join(', ') + "}";
5146
+ }
5147
+ return "" + injectorErrorName + (source ? '(' + source + ')' : '') + "[" + context + "]: " + text.replace(NEW_LINE, '\n ');
5148
+ }
5149
+
5150
+ /**
5151
+ * @license
5152
+ * Copyright Google LLC All Rights Reserved.
5153
+ *
5154
+ * Use of this source code is governed by an MIT-style license that can be
5155
+ * found in the LICENSE file at https://angular.io/license
5156
+ */
5157
+ var ɵ0$3 = function (token) { return ({ token: token }); };
4939
5158
  /**
4940
5159
  * Inject decorator and metadata.
4941
5160
  *
4942
5161
  * @Annotation
4943
5162
  * @publicApi
4944
5163
  */
4945
- var Inject = makeParamDecorator('Inject', ɵ0$2);
5164
+ var Inject = attachInjectFlag(
5165
+ // Disable tslint because `DecoratorFlags` is a const enum which gets inlined.
5166
+ // tslint:disable-next-line: no-toplevel-property-access
5167
+ makeParamDecorator('Inject', ɵ0$3), -1 /* Inject */);
4946
5168
  /**
4947
5169
  * Optional decorator and metadata.
4948
5170
  *
4949
5171
  * @Annotation
4950
5172
  * @publicApi
4951
5173
  */
4952
- var Optional = makeParamDecorator('Optional');
5174
+ var Optional =
5175
+ // Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.
5176
+ // tslint:disable-next-line: no-toplevel-property-access
5177
+ attachInjectFlag(makeParamDecorator('Optional'), 8 /* Optional */);
4953
5178
  /**
4954
5179
  * Self decorator and metadata.
4955
5180
  *
4956
5181
  * @Annotation
4957
5182
  * @publicApi
4958
5183
  */
4959
- var Self = makeParamDecorator('Self');
5184
+ var Self =
5185
+ // Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.
5186
+ // tslint:disable-next-line: no-toplevel-property-access
5187
+ attachInjectFlag(makeParamDecorator('Self'), 2 /* Self */);
4960
5188
  /**
4961
5189
  * `SkipSelf` decorator and metadata.
4962
5190
  *
4963
5191
  * @Annotation
4964
5192
  * @publicApi
4965
5193
  */
4966
- var SkipSelf = makeParamDecorator('SkipSelf');
5194
+ var SkipSelf =
5195
+ // Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.
5196
+ // tslint:disable-next-line: no-toplevel-property-access
5197
+ attachInjectFlag(makeParamDecorator('SkipSelf'), 4 /* SkipSelf */);
4967
5198
  /**
4968
5199
  * Host decorator and metadata.
4969
5200
  *
4970
5201
  * @Annotation
4971
5202
  * @publicApi
4972
5203
  */
4973
- var Host = makeParamDecorator('Host');
5204
+ var Host =
5205
+ // Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.
5206
+ // tslint:disable-next-line: no-toplevel-property-access
5207
+ attachInjectFlag(makeParamDecorator('Host'), 1 /* Host */);
4974
5208
 
4975
5209
  /**
4976
5210
  * @license
@@ -5166,162 +5400,6 @@
5166
5400
  componentDefPendingResolution.delete(type);
5167
5401
  }
5168
5402
 
5169
- /**
5170
- * @license
5171
- * Copyright Google LLC All Rights Reserved.
5172
- *
5173
- * Use of this source code is governed by an MIT-style license that can be
5174
- * found in the LICENSE file at https://angular.io/license
5175
- */
5176
- var _THROW_IF_NOT_FOUND = {};
5177
- var THROW_IF_NOT_FOUND = _THROW_IF_NOT_FOUND;
5178
- var NG_TEMP_TOKEN_PATH = 'ngTempTokenPath';
5179
- var NG_TOKEN_PATH = 'ngTokenPath';
5180
- var NEW_LINE = /\n/gm;
5181
- var NO_NEW_LINE = 'ɵ';
5182
- var SOURCE = '__source';
5183
- var ɵ0$3 = getClosureSafeProperty;
5184
- var USE_VALUE = getClosureSafeProperty({ provide: String, useValue: ɵ0$3 });
5185
- /**
5186
- * Current injector value used by `inject`.
5187
- * - `undefined`: it is an error to call `inject`
5188
- * - `null`: `inject` can be called but there is no injector (limp-mode).
5189
- * - Injector instance: Use the injector for resolution.
5190
- */
5191
- var _currentInjector = undefined;
5192
- function setCurrentInjector(injector) {
5193
- var former = _currentInjector;
5194
- _currentInjector = injector;
5195
- return former;
5196
- }
5197
- function injectInjectorOnly(token, flags) {
5198
- if (flags === void 0) { flags = exports.InjectFlags.Default; }
5199
- if (_currentInjector === undefined) {
5200
- throw new Error("inject() must be called from an injection context");
5201
- }
5202
- else if (_currentInjector === null) {
5203
- return injectRootLimpMode(token, undefined, flags);
5204
- }
5205
- else {
5206
- return _currentInjector.get(token, flags & exports.InjectFlags.Optional ? null : undefined, flags);
5207
- }
5208
- }
5209
- function ɵɵinject(token, flags) {
5210
- if (flags === void 0) { flags = exports.InjectFlags.Default; }
5211
- return (getInjectImplementation() || injectInjectorOnly)(resolveForwardRef(token), flags);
5212
- }
5213
- /**
5214
- * Throws an error indicating that a factory function could not be generated by the compiler for a
5215
- * particular class.
5216
- *
5217
- * This instruction allows the actual error message to be optimized away when ngDevMode is turned
5218
- * off, saving bytes of generated code while still providing a good experience in dev mode.
5219
- *
5220
- * The name of the class is not mentioned here, but will be in the generated factory function name
5221
- * and thus in the stack trace.
5222
- *
5223
- * @codeGenApi
5224
- */
5225
- function ɵɵinvalidFactoryDep(index) {
5226
- var msg = ngDevMode ?
5227
- "This constructor is not compatible with Angular Dependency Injection because its dependency at index " + index + " of the parameter list is invalid.\nThis can happen if the dependency type is a primitive like a string or if an ancestor of this class is missing an Angular decorator.\n\nPlease check that 1) the type for the parameter at index " + index + " is correct and 2) the correct Angular decorators are defined for this class and its ancestors." :
5228
- 'invalid';
5229
- throw new Error(msg);
5230
- }
5231
- /**
5232
- * Injects a token from the currently active injector.
5233
- *
5234
- * Must be used in the context of a factory function such as one defined for an
5235
- * `InjectionToken`. Throws an error if not called from such a context.
5236
- *
5237
- * Within such a factory function, using this function to request injection of a dependency
5238
- * is faster and more type-safe than providing an additional array of dependencies
5239
- * (as has been common with `useFactory` providers).
5240
- *
5241
- * @param token The injection token for the dependency to be injected.
5242
- * @param flags Optional flags that control how injection is executed.
5243
- * The flags correspond to injection strategies that can be specified with
5244
- * parameter decorators `@Host`, `@Self`, `@SkipSef`, and `@Optional`.
5245
- * @returns True if injection is successful, null otherwise.
5246
- *
5247
- * @usageNotes
5248
- *
5249
- * ### Example
5250
- *
5251
- * {@example core/di/ts/injector_spec.ts region='ShakableInjectionToken'}
5252
- *
5253
- * @publicApi
5254
- */
5255
- var inject = ɵɵinject;
5256
- function injectArgs(types) {
5257
- var args = [];
5258
- for (var i = 0; i < types.length; i++) {
5259
- var arg = resolveForwardRef(types[i]);
5260
- if (Array.isArray(arg)) {
5261
- if (arg.length === 0) {
5262
- throw new Error('Arguments array must have arguments.');
5263
- }
5264
- var type = undefined;
5265
- var flags = exports.InjectFlags.Default;
5266
- for (var j = 0; j < arg.length; j++) {
5267
- var meta = arg[j];
5268
- if (meta instanceof Optional || meta.ngMetadataName === 'Optional' || meta === Optional) {
5269
- flags |= exports.InjectFlags.Optional;
5270
- }
5271
- else if (meta instanceof SkipSelf || meta.ngMetadataName === 'SkipSelf' || meta === SkipSelf) {
5272
- flags |= exports.InjectFlags.SkipSelf;
5273
- }
5274
- else if (meta instanceof Self || meta.ngMetadataName === 'Self' || meta === Self) {
5275
- flags |= exports.InjectFlags.Self;
5276
- }
5277
- else if (meta instanceof Host || meta.ngMetadataName === 'Host' || meta === Host) {
5278
- flags |= exports.InjectFlags.Host;
5279
- }
5280
- else if (meta instanceof Inject || meta === Inject) {
5281
- type = meta.token;
5282
- }
5283
- else {
5284
- type = meta;
5285
- }
5286
- }
5287
- args.push(ɵɵinject(type, flags));
5288
- }
5289
- else {
5290
- args.push(ɵɵinject(arg));
5291
- }
5292
- }
5293
- return args;
5294
- }
5295
- function catchInjectorError(e, token, injectorErrorName, source) {
5296
- var tokenPath = e[NG_TEMP_TOKEN_PATH];
5297
- if (token[SOURCE]) {
5298
- tokenPath.unshift(token[SOURCE]);
5299
- }
5300
- e.message = formatError('\n' + e.message, tokenPath, injectorErrorName, source);
5301
- e[NG_TOKEN_PATH] = tokenPath;
5302
- e[NG_TEMP_TOKEN_PATH] = null;
5303
- throw e;
5304
- }
5305
- function formatError(text, obj, injectorErrorName, source) {
5306
- if (source === void 0) { source = null; }
5307
- text = text && text.charAt(0) === '\n' && text.charAt(1) == NO_NEW_LINE ? text.substr(2) : text;
5308
- var context = stringify(obj);
5309
- if (Array.isArray(obj)) {
5310
- context = obj.map(stringify).join(' -> ');
5311
- }
5312
- else if (typeof obj === 'object') {
5313
- var parts = [];
5314
- for (var key in obj) {
5315
- if (obj.hasOwnProperty(key)) {
5316
- var value = obj[key];
5317
- parts.push(key + ':' + (typeof value === 'string' ? JSON.stringify(value) : stringify(value)));
5318
- }
5319
- }
5320
- context = "{" + parts.join(', ') + "}";
5321
- }
5322
- return "" + injectorErrorName + (source ? '(' + source + ')' : '') + "[" + context + "]: " + text.replace(NEW_LINE, '\n ');
5323
- }
5324
-
5325
5403
  /**
5326
5404
  * The Trusted Types policy, or null if Trusted Types are not
5327
5405
  * enabled/supported, or undefined if the policy has not been created yet.
@@ -6498,14 +6576,26 @@
6498
6576
  * Use of this source code is governed by an MIT-style license that can be
6499
6577
  * found in the LICENSE file at https://angular.io/license
6500
6578
  */
6501
- var END_COMMENT = /-->/g;
6502
- var END_COMMENT_ESCAPED = '-\u200B-\u200B>';
6503
6579
  /**
6504
- * Escape the content of the strings so that it can be safely inserted into a comment node.
6580
+ * Disallowed strings in the comment.
6581
+ *
6582
+ * see: https://html.spec.whatwg.org/multipage/syntax.html#comments
6583
+ */
6584
+ var COMMENT_DISALLOWED = /^>|^->|<!--|-->|--!>|<!-$/g;
6585
+ /**
6586
+ * Delimiter in the disallowed strings which needs to be wrapped with zero with character.
6587
+ */
6588
+ var COMMENT_DELIMITER = /(<|>)/;
6589
+ var COMMENT_DELIMITER_ESCAPED = '\u200B$1\u200B';
6590
+ /**
6591
+ * Escape the content of comment strings so that it can be safely inserted into a comment node.
6505
6592
  *
6506
6593
  * The issue is that HTML does not specify any way to escape comment end text inside the comment.
6507
- * `<!-- The way you close a comment is with "-->". -->`. Above the `"-->"` is meant to be text not
6508
- * an end to the comment. This can be created programmatically through DOM APIs.
6594
+ * Consider: `<!-- The way you close a comment is with ">", and "->" at the beginning or by "-->" or
6595
+ * "--!>" at the end. -->`. Above the `"-->"` is meant to be text not an end to the comment. This
6596
+ * can be created programmatically through DOM APIs. (`<!--` are also disallowed.)
6597
+ *
6598
+ * see: https://html.spec.whatwg.org/multipage/syntax.html#comments
6509
6599
  *
6510
6600
  * ```
6511
6601
  * div.innerHTML = div.innerHTML
@@ -6516,15 +6606,16 @@
6516
6606
  * opening up the application for XSS attack. (In SSR we programmatically create comment nodes which
6517
6607
  * may contain such text and expect them to be safe.)
6518
6608
  *
6519
- * This function escapes the comment text by looking for the closing char sequence `-->` and replace
6520
- * it with `-_-_>` where the `_` is a zero width space `\u200B`. The result is that if a comment
6521
- * contains `-->` text it will render normally but it will not cause the HTML parser to close the
6522
- * comment.
6609
+ * This function escapes the comment text by looking for comment delimiters (`<` and `>`) and
6610
+ * surrounding them with `_>_` where the `_` is a zero width space `\u200B`. The result is that if a
6611
+ * comment contains any of the comment start/end delimiters (such as `<!--`, `-->` or `--!>`) the
6612
+ * text it will render normally but it will not cause the HTML parser to close/open the comment.
6523
6613
  *
6524
- * @param value text to make safe for comment node by escaping the comment close character sequence
6614
+ * @param value text to make safe for comment node by escaping the comment open/close character
6615
+ * sequence.
6525
6616
  */
6526
6617
  function escapeCommentText(value) {
6527
- return value.replace(END_COMMENT, END_COMMENT_ESCAPED);
6618
+ return value.replace(COMMENT_DISALLOWED, function (text) { return text.replace(COMMENT_DELIMITER, COMMENT_DELIMITER_ESCAPED); });
6528
6619
  }
6529
6620
 
6530
6621
  /**
@@ -8928,8 +9019,21 @@
8928
9019
  TNode.prototype.debugNodeInjectorPath = function (lView) {
8929
9020
  var path = [];
8930
9021
  var injectorIndex = getInjectorIndex(this, lView);
8931
- ngDevMode && assertNodeInjector(lView, injectorIndex);
9022
+ if (injectorIndex === -1) {
9023
+ // Looks like the current `TNode` does not have `NodeInjector` associated with it => look for
9024
+ // parent NodeInjector.
9025
+ var parentLocation = getParentInjectorLocation(this, lView);
9026
+ if (parentLocation !== NO_PARENT_INJECTOR) {
9027
+ // We found a parent, so start searching from the parent location.
9028
+ injectorIndex = getParentInjectorIndex(parentLocation);
9029
+ lView = getParentInjectorView(parentLocation, lView);
9030
+ }
9031
+ else {
9032
+ // No parents have been found, so there are no `NodeInjector`s to consult.
9033
+ }
9034
+ }
8932
9035
  while (injectorIndex !== -1) {
9036
+ ngDevMode && assertNodeInjector(lView, injectorIndex);
8933
9037
  var tNode = lView[TVIEW].data[injectorIndex + 8 /* TNODE */];
8934
9038
  path.push(buildDebugNode(tNode, lView));
8935
9039
  var parentLocation = lView[injectorIndex + 8 /* PARENT */];
@@ -9386,11 +9490,15 @@
9386
9490
  return {
9387
9491
  html: toHtml(native),
9388
9492
  type: toTNodeTypeAsString(tNode.type),
9493
+ tNode: tNode,
9389
9494
  native: native,
9390
9495
  children: toDebugNodes(tNode.child, lView),
9391
9496
  factories: factories,
9392
9497
  instances: instances,
9393
- injector: buildNodeInjectorDebug(tNode, tView, lView)
9498
+ injector: buildNodeInjectorDebug(tNode, tView, lView),
9499
+ get injectorResolutionPath() {
9500
+ return tNode.debugNodeInjectorPath(lView);
9501
+ },
9394
9502
  };
9395
9503
  }
9396
9504
  function buildNodeInjectorDebug(tNode, tView, lView) {
@@ -9434,6 +9542,9 @@
9434
9542
  * @param idx
9435
9543
  */
9436
9544
  function toBloom(array, idx) {
9545
+ if (idx < 0) {
9546
+ return 'NO_NODE_INJECTOR';
9547
+ }
9437
9548
  return binary(array, idx + 7) + "_" + binary(array, idx + 6) + "_" + binary(array, idx + 5) + "_" + binary(array, idx + 4) + "_" + binary(array, idx + 3) + "_" + binary(array, idx + 2) + "_" + binary(array, idx + 1) + "_" + binary(array, idx + 0);
9438
9549
  }
9439
9550
  var LContainerDebug = /** @class */ (function () {
@@ -12723,7 +12834,7 @@
12723
12834
  ngDevMode && assertIndexInRange(rootView, index);
12724
12835
  rootView[index] = rNode;
12725
12836
  // '#host' is added here as we don't know the real host DOM name (we don't want to read it) and at
12726
- // the same time we want to communicate the the debug `TNode` that this is a special `TNode`
12837
+ // the same time we want to communicate the debug `TNode` that this is a special `TNode`
12727
12838
  // representing a host element.
12728
12839
  var tNode = getOrCreateTNode(tView, index, 2 /* Element */, '#host', null);
12729
12840
  var mergedAttrs = tNode.mergedAttrs = def.hostAttrs;
@@ -21699,6 +21810,15 @@
21699
21810
  * @nocollapse
21700
21811
  */
21701
21812
  ElementRef.__NG_ELEMENT_ID__ = SWITCH_ELEMENT_REF_FACTORY;
21813
+ /**
21814
+ * Unwraps `ElementRef` and return the `nativeElement`.
21815
+ *
21816
+ * @param value value to unwrap
21817
+ * @returns `nativeElement` if `ElementRef` otherwise returns value as is.
21818
+ */
21819
+ function unwrapElementRef(value) {
21820
+ return value instanceof ElementRef ? value.nativeElement : value;
21821
+ }
21702
21822
 
21703
21823
  /**
21704
21824
  * @license
@@ -21812,7 +21932,7 @@
21812
21932
  /**
21813
21933
  * @publicApi
21814
21934
  */
21815
- var VERSION = new Version('11.1.0-next.4');
21935
+ var VERSION = new Version('11.1.1');
21816
21936
 
21817
21937
  /**
21818
21938
  * @license
@@ -22978,7 +23098,7 @@
22978
23098
  this._lView = _lView;
22979
23099
  this._cdRefInjectingView = _cdRefInjectingView;
22980
23100
  this._appRef = null;
22981
- this._viewContainerRef = null;
23101
+ this._attachedToViewContainer = false;
22982
23102
  }
22983
23103
  Object.defineProperty(ViewRef.prototype, "rootNodes", {
22984
23104
  get: function () {
@@ -23007,12 +23127,19 @@
23007
23127
  if (this._appRef) {
23008
23128
  this._appRef.detachView(this);
23009
23129
  }
23010
- else if (this._viewContainerRef) {
23011
- var index = this._viewContainerRef.indexOf(this);
23012
- if (index > -1) {
23013
- this._viewContainerRef.detach(index);
23130
+ else if (this._attachedToViewContainer) {
23131
+ var parent = this._lView[PARENT];
23132
+ if (isLContainer(parent)) {
23133
+ var viewRefs = parent[VIEW_REFS];
23134
+ var index = viewRefs ? viewRefs.indexOf(this) : -1;
23135
+ if (index > -1) {
23136
+ ngDevMode &&
23137
+ assertEqual(index, parent.indexOf(this._lView) - CONTAINER_HEADER_OFFSET, 'An attached view should be in the same position within its container as its ViewRef in the VIEW_REFS array.');
23138
+ detachView(parent, index);
23139
+ removeFromArray(viewRefs, index);
23140
+ }
23014
23141
  }
23015
- this._viewContainerRef = null;
23142
+ this._attachedToViewContainer = false;
23016
23143
  }
23017
23144
  destroyLView(this._lView[TVIEW], this._lView);
23018
23145
  };
@@ -23204,18 +23331,18 @@
23204
23331
  ViewRef.prototype.checkNoChanges = function () {
23205
23332
  checkNoChangesInternal(this._lView[TVIEW], this._lView, this.context);
23206
23333
  };
23207
- ViewRef.prototype.attachToViewContainerRef = function (vcRef) {
23334
+ ViewRef.prototype.attachToViewContainerRef = function () {
23208
23335
  if (this._appRef) {
23209
23336
  throw new Error('This view is already attached directly to the ApplicationRef!');
23210
23337
  }
23211
- this._viewContainerRef = vcRef;
23338
+ this._attachedToViewContainer = true;
23212
23339
  };
23213
23340
  ViewRef.prototype.detachFromAppRef = function () {
23214
23341
  this._appRef = null;
23215
23342
  renderDetachView(this._lView[TVIEW], this._lView);
23216
23343
  };
23217
23344
  ViewRef.prototype.attachToAppRef = function (appRef) {
23218
- if (this._viewContainerRef) {
23345
+ if (this._attachedToViewContainer) {
23219
23346
  throw new Error('This view is already attached to a ViewContainer!');
23220
23347
  }
23221
23348
  this._appRef = appRef;
@@ -23627,7 +23754,7 @@
23627
23754
  if (parentRNode !== null) {
23628
23755
  addViewToContainer(tView, lContainer[T_HOST], renderer, lView, parentRNode, beforeNode);
23629
23756
  }
23630
- viewRef.attachToViewContainerRef(this);
23757
+ viewRef.attachToViewContainerRef();
23631
23758
  addToArray(getOrCreateViewRefs(lContainer), adjustedIdx, viewRef);
23632
23759
  return viewRef;
23633
23760
  };
@@ -26514,11 +26641,22 @@
26514
26641
  * @publicApi
26515
26642
  */
26516
26643
  var QueryList = /** @class */ (function () {
26517
- function QueryList() {
26644
+ /**
26645
+ * @param emitDistinctChangesOnly Whether `QueryList.changes` should fire only when actual change
26646
+ * has occurred. Or if it should fire when query is recomputed. (recomputing could resolve in
26647
+ * the same result) This is set to `false` for backwards compatibility but will be changed to
26648
+ * true in v12.
26649
+ */
26650
+ function QueryList(_emitDistinctChangesOnly) {
26651
+ if (_emitDistinctChangesOnly === void 0) { _emitDistinctChangesOnly = false; }
26652
+ this._emitDistinctChangesOnly = _emitDistinctChangesOnly;
26518
26653
  this.dirty = true;
26519
26654
  this._results = [];
26520
- this.changes = new EventEmitter();
26655
+ this._changesDetected = false;
26656
+ this._changes = null;
26521
26657
  this.length = 0;
26658
+ this.first = undefined;
26659
+ this.last = undefined;
26522
26660
  // This function should be declared on the prototype, but doing so there will cause the class
26523
26661
  // declaration to have side-effects and become not tree-shakable. For this reason we do it in
26524
26662
  // the constructor.
@@ -26528,6 +26666,16 @@
26528
26666
  if (!proto[symbol])
26529
26667
  proto[symbol] = symbolIterator;
26530
26668
  }
26669
+ Object.defineProperty(QueryList.prototype, "changes", {
26670
+ /**
26671
+ * Returns `Observable` of `QueryList` notifying the subscriber of changes.
26672
+ */
26673
+ get: function () {
26674
+ return this._changes || (this._changes = new EventEmitter());
26675
+ },
26676
+ enumerable: false,
26677
+ configurable: true
26678
+ });
26531
26679
  /**
26532
26680
  * Returns the QueryList entry at `index`.
26533
26681
  */
@@ -26591,19 +26739,31 @@
26591
26739
  * occurs.
26592
26740
  *
26593
26741
  * @param resultsTree The query results to store
26742
+ * @param identityAccessor Optional function for extracting stable object identity from a value
26743
+ * in the array. This function is executed for each element of the query result list while
26744
+ * comparing current query list with the new one (provided as a first argument of the `reset`
26745
+ * function) to detect if the lists are different. If the function is not provided, elements
26746
+ * are compared as is (without any pre-processing).
26594
26747
  */
26595
- QueryList.prototype.reset = function (resultsTree) {
26596
- this._results = flatten(resultsTree);
26597
- this.dirty = false;
26598
- this.length = this._results.length;
26599
- this.last = this._results[this.length - 1];
26600
- this.first = this._results[0];
26748
+ QueryList.prototype.reset = function (resultsTree, identityAccessor) {
26749
+ // Cast to `QueryListInternal` so that we can mutate fields which are readonly for the usage of
26750
+ // QueryList (but not for QueryList itself.)
26751
+ var self = this;
26752
+ self.dirty = false;
26753
+ var newResultFlat = flatten(resultsTree);
26754
+ if (this._changesDetected = !arrayEquals(self._results, newResultFlat, identityAccessor)) {
26755
+ self._results = newResultFlat;
26756
+ self.length = newResultFlat.length;
26757
+ self.last = newResultFlat[this.length - 1];
26758
+ self.first = newResultFlat[0];
26759
+ }
26601
26760
  };
26602
26761
  /**
26603
26762
  * Triggers a change event by emitting on the `changes` {@link EventEmitter}.
26604
26763
  */
26605
26764
  QueryList.prototype.notifyOnChanges = function () {
26606
- this.changes.emit(this);
26765
+ if (this._changes && (this._changesDetected || !this._emitDistinctChangesOnly))
26766
+ this._changes.emit(this);
26607
26767
  };
26608
26768
  /** internal */
26609
26769
  QueryList.prototype.setDirty = function () {
@@ -26699,11 +26859,10 @@
26699
26859
  return LQueries_;
26700
26860
  }());
26701
26861
  var TQueryMetadata_ = /** @class */ (function () {
26702
- function TQueryMetadata_(predicate, descendants, isStatic, read) {
26862
+ function TQueryMetadata_(predicate, flags, read) {
26703
26863
  if (read === void 0) { read = null; }
26704
26864
  this.predicate = predicate;
26705
- this.descendants = descendants;
26706
- this.isStatic = isStatic;
26865
+ this.flags = flags;
26707
26866
  this.read = read;
26708
26867
  }
26709
26868
  return TQueryMetadata_;
@@ -26804,7 +26963,8 @@
26804
26963
  return null;
26805
26964
  };
26806
26965
  TQuery_.prototype.isApplyingToNode = function (tNode) {
26807
- if (this._appliesToNextNode && this.metadata.descendants === false) {
26966
+ if (this._appliesToNextNode &&
26967
+ (this.metadata.flags & 1 /* descendants */) !== 1 /* descendants */) {
26808
26968
  var declarationNodeIdx = this._declarationNodeIndex;
26809
26969
  var parent = tNode.parent;
26810
26970
  // Determine if a given TNode is a "direct" child of a node on which a content query was
@@ -27017,7 +27177,9 @@
27017
27177
  var queryIndex = getCurrentQueryIndex();
27018
27178
  setCurrentQueryIndex(queryIndex + 1);
27019
27179
  var tQuery = getTQuery(tView, queryIndex);
27020
- if (queryList.dirty && (isCreationMode(lView) === tQuery.metadata.isStatic)) {
27180
+ if (queryList.dirty &&
27181
+ (isCreationMode(lView) ===
27182
+ ((tQuery.metadata.flags & 2 /* isStatic */) === 2 /* isStatic */))) {
27021
27183
  if (tQuery.matches === null) {
27022
27184
  queryList.reset([]);
27023
27185
  }
@@ -27025,45 +27187,32 @@
27025
27187
  var result = tQuery.crossesNgTemplate ?
27026
27188
  collectQueryResults(tView, lView, queryIndex, []) :
27027
27189
  materializeViewResults(tView, lView, tQuery, queryIndex);
27028
- queryList.reset(result);
27190
+ queryList.reset(result, unwrapElementRef);
27029
27191
  queryList.notifyOnChanges();
27030
27192
  }
27031
27193
  return true;
27032
27194
  }
27033
27195
  return false;
27034
27196
  }
27035
- /**
27036
- * Creates new QueryList for a static view query.
27037
- *
27038
- * @param predicate The type for which the query will search
27039
- * @param descend Whether or not to descend into children
27040
- * @param read What to save in the query
27041
- *
27042
- * @codeGenApi
27043
- */
27044
- function ɵɵstaticViewQuery(predicate, descend, read) {
27045
- viewQueryInternal(getTView(), getLView(), predicate, descend, read, true);
27046
- }
27047
27197
  /**
27048
27198
  * Creates new QueryList, stores the reference in LView and returns QueryList.
27049
27199
  *
27050
27200
  * @param predicate The type for which the query will search
27051
- * @param descend Whether or not to descend into children
27201
+ * @param flags Flags associated with the query
27052
27202
  * @param read What to save in the query
27053
27203
  *
27054
27204
  * @codeGenApi
27055
27205
  */
27056
- function ɵɵviewQuery(predicate, descend, read) {
27057
- viewQueryInternal(getTView(), getLView(), predicate, descend, read, false);
27058
- }
27059
- function viewQueryInternal(tView, lView, predicate, descend, read, isStatic) {
27206
+ function ɵɵviewQuery(predicate, flags, read) {
27207
+ ngDevMode && assertNumber(flags, 'Expecting flags');
27208
+ var tView = getTView();
27060
27209
  if (tView.firstCreatePass) {
27061
- createTQuery(tView, new TQueryMetadata_(predicate, descend, isStatic, read), -1);
27062
- if (isStatic) {
27210
+ createTQuery(tView, new TQueryMetadata_(predicate, flags, read), -1);
27211
+ if ((flags & 2 /* isStatic */) === 2 /* isStatic */) {
27063
27212
  tView.staticViewQueries = true;
27064
27213
  }
27065
27214
  }
27066
- createLQuery(tView, lView);
27215
+ createLQuery(tView, getLView(), flags);
27067
27216
  }
27068
27217
  /**
27069
27218
  * Registers a QueryList, associated with a content query, for later refresh (part of a view
@@ -27071,39 +27220,24 @@
27071
27220
  *
27072
27221
  * @param directiveIndex Current directive index
27073
27222
  * @param predicate The type for which the query will search
27074
- * @param descend Whether or not to descend into children
27223
+ * @param flags Flags associated with the query
27075
27224
  * @param read What to save in the query
27076
27225
  * @returns QueryList<T>
27077
27226
  *
27078
27227
  * @codeGenApi
27079
27228
  */
27080
- function ɵɵcontentQuery(directiveIndex, predicate, descend, read) {
27081
- contentQueryInternal(getTView(), getLView(), predicate, descend, read, false, getCurrentTNode(), directiveIndex);
27082
- }
27083
- /**
27084
- * Registers a QueryList, associated with a static content query, for later refresh
27085
- * (part of a view refresh).
27086
- *
27087
- * @param directiveIndex Current directive index
27088
- * @param predicate The type for which the query will search
27089
- * @param descend Whether or not to descend into children
27090
- * @param read What to save in the query
27091
- * @returns QueryList<T>
27092
- *
27093
- * @codeGenApi
27094
- */
27095
- function ɵɵstaticContentQuery(directiveIndex, predicate, descend, read) {
27096
- contentQueryInternal(getTView(), getLView(), predicate, descend, read, true, getCurrentTNode(), directiveIndex);
27097
- }
27098
- function contentQueryInternal(tView, lView, predicate, descend, read, isStatic, tNode, directiveIndex) {
27229
+ function ɵɵcontentQuery(directiveIndex, predicate, flags, read) {
27230
+ ngDevMode && assertNumber(flags, 'Expecting flags');
27231
+ var tView = getTView();
27099
27232
  if (tView.firstCreatePass) {
27100
- createTQuery(tView, new TQueryMetadata_(predicate, descend, isStatic, read), tNode.index);
27233
+ var tNode = getCurrentTNode();
27234
+ createTQuery(tView, new TQueryMetadata_(predicate, flags, read), tNode.index);
27101
27235
  saveContentQueryAndDirectiveIndex(tView, directiveIndex);
27102
- if (isStatic) {
27236
+ if ((flags & 2 /* isStatic */) === 2 /* isStatic */) {
27103
27237
  tView.staticContentQueries = true;
27104
27238
  }
27105
27239
  }
27106
- createLQuery(tView, lView);
27240
+ createLQuery(tView, getLView(), flags);
27107
27241
  }
27108
27242
  /**
27109
27243
  * Loads a QueryList corresponding to the current view or content query.
@@ -27119,8 +27253,8 @@
27119
27253
  ngDevMode && assertIndexInRange(lView[QUERIES].queries, queryIndex);
27120
27254
  return lView[QUERIES].queries[queryIndex].queryList;
27121
27255
  }
27122
- function createLQuery(tView, lView) {
27123
- var queryList = new QueryList();
27256
+ function createLQuery(tView, lView, flags) {
27257
+ var queryList = new QueryList((flags & 4 /* emitDistinctChangesOnly */) === 4 /* emitDistinctChangesOnly */);
27124
27258
  storeCleanupWithContext(tView, lView, queryList, queryList.destroy);
27125
27259
  if (lView[QUERIES] === null)
27126
27260
  lView[QUERIES] = new LQueries_();
@@ -27269,8 +27403,6 @@
27269
27403
  'ɵɵpipe': ɵɵpipe,
27270
27404
  'ɵɵqueryRefresh': ɵɵqueryRefresh,
27271
27405
  'ɵɵviewQuery': ɵɵviewQuery,
27272
- 'ɵɵstaticViewQuery': ɵɵstaticViewQuery,
27273
- 'ɵɵstaticContentQuery': ɵɵstaticContentQuery,
27274
27406
  'ɵɵloadQuery': ɵɵloadQuery,
27275
27407
  'ɵɵcontentQuery': ɵɵcontentQuery,
27276
27408
  'ɵɵreference': ɵɵreference,
@@ -28036,7 +28168,8 @@
28036
28168
  descendants: ann.descendants,
28037
28169
  first: ann.first,
28038
28170
  read: ann.read ? ann.read : null,
28039
- static: !!ann.static
28171
+ static: !!ann.static,
28172
+ emitDistinctChangesOnly: !!ann.emitDistinctChangesOnly,
28040
28173
  };
28041
28174
  }
28042
28175
  function extractQueriesMetadata(type, propMetadata, isQueryAnn) {
@@ -28622,7 +28755,7 @@
28622
28755
  * found in the LICENSE file at https://angular.io/license
28623
28756
  */
28624
28757
  /**
28625
- * Combination of NgModuleFactory and ComponentFactorys.
28758
+ * Combination of NgModuleFactory and ComponentFactories.
28626
28759
  *
28627
28760
  * @publicApi
28628
28761
  */
@@ -31572,8 +31705,8 @@
31572
31705
  ngContent: null
31573
31706
  };
31574
31707
  }
31575
- function createQuery() {
31576
- return new QueryList();
31708
+ function createQuery(emitDistinctChangesOnly) {
31709
+ return new QueryList(emitDistinctChangesOnly);
31577
31710
  }
31578
31711
  function dirtyParentQueries(view) {
31579
31712
  var queryIds = view.def.nodeMatchedQueries;
@@ -31625,7 +31758,7 @@
31625
31758
  newValues = calcQueryValues(view, 0, view.def.nodes.length - 1, nodeDef.query, []);
31626
31759
  directiveInstance = view.component;
31627
31760
  }
31628
- queryList.reset(newValues);
31761
+ queryList.reset(newValues, unwrapElementRef);
31629
31762
  var bindings = nodeDef.query.bindings;
31630
31763
  var notify = false;
31631
31764
  for (var i = 0; i < bindings.length; i++) {
@@ -32379,7 +32512,8 @@
32379
32512
  break;
32380
32513
  case 67108864 /* TypeContentQuery */:
32381
32514
  case 134217728 /* TypeViewQuery */:
32382
- nodeData = createQuery();
32515
+ nodeData = createQuery((nodeDef.flags & -2147483648 /* EmitDistinctChangesOnly */) ===
32516
+ -2147483648 /* EmitDistinctChangesOnly */);
32383
32517
  break;
32384
32518
  case 8 /* TypeNgContent */:
32385
32519
  appendNgContent(view, renderHost, nodeDef);
@@ -33740,7 +33874,7 @@
33740
33874
  exports.platformCore = platformCore;
33741
33875
  exports.resolveForwardRef = resolveForwardRef;
33742
33876
  exports.setTestabilityGetter = setTestabilityGetter;
33743
- exports.ɵ0 = ɵ0$2;
33877
+ exports.ɵ0 = ɵ0$3;
33744
33878
  exports.ɵALLOW_MULTIPLE_PLATFORMS = ALLOW_MULTIPLE_PLATFORMS;
33745
33879
  exports.ɵAPP_ID_RANDOM_PROVIDER = APP_ID_RANDOM_PROVIDER;
33746
33880
  exports.ɵCREATE_ATTRIBUTE_DECORATOR__POST_R3__ = CREATE_ATTRIBUTE_DECORATOR__POST_R3__;
@@ -33789,53 +33923,54 @@
33789
33923
  exports.ɵand = anchorDef;
33790
33924
  exports.ɵangular_packages_core_core_a = isForwardRef;
33791
33925
  exports.ɵangular_packages_core_core_b = injectInjectorOnly;
33792
- exports.ɵangular_packages_core_core_ba = USD_CURRENCY_CODE;
33793
- exports.ɵangular_packages_core_core_bb = _def;
33794
- exports.ɵangular_packages_core_core_bc = DebugContext;
33795
- exports.ɵangular_packages_core_core_bd = NgOnChangesFeatureImpl;
33796
- exports.ɵangular_packages_core_core_be = SCHEDULER;
33797
- exports.ɵangular_packages_core_core_bf = injectAttributeImpl;
33798
- exports.ɵangular_packages_core_core_bg = getLView;
33799
- exports.ɵangular_packages_core_core_bh = getBindingRoot;
33800
- exports.ɵangular_packages_core_core_bi = nextContextImpl;
33801
- exports.ɵangular_packages_core_core_bk = pureFunction1Internal;
33802
- exports.ɵangular_packages_core_core_bl = pureFunction2Internal;
33803
- exports.ɵangular_packages_core_core_bm = pureFunction3Internal;
33804
- exports.ɵangular_packages_core_core_bn = pureFunction4Internal;
33805
- exports.ɵangular_packages_core_core_bo = pureFunctionVInternal;
33806
- exports.ɵangular_packages_core_core_bp = getUrlSanitizer;
33807
- exports.ɵangular_packages_core_core_bq = makePropDecorator;
33808
- exports.ɵangular_packages_core_core_br = makeParamDecorator;
33809
- exports.ɵangular_packages_core_core_bs = getClosureSafeProperty;
33810
- exports.ɵangular_packages_core_core_bt = NullInjector;
33811
- exports.ɵangular_packages_core_core_bu = getInjectImplementation;
33812
- exports.ɵangular_packages_core_core_bw = getNativeByTNode;
33813
- exports.ɵangular_packages_core_core_by = getRootContext;
33814
- exports.ɵangular_packages_core_core_bz = i18nPostprocess;
33815
- exports.ɵangular_packages_core_core_c = ReflectiveInjector_;
33816
- exports.ɵangular_packages_core_core_d = ReflectiveDependency;
33817
- exports.ɵangular_packages_core_core_e = resolveReflectiveProviders;
33818
- exports.ɵangular_packages_core_core_f = _appIdRandomProviderFactory;
33819
- exports.ɵangular_packages_core_core_g = injectRenderer2;
33820
- exports.ɵangular_packages_core_core_h = injectElementRef;
33821
- exports.ɵangular_packages_core_core_i = createElementRef;
33822
- exports.ɵangular_packages_core_core_j = getModuleFactory__PRE_R3__;
33823
- exports.ɵangular_packages_core_core_k = injectTemplateRef;
33824
- exports.ɵangular_packages_core_core_l = createTemplateRef;
33825
- exports.ɵangular_packages_core_core_m = injectViewContainerRef;
33826
- exports.ɵangular_packages_core_core_n = DebugNode__PRE_R3__;
33827
- exports.ɵangular_packages_core_core_o = DebugElement__PRE_R3__;
33828
- exports.ɵangular_packages_core_core_p = getDebugNodeR2__PRE_R3__;
33829
- exports.ɵangular_packages_core_core_q = injectChangeDetectorRef;
33830
- exports.ɵangular_packages_core_core_r = DefaultIterableDifferFactory;
33831
- exports.ɵangular_packages_core_core_s = DefaultKeyValueDifferFactory;
33832
- exports.ɵangular_packages_core_core_t = defaultIterableDiffersFactory;
33833
- exports.ɵangular_packages_core_core_u = defaultKeyValueDiffersFactory;
33834
- exports.ɵangular_packages_core_core_v = _iterableDiffersFactory;
33835
- exports.ɵangular_packages_core_core_w = _keyValueDiffersFactory;
33836
- exports.ɵangular_packages_core_core_x = _localeFactory;
33837
- exports.ɵangular_packages_core_core_y = APPLICATION_MODULE_PROVIDERS;
33838
- exports.ɵangular_packages_core_core_z = zoneSchedulerFactory;
33926
+ exports.ɵangular_packages_core_core_ba = zoneSchedulerFactory;
33927
+ exports.ɵangular_packages_core_core_bb = USD_CURRENCY_CODE;
33928
+ exports.ɵangular_packages_core_core_bc = _def;
33929
+ exports.ɵangular_packages_core_core_bd = DebugContext;
33930
+ exports.ɵangular_packages_core_core_be = NgOnChangesFeatureImpl;
33931
+ exports.ɵangular_packages_core_core_bf = SCHEDULER;
33932
+ exports.ɵangular_packages_core_core_bg = injectAttributeImpl;
33933
+ exports.ɵangular_packages_core_core_bh = getLView;
33934
+ exports.ɵangular_packages_core_core_bi = getBindingRoot;
33935
+ exports.ɵangular_packages_core_core_bj = nextContextImpl;
33936
+ exports.ɵangular_packages_core_core_bl = pureFunction1Internal;
33937
+ exports.ɵangular_packages_core_core_bm = pureFunction2Internal;
33938
+ exports.ɵangular_packages_core_core_bn = pureFunction3Internal;
33939
+ exports.ɵangular_packages_core_core_bo = pureFunction4Internal;
33940
+ exports.ɵangular_packages_core_core_bp = pureFunctionVInternal;
33941
+ exports.ɵangular_packages_core_core_bq = getUrlSanitizer;
33942
+ exports.ɵangular_packages_core_core_br = makePropDecorator;
33943
+ exports.ɵangular_packages_core_core_bs = makeParamDecorator;
33944
+ exports.ɵangular_packages_core_core_bv = getClosureSafeProperty;
33945
+ exports.ɵangular_packages_core_core_bw = NullInjector;
33946
+ exports.ɵangular_packages_core_core_bx = getInjectImplementation;
33947
+ exports.ɵangular_packages_core_core_bz = getNativeByTNode;
33948
+ exports.ɵangular_packages_core_core_c = attachInjectFlag;
33949
+ exports.ɵangular_packages_core_core_cb = getRootContext;
33950
+ exports.ɵangular_packages_core_core_cc = i18nPostprocess;
33951
+ exports.ɵangular_packages_core_core_d = ReflectiveInjector_;
33952
+ exports.ɵangular_packages_core_core_e = ReflectiveDependency;
33953
+ exports.ɵangular_packages_core_core_f = resolveReflectiveProviders;
33954
+ exports.ɵangular_packages_core_core_g = _appIdRandomProviderFactory;
33955
+ exports.ɵangular_packages_core_core_h = injectRenderer2;
33956
+ exports.ɵangular_packages_core_core_i = injectElementRef;
33957
+ exports.ɵangular_packages_core_core_j = createElementRef;
33958
+ exports.ɵangular_packages_core_core_k = getModuleFactory__PRE_R3__;
33959
+ exports.ɵangular_packages_core_core_l = injectTemplateRef;
33960
+ exports.ɵangular_packages_core_core_m = createTemplateRef;
33961
+ exports.ɵangular_packages_core_core_n = injectViewContainerRef;
33962
+ exports.ɵangular_packages_core_core_o = DebugNode__PRE_R3__;
33963
+ exports.ɵangular_packages_core_core_p = DebugElement__PRE_R3__;
33964
+ exports.ɵangular_packages_core_core_q = getDebugNodeR2__PRE_R3__;
33965
+ exports.ɵangular_packages_core_core_r = injectChangeDetectorRef;
33966
+ exports.ɵangular_packages_core_core_s = DefaultIterableDifferFactory;
33967
+ exports.ɵangular_packages_core_core_t = DefaultKeyValueDifferFactory;
33968
+ exports.ɵangular_packages_core_core_u = defaultIterableDiffersFactory;
33969
+ exports.ɵangular_packages_core_core_v = defaultKeyValueDiffersFactory;
33970
+ exports.ɵangular_packages_core_core_w = _iterableDiffersFactory;
33971
+ exports.ɵangular_packages_core_core_x = _keyValueDiffersFactory;
33972
+ exports.ɵangular_packages_core_core_y = _localeFactory;
33973
+ exports.ɵangular_packages_core_core_z = APPLICATION_MODULE_PROVIDERS;
33839
33974
  exports.ɵbypassSanitizationTrustHtml = bypassSanitizationTrustHtml;
33840
33975
  exports.ɵbypassSanitizationTrustResourceUrl = bypassSanitizationTrustResourceUrl;
33841
33976
  exports.ɵbypassSanitizationTrustScript = bypassSanitizationTrustScript;
@@ -34030,8 +34165,6 @@
34030
34165
  exports.ɵɵsanitizeUrlOrResourceUrl = ɵɵsanitizeUrlOrResourceUrl;
34031
34166
  exports.ɵɵsetComponentScope = ɵɵsetComponentScope;
34032
34167
  exports.ɵɵsetNgModuleScope = ɵɵsetNgModuleScope;
34033
- exports.ɵɵstaticContentQuery = ɵɵstaticContentQuery;
34034
- exports.ɵɵstaticViewQuery = ɵɵstaticViewQuery;
34035
34168
  exports.ɵɵstyleMap = ɵɵstyleMap;
34036
34169
  exports.ɵɵstyleMapInterpolate1 = ɵɵstyleMapInterpolate1;
34037
34170
  exports.ɵɵstyleMapInterpolate2 = ɵɵstyleMapInterpolate2;