@angular/core 20.2.0-next.3 → 20.2.0-next.5

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 (71) hide show
  1. package/api.d.d.ts +1 -1
  2. package/chrome_dev_tools_performance.d.d.ts +1 -1
  3. package/discovery.d.d.ts +14 -2
  4. package/event_dispatcher.d.d.ts +1 -1
  5. package/fesm2022/attribute.mjs +1 -1
  6. package/fesm2022/attribute.mjs.map +1 -1
  7. package/fesm2022/core.mjs +40 -12
  8. package/fesm2022/core.mjs.map +1 -1
  9. package/fesm2022/debug_node.mjs +234 -97
  10. package/fesm2022/debug_node.mjs.map +1 -1
  11. package/fesm2022/not_found.mjs +1 -1
  12. package/fesm2022/not_found.mjs.map +1 -1
  13. package/fesm2022/primitives/di.mjs +1 -1
  14. package/fesm2022/primitives/di.mjs.map +1 -1
  15. package/fesm2022/primitives/event-dispatch.mjs +1 -1
  16. package/fesm2022/primitives/event-dispatch.mjs.map +1 -1
  17. package/fesm2022/primitives/signals.mjs +1 -1
  18. package/fesm2022/primitives/signals.mjs.map +1 -1
  19. package/fesm2022/resource.mjs +1 -1
  20. package/fesm2022/resource.mjs.map +1 -1
  21. package/fesm2022/root_effect_scheduler.mjs +1 -1
  22. package/fesm2022/root_effect_scheduler.mjs.map +1 -1
  23. package/fesm2022/rxjs-interop.mjs +1 -1
  24. package/fesm2022/rxjs-interop.mjs.map +1 -1
  25. package/fesm2022/signal.mjs +1 -1
  26. package/fesm2022/signal.mjs.map +1 -1
  27. package/fesm2022/testing.mjs +1 -1
  28. package/fesm2022/testing.mjs.map +1 -1
  29. package/fesm2022/untracked.mjs +1 -1
  30. package/fesm2022/untracked.mjs.map +1 -1
  31. package/fesm2022/weak_ref.mjs +1 -1
  32. package/fesm2022/weak_ref.mjs.map +1 -1
  33. package/graph.d.d.ts +1 -1
  34. package/index.d.ts +23 -8
  35. package/package.json +2 -2
  36. package/primitives/di/index.d.ts +1 -1
  37. package/primitives/event-dispatch/index.d.ts +1 -1
  38. package/primitives/signals/index.d.ts +1 -1
  39. package/rxjs-interop/index.d.ts +1 -1
  40. package/schematics/bundles/{apply_import_manager-C9H5B66Q.cjs → apply_import_manager-Bf0h419q.cjs} +4 -4
  41. package/schematics/bundles/cleanup-unused-imports.cjs +7 -8
  42. package/schematics/bundles/{compiler_host-DTywrGR6.cjs → compiler_host-CpG50gww.cjs} +3 -3
  43. package/schematics/bundles/control-flow-migration.cjs +18 -19
  44. package/schematics/bundles/document-core.cjs +6 -7
  45. package/schematics/bundles/imports-CIX-JgAN.cjs +1 -1
  46. package/schematics/bundles/{index-DvIl8s8s.cjs → index-DTWyGOPM.cjs} +49 -49
  47. package/schematics/bundles/{index-DWQ8GMRM.cjs → index-Dl0zaIBS.cjs} +1263 -1253
  48. package/schematics/bundles/inject-flags.cjs +6 -7
  49. package/schematics/bundles/inject-migration.cjs +6 -7
  50. package/schematics/bundles/leading_space-D9nQ8UQC.cjs +1 -1
  51. package/schematics/bundles/{migrate_ts_type_references-BFb3oiAk.cjs → migrate_ts_type_references-BlMDltWE.cjs} +14 -14
  52. package/schematics/bundles/ng_decorators-B5HCqr20.cjs +1 -1
  53. package/schematics/bundles/nodes-B16H9JUd.cjs +1 -1
  54. package/schematics/bundles/output-migration.cjs +20 -21
  55. package/schematics/bundles/{project_paths-Cuim0I7i.cjs → project_paths-0E6AzVkB.cjs} +16 -17
  56. package/schematics/bundles/{checker-DBomdQHo.cjs → project_tsconfig_paths-ClCuNoA6.cjs} +147 -30
  57. package/schematics/bundles/property_name-BBwFuqMe.cjs +1 -1
  58. package/schematics/bundles/route-lazy-loading.cjs +6 -7
  59. package/schematics/bundles/router-current-navigation.cjs +114 -0
  60. package/schematics/bundles/self-closing-tags-migration.cjs +10 -11
  61. package/schematics/bundles/signal-input-migration.cjs +21 -22
  62. package/schematics/bundles/signal-queries-migration.cjs +31 -32
  63. package/schematics/bundles/signals.cjs +8 -9
  64. package/schematics/bundles/standalone-migration.cjs +10 -11
  65. package/schematics/bundles/symbol-VPWguRxr.cjs +1 -1
  66. package/schematics/bundles/test-bed-get.cjs +4 -5
  67. package/schematics/migrations.json +6 -0
  68. package/signal.d.d.ts +1 -1
  69. package/testing/index.d.ts +1 -1
  70. package/weak_ref.d.d.ts +1 -1
  71. package/schematics/bundles/project_tsconfig_paths-CDVxT6Ov.cjs +0 -90
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  /**
3
- * @license Angular v20.2.0-next.3
3
+ * @license Angular v20.2.0-next.5
4
4
  * (c) 2010-2025 Google LLC. https://angular.io/
5
5
  * License: MIT
6
6
  */
@@ -8,11 +8,11 @@
8
8
 
9
9
  var ts = require('typescript');
10
10
  require('os');
11
- var checker = require('./checker-DBomdQHo.cjs');
12
- var index = require('./index-DWQ8GMRM.cjs');
11
+ var project_tsconfig_paths = require('./project_tsconfig_paths-ClCuNoA6.cjs');
12
+ var index = require('./index-Dl0zaIBS.cjs');
13
13
  require('path');
14
14
  require('node:path');
15
- var project_paths = require('./project_paths-Cuim0I7i.cjs');
15
+ var project_paths = require('./project_paths-0E6AzVkB.cjs');
16
16
 
17
17
  function getMemberName(member) {
18
18
  if (member.name === undefined) {
@@ -189,7 +189,7 @@ function lookupPropertyAccess(checker, type, path, options = {}) {
189
189
  * This resolution is important to be able to migrate references to inputs
190
190
  * that will be migrated to signal inputs.
191
191
  */
192
- class TemplateReferenceVisitor extends checker.RecursiveVisitor {
192
+ class TemplateReferenceVisitor extends project_tsconfig_paths.RecursiveVisitor {
193
193
  result = [];
194
194
  /**
195
195
  * Whether we are currently descending into HTML AST nodes
@@ -236,21 +236,21 @@ class TemplateReferenceVisitor extends checker.RecursiveVisitor {
236
236
  // of signal calls in templates.
237
237
  // TODO: Remove with: https://github.com/angular/angular/pull/55456.
238
238
  this.templateAttributeReferencedFields = [];
239
- checker.visitAll(this, template.attributes);
240
- checker.visitAll(this, template.templateAttrs);
239
+ project_tsconfig_paths.visitAll(this, template.attributes);
240
+ project_tsconfig_paths.visitAll(this, template.templateAttrs);
241
241
  // If we are dealing with a microsyntax template, do not check
242
242
  // inputs and outputs as those are already passed to the children.
243
243
  // Template attributes may contain relevant expressions though.
244
244
  if (template.tagName === 'ng-template') {
245
- checker.visitAll(this, template.inputs);
246
- checker.visitAll(this, template.outputs);
245
+ project_tsconfig_paths.visitAll(this, template.inputs);
246
+ project_tsconfig_paths.visitAll(this, template.outputs);
247
247
  }
248
248
  const referencedInputs = this.templateAttributeReferencedFields;
249
249
  this.templateAttributeReferencedFields = null;
250
250
  this.descendAndCheckForNarrowedSimilarReferences(referencedInputs, () => {
251
- checker.visitAll(this, template.children);
252
- checker.visitAll(this, template.references);
253
- checker.visitAll(this, template.variables);
251
+ project_tsconfig_paths.visitAll(this, template.children);
252
+ project_tsconfig_paths.visitAll(this, template.references);
253
+ project_tsconfig_paths.visitAll(this, template.variables);
254
254
  });
255
255
  }
256
256
  visitIfBlockBranch(block) {
@@ -317,7 +317,7 @@ class TemplateReferenceVisitor extends checker.RecursiveVisitor {
317
317
  * This resolution is important to be able to migrate references to inputs
318
318
  * that will be migrated to signal inputs.
319
319
  */
320
- class TemplateExpressionReferenceVisitor extends checker.RecursiveAstVisitor {
320
+ class TemplateExpressionReferenceVisitor extends project_tsconfig_paths.RecursiveAstVisitor {
321
321
  typeChecker;
322
322
  templateTypeChecker;
323
323
  componentClass;
@@ -364,7 +364,7 @@ class TemplateExpressionReferenceVisitor extends checker.RecursiveAstVisitor {
364
364
  super.visitPropertyRead(ast, context);
365
365
  }
366
366
  visitBinary(ast, context) {
367
- if (ast.operation === '=' && ast.left instanceof checker.PropertyRead) {
367
+ if (ast.operation === '=' && ast.left instanceof project_tsconfig_paths.PropertyRead) {
368
368
  this._inspectPropertyAccess(ast.left, true, [...context, ast, ast.left]);
369
369
  }
370
370
  else {
@@ -402,7 +402,7 @@ class TemplateExpressionReferenceVisitor extends checker.RecursiveAstVisitor {
402
402
  return false;
403
403
  }
404
404
  const symbol = this.templateTypeChecker.getSymbolOfNode(ast, this.componentClass);
405
- if (symbol?.kind !== checker.SymbolKind.Expression || symbol.tsSymbol === null) {
405
+ if (symbol?.kind !== project_tsconfig_paths.SymbolKind.Expression || symbol.tsSymbol === null) {
406
406
  return false;
407
407
  }
408
408
  // Dangerous: Type checking symbol retrieval is a totally different `ts.Program`,
@@ -464,25 +464,25 @@ class TemplateExpressionReferenceVisitor extends checker.RecursiveAstVisitor {
464
464
  _isPartOfNarrowingTernary(read) {
465
465
  // Note: We do not safe check that the reads are fully matching 1:1. This is acceptable
466
466
  // as worst case we just skip an input from being migrated. This is very unlikely too.
467
- return this.insideConditionalExpressionsWithReads.some((r) => (r instanceof checker.PropertyRead || r instanceof checker.SafePropertyRead) && r.name === read.name);
467
+ return this.insideConditionalExpressionsWithReads.some((r) => (r instanceof project_tsconfig_paths.PropertyRead || r instanceof project_tsconfig_paths.SafePropertyRead) && r.name === read.name);
468
468
  }
469
469
  }
470
470
  /**
471
471
  * Emulates an access to a given field using the TypeScript `ts.Type`
472
472
  * of the given class. The resolved symbol of the access is returned.
473
473
  */
474
- function traverseReceiverAndLookupSymbol(readOrWrite, componentClass, checker$1) {
474
+ function traverseReceiverAndLookupSymbol(readOrWrite, componentClass, checker) {
475
475
  const path = [readOrWrite.name];
476
476
  let node = readOrWrite;
477
- while (node.receiver instanceof checker.PropertyRead) {
477
+ while (node.receiver instanceof project_tsconfig_paths.PropertyRead) {
478
478
  node = node.receiver;
479
479
  path.unshift(node.name);
480
480
  }
481
- if (!(node.receiver instanceof checker.ImplicitReceiver || node.receiver instanceof checker.ThisReceiver)) {
481
+ if (!(node.receiver instanceof project_tsconfig_paths.ImplicitReceiver || node.receiver instanceof project_tsconfig_paths.ThisReceiver)) {
482
482
  return null;
483
483
  }
484
- const classType = checker$1.getTypeAtLocation(componentClass.name);
485
- return (lookupPropertyAccess(checker$1, classType, path, {
484
+ const classType = checker.getTypeAtLocation(componentClass.name);
485
+ return (lookupPropertyAccess(checker, classType, path, {
486
486
  // Necessary to avoid breaking the resolution if there is
487
487
  // some narrowing involved. E.g. `myClass ? myClass.input`.
488
488
  ignoreNullability: true,
@@ -490,8 +490,8 @@ function traverseReceiverAndLookupSymbol(readOrWrite, componentClass, checker$1)
490
490
  }
491
491
  /** Whether the given node refers to a two-way binding AST node. */
492
492
  function isTwoWayBindingNode(node) {
493
- return ((node instanceof checker.BoundAttribute && node.type === checker.BindingType.TwoWay) ||
494
- (node instanceof checker.BoundEvent && node.type === checker.ParsedEventType.TwoWay));
493
+ return ((node instanceof project_tsconfig_paths.BoundAttribute && node.type === project_tsconfig_paths.BindingType.TwoWay) ||
494
+ (node instanceof project_tsconfig_paths.BoundEvent && node.type === project_tsconfig_paths.ParsedEventType.TwoWay));
495
495
  }
496
496
 
497
497
  /** Possible types of references to known fields detected. */
@@ -526,7 +526,7 @@ function isTsClassTypeReference(ref) {
526
526
  * Checks host bindings of the given class and tracks all
527
527
  * references to inputs within bindings.
528
528
  */
529
- function identifyHostBindingReferences(node, programInfo, checker$1, reflector, result, knownFields, fieldNamesToConsiderForReferenceLookup) {
529
+ function identifyHostBindingReferences(node, programInfo, checker, reflector, result, knownFields, fieldNamesToConsiderForReferenceLookup) {
530
530
  if (node.name === undefined) {
531
531
  return;
532
532
  }
@@ -534,7 +534,7 @@ function identifyHostBindingReferences(node, programInfo, checker$1, reflector,
534
534
  if (decorators === null) {
535
535
  return;
536
536
  }
537
- const angularDecorators = checker.getAngularDecorators(decorators, ['Directive', 'Component'],
537
+ const angularDecorators = project_tsconfig_paths.getAngularDecorators(decorators, ['Directive', 'Component'],
538
538
  /* isAngularCore */ false);
539
539
  if (angularDecorators.length === 0) {
540
540
  return;
@@ -544,22 +544,22 @@ function identifyHostBindingReferences(node, programInfo, checker$1, reflector,
544
544
  if (ngDecorator.args?.length !== 1) {
545
545
  return;
546
546
  }
547
- const metadataNode = checker.unwrapExpression(ngDecorator.args[0]);
547
+ const metadataNode = project_tsconfig_paths.unwrapExpression(ngDecorator.args[0]);
548
548
  if (!ts.isObjectLiteralExpression(metadataNode)) {
549
549
  return;
550
550
  }
551
- const metadata = checker.reflectObjectLiteral(metadataNode);
551
+ const metadata = project_tsconfig_paths.reflectObjectLiteral(metadataNode);
552
552
  if (!metadata.has('host')) {
553
553
  return;
554
554
  }
555
- let hostField = checker.unwrapExpression(metadata.get('host'));
555
+ let hostField = project_tsconfig_paths.unwrapExpression(metadata.get('host'));
556
556
  // Special-case in case host bindings are shared via a variable.
557
557
  // e.g. Material button shares host bindings as a constant in the same target.
558
558
  if (ts.isIdentifier(hostField)) {
559
- let symbol = checker$1.getSymbolAtLocation(hostField);
559
+ let symbol = checker.getSymbolAtLocation(hostField);
560
560
  // Plain identifier references can point to alias symbols (e.g. imports).
561
561
  if (symbol !== undefined && symbol.flags & ts.SymbolFlags.Alias) {
562
- symbol = checker$1.getAliasedSymbol(symbol);
562
+ symbol = checker.getAliasedSymbol(symbol);
563
563
  }
564
564
  if (symbol !== undefined &&
565
565
  symbol.valueDeclaration !== undefined &&
@@ -570,9 +570,9 @@ function identifyHostBindingReferences(node, programInfo, checker$1, reflector,
570
570
  if (hostField === undefined || !ts.isObjectLiteralExpression(hostField)) {
571
571
  return;
572
572
  }
573
- const hostMap = checker.reflectObjectLiteral(hostField);
573
+ const hostMap = project_tsconfig_paths.reflectObjectLiteral(hostField);
574
574
  const expressionResult = [];
575
- const expressionVisitor = new TemplateExpressionReferenceVisitor(checker$1, null, node, knownFields, fieldNamesToConsiderForReferenceLookup);
575
+ const expressionVisitor = new TemplateExpressionReferenceVisitor(checker, null, node, knownFields, fieldNamesToConsiderForReferenceLookup);
576
576
  for (const [rawName, expression] of hostMap.entries()) {
577
577
  if (!ts.isStringLiteralLike(expression)) {
578
578
  continue;
@@ -583,11 +583,11 @@ function identifyHostBindingReferences(node, programInfo, checker$1, reflector,
583
583
  if (!isPropertyBinding && !isEventBinding) {
584
584
  continue;
585
585
  }
586
- const parser = checker.makeBindingParser();
587
- const sourceSpan = new checker.ParseSourceSpan(
586
+ const parser = project_tsconfig_paths.makeBindingParser();
587
+ const sourceSpan = new project_tsconfig_paths.ParseSourceSpan(
588
588
  // Fake source span to keep parsing offsets zero-based.
589
589
  // We then later combine these with the expression TS node offsets.
590
- new checker.ParseLocation({ content: '', url: '' }, 0, 0, 0), new checker.ParseLocation({ content: '', url: '' }, 0, 0, 0));
590
+ new project_tsconfig_paths.ParseLocation({ content: '', url: '' }, 0, 0, 0), new project_tsconfig_paths.ParseLocation({ content: '', url: '' }, 0, 0, 0));
591
591
  const name = rawName.substring(1, rawName.length - 1);
592
592
  let parsed = undefined;
593
593
  if (isEventBinding) {
@@ -628,11 +628,11 @@ function identifyHostBindingReferences(node, programInfo, checker$1, reflector,
628
628
  * The definition can then be used with the Angular compiler to
629
629
  * load/parse the given template.
630
630
  */
631
- function attemptExtractTemplateDefinition(node, checker$1, reflector, resourceLoader) {
631
+ function attemptExtractTemplateDefinition(node, checker, reflector, resourceLoader) {
632
632
  const classDecorators = reflector.getDecoratorsOfDeclaration(node);
633
- const evaluator = new index.PartialEvaluator(reflector, checker$1, null);
633
+ const evaluator = new index.PartialEvaluator(reflector, checker, null);
634
634
  const ngDecorators = classDecorators !== null
635
- ? checker.getAngularDecorators(classDecorators, ['Component'], /* isAngularCore */ false)
635
+ ? project_tsconfig_paths.getAngularDecorators(classDecorators, ['Component'], /* isAngularCore */ false)
636
636
  : [];
637
637
  if (ngDecorators.length === 0 ||
638
638
  ngDecorators[0].args === null ||
@@ -640,7 +640,7 @@ function attemptExtractTemplateDefinition(node, checker$1, reflector, resourceLo
640
640
  !ts.isObjectLiteralExpression(ngDecorators[0].args[0])) {
641
641
  return null;
642
642
  }
643
- const properties = checker.reflectObjectLiteral(ngDecorators[0].args[0]);
643
+ const properties = project_tsconfig_paths.reflectObjectLiteral(ngDecorators[0].args[0]);
644
644
  const templateProp = properties.get('template');
645
645
  const templateUrlProp = properties.get('templateUrl');
646
646
  const containingFile = node.getSourceFile().fileName;
@@ -651,7 +651,7 @@ function attemptExtractTemplateDefinition(node, checker$1, reflector, resourceLo
651
651
  return {
652
652
  isInline: true,
653
653
  expression: templateProp,
654
- interpolationConfig: checker.DEFAULT_INTERPOLATION_CONFIG,
654
+ interpolationConfig: project_tsconfig_paths.DEFAULT_INTERPOLATION_CONFIG,
655
655
  preserveWhitespaces: false,
656
656
  resolvedTemplateUrl: containingFile,
657
657
  templateUrl: containingFile,
@@ -665,7 +665,7 @@ function attemptExtractTemplateDefinition(node, checker$1, reflector, resourceLo
665
665
  if (typeof templateUrl === 'string') {
666
666
  return {
667
667
  isInline: false,
668
- interpolationConfig: checker.DEFAULT_INTERPOLATION_CONFIG,
668
+ interpolationConfig: project_tsconfig_paths.DEFAULT_INTERPOLATION_CONFIG,
669
669
  preserveWhitespaces: false,
670
670
  templateUrlExpression: templateUrlProp,
671
671
  templateUrl,
@@ -684,14 +684,14 @@ function attemptExtractTemplateDefinition(node, checker$1, reflector, resourceLo
684
684
  * Checks whether the given class has an Angular template, and resolves
685
685
  * all of the references to inputs.
686
686
  */
687
- function identifyTemplateReferences(programInfo, node, reflector, checker$1, evaluator, templateTypeChecker, resourceLoader, options, result, knownFields, fieldNamesToConsiderForReferenceLookup) {
688
- const template = templateTypeChecker.getTemplate(node, checker.OptimizeFor.WholeProgram) ??
687
+ function identifyTemplateReferences(programInfo, node, reflector, checker, evaluator, templateTypeChecker, resourceLoader, options, result, knownFields, fieldNamesToConsiderForReferenceLookup) {
688
+ const template = templateTypeChecker.getTemplate(node, project_tsconfig_paths.OptimizeFor.WholeProgram) ??
689
689
  // If there is no template registered in the TCB or compiler, the template may
690
690
  // be skipped due to an explicit `jit: true` setting. We try to detect this case
691
691
  // and parse the template manually.
692
- extractTemplateWithoutCompilerAnalysis(node, checker$1, reflector, resourceLoader, evaluator, options);
692
+ extractTemplateWithoutCompilerAnalysis(node, checker, reflector, resourceLoader, evaluator, options);
693
693
  if (template !== null) {
694
- const visitor = new TemplateReferenceVisitor(checker$1, templateTypeChecker, node, knownFields, fieldNamesToConsiderForReferenceLookup);
694
+ const visitor = new TemplateReferenceVisitor(checker, templateTypeChecker, node, knownFields, fieldNamesToConsiderForReferenceLookup);
695
695
  template.forEach((node) => node.visit(visitor));
696
696
  for (const res of visitor.result) {
697
697
  const templateFilePath = res.context.sourceSpan.start.file.url;
@@ -714,7 +714,7 @@ function identifyTemplateReferences(programInfo, node, reflector, checker$1, eva
714
714
  node: res.context,
715
715
  isObjectShorthandExpression: res.isObjectShorthandExpression,
716
716
  originatingTsFile: project_paths.projectFile(node.getSourceFile(), programInfo),
717
- templateFile: project_paths.projectFile(checker.absoluteFrom(templateFilePath), programInfo),
717
+ templateFile: project_paths.projectFile(project_tsconfig_paths.absoluteFrom(templateFilePath), programInfo),
718
718
  isLikelyPartOfNarrowing: res.isLikelyNarrowed,
719
719
  isWrite: res.isWrite,
720
720
  },
@@ -732,11 +732,11 @@ function identifyTemplateReferences(programInfo, node, reflector, checker$1, eva
732
732
  * contain references to inputs that we can resolve via the fallback
733
733
  * reference resolutions (that does not use the type check block).
734
734
  */
735
- function extractTemplateWithoutCompilerAnalysis(node, checker$1, reflector, resourceLoader, evaluator, options) {
735
+ function extractTemplateWithoutCompilerAnalysis(node, checker, reflector, resourceLoader, evaluator, options) {
736
736
  if (node.name === undefined) {
737
737
  return null;
738
738
  }
739
- const tmplDef = attemptExtractTemplateDefinition(node, checker$1, reflector, resourceLoader);
739
+ const tmplDef = attemptExtractTemplateDefinition(node, checker, reflector, resourceLoader);
740
740
  if (tmplDef === null) {
741
741
  return null;
742
742
  }
@@ -747,7 +747,7 @@ function extractTemplateWithoutCompilerAnalysis(node, checker$1, reflector, reso
747
747
  enableI18nLegacyMessageIdFormat: options.enableI18nLegacyMessageIdFormat !== false,
748
748
  i18nNormalizeLineEndingsInICUs: options.i18nNormalizeLineEndingsInICUs === true,
749
749
  enableSelectorless: false,
750
- }, checker.CompilationMode.FULL).nodes;
750
+ }, project_tsconfig_paths.CompilationMode.FULL).nodes;
751
751
  }
752
752
 
753
753
  /** Gets the pattern and property name for a given binding element. */