@angular/language-service 12.1.0-next.6 → 12.1.3

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.
package/bundles/ivy.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v12.1.0-next.6
2
+ * @license Angular v12.1.3
3
3
  * Copyright Google LLC All Rights Reserved.
4
4
  * License: MIT
5
5
  */
@@ -478,269 +478,6 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
478
478
  function mergeNsAndName(prefix, localName) {
479
479
  return prefix ? `:${prefix}:${localName}` : localName;
480
480
  }
481
- // see https://www.w3.org/TR/html51/syntax.html#named-character-references
482
- // see https://html.spec.whatwg.org/multipage/entities.json
483
- // This list is not exhaustive to keep the compiler footprint low.
484
- // The `{` / `ƫ` syntax should be used when the named character reference does not
485
- // exist.
486
- const NAMED_ENTITIES = {
487
- 'Aacute': '\u00C1',
488
- 'aacute': '\u00E1',
489
- 'Acirc': '\u00C2',
490
- 'acirc': '\u00E2',
491
- 'acute': '\u00B4',
492
- 'AElig': '\u00C6',
493
- 'aelig': '\u00E6',
494
- 'Agrave': '\u00C0',
495
- 'agrave': '\u00E0',
496
- 'alefsym': '\u2135',
497
- 'Alpha': '\u0391',
498
- 'alpha': '\u03B1',
499
- 'amp': '&',
500
- 'and': '\u2227',
501
- 'ang': '\u2220',
502
- 'apos': '\u0027',
503
- 'Aring': '\u00C5',
504
- 'aring': '\u00E5',
505
- 'asymp': '\u2248',
506
- 'Atilde': '\u00C3',
507
- 'atilde': '\u00E3',
508
- 'Auml': '\u00C4',
509
- 'auml': '\u00E4',
510
- 'bdquo': '\u201E',
511
- 'Beta': '\u0392',
512
- 'beta': '\u03B2',
513
- 'brvbar': '\u00A6',
514
- 'bull': '\u2022',
515
- 'cap': '\u2229',
516
- 'Ccedil': '\u00C7',
517
- 'ccedil': '\u00E7',
518
- 'cedil': '\u00B8',
519
- 'cent': '\u00A2',
520
- 'Chi': '\u03A7',
521
- 'chi': '\u03C7',
522
- 'circ': '\u02C6',
523
- 'clubs': '\u2663',
524
- 'cong': '\u2245',
525
- 'copy': '\u00A9',
526
- 'crarr': '\u21B5',
527
- 'cup': '\u222A',
528
- 'curren': '\u00A4',
529
- 'dagger': '\u2020',
530
- 'Dagger': '\u2021',
531
- 'darr': '\u2193',
532
- 'dArr': '\u21D3',
533
- 'deg': '\u00B0',
534
- 'Delta': '\u0394',
535
- 'delta': '\u03B4',
536
- 'diams': '\u2666',
537
- 'divide': '\u00F7',
538
- 'Eacute': '\u00C9',
539
- 'eacute': '\u00E9',
540
- 'Ecirc': '\u00CA',
541
- 'ecirc': '\u00EA',
542
- 'Egrave': '\u00C8',
543
- 'egrave': '\u00E8',
544
- 'empty': '\u2205',
545
- 'emsp': '\u2003',
546
- 'ensp': '\u2002',
547
- 'Epsilon': '\u0395',
548
- 'epsilon': '\u03B5',
549
- 'equiv': '\u2261',
550
- 'Eta': '\u0397',
551
- 'eta': '\u03B7',
552
- 'ETH': '\u00D0',
553
- 'eth': '\u00F0',
554
- 'Euml': '\u00CB',
555
- 'euml': '\u00EB',
556
- 'euro': '\u20AC',
557
- 'exist': '\u2203',
558
- 'fnof': '\u0192',
559
- 'forall': '\u2200',
560
- 'frac12': '\u00BD',
561
- 'frac14': '\u00BC',
562
- 'frac34': '\u00BE',
563
- 'frasl': '\u2044',
564
- 'Gamma': '\u0393',
565
- 'gamma': '\u03B3',
566
- 'ge': '\u2265',
567
- 'gt': '>',
568
- 'harr': '\u2194',
569
- 'hArr': '\u21D4',
570
- 'hearts': '\u2665',
571
- 'hellip': '\u2026',
572
- 'Iacute': '\u00CD',
573
- 'iacute': '\u00ED',
574
- 'Icirc': '\u00CE',
575
- 'icirc': '\u00EE',
576
- 'iexcl': '\u00A1',
577
- 'Igrave': '\u00CC',
578
- 'igrave': '\u00EC',
579
- 'image': '\u2111',
580
- 'infin': '\u221E',
581
- 'int': '\u222B',
582
- 'Iota': '\u0399',
583
- 'iota': '\u03B9',
584
- 'iquest': '\u00BF',
585
- 'isin': '\u2208',
586
- 'Iuml': '\u00CF',
587
- 'iuml': '\u00EF',
588
- 'Kappa': '\u039A',
589
- 'kappa': '\u03BA',
590
- 'Lambda': '\u039B',
591
- 'lambda': '\u03BB',
592
- 'lang': '\u27E8',
593
- 'laquo': '\u00AB',
594
- 'larr': '\u2190',
595
- 'lArr': '\u21D0',
596
- 'lceil': '\u2308',
597
- 'ldquo': '\u201C',
598
- 'le': '\u2264',
599
- 'lfloor': '\u230A',
600
- 'lowast': '\u2217',
601
- 'loz': '\u25CA',
602
- 'lrm': '\u200E',
603
- 'lsaquo': '\u2039',
604
- 'lsquo': '\u2018',
605
- 'lt': '<',
606
- 'macr': '\u00AF',
607
- 'mdash': '\u2014',
608
- 'micro': '\u00B5',
609
- 'middot': '\u00B7',
610
- 'minus': '\u2212',
611
- 'Mu': '\u039C',
612
- 'mu': '\u03BC',
613
- 'nabla': '\u2207',
614
- 'nbsp': '\u00A0',
615
- 'ndash': '\u2013',
616
- 'ne': '\u2260',
617
- 'ni': '\u220B',
618
- 'not': '\u00AC',
619
- 'notin': '\u2209',
620
- 'nsub': '\u2284',
621
- 'Ntilde': '\u00D1',
622
- 'ntilde': '\u00F1',
623
- 'Nu': '\u039D',
624
- 'nu': '\u03BD',
625
- 'Oacute': '\u00D3',
626
- 'oacute': '\u00F3',
627
- 'Ocirc': '\u00D4',
628
- 'ocirc': '\u00F4',
629
- 'OElig': '\u0152',
630
- 'oelig': '\u0153',
631
- 'Ograve': '\u00D2',
632
- 'ograve': '\u00F2',
633
- 'oline': '\u203E',
634
- 'Omega': '\u03A9',
635
- 'omega': '\u03C9',
636
- 'Omicron': '\u039F',
637
- 'omicron': '\u03BF',
638
- 'oplus': '\u2295',
639
- 'or': '\u2228',
640
- 'ordf': '\u00AA',
641
- 'ordm': '\u00BA',
642
- 'Oslash': '\u00D8',
643
- 'oslash': '\u00F8',
644
- 'Otilde': '\u00D5',
645
- 'otilde': '\u00F5',
646
- 'otimes': '\u2297',
647
- 'Ouml': '\u00D6',
648
- 'ouml': '\u00F6',
649
- 'para': '\u00B6',
650
- 'permil': '\u2030',
651
- 'perp': '\u22A5',
652
- 'Phi': '\u03A6',
653
- 'phi': '\u03C6',
654
- 'Pi': '\u03A0',
655
- 'pi': '\u03C0',
656
- 'piv': '\u03D6',
657
- 'plusmn': '\u00B1',
658
- 'pound': '\u00A3',
659
- 'prime': '\u2032',
660
- 'Prime': '\u2033',
661
- 'prod': '\u220F',
662
- 'prop': '\u221D',
663
- 'Psi': '\u03A8',
664
- 'psi': '\u03C8',
665
- 'quot': '\u0022',
666
- 'radic': '\u221A',
667
- 'rang': '\u27E9',
668
- 'raquo': '\u00BB',
669
- 'rarr': '\u2192',
670
- 'rArr': '\u21D2',
671
- 'rceil': '\u2309',
672
- 'rdquo': '\u201D',
673
- 'real': '\u211C',
674
- 'reg': '\u00AE',
675
- 'rfloor': '\u230B',
676
- 'Rho': '\u03A1',
677
- 'rho': '\u03C1',
678
- 'rlm': '\u200F',
679
- 'rsaquo': '\u203A',
680
- 'rsquo': '\u2019',
681
- 'sbquo': '\u201A',
682
- 'Scaron': '\u0160',
683
- 'scaron': '\u0161',
684
- 'sdot': '\u22C5',
685
- 'sect': '\u00A7',
686
- 'shy': '\u00AD',
687
- 'Sigma': '\u03A3',
688
- 'sigma': '\u03C3',
689
- 'sigmaf': '\u03C2',
690
- 'sim': '\u223C',
691
- 'spades': '\u2660',
692
- 'sub': '\u2282',
693
- 'sube': '\u2286',
694
- 'sum': '\u2211',
695
- 'sup': '\u2283',
696
- 'sup1': '\u00B9',
697
- 'sup2': '\u00B2',
698
- 'sup3': '\u00B3',
699
- 'supe': '\u2287',
700
- 'szlig': '\u00DF',
701
- 'Tau': '\u03A4',
702
- 'tau': '\u03C4',
703
- 'there4': '\u2234',
704
- 'Theta': '\u0398',
705
- 'theta': '\u03B8',
706
- 'thetasym': '\u03D1',
707
- 'thinsp': '\u2009',
708
- 'THORN': '\u00DE',
709
- 'thorn': '\u00FE',
710
- 'tilde': '\u02DC',
711
- 'times': '\u00D7',
712
- 'trade': '\u2122',
713
- 'Uacute': '\u00DA',
714
- 'uacute': '\u00FA',
715
- 'uarr': '\u2191',
716
- 'uArr': '\u21D1',
717
- 'Ucirc': '\u00DB',
718
- 'ucirc': '\u00FB',
719
- 'Ugrave': '\u00D9',
720
- 'ugrave': '\u00F9',
721
- 'uml': '\u00A8',
722
- 'upsih': '\u03D2',
723
- 'Upsilon': '\u03A5',
724
- 'upsilon': '\u03C5',
725
- 'Uuml': '\u00DC',
726
- 'uuml': '\u00FC',
727
- 'weierp': '\u2118',
728
- 'Xi': '\u039E',
729
- 'xi': '\u03BE',
730
- 'Yacute': '\u00DD',
731
- 'yacute': '\u00FD',
732
- 'yen': '\u00A5',
733
- 'yuml': '\u00FF',
734
- 'Yuml': '\u0178',
735
- 'Zeta': '\u0396',
736
- 'zeta': '\u03B6',
737
- 'zwj': '\u200D',
738
- 'zwnj': '\u200C',
739
- };
740
- // The &ngsp; pseudo-entity is denoting a space. see:
741
- // https://github.com/dart-lang/angular/blob/0bb611387d29d65b5af7f9d2515ab571fd3fbee4/_tests/test/compiler/preserve_whitespace_test.dart
742
- const NGSP_UNICODE = '\uE500';
743
- NAMED_ENTITIES['ngsp'] = NGSP_UNICODE;
744
481
 
745
482
  /**
746
483
  * @license
@@ -6410,9 +6147,6 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
6410
6147
  this.span = span;
6411
6148
  this.sourceSpan = sourceSpan;
6412
6149
  }
6413
- visit(visitor, context = null) {
6414
- return null;
6415
- }
6416
6150
  toString() {
6417
6151
  return 'AST';
6418
6152
  }
@@ -7678,6 +7412,9 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
7678
7412
  const obj = this._visit(ast.receiver, _Mode.Expression);
7679
7413
  const key = this._visit(ast.key, _Mode.Expression);
7680
7414
  const value = this._visit(ast.value, _Mode.Expression);
7415
+ if (obj === this._implicitReceiver) {
7416
+ this._localResolver.maybeRestoreView();
7417
+ }
7681
7418
  return convertToStatementIfNeeded(mode, obj.key(key).set(value));
7682
7419
  }
7683
7420
  visitLiteralArray(ast, mode) {
@@ -8122,6 +7859,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
8122
7859
  this.globals = globals;
8123
7860
  }
8124
7861
  notifyImplicitReceiverUse() { }
7862
+ maybeRestoreView() { }
8125
7863
  getLocal(name) {
8126
7864
  if (name === EventHandlerVars.event.name) {
8127
7865
  return EventHandlerVars.event;
@@ -8147,7 +7885,6 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
8147
7885
  class BuiltinFunctionCall extends FunctionCall {
8148
7886
  constructor(span, sourceSpan, args, converter) {
8149
7887
  super(span, sourceSpan, null, args);
8150
- this.args = args;
8151
7888
  this.converter = converter;
8152
7889
  }
8153
7890
  }
@@ -8997,6 +8734,2149 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
8997
8734
  return result;
8998
8735
  }
8999
8736
 
8737
+ /**
8738
+ * @license
8739
+ * Copyright Google LLC All Rights Reserved.
8740
+ *
8741
+ * Use of this source code is governed by an MIT-style license that can be
8742
+ * found in the LICENSE file at https://angular.io/license
8743
+ */
8744
+ // Mapping between all HTML entity names and their unicode representation.
8745
+ // Generated from https://html.spec.whatwg.org/multipage/entities.json by stripping
8746
+ // the `&` and `;` from the keys and removing the duplicates.
8747
+ // see https://www.w3.org/TR/html51/syntax.html#named-character-references
8748
+ const NAMED_ENTITIES = {
8749
+ 'AElig': '\u00C6',
8750
+ 'AMP': '\u0026',
8751
+ 'amp': '\u0026',
8752
+ 'Aacute': '\u00C1',
8753
+ 'Abreve': '\u0102',
8754
+ 'Acirc': '\u00C2',
8755
+ 'Acy': '\u0410',
8756
+ 'Afr': '\uD835\uDD04',
8757
+ 'Agrave': '\u00C0',
8758
+ 'Alpha': '\u0391',
8759
+ 'Amacr': '\u0100',
8760
+ 'And': '\u2A53',
8761
+ 'Aogon': '\u0104',
8762
+ 'Aopf': '\uD835\uDD38',
8763
+ 'ApplyFunction': '\u2061',
8764
+ 'af': '\u2061',
8765
+ 'Aring': '\u00C5',
8766
+ 'angst': '\u00C5',
8767
+ 'Ascr': '\uD835\uDC9C',
8768
+ 'Assign': '\u2254',
8769
+ 'colone': '\u2254',
8770
+ 'coloneq': '\u2254',
8771
+ 'Atilde': '\u00C3',
8772
+ 'Auml': '\u00C4',
8773
+ 'Backslash': '\u2216',
8774
+ 'setminus': '\u2216',
8775
+ 'setmn': '\u2216',
8776
+ 'smallsetminus': '\u2216',
8777
+ 'ssetmn': '\u2216',
8778
+ 'Barv': '\u2AE7',
8779
+ 'Barwed': '\u2306',
8780
+ 'doublebarwedge': '\u2306',
8781
+ 'Bcy': '\u0411',
8782
+ 'Because': '\u2235',
8783
+ 'becaus': '\u2235',
8784
+ 'because': '\u2235',
8785
+ 'Bernoullis': '\u212C',
8786
+ 'Bscr': '\u212C',
8787
+ 'bernou': '\u212C',
8788
+ 'Beta': '\u0392',
8789
+ 'Bfr': '\uD835\uDD05',
8790
+ 'Bopf': '\uD835\uDD39',
8791
+ 'Breve': '\u02D8',
8792
+ 'breve': '\u02D8',
8793
+ 'Bumpeq': '\u224E',
8794
+ 'HumpDownHump': '\u224E',
8795
+ 'bump': '\u224E',
8796
+ 'CHcy': '\u0427',
8797
+ 'COPY': '\u00A9',
8798
+ 'copy': '\u00A9',
8799
+ 'Cacute': '\u0106',
8800
+ 'Cap': '\u22D2',
8801
+ 'CapitalDifferentialD': '\u2145',
8802
+ 'DD': '\u2145',
8803
+ 'Cayleys': '\u212D',
8804
+ 'Cfr': '\u212D',
8805
+ 'Ccaron': '\u010C',
8806
+ 'Ccedil': '\u00C7',
8807
+ 'Ccirc': '\u0108',
8808
+ 'Cconint': '\u2230',
8809
+ 'Cdot': '\u010A',
8810
+ 'Cedilla': '\u00B8',
8811
+ 'cedil': '\u00B8',
8812
+ 'CenterDot': '\u00B7',
8813
+ 'centerdot': '\u00B7',
8814
+ 'middot': '\u00B7',
8815
+ 'Chi': '\u03A7',
8816
+ 'CircleDot': '\u2299',
8817
+ 'odot': '\u2299',
8818
+ 'CircleMinus': '\u2296',
8819
+ 'ominus': '\u2296',
8820
+ 'CirclePlus': '\u2295',
8821
+ 'oplus': '\u2295',
8822
+ 'CircleTimes': '\u2297',
8823
+ 'otimes': '\u2297',
8824
+ 'ClockwiseContourIntegral': '\u2232',
8825
+ 'cwconint': '\u2232',
8826
+ 'CloseCurlyDoubleQuote': '\u201D',
8827
+ 'rdquo': '\u201D',
8828
+ 'rdquor': '\u201D',
8829
+ 'CloseCurlyQuote': '\u2019',
8830
+ 'rsquo': '\u2019',
8831
+ 'rsquor': '\u2019',
8832
+ 'Colon': '\u2237',
8833
+ 'Proportion': '\u2237',
8834
+ 'Colone': '\u2A74',
8835
+ 'Congruent': '\u2261',
8836
+ 'equiv': '\u2261',
8837
+ 'Conint': '\u222F',
8838
+ 'DoubleContourIntegral': '\u222F',
8839
+ 'ContourIntegral': '\u222E',
8840
+ 'conint': '\u222E',
8841
+ 'oint': '\u222E',
8842
+ 'Copf': '\u2102',
8843
+ 'complexes': '\u2102',
8844
+ 'Coproduct': '\u2210',
8845
+ 'coprod': '\u2210',
8846
+ 'CounterClockwiseContourIntegral': '\u2233',
8847
+ 'awconint': '\u2233',
8848
+ 'Cross': '\u2A2F',
8849
+ 'Cscr': '\uD835\uDC9E',
8850
+ 'Cup': '\u22D3',
8851
+ 'CupCap': '\u224D',
8852
+ 'asympeq': '\u224D',
8853
+ 'DDotrahd': '\u2911',
8854
+ 'DJcy': '\u0402',
8855
+ 'DScy': '\u0405',
8856
+ 'DZcy': '\u040F',
8857
+ 'Dagger': '\u2021',
8858
+ 'ddagger': '\u2021',
8859
+ 'Darr': '\u21A1',
8860
+ 'Dashv': '\u2AE4',
8861
+ 'DoubleLeftTee': '\u2AE4',
8862
+ 'Dcaron': '\u010E',
8863
+ 'Dcy': '\u0414',
8864
+ 'Del': '\u2207',
8865
+ 'nabla': '\u2207',
8866
+ 'Delta': '\u0394',
8867
+ 'Dfr': '\uD835\uDD07',
8868
+ 'DiacriticalAcute': '\u00B4',
8869
+ 'acute': '\u00B4',
8870
+ 'DiacriticalDot': '\u02D9',
8871
+ 'dot': '\u02D9',
8872
+ 'DiacriticalDoubleAcute': '\u02DD',
8873
+ 'dblac': '\u02DD',
8874
+ 'DiacriticalGrave': '\u0060',
8875
+ 'grave': '\u0060',
8876
+ 'DiacriticalTilde': '\u02DC',
8877
+ 'tilde': '\u02DC',
8878
+ 'Diamond': '\u22C4',
8879
+ 'diam': '\u22C4',
8880
+ 'diamond': '\u22C4',
8881
+ 'DifferentialD': '\u2146',
8882
+ 'dd': '\u2146',
8883
+ 'Dopf': '\uD835\uDD3B',
8884
+ 'Dot': '\u00A8',
8885
+ 'DoubleDot': '\u00A8',
8886
+ 'die': '\u00A8',
8887
+ 'uml': '\u00A8',
8888
+ 'DotDot': '\u20DC',
8889
+ 'DotEqual': '\u2250',
8890
+ 'doteq': '\u2250',
8891
+ 'esdot': '\u2250',
8892
+ 'DoubleDownArrow': '\u21D3',
8893
+ 'Downarrow': '\u21D3',
8894
+ 'dArr': '\u21D3',
8895
+ 'DoubleLeftArrow': '\u21D0',
8896
+ 'Leftarrow': '\u21D0',
8897
+ 'lArr': '\u21D0',
8898
+ 'DoubleLeftRightArrow': '\u21D4',
8899
+ 'Leftrightarrow': '\u21D4',
8900
+ 'hArr': '\u21D4',
8901
+ 'iff': '\u21D4',
8902
+ 'DoubleLongLeftArrow': '\u27F8',
8903
+ 'Longleftarrow': '\u27F8',
8904
+ 'xlArr': '\u27F8',
8905
+ 'DoubleLongLeftRightArrow': '\u27FA',
8906
+ 'Longleftrightarrow': '\u27FA',
8907
+ 'xhArr': '\u27FA',
8908
+ 'DoubleLongRightArrow': '\u27F9',
8909
+ 'Longrightarrow': '\u27F9',
8910
+ 'xrArr': '\u27F9',
8911
+ 'DoubleRightArrow': '\u21D2',
8912
+ 'Implies': '\u21D2',
8913
+ 'Rightarrow': '\u21D2',
8914
+ 'rArr': '\u21D2',
8915
+ 'DoubleRightTee': '\u22A8',
8916
+ 'vDash': '\u22A8',
8917
+ 'DoubleUpArrow': '\u21D1',
8918
+ 'Uparrow': '\u21D1',
8919
+ 'uArr': '\u21D1',
8920
+ 'DoubleUpDownArrow': '\u21D5',
8921
+ 'Updownarrow': '\u21D5',
8922
+ 'vArr': '\u21D5',
8923
+ 'DoubleVerticalBar': '\u2225',
8924
+ 'par': '\u2225',
8925
+ 'parallel': '\u2225',
8926
+ 'shortparallel': '\u2225',
8927
+ 'spar': '\u2225',
8928
+ 'DownArrow': '\u2193',
8929
+ 'ShortDownArrow': '\u2193',
8930
+ 'darr': '\u2193',
8931
+ 'downarrow': '\u2193',
8932
+ 'DownArrowBar': '\u2913',
8933
+ 'DownArrowUpArrow': '\u21F5',
8934
+ 'duarr': '\u21F5',
8935
+ 'DownBreve': '\u0311',
8936
+ 'DownLeftRightVector': '\u2950',
8937
+ 'DownLeftTeeVector': '\u295E',
8938
+ 'DownLeftVector': '\u21BD',
8939
+ 'leftharpoondown': '\u21BD',
8940
+ 'lhard': '\u21BD',
8941
+ 'DownLeftVectorBar': '\u2956',
8942
+ 'DownRightTeeVector': '\u295F',
8943
+ 'DownRightVector': '\u21C1',
8944
+ 'rhard': '\u21C1',
8945
+ 'rightharpoondown': '\u21C1',
8946
+ 'DownRightVectorBar': '\u2957',
8947
+ 'DownTee': '\u22A4',
8948
+ 'top': '\u22A4',
8949
+ 'DownTeeArrow': '\u21A7',
8950
+ 'mapstodown': '\u21A7',
8951
+ 'Dscr': '\uD835\uDC9F',
8952
+ 'Dstrok': '\u0110',
8953
+ 'ENG': '\u014A',
8954
+ 'ETH': '\u00D0',
8955
+ 'Eacute': '\u00C9',
8956
+ 'Ecaron': '\u011A',
8957
+ 'Ecirc': '\u00CA',
8958
+ 'Ecy': '\u042D',
8959
+ 'Edot': '\u0116',
8960
+ 'Efr': '\uD835\uDD08',
8961
+ 'Egrave': '\u00C8',
8962
+ 'Element': '\u2208',
8963
+ 'in': '\u2208',
8964
+ 'isin': '\u2208',
8965
+ 'isinv': '\u2208',
8966
+ 'Emacr': '\u0112',
8967
+ 'EmptySmallSquare': '\u25FB',
8968
+ 'EmptyVerySmallSquare': '\u25AB',
8969
+ 'Eogon': '\u0118',
8970
+ 'Eopf': '\uD835\uDD3C',
8971
+ 'Epsilon': '\u0395',
8972
+ 'Equal': '\u2A75',
8973
+ 'EqualTilde': '\u2242',
8974
+ 'eqsim': '\u2242',
8975
+ 'esim': '\u2242',
8976
+ 'Equilibrium': '\u21CC',
8977
+ 'rightleftharpoons': '\u21CC',
8978
+ 'rlhar': '\u21CC',
8979
+ 'Escr': '\u2130',
8980
+ 'expectation': '\u2130',
8981
+ 'Esim': '\u2A73',
8982
+ 'Eta': '\u0397',
8983
+ 'Euml': '\u00CB',
8984
+ 'Exists': '\u2203',
8985
+ 'exist': '\u2203',
8986
+ 'ExponentialE': '\u2147',
8987
+ 'ee': '\u2147',
8988
+ 'exponentiale': '\u2147',
8989
+ 'Fcy': '\u0424',
8990
+ 'Ffr': '\uD835\uDD09',
8991
+ 'FilledSmallSquare': '\u25FC',
8992
+ 'FilledVerySmallSquare': '\u25AA',
8993
+ 'blacksquare': '\u25AA',
8994
+ 'squarf': '\u25AA',
8995
+ 'squf': '\u25AA',
8996
+ 'Fopf': '\uD835\uDD3D',
8997
+ 'ForAll': '\u2200',
8998
+ 'forall': '\u2200',
8999
+ 'Fouriertrf': '\u2131',
9000
+ 'Fscr': '\u2131',
9001
+ 'GJcy': '\u0403',
9002
+ 'GT': '\u003E',
9003
+ 'gt': '\u003E',
9004
+ 'Gamma': '\u0393',
9005
+ 'Gammad': '\u03DC',
9006
+ 'Gbreve': '\u011E',
9007
+ 'Gcedil': '\u0122',
9008
+ 'Gcirc': '\u011C',
9009
+ 'Gcy': '\u0413',
9010
+ 'Gdot': '\u0120',
9011
+ 'Gfr': '\uD835\uDD0A',
9012
+ 'Gg': '\u22D9',
9013
+ 'ggg': '\u22D9',
9014
+ 'Gopf': '\uD835\uDD3E',
9015
+ 'GreaterEqual': '\u2265',
9016
+ 'ge': '\u2265',
9017
+ 'geq': '\u2265',
9018
+ 'GreaterEqualLess': '\u22DB',
9019
+ 'gel': '\u22DB',
9020
+ 'gtreqless': '\u22DB',
9021
+ 'GreaterFullEqual': '\u2267',
9022
+ 'gE': '\u2267',
9023
+ 'geqq': '\u2267',
9024
+ 'GreaterGreater': '\u2AA2',
9025
+ 'GreaterLess': '\u2277',
9026
+ 'gl': '\u2277',
9027
+ 'gtrless': '\u2277',
9028
+ 'GreaterSlantEqual': '\u2A7E',
9029
+ 'geqslant': '\u2A7E',
9030
+ 'ges': '\u2A7E',
9031
+ 'GreaterTilde': '\u2273',
9032
+ 'gsim': '\u2273',
9033
+ 'gtrsim': '\u2273',
9034
+ 'Gscr': '\uD835\uDCA2',
9035
+ 'Gt': '\u226B',
9036
+ 'NestedGreaterGreater': '\u226B',
9037
+ 'gg': '\u226B',
9038
+ 'HARDcy': '\u042A',
9039
+ 'Hacek': '\u02C7',
9040
+ 'caron': '\u02C7',
9041
+ 'Hat': '\u005E',
9042
+ 'Hcirc': '\u0124',
9043
+ 'Hfr': '\u210C',
9044
+ 'Poincareplane': '\u210C',
9045
+ 'HilbertSpace': '\u210B',
9046
+ 'Hscr': '\u210B',
9047
+ 'hamilt': '\u210B',
9048
+ 'Hopf': '\u210D',
9049
+ 'quaternions': '\u210D',
9050
+ 'HorizontalLine': '\u2500',
9051
+ 'boxh': '\u2500',
9052
+ 'Hstrok': '\u0126',
9053
+ 'HumpEqual': '\u224F',
9054
+ 'bumpe': '\u224F',
9055
+ 'bumpeq': '\u224F',
9056
+ 'IEcy': '\u0415',
9057
+ 'IJlig': '\u0132',
9058
+ 'IOcy': '\u0401',
9059
+ 'Iacute': '\u00CD',
9060
+ 'Icirc': '\u00CE',
9061
+ 'Icy': '\u0418',
9062
+ 'Idot': '\u0130',
9063
+ 'Ifr': '\u2111',
9064
+ 'Im': '\u2111',
9065
+ 'image': '\u2111',
9066
+ 'imagpart': '\u2111',
9067
+ 'Igrave': '\u00CC',
9068
+ 'Imacr': '\u012A',
9069
+ 'ImaginaryI': '\u2148',
9070
+ 'ii': '\u2148',
9071
+ 'Int': '\u222C',
9072
+ 'Integral': '\u222B',
9073
+ 'int': '\u222B',
9074
+ 'Intersection': '\u22C2',
9075
+ 'bigcap': '\u22C2',
9076
+ 'xcap': '\u22C2',
9077
+ 'InvisibleComma': '\u2063',
9078
+ 'ic': '\u2063',
9079
+ 'InvisibleTimes': '\u2062',
9080
+ 'it': '\u2062',
9081
+ 'Iogon': '\u012E',
9082
+ 'Iopf': '\uD835\uDD40',
9083
+ 'Iota': '\u0399',
9084
+ 'Iscr': '\u2110',
9085
+ 'imagline': '\u2110',
9086
+ 'Itilde': '\u0128',
9087
+ 'Iukcy': '\u0406',
9088
+ 'Iuml': '\u00CF',
9089
+ 'Jcirc': '\u0134',
9090
+ 'Jcy': '\u0419',
9091
+ 'Jfr': '\uD835\uDD0D',
9092
+ 'Jopf': '\uD835\uDD41',
9093
+ 'Jscr': '\uD835\uDCA5',
9094
+ 'Jsercy': '\u0408',
9095
+ 'Jukcy': '\u0404',
9096
+ 'KHcy': '\u0425',
9097
+ 'KJcy': '\u040C',
9098
+ 'Kappa': '\u039A',
9099
+ 'Kcedil': '\u0136',
9100
+ 'Kcy': '\u041A',
9101
+ 'Kfr': '\uD835\uDD0E',
9102
+ 'Kopf': '\uD835\uDD42',
9103
+ 'Kscr': '\uD835\uDCA6',
9104
+ 'LJcy': '\u0409',
9105
+ 'LT': '\u003C',
9106
+ 'lt': '\u003C',
9107
+ 'Lacute': '\u0139',
9108
+ 'Lambda': '\u039B',
9109
+ 'Lang': '\u27EA',
9110
+ 'Laplacetrf': '\u2112',
9111
+ 'Lscr': '\u2112',
9112
+ 'lagran': '\u2112',
9113
+ 'Larr': '\u219E',
9114
+ 'twoheadleftarrow': '\u219E',
9115
+ 'Lcaron': '\u013D',
9116
+ 'Lcedil': '\u013B',
9117
+ 'Lcy': '\u041B',
9118
+ 'LeftAngleBracket': '\u27E8',
9119
+ 'lang': '\u27E8',
9120
+ 'langle': '\u27E8',
9121
+ 'LeftArrow': '\u2190',
9122
+ 'ShortLeftArrow': '\u2190',
9123
+ 'larr': '\u2190',
9124
+ 'leftarrow': '\u2190',
9125
+ 'slarr': '\u2190',
9126
+ 'LeftArrowBar': '\u21E4',
9127
+ 'larrb': '\u21E4',
9128
+ 'LeftArrowRightArrow': '\u21C6',
9129
+ 'leftrightarrows': '\u21C6',
9130
+ 'lrarr': '\u21C6',
9131
+ 'LeftCeiling': '\u2308',
9132
+ 'lceil': '\u2308',
9133
+ 'LeftDoubleBracket': '\u27E6',
9134
+ 'lobrk': '\u27E6',
9135
+ 'LeftDownTeeVector': '\u2961',
9136
+ 'LeftDownVector': '\u21C3',
9137
+ 'dharl': '\u21C3',
9138
+ 'downharpoonleft': '\u21C3',
9139
+ 'LeftDownVectorBar': '\u2959',
9140
+ 'LeftFloor': '\u230A',
9141
+ 'lfloor': '\u230A',
9142
+ 'LeftRightArrow': '\u2194',
9143
+ 'harr': '\u2194',
9144
+ 'leftrightarrow': '\u2194',
9145
+ 'LeftRightVector': '\u294E',
9146
+ 'LeftTee': '\u22A3',
9147
+ 'dashv': '\u22A3',
9148
+ 'LeftTeeArrow': '\u21A4',
9149
+ 'mapstoleft': '\u21A4',
9150
+ 'LeftTeeVector': '\u295A',
9151
+ 'LeftTriangle': '\u22B2',
9152
+ 'vartriangleleft': '\u22B2',
9153
+ 'vltri': '\u22B2',
9154
+ 'LeftTriangleBar': '\u29CF',
9155
+ 'LeftTriangleEqual': '\u22B4',
9156
+ 'ltrie': '\u22B4',
9157
+ 'trianglelefteq': '\u22B4',
9158
+ 'LeftUpDownVector': '\u2951',
9159
+ 'LeftUpTeeVector': '\u2960',
9160
+ 'LeftUpVector': '\u21BF',
9161
+ 'uharl': '\u21BF',
9162
+ 'upharpoonleft': '\u21BF',
9163
+ 'LeftUpVectorBar': '\u2958',
9164
+ 'LeftVector': '\u21BC',
9165
+ 'leftharpoonup': '\u21BC',
9166
+ 'lharu': '\u21BC',
9167
+ 'LeftVectorBar': '\u2952',
9168
+ 'LessEqualGreater': '\u22DA',
9169
+ 'leg': '\u22DA',
9170
+ 'lesseqgtr': '\u22DA',
9171
+ 'LessFullEqual': '\u2266',
9172
+ 'lE': '\u2266',
9173
+ 'leqq': '\u2266',
9174
+ 'LessGreater': '\u2276',
9175
+ 'lessgtr': '\u2276',
9176
+ 'lg': '\u2276',
9177
+ 'LessLess': '\u2AA1',
9178
+ 'LessSlantEqual': '\u2A7D',
9179
+ 'leqslant': '\u2A7D',
9180
+ 'les': '\u2A7D',
9181
+ 'LessTilde': '\u2272',
9182
+ 'lesssim': '\u2272',
9183
+ 'lsim': '\u2272',
9184
+ 'Lfr': '\uD835\uDD0F',
9185
+ 'Ll': '\u22D8',
9186
+ 'Lleftarrow': '\u21DA',
9187
+ 'lAarr': '\u21DA',
9188
+ 'Lmidot': '\u013F',
9189
+ 'LongLeftArrow': '\u27F5',
9190
+ 'longleftarrow': '\u27F5',
9191
+ 'xlarr': '\u27F5',
9192
+ 'LongLeftRightArrow': '\u27F7',
9193
+ 'longleftrightarrow': '\u27F7',
9194
+ 'xharr': '\u27F7',
9195
+ 'LongRightArrow': '\u27F6',
9196
+ 'longrightarrow': '\u27F6',
9197
+ 'xrarr': '\u27F6',
9198
+ 'Lopf': '\uD835\uDD43',
9199
+ 'LowerLeftArrow': '\u2199',
9200
+ 'swarr': '\u2199',
9201
+ 'swarrow': '\u2199',
9202
+ 'LowerRightArrow': '\u2198',
9203
+ 'searr': '\u2198',
9204
+ 'searrow': '\u2198',
9205
+ 'Lsh': '\u21B0',
9206
+ 'lsh': '\u21B0',
9207
+ 'Lstrok': '\u0141',
9208
+ 'Lt': '\u226A',
9209
+ 'NestedLessLess': '\u226A',
9210
+ 'll': '\u226A',
9211
+ 'Map': '\u2905',
9212
+ 'Mcy': '\u041C',
9213
+ 'MediumSpace': '\u205F',
9214
+ 'Mellintrf': '\u2133',
9215
+ 'Mscr': '\u2133',
9216
+ 'phmmat': '\u2133',
9217
+ 'Mfr': '\uD835\uDD10',
9218
+ 'MinusPlus': '\u2213',
9219
+ 'mnplus': '\u2213',
9220
+ 'mp': '\u2213',
9221
+ 'Mopf': '\uD835\uDD44',
9222
+ 'Mu': '\u039C',
9223
+ 'NJcy': '\u040A',
9224
+ 'Nacute': '\u0143',
9225
+ 'Ncaron': '\u0147',
9226
+ 'Ncedil': '\u0145',
9227
+ 'Ncy': '\u041D',
9228
+ 'NegativeMediumSpace': '\u200B',
9229
+ 'NegativeThickSpace': '\u200B',
9230
+ 'NegativeThinSpace': '\u200B',
9231
+ 'NegativeVeryThinSpace': '\u200B',
9232
+ 'ZeroWidthSpace': '\u200B',
9233
+ 'NewLine': '\u000A',
9234
+ 'Nfr': '\uD835\uDD11',
9235
+ 'NoBreak': '\u2060',
9236
+ 'NonBreakingSpace': '\u00A0',
9237
+ 'nbsp': '\u00A0',
9238
+ 'Nopf': '\u2115',
9239
+ 'naturals': '\u2115',
9240
+ 'Not': '\u2AEC',
9241
+ 'NotCongruent': '\u2262',
9242
+ 'nequiv': '\u2262',
9243
+ 'NotCupCap': '\u226D',
9244
+ 'NotDoubleVerticalBar': '\u2226',
9245
+ 'npar': '\u2226',
9246
+ 'nparallel': '\u2226',
9247
+ 'nshortparallel': '\u2226',
9248
+ 'nspar': '\u2226',
9249
+ 'NotElement': '\u2209',
9250
+ 'notin': '\u2209',
9251
+ 'notinva': '\u2209',
9252
+ 'NotEqual': '\u2260',
9253
+ 'ne': '\u2260',
9254
+ 'NotEqualTilde': '\u2242\u0338',
9255
+ 'nesim': '\u2242\u0338',
9256
+ 'NotExists': '\u2204',
9257
+ 'nexist': '\u2204',
9258
+ 'nexists': '\u2204',
9259
+ 'NotGreater': '\u226F',
9260
+ 'ngt': '\u226F',
9261
+ 'ngtr': '\u226F',
9262
+ 'NotGreaterEqual': '\u2271',
9263
+ 'nge': '\u2271',
9264
+ 'ngeq': '\u2271',
9265
+ 'NotGreaterFullEqual': '\u2267\u0338',
9266
+ 'ngE': '\u2267\u0338',
9267
+ 'ngeqq': '\u2267\u0338',
9268
+ 'NotGreaterGreater': '\u226B\u0338',
9269
+ 'nGtv': '\u226B\u0338',
9270
+ 'NotGreaterLess': '\u2279',
9271
+ 'ntgl': '\u2279',
9272
+ 'NotGreaterSlantEqual': '\u2A7E\u0338',
9273
+ 'ngeqslant': '\u2A7E\u0338',
9274
+ 'nges': '\u2A7E\u0338',
9275
+ 'NotGreaterTilde': '\u2275',
9276
+ 'ngsim': '\u2275',
9277
+ 'NotHumpDownHump': '\u224E\u0338',
9278
+ 'nbump': '\u224E\u0338',
9279
+ 'NotHumpEqual': '\u224F\u0338',
9280
+ 'nbumpe': '\u224F\u0338',
9281
+ 'NotLeftTriangle': '\u22EA',
9282
+ 'nltri': '\u22EA',
9283
+ 'ntriangleleft': '\u22EA',
9284
+ 'NotLeftTriangleBar': '\u29CF\u0338',
9285
+ 'NotLeftTriangleEqual': '\u22EC',
9286
+ 'nltrie': '\u22EC',
9287
+ 'ntrianglelefteq': '\u22EC',
9288
+ 'NotLess': '\u226E',
9289
+ 'nless': '\u226E',
9290
+ 'nlt': '\u226E',
9291
+ 'NotLessEqual': '\u2270',
9292
+ 'nle': '\u2270',
9293
+ 'nleq': '\u2270',
9294
+ 'NotLessGreater': '\u2278',
9295
+ 'ntlg': '\u2278',
9296
+ 'NotLessLess': '\u226A\u0338',
9297
+ 'nLtv': '\u226A\u0338',
9298
+ 'NotLessSlantEqual': '\u2A7D\u0338',
9299
+ 'nleqslant': '\u2A7D\u0338',
9300
+ 'nles': '\u2A7D\u0338',
9301
+ 'NotLessTilde': '\u2274',
9302
+ 'nlsim': '\u2274',
9303
+ 'NotNestedGreaterGreater': '\u2AA2\u0338',
9304
+ 'NotNestedLessLess': '\u2AA1\u0338',
9305
+ 'NotPrecedes': '\u2280',
9306
+ 'npr': '\u2280',
9307
+ 'nprec': '\u2280',
9308
+ 'NotPrecedesEqual': '\u2AAF\u0338',
9309
+ 'npre': '\u2AAF\u0338',
9310
+ 'npreceq': '\u2AAF\u0338',
9311
+ 'NotPrecedesSlantEqual': '\u22E0',
9312
+ 'nprcue': '\u22E0',
9313
+ 'NotReverseElement': '\u220C',
9314
+ 'notni': '\u220C',
9315
+ 'notniva': '\u220C',
9316
+ 'NotRightTriangle': '\u22EB',
9317
+ 'nrtri': '\u22EB',
9318
+ 'ntriangleright': '\u22EB',
9319
+ 'NotRightTriangleBar': '\u29D0\u0338',
9320
+ 'NotRightTriangleEqual': '\u22ED',
9321
+ 'nrtrie': '\u22ED',
9322
+ 'ntrianglerighteq': '\u22ED',
9323
+ 'NotSquareSubset': '\u228F\u0338',
9324
+ 'NotSquareSubsetEqual': '\u22E2',
9325
+ 'nsqsube': '\u22E2',
9326
+ 'NotSquareSuperset': '\u2290\u0338',
9327
+ 'NotSquareSupersetEqual': '\u22E3',
9328
+ 'nsqsupe': '\u22E3',
9329
+ 'NotSubset': '\u2282\u20D2',
9330
+ 'nsubset': '\u2282\u20D2',
9331
+ 'vnsub': '\u2282\u20D2',
9332
+ 'NotSubsetEqual': '\u2288',
9333
+ 'nsube': '\u2288',
9334
+ 'nsubseteq': '\u2288',
9335
+ 'NotSucceeds': '\u2281',
9336
+ 'nsc': '\u2281',
9337
+ 'nsucc': '\u2281',
9338
+ 'NotSucceedsEqual': '\u2AB0\u0338',
9339
+ 'nsce': '\u2AB0\u0338',
9340
+ 'nsucceq': '\u2AB0\u0338',
9341
+ 'NotSucceedsSlantEqual': '\u22E1',
9342
+ 'nsccue': '\u22E1',
9343
+ 'NotSucceedsTilde': '\u227F\u0338',
9344
+ 'NotSuperset': '\u2283\u20D2',
9345
+ 'nsupset': '\u2283\u20D2',
9346
+ 'vnsup': '\u2283\u20D2',
9347
+ 'NotSupersetEqual': '\u2289',
9348
+ 'nsupe': '\u2289',
9349
+ 'nsupseteq': '\u2289',
9350
+ 'NotTilde': '\u2241',
9351
+ 'nsim': '\u2241',
9352
+ 'NotTildeEqual': '\u2244',
9353
+ 'nsime': '\u2244',
9354
+ 'nsimeq': '\u2244',
9355
+ 'NotTildeFullEqual': '\u2247',
9356
+ 'ncong': '\u2247',
9357
+ 'NotTildeTilde': '\u2249',
9358
+ 'nap': '\u2249',
9359
+ 'napprox': '\u2249',
9360
+ 'NotVerticalBar': '\u2224',
9361
+ 'nmid': '\u2224',
9362
+ 'nshortmid': '\u2224',
9363
+ 'nsmid': '\u2224',
9364
+ 'Nscr': '\uD835\uDCA9',
9365
+ 'Ntilde': '\u00D1',
9366
+ 'Nu': '\u039D',
9367
+ 'OElig': '\u0152',
9368
+ 'Oacute': '\u00D3',
9369
+ 'Ocirc': '\u00D4',
9370
+ 'Ocy': '\u041E',
9371
+ 'Odblac': '\u0150',
9372
+ 'Ofr': '\uD835\uDD12',
9373
+ 'Ograve': '\u00D2',
9374
+ 'Omacr': '\u014C',
9375
+ 'Omega': '\u03A9',
9376
+ 'ohm': '\u03A9',
9377
+ 'Omicron': '\u039F',
9378
+ 'Oopf': '\uD835\uDD46',
9379
+ 'OpenCurlyDoubleQuote': '\u201C',
9380
+ 'ldquo': '\u201C',
9381
+ 'OpenCurlyQuote': '\u2018',
9382
+ 'lsquo': '\u2018',
9383
+ 'Or': '\u2A54',
9384
+ 'Oscr': '\uD835\uDCAA',
9385
+ 'Oslash': '\u00D8',
9386
+ 'Otilde': '\u00D5',
9387
+ 'Otimes': '\u2A37',
9388
+ 'Ouml': '\u00D6',
9389
+ 'OverBar': '\u203E',
9390
+ 'oline': '\u203E',
9391
+ 'OverBrace': '\u23DE',
9392
+ 'OverBracket': '\u23B4',
9393
+ 'tbrk': '\u23B4',
9394
+ 'OverParenthesis': '\u23DC',
9395
+ 'PartialD': '\u2202',
9396
+ 'part': '\u2202',
9397
+ 'Pcy': '\u041F',
9398
+ 'Pfr': '\uD835\uDD13',
9399
+ 'Phi': '\u03A6',
9400
+ 'Pi': '\u03A0',
9401
+ 'PlusMinus': '\u00B1',
9402
+ 'plusmn': '\u00B1',
9403
+ 'pm': '\u00B1',
9404
+ 'Popf': '\u2119',
9405
+ 'primes': '\u2119',
9406
+ 'Pr': '\u2ABB',
9407
+ 'Precedes': '\u227A',
9408
+ 'pr': '\u227A',
9409
+ 'prec': '\u227A',
9410
+ 'PrecedesEqual': '\u2AAF',
9411
+ 'pre': '\u2AAF',
9412
+ 'preceq': '\u2AAF',
9413
+ 'PrecedesSlantEqual': '\u227C',
9414
+ 'prcue': '\u227C',
9415
+ 'preccurlyeq': '\u227C',
9416
+ 'PrecedesTilde': '\u227E',
9417
+ 'precsim': '\u227E',
9418
+ 'prsim': '\u227E',
9419
+ 'Prime': '\u2033',
9420
+ 'Product': '\u220F',
9421
+ 'prod': '\u220F',
9422
+ 'Proportional': '\u221D',
9423
+ 'prop': '\u221D',
9424
+ 'propto': '\u221D',
9425
+ 'varpropto': '\u221D',
9426
+ 'vprop': '\u221D',
9427
+ 'Pscr': '\uD835\uDCAB',
9428
+ 'Psi': '\u03A8',
9429
+ 'QUOT': '\u0022',
9430
+ 'quot': '\u0022',
9431
+ 'Qfr': '\uD835\uDD14',
9432
+ 'Qopf': '\u211A',
9433
+ 'rationals': '\u211A',
9434
+ 'Qscr': '\uD835\uDCAC',
9435
+ 'RBarr': '\u2910',
9436
+ 'drbkarow': '\u2910',
9437
+ 'REG': '\u00AE',
9438
+ 'circledR': '\u00AE',
9439
+ 'reg': '\u00AE',
9440
+ 'Racute': '\u0154',
9441
+ 'Rang': '\u27EB',
9442
+ 'Rarr': '\u21A0',
9443
+ 'twoheadrightarrow': '\u21A0',
9444
+ 'Rarrtl': '\u2916',
9445
+ 'Rcaron': '\u0158',
9446
+ 'Rcedil': '\u0156',
9447
+ 'Rcy': '\u0420',
9448
+ 'Re': '\u211C',
9449
+ 'Rfr': '\u211C',
9450
+ 'real': '\u211C',
9451
+ 'realpart': '\u211C',
9452
+ 'ReverseElement': '\u220B',
9453
+ 'SuchThat': '\u220B',
9454
+ 'ni': '\u220B',
9455
+ 'niv': '\u220B',
9456
+ 'ReverseEquilibrium': '\u21CB',
9457
+ 'leftrightharpoons': '\u21CB',
9458
+ 'lrhar': '\u21CB',
9459
+ 'ReverseUpEquilibrium': '\u296F',
9460
+ 'duhar': '\u296F',
9461
+ 'Rho': '\u03A1',
9462
+ 'RightAngleBracket': '\u27E9',
9463
+ 'rang': '\u27E9',
9464
+ 'rangle': '\u27E9',
9465
+ 'RightArrow': '\u2192',
9466
+ 'ShortRightArrow': '\u2192',
9467
+ 'rarr': '\u2192',
9468
+ 'rightarrow': '\u2192',
9469
+ 'srarr': '\u2192',
9470
+ 'RightArrowBar': '\u21E5',
9471
+ 'rarrb': '\u21E5',
9472
+ 'RightArrowLeftArrow': '\u21C4',
9473
+ 'rightleftarrows': '\u21C4',
9474
+ 'rlarr': '\u21C4',
9475
+ 'RightCeiling': '\u2309',
9476
+ 'rceil': '\u2309',
9477
+ 'RightDoubleBracket': '\u27E7',
9478
+ 'robrk': '\u27E7',
9479
+ 'RightDownTeeVector': '\u295D',
9480
+ 'RightDownVector': '\u21C2',
9481
+ 'dharr': '\u21C2',
9482
+ 'downharpoonright': '\u21C2',
9483
+ 'RightDownVectorBar': '\u2955',
9484
+ 'RightFloor': '\u230B',
9485
+ 'rfloor': '\u230B',
9486
+ 'RightTee': '\u22A2',
9487
+ 'vdash': '\u22A2',
9488
+ 'RightTeeArrow': '\u21A6',
9489
+ 'map': '\u21A6',
9490
+ 'mapsto': '\u21A6',
9491
+ 'RightTeeVector': '\u295B',
9492
+ 'RightTriangle': '\u22B3',
9493
+ 'vartriangleright': '\u22B3',
9494
+ 'vrtri': '\u22B3',
9495
+ 'RightTriangleBar': '\u29D0',
9496
+ 'RightTriangleEqual': '\u22B5',
9497
+ 'rtrie': '\u22B5',
9498
+ 'trianglerighteq': '\u22B5',
9499
+ 'RightUpDownVector': '\u294F',
9500
+ 'RightUpTeeVector': '\u295C',
9501
+ 'RightUpVector': '\u21BE',
9502
+ 'uharr': '\u21BE',
9503
+ 'upharpoonright': '\u21BE',
9504
+ 'RightUpVectorBar': '\u2954',
9505
+ 'RightVector': '\u21C0',
9506
+ 'rharu': '\u21C0',
9507
+ 'rightharpoonup': '\u21C0',
9508
+ 'RightVectorBar': '\u2953',
9509
+ 'Ropf': '\u211D',
9510
+ 'reals': '\u211D',
9511
+ 'RoundImplies': '\u2970',
9512
+ 'Rrightarrow': '\u21DB',
9513
+ 'rAarr': '\u21DB',
9514
+ 'Rscr': '\u211B',
9515
+ 'realine': '\u211B',
9516
+ 'Rsh': '\u21B1',
9517
+ 'rsh': '\u21B1',
9518
+ 'RuleDelayed': '\u29F4',
9519
+ 'SHCHcy': '\u0429',
9520
+ 'SHcy': '\u0428',
9521
+ 'SOFTcy': '\u042C',
9522
+ 'Sacute': '\u015A',
9523
+ 'Sc': '\u2ABC',
9524
+ 'Scaron': '\u0160',
9525
+ 'Scedil': '\u015E',
9526
+ 'Scirc': '\u015C',
9527
+ 'Scy': '\u0421',
9528
+ 'Sfr': '\uD835\uDD16',
9529
+ 'ShortUpArrow': '\u2191',
9530
+ 'UpArrow': '\u2191',
9531
+ 'uarr': '\u2191',
9532
+ 'uparrow': '\u2191',
9533
+ 'Sigma': '\u03A3',
9534
+ 'SmallCircle': '\u2218',
9535
+ 'compfn': '\u2218',
9536
+ 'Sopf': '\uD835\uDD4A',
9537
+ 'Sqrt': '\u221A',
9538
+ 'radic': '\u221A',
9539
+ 'Square': '\u25A1',
9540
+ 'squ': '\u25A1',
9541
+ 'square': '\u25A1',
9542
+ 'SquareIntersection': '\u2293',
9543
+ 'sqcap': '\u2293',
9544
+ 'SquareSubset': '\u228F',
9545
+ 'sqsub': '\u228F',
9546
+ 'sqsubset': '\u228F',
9547
+ 'SquareSubsetEqual': '\u2291',
9548
+ 'sqsube': '\u2291',
9549
+ 'sqsubseteq': '\u2291',
9550
+ 'SquareSuperset': '\u2290',
9551
+ 'sqsup': '\u2290',
9552
+ 'sqsupset': '\u2290',
9553
+ 'SquareSupersetEqual': '\u2292',
9554
+ 'sqsupe': '\u2292',
9555
+ 'sqsupseteq': '\u2292',
9556
+ 'SquareUnion': '\u2294',
9557
+ 'sqcup': '\u2294',
9558
+ 'Sscr': '\uD835\uDCAE',
9559
+ 'Star': '\u22C6',
9560
+ 'sstarf': '\u22C6',
9561
+ 'Sub': '\u22D0',
9562
+ 'Subset': '\u22D0',
9563
+ 'SubsetEqual': '\u2286',
9564
+ 'sube': '\u2286',
9565
+ 'subseteq': '\u2286',
9566
+ 'Succeeds': '\u227B',
9567
+ 'sc': '\u227B',
9568
+ 'succ': '\u227B',
9569
+ 'SucceedsEqual': '\u2AB0',
9570
+ 'sce': '\u2AB0',
9571
+ 'succeq': '\u2AB0',
9572
+ 'SucceedsSlantEqual': '\u227D',
9573
+ 'sccue': '\u227D',
9574
+ 'succcurlyeq': '\u227D',
9575
+ 'SucceedsTilde': '\u227F',
9576
+ 'scsim': '\u227F',
9577
+ 'succsim': '\u227F',
9578
+ 'Sum': '\u2211',
9579
+ 'sum': '\u2211',
9580
+ 'Sup': '\u22D1',
9581
+ 'Supset': '\u22D1',
9582
+ 'Superset': '\u2283',
9583
+ 'sup': '\u2283',
9584
+ 'supset': '\u2283',
9585
+ 'SupersetEqual': '\u2287',
9586
+ 'supe': '\u2287',
9587
+ 'supseteq': '\u2287',
9588
+ 'THORN': '\u00DE',
9589
+ 'TRADE': '\u2122',
9590
+ 'trade': '\u2122',
9591
+ 'TSHcy': '\u040B',
9592
+ 'TScy': '\u0426',
9593
+ 'Tab': '\u0009',
9594
+ 'Tau': '\u03A4',
9595
+ 'Tcaron': '\u0164',
9596
+ 'Tcedil': '\u0162',
9597
+ 'Tcy': '\u0422',
9598
+ 'Tfr': '\uD835\uDD17',
9599
+ 'Therefore': '\u2234',
9600
+ 'there4': '\u2234',
9601
+ 'therefore': '\u2234',
9602
+ 'Theta': '\u0398',
9603
+ 'ThickSpace': '\u205F\u200A',
9604
+ 'ThinSpace': '\u2009',
9605
+ 'thinsp': '\u2009',
9606
+ 'Tilde': '\u223C',
9607
+ 'sim': '\u223C',
9608
+ 'thicksim': '\u223C',
9609
+ 'thksim': '\u223C',
9610
+ 'TildeEqual': '\u2243',
9611
+ 'sime': '\u2243',
9612
+ 'simeq': '\u2243',
9613
+ 'TildeFullEqual': '\u2245',
9614
+ 'cong': '\u2245',
9615
+ 'TildeTilde': '\u2248',
9616
+ 'ap': '\u2248',
9617
+ 'approx': '\u2248',
9618
+ 'asymp': '\u2248',
9619
+ 'thickapprox': '\u2248',
9620
+ 'thkap': '\u2248',
9621
+ 'Topf': '\uD835\uDD4B',
9622
+ 'TripleDot': '\u20DB',
9623
+ 'tdot': '\u20DB',
9624
+ 'Tscr': '\uD835\uDCAF',
9625
+ 'Tstrok': '\u0166',
9626
+ 'Uacute': '\u00DA',
9627
+ 'Uarr': '\u219F',
9628
+ 'Uarrocir': '\u2949',
9629
+ 'Ubrcy': '\u040E',
9630
+ 'Ubreve': '\u016C',
9631
+ 'Ucirc': '\u00DB',
9632
+ 'Ucy': '\u0423',
9633
+ 'Udblac': '\u0170',
9634
+ 'Ufr': '\uD835\uDD18',
9635
+ 'Ugrave': '\u00D9',
9636
+ 'Umacr': '\u016A',
9637
+ 'UnderBar': '\u005F',
9638
+ 'lowbar': '\u005F',
9639
+ 'UnderBrace': '\u23DF',
9640
+ 'UnderBracket': '\u23B5',
9641
+ 'bbrk': '\u23B5',
9642
+ 'UnderParenthesis': '\u23DD',
9643
+ 'Union': '\u22C3',
9644
+ 'bigcup': '\u22C3',
9645
+ 'xcup': '\u22C3',
9646
+ 'UnionPlus': '\u228E',
9647
+ 'uplus': '\u228E',
9648
+ 'Uogon': '\u0172',
9649
+ 'Uopf': '\uD835\uDD4C',
9650
+ 'UpArrowBar': '\u2912',
9651
+ 'UpArrowDownArrow': '\u21C5',
9652
+ 'udarr': '\u21C5',
9653
+ 'UpDownArrow': '\u2195',
9654
+ 'updownarrow': '\u2195',
9655
+ 'varr': '\u2195',
9656
+ 'UpEquilibrium': '\u296E',
9657
+ 'udhar': '\u296E',
9658
+ 'UpTee': '\u22A5',
9659
+ 'bot': '\u22A5',
9660
+ 'bottom': '\u22A5',
9661
+ 'perp': '\u22A5',
9662
+ 'UpTeeArrow': '\u21A5',
9663
+ 'mapstoup': '\u21A5',
9664
+ 'UpperLeftArrow': '\u2196',
9665
+ 'nwarr': '\u2196',
9666
+ 'nwarrow': '\u2196',
9667
+ 'UpperRightArrow': '\u2197',
9668
+ 'nearr': '\u2197',
9669
+ 'nearrow': '\u2197',
9670
+ 'Upsi': '\u03D2',
9671
+ 'upsih': '\u03D2',
9672
+ 'Upsilon': '\u03A5',
9673
+ 'Uring': '\u016E',
9674
+ 'Uscr': '\uD835\uDCB0',
9675
+ 'Utilde': '\u0168',
9676
+ 'Uuml': '\u00DC',
9677
+ 'VDash': '\u22AB',
9678
+ 'Vbar': '\u2AEB',
9679
+ 'Vcy': '\u0412',
9680
+ 'Vdash': '\u22A9',
9681
+ 'Vdashl': '\u2AE6',
9682
+ 'Vee': '\u22C1',
9683
+ 'bigvee': '\u22C1',
9684
+ 'xvee': '\u22C1',
9685
+ 'Verbar': '\u2016',
9686
+ 'Vert': '\u2016',
9687
+ 'VerticalBar': '\u2223',
9688
+ 'mid': '\u2223',
9689
+ 'shortmid': '\u2223',
9690
+ 'smid': '\u2223',
9691
+ 'VerticalLine': '\u007C',
9692
+ 'verbar': '\u007C',
9693
+ 'vert': '\u007C',
9694
+ 'VerticalSeparator': '\u2758',
9695
+ 'VerticalTilde': '\u2240',
9696
+ 'wr': '\u2240',
9697
+ 'wreath': '\u2240',
9698
+ 'VeryThinSpace': '\u200A',
9699
+ 'hairsp': '\u200A',
9700
+ 'Vfr': '\uD835\uDD19',
9701
+ 'Vopf': '\uD835\uDD4D',
9702
+ 'Vscr': '\uD835\uDCB1',
9703
+ 'Vvdash': '\u22AA',
9704
+ 'Wcirc': '\u0174',
9705
+ 'Wedge': '\u22C0',
9706
+ 'bigwedge': '\u22C0',
9707
+ 'xwedge': '\u22C0',
9708
+ 'Wfr': '\uD835\uDD1A',
9709
+ 'Wopf': '\uD835\uDD4E',
9710
+ 'Wscr': '\uD835\uDCB2',
9711
+ 'Xfr': '\uD835\uDD1B',
9712
+ 'Xi': '\u039E',
9713
+ 'Xopf': '\uD835\uDD4F',
9714
+ 'Xscr': '\uD835\uDCB3',
9715
+ 'YAcy': '\u042F',
9716
+ 'YIcy': '\u0407',
9717
+ 'YUcy': '\u042E',
9718
+ 'Yacute': '\u00DD',
9719
+ 'Ycirc': '\u0176',
9720
+ 'Ycy': '\u042B',
9721
+ 'Yfr': '\uD835\uDD1C',
9722
+ 'Yopf': '\uD835\uDD50',
9723
+ 'Yscr': '\uD835\uDCB4',
9724
+ 'Yuml': '\u0178',
9725
+ 'ZHcy': '\u0416',
9726
+ 'Zacute': '\u0179',
9727
+ 'Zcaron': '\u017D',
9728
+ 'Zcy': '\u0417',
9729
+ 'Zdot': '\u017B',
9730
+ 'Zeta': '\u0396',
9731
+ 'Zfr': '\u2128',
9732
+ 'zeetrf': '\u2128',
9733
+ 'Zopf': '\u2124',
9734
+ 'integers': '\u2124',
9735
+ 'Zscr': '\uD835\uDCB5',
9736
+ 'aacute': '\u00E1',
9737
+ 'abreve': '\u0103',
9738
+ 'ac': '\u223E',
9739
+ 'mstpos': '\u223E',
9740
+ 'acE': '\u223E\u0333',
9741
+ 'acd': '\u223F',
9742
+ 'acirc': '\u00E2',
9743
+ 'acy': '\u0430',
9744
+ 'aelig': '\u00E6',
9745
+ 'afr': '\uD835\uDD1E',
9746
+ 'agrave': '\u00E0',
9747
+ 'alefsym': '\u2135',
9748
+ 'aleph': '\u2135',
9749
+ 'alpha': '\u03B1',
9750
+ 'amacr': '\u0101',
9751
+ 'amalg': '\u2A3F',
9752
+ 'and': '\u2227',
9753
+ 'wedge': '\u2227',
9754
+ 'andand': '\u2A55',
9755
+ 'andd': '\u2A5C',
9756
+ 'andslope': '\u2A58',
9757
+ 'andv': '\u2A5A',
9758
+ 'ang': '\u2220',
9759
+ 'angle': '\u2220',
9760
+ 'ange': '\u29A4',
9761
+ 'angmsd': '\u2221',
9762
+ 'measuredangle': '\u2221',
9763
+ 'angmsdaa': '\u29A8',
9764
+ 'angmsdab': '\u29A9',
9765
+ 'angmsdac': '\u29AA',
9766
+ 'angmsdad': '\u29AB',
9767
+ 'angmsdae': '\u29AC',
9768
+ 'angmsdaf': '\u29AD',
9769
+ 'angmsdag': '\u29AE',
9770
+ 'angmsdah': '\u29AF',
9771
+ 'angrt': '\u221F',
9772
+ 'angrtvb': '\u22BE',
9773
+ 'angrtvbd': '\u299D',
9774
+ 'angsph': '\u2222',
9775
+ 'angzarr': '\u237C',
9776
+ 'aogon': '\u0105',
9777
+ 'aopf': '\uD835\uDD52',
9778
+ 'apE': '\u2A70',
9779
+ 'apacir': '\u2A6F',
9780
+ 'ape': '\u224A',
9781
+ 'approxeq': '\u224A',
9782
+ 'apid': '\u224B',
9783
+ 'apos': '\u0027',
9784
+ 'aring': '\u00E5',
9785
+ 'ascr': '\uD835\uDCB6',
9786
+ 'ast': '\u002A',
9787
+ 'midast': '\u002A',
9788
+ 'atilde': '\u00E3',
9789
+ 'auml': '\u00E4',
9790
+ 'awint': '\u2A11',
9791
+ 'bNot': '\u2AED',
9792
+ 'backcong': '\u224C',
9793
+ 'bcong': '\u224C',
9794
+ 'backepsilon': '\u03F6',
9795
+ 'bepsi': '\u03F6',
9796
+ 'backprime': '\u2035',
9797
+ 'bprime': '\u2035',
9798
+ 'backsim': '\u223D',
9799
+ 'bsim': '\u223D',
9800
+ 'backsimeq': '\u22CD',
9801
+ 'bsime': '\u22CD',
9802
+ 'barvee': '\u22BD',
9803
+ 'barwed': '\u2305',
9804
+ 'barwedge': '\u2305',
9805
+ 'bbrktbrk': '\u23B6',
9806
+ 'bcy': '\u0431',
9807
+ 'bdquo': '\u201E',
9808
+ 'ldquor': '\u201E',
9809
+ 'bemptyv': '\u29B0',
9810
+ 'beta': '\u03B2',
9811
+ 'beth': '\u2136',
9812
+ 'between': '\u226C',
9813
+ 'twixt': '\u226C',
9814
+ 'bfr': '\uD835\uDD1F',
9815
+ 'bigcirc': '\u25EF',
9816
+ 'xcirc': '\u25EF',
9817
+ 'bigodot': '\u2A00',
9818
+ 'xodot': '\u2A00',
9819
+ 'bigoplus': '\u2A01',
9820
+ 'xoplus': '\u2A01',
9821
+ 'bigotimes': '\u2A02',
9822
+ 'xotime': '\u2A02',
9823
+ 'bigsqcup': '\u2A06',
9824
+ 'xsqcup': '\u2A06',
9825
+ 'bigstar': '\u2605',
9826
+ 'starf': '\u2605',
9827
+ 'bigtriangledown': '\u25BD',
9828
+ 'xdtri': '\u25BD',
9829
+ 'bigtriangleup': '\u25B3',
9830
+ 'xutri': '\u25B3',
9831
+ 'biguplus': '\u2A04',
9832
+ 'xuplus': '\u2A04',
9833
+ 'bkarow': '\u290D',
9834
+ 'rbarr': '\u290D',
9835
+ 'blacklozenge': '\u29EB',
9836
+ 'lozf': '\u29EB',
9837
+ 'blacktriangle': '\u25B4',
9838
+ 'utrif': '\u25B4',
9839
+ 'blacktriangledown': '\u25BE',
9840
+ 'dtrif': '\u25BE',
9841
+ 'blacktriangleleft': '\u25C2',
9842
+ 'ltrif': '\u25C2',
9843
+ 'blacktriangleright': '\u25B8',
9844
+ 'rtrif': '\u25B8',
9845
+ 'blank': '\u2423',
9846
+ 'blk12': '\u2592',
9847
+ 'blk14': '\u2591',
9848
+ 'blk34': '\u2593',
9849
+ 'block': '\u2588',
9850
+ 'bne': '\u003D\u20E5',
9851
+ 'bnequiv': '\u2261\u20E5',
9852
+ 'bnot': '\u2310',
9853
+ 'bopf': '\uD835\uDD53',
9854
+ 'bowtie': '\u22C8',
9855
+ 'boxDL': '\u2557',
9856
+ 'boxDR': '\u2554',
9857
+ 'boxDl': '\u2556',
9858
+ 'boxDr': '\u2553',
9859
+ 'boxH': '\u2550',
9860
+ 'boxHD': '\u2566',
9861
+ 'boxHU': '\u2569',
9862
+ 'boxHd': '\u2564',
9863
+ 'boxHu': '\u2567',
9864
+ 'boxUL': '\u255D',
9865
+ 'boxUR': '\u255A',
9866
+ 'boxUl': '\u255C',
9867
+ 'boxUr': '\u2559',
9868
+ 'boxV': '\u2551',
9869
+ 'boxVH': '\u256C',
9870
+ 'boxVL': '\u2563',
9871
+ 'boxVR': '\u2560',
9872
+ 'boxVh': '\u256B',
9873
+ 'boxVl': '\u2562',
9874
+ 'boxVr': '\u255F',
9875
+ 'boxbox': '\u29C9',
9876
+ 'boxdL': '\u2555',
9877
+ 'boxdR': '\u2552',
9878
+ 'boxdl': '\u2510',
9879
+ 'boxdr': '\u250C',
9880
+ 'boxhD': '\u2565',
9881
+ 'boxhU': '\u2568',
9882
+ 'boxhd': '\u252C',
9883
+ 'boxhu': '\u2534',
9884
+ 'boxminus': '\u229F',
9885
+ 'minusb': '\u229F',
9886
+ 'boxplus': '\u229E',
9887
+ 'plusb': '\u229E',
9888
+ 'boxtimes': '\u22A0',
9889
+ 'timesb': '\u22A0',
9890
+ 'boxuL': '\u255B',
9891
+ 'boxuR': '\u2558',
9892
+ 'boxul': '\u2518',
9893
+ 'boxur': '\u2514',
9894
+ 'boxv': '\u2502',
9895
+ 'boxvH': '\u256A',
9896
+ 'boxvL': '\u2561',
9897
+ 'boxvR': '\u255E',
9898
+ 'boxvh': '\u253C',
9899
+ 'boxvl': '\u2524',
9900
+ 'boxvr': '\u251C',
9901
+ 'brvbar': '\u00A6',
9902
+ 'bscr': '\uD835\uDCB7',
9903
+ 'bsemi': '\u204F',
9904
+ 'bsol': '\u005C',
9905
+ 'bsolb': '\u29C5',
9906
+ 'bsolhsub': '\u27C8',
9907
+ 'bull': '\u2022',
9908
+ 'bullet': '\u2022',
9909
+ 'bumpE': '\u2AAE',
9910
+ 'cacute': '\u0107',
9911
+ 'cap': '\u2229',
9912
+ 'capand': '\u2A44',
9913
+ 'capbrcup': '\u2A49',
9914
+ 'capcap': '\u2A4B',
9915
+ 'capcup': '\u2A47',
9916
+ 'capdot': '\u2A40',
9917
+ 'caps': '\u2229\uFE00',
9918
+ 'caret': '\u2041',
9919
+ 'ccaps': '\u2A4D',
9920
+ 'ccaron': '\u010D',
9921
+ 'ccedil': '\u00E7',
9922
+ 'ccirc': '\u0109',
9923
+ 'ccups': '\u2A4C',
9924
+ 'ccupssm': '\u2A50',
9925
+ 'cdot': '\u010B',
9926
+ 'cemptyv': '\u29B2',
9927
+ 'cent': '\u00A2',
9928
+ 'cfr': '\uD835\uDD20',
9929
+ 'chcy': '\u0447',
9930
+ 'check': '\u2713',
9931
+ 'checkmark': '\u2713',
9932
+ 'chi': '\u03C7',
9933
+ 'cir': '\u25CB',
9934
+ 'cirE': '\u29C3',
9935
+ 'circ': '\u02C6',
9936
+ 'circeq': '\u2257',
9937
+ 'cire': '\u2257',
9938
+ 'circlearrowleft': '\u21BA',
9939
+ 'olarr': '\u21BA',
9940
+ 'circlearrowright': '\u21BB',
9941
+ 'orarr': '\u21BB',
9942
+ 'circledS': '\u24C8',
9943
+ 'oS': '\u24C8',
9944
+ 'circledast': '\u229B',
9945
+ 'oast': '\u229B',
9946
+ 'circledcirc': '\u229A',
9947
+ 'ocir': '\u229A',
9948
+ 'circleddash': '\u229D',
9949
+ 'odash': '\u229D',
9950
+ 'cirfnint': '\u2A10',
9951
+ 'cirmid': '\u2AEF',
9952
+ 'cirscir': '\u29C2',
9953
+ 'clubs': '\u2663',
9954
+ 'clubsuit': '\u2663',
9955
+ 'colon': '\u003A',
9956
+ 'comma': '\u002C',
9957
+ 'commat': '\u0040',
9958
+ 'comp': '\u2201',
9959
+ 'complement': '\u2201',
9960
+ 'congdot': '\u2A6D',
9961
+ 'copf': '\uD835\uDD54',
9962
+ 'copysr': '\u2117',
9963
+ 'crarr': '\u21B5',
9964
+ 'cross': '\u2717',
9965
+ 'cscr': '\uD835\uDCB8',
9966
+ 'csub': '\u2ACF',
9967
+ 'csube': '\u2AD1',
9968
+ 'csup': '\u2AD0',
9969
+ 'csupe': '\u2AD2',
9970
+ 'ctdot': '\u22EF',
9971
+ 'cudarrl': '\u2938',
9972
+ 'cudarrr': '\u2935',
9973
+ 'cuepr': '\u22DE',
9974
+ 'curlyeqprec': '\u22DE',
9975
+ 'cuesc': '\u22DF',
9976
+ 'curlyeqsucc': '\u22DF',
9977
+ 'cularr': '\u21B6',
9978
+ 'curvearrowleft': '\u21B6',
9979
+ 'cularrp': '\u293D',
9980
+ 'cup': '\u222A',
9981
+ 'cupbrcap': '\u2A48',
9982
+ 'cupcap': '\u2A46',
9983
+ 'cupcup': '\u2A4A',
9984
+ 'cupdot': '\u228D',
9985
+ 'cupor': '\u2A45',
9986
+ 'cups': '\u222A\uFE00',
9987
+ 'curarr': '\u21B7',
9988
+ 'curvearrowright': '\u21B7',
9989
+ 'curarrm': '\u293C',
9990
+ 'curlyvee': '\u22CE',
9991
+ 'cuvee': '\u22CE',
9992
+ 'curlywedge': '\u22CF',
9993
+ 'cuwed': '\u22CF',
9994
+ 'curren': '\u00A4',
9995
+ 'cwint': '\u2231',
9996
+ 'cylcty': '\u232D',
9997
+ 'dHar': '\u2965',
9998
+ 'dagger': '\u2020',
9999
+ 'daleth': '\u2138',
10000
+ 'dash': '\u2010',
10001
+ 'hyphen': '\u2010',
10002
+ 'dbkarow': '\u290F',
10003
+ 'rBarr': '\u290F',
10004
+ 'dcaron': '\u010F',
10005
+ 'dcy': '\u0434',
10006
+ 'ddarr': '\u21CA',
10007
+ 'downdownarrows': '\u21CA',
10008
+ 'ddotseq': '\u2A77',
10009
+ 'eDDot': '\u2A77',
10010
+ 'deg': '\u00B0',
10011
+ 'delta': '\u03B4',
10012
+ 'demptyv': '\u29B1',
10013
+ 'dfisht': '\u297F',
10014
+ 'dfr': '\uD835\uDD21',
10015
+ 'diamondsuit': '\u2666',
10016
+ 'diams': '\u2666',
10017
+ 'digamma': '\u03DD',
10018
+ 'gammad': '\u03DD',
10019
+ 'disin': '\u22F2',
10020
+ 'div': '\u00F7',
10021
+ 'divide': '\u00F7',
10022
+ 'divideontimes': '\u22C7',
10023
+ 'divonx': '\u22C7',
10024
+ 'djcy': '\u0452',
10025
+ 'dlcorn': '\u231E',
10026
+ 'llcorner': '\u231E',
10027
+ 'dlcrop': '\u230D',
10028
+ 'dollar': '\u0024',
10029
+ 'dopf': '\uD835\uDD55',
10030
+ 'doteqdot': '\u2251',
10031
+ 'eDot': '\u2251',
10032
+ 'dotminus': '\u2238',
10033
+ 'minusd': '\u2238',
10034
+ 'dotplus': '\u2214',
10035
+ 'plusdo': '\u2214',
10036
+ 'dotsquare': '\u22A1',
10037
+ 'sdotb': '\u22A1',
10038
+ 'drcorn': '\u231F',
10039
+ 'lrcorner': '\u231F',
10040
+ 'drcrop': '\u230C',
10041
+ 'dscr': '\uD835\uDCB9',
10042
+ 'dscy': '\u0455',
10043
+ 'dsol': '\u29F6',
10044
+ 'dstrok': '\u0111',
10045
+ 'dtdot': '\u22F1',
10046
+ 'dtri': '\u25BF',
10047
+ 'triangledown': '\u25BF',
10048
+ 'dwangle': '\u29A6',
10049
+ 'dzcy': '\u045F',
10050
+ 'dzigrarr': '\u27FF',
10051
+ 'eacute': '\u00E9',
10052
+ 'easter': '\u2A6E',
10053
+ 'ecaron': '\u011B',
10054
+ 'ecir': '\u2256',
10055
+ 'eqcirc': '\u2256',
10056
+ 'ecirc': '\u00EA',
10057
+ 'ecolon': '\u2255',
10058
+ 'eqcolon': '\u2255',
10059
+ 'ecy': '\u044D',
10060
+ 'edot': '\u0117',
10061
+ 'efDot': '\u2252',
10062
+ 'fallingdotseq': '\u2252',
10063
+ 'efr': '\uD835\uDD22',
10064
+ 'eg': '\u2A9A',
10065
+ 'egrave': '\u00E8',
10066
+ 'egs': '\u2A96',
10067
+ 'eqslantgtr': '\u2A96',
10068
+ 'egsdot': '\u2A98',
10069
+ 'el': '\u2A99',
10070
+ 'elinters': '\u23E7',
10071
+ 'ell': '\u2113',
10072
+ 'els': '\u2A95',
10073
+ 'eqslantless': '\u2A95',
10074
+ 'elsdot': '\u2A97',
10075
+ 'emacr': '\u0113',
10076
+ 'empty': '\u2205',
10077
+ 'emptyset': '\u2205',
10078
+ 'emptyv': '\u2205',
10079
+ 'varnothing': '\u2205',
10080
+ 'emsp13': '\u2004',
10081
+ 'emsp14': '\u2005',
10082
+ 'emsp': '\u2003',
10083
+ 'eng': '\u014B',
10084
+ 'ensp': '\u2002',
10085
+ 'eogon': '\u0119',
10086
+ 'eopf': '\uD835\uDD56',
10087
+ 'epar': '\u22D5',
10088
+ 'eparsl': '\u29E3',
10089
+ 'eplus': '\u2A71',
10090
+ 'epsi': '\u03B5',
10091
+ 'epsilon': '\u03B5',
10092
+ 'epsiv': '\u03F5',
10093
+ 'straightepsilon': '\u03F5',
10094
+ 'varepsilon': '\u03F5',
10095
+ 'equals': '\u003D',
10096
+ 'equest': '\u225F',
10097
+ 'questeq': '\u225F',
10098
+ 'equivDD': '\u2A78',
10099
+ 'eqvparsl': '\u29E5',
10100
+ 'erDot': '\u2253',
10101
+ 'risingdotseq': '\u2253',
10102
+ 'erarr': '\u2971',
10103
+ 'escr': '\u212F',
10104
+ 'eta': '\u03B7',
10105
+ 'eth': '\u00F0',
10106
+ 'euml': '\u00EB',
10107
+ 'euro': '\u20AC',
10108
+ 'excl': '\u0021',
10109
+ 'fcy': '\u0444',
10110
+ 'female': '\u2640',
10111
+ 'ffilig': '\uFB03',
10112
+ 'fflig': '\uFB00',
10113
+ 'ffllig': '\uFB04',
10114
+ 'ffr': '\uD835\uDD23',
10115
+ 'filig': '\uFB01',
10116
+ 'fjlig': '\u0066\u006A',
10117
+ 'flat': '\u266D',
10118
+ 'fllig': '\uFB02',
10119
+ 'fltns': '\u25B1',
10120
+ 'fnof': '\u0192',
10121
+ 'fopf': '\uD835\uDD57',
10122
+ 'fork': '\u22D4',
10123
+ 'pitchfork': '\u22D4',
10124
+ 'forkv': '\u2AD9',
10125
+ 'fpartint': '\u2A0D',
10126
+ 'frac12': '\u00BD',
10127
+ 'half': '\u00BD',
10128
+ 'frac13': '\u2153',
10129
+ 'frac14': '\u00BC',
10130
+ 'frac15': '\u2155',
10131
+ 'frac16': '\u2159',
10132
+ 'frac18': '\u215B',
10133
+ 'frac23': '\u2154',
10134
+ 'frac25': '\u2156',
10135
+ 'frac34': '\u00BE',
10136
+ 'frac35': '\u2157',
10137
+ 'frac38': '\u215C',
10138
+ 'frac45': '\u2158',
10139
+ 'frac56': '\u215A',
10140
+ 'frac58': '\u215D',
10141
+ 'frac78': '\u215E',
10142
+ 'frasl': '\u2044',
10143
+ 'frown': '\u2322',
10144
+ 'sfrown': '\u2322',
10145
+ 'fscr': '\uD835\uDCBB',
10146
+ 'gEl': '\u2A8C',
10147
+ 'gtreqqless': '\u2A8C',
10148
+ 'gacute': '\u01F5',
10149
+ 'gamma': '\u03B3',
10150
+ 'gap': '\u2A86',
10151
+ 'gtrapprox': '\u2A86',
10152
+ 'gbreve': '\u011F',
10153
+ 'gcirc': '\u011D',
10154
+ 'gcy': '\u0433',
10155
+ 'gdot': '\u0121',
10156
+ 'gescc': '\u2AA9',
10157
+ 'gesdot': '\u2A80',
10158
+ 'gesdoto': '\u2A82',
10159
+ 'gesdotol': '\u2A84',
10160
+ 'gesl': '\u22DB\uFE00',
10161
+ 'gesles': '\u2A94',
10162
+ 'gfr': '\uD835\uDD24',
10163
+ 'gimel': '\u2137',
10164
+ 'gjcy': '\u0453',
10165
+ 'glE': '\u2A92',
10166
+ 'gla': '\u2AA5',
10167
+ 'glj': '\u2AA4',
10168
+ 'gnE': '\u2269',
10169
+ 'gneqq': '\u2269',
10170
+ 'gnap': '\u2A8A',
10171
+ 'gnapprox': '\u2A8A',
10172
+ 'gne': '\u2A88',
10173
+ 'gneq': '\u2A88',
10174
+ 'gnsim': '\u22E7',
10175
+ 'gopf': '\uD835\uDD58',
10176
+ 'gscr': '\u210A',
10177
+ 'gsime': '\u2A8E',
10178
+ 'gsiml': '\u2A90',
10179
+ 'gtcc': '\u2AA7',
10180
+ 'gtcir': '\u2A7A',
10181
+ 'gtdot': '\u22D7',
10182
+ 'gtrdot': '\u22D7',
10183
+ 'gtlPar': '\u2995',
10184
+ 'gtquest': '\u2A7C',
10185
+ 'gtrarr': '\u2978',
10186
+ 'gvertneqq': '\u2269\uFE00',
10187
+ 'gvnE': '\u2269\uFE00',
10188
+ 'hardcy': '\u044A',
10189
+ 'harrcir': '\u2948',
10190
+ 'harrw': '\u21AD',
10191
+ 'leftrightsquigarrow': '\u21AD',
10192
+ 'hbar': '\u210F',
10193
+ 'hslash': '\u210F',
10194
+ 'planck': '\u210F',
10195
+ 'plankv': '\u210F',
10196
+ 'hcirc': '\u0125',
10197
+ 'hearts': '\u2665',
10198
+ 'heartsuit': '\u2665',
10199
+ 'hellip': '\u2026',
10200
+ 'mldr': '\u2026',
10201
+ 'hercon': '\u22B9',
10202
+ 'hfr': '\uD835\uDD25',
10203
+ 'hksearow': '\u2925',
10204
+ 'searhk': '\u2925',
10205
+ 'hkswarow': '\u2926',
10206
+ 'swarhk': '\u2926',
10207
+ 'hoarr': '\u21FF',
10208
+ 'homtht': '\u223B',
10209
+ 'hookleftarrow': '\u21A9',
10210
+ 'larrhk': '\u21A9',
10211
+ 'hookrightarrow': '\u21AA',
10212
+ 'rarrhk': '\u21AA',
10213
+ 'hopf': '\uD835\uDD59',
10214
+ 'horbar': '\u2015',
10215
+ 'hscr': '\uD835\uDCBD',
10216
+ 'hstrok': '\u0127',
10217
+ 'hybull': '\u2043',
10218
+ 'iacute': '\u00ED',
10219
+ 'icirc': '\u00EE',
10220
+ 'icy': '\u0438',
10221
+ 'iecy': '\u0435',
10222
+ 'iexcl': '\u00A1',
10223
+ 'ifr': '\uD835\uDD26',
10224
+ 'igrave': '\u00EC',
10225
+ 'iiiint': '\u2A0C',
10226
+ 'qint': '\u2A0C',
10227
+ 'iiint': '\u222D',
10228
+ 'tint': '\u222D',
10229
+ 'iinfin': '\u29DC',
10230
+ 'iiota': '\u2129',
10231
+ 'ijlig': '\u0133',
10232
+ 'imacr': '\u012B',
10233
+ 'imath': '\u0131',
10234
+ 'inodot': '\u0131',
10235
+ 'imof': '\u22B7',
10236
+ 'imped': '\u01B5',
10237
+ 'incare': '\u2105',
10238
+ 'infin': '\u221E',
10239
+ 'infintie': '\u29DD',
10240
+ 'intcal': '\u22BA',
10241
+ 'intercal': '\u22BA',
10242
+ 'intlarhk': '\u2A17',
10243
+ 'intprod': '\u2A3C',
10244
+ 'iprod': '\u2A3C',
10245
+ 'iocy': '\u0451',
10246
+ 'iogon': '\u012F',
10247
+ 'iopf': '\uD835\uDD5A',
10248
+ 'iota': '\u03B9',
10249
+ 'iquest': '\u00BF',
10250
+ 'iscr': '\uD835\uDCBE',
10251
+ 'isinE': '\u22F9',
10252
+ 'isindot': '\u22F5',
10253
+ 'isins': '\u22F4',
10254
+ 'isinsv': '\u22F3',
10255
+ 'itilde': '\u0129',
10256
+ 'iukcy': '\u0456',
10257
+ 'iuml': '\u00EF',
10258
+ 'jcirc': '\u0135',
10259
+ 'jcy': '\u0439',
10260
+ 'jfr': '\uD835\uDD27',
10261
+ 'jmath': '\u0237',
10262
+ 'jopf': '\uD835\uDD5B',
10263
+ 'jscr': '\uD835\uDCBF',
10264
+ 'jsercy': '\u0458',
10265
+ 'jukcy': '\u0454',
10266
+ 'kappa': '\u03BA',
10267
+ 'kappav': '\u03F0',
10268
+ 'varkappa': '\u03F0',
10269
+ 'kcedil': '\u0137',
10270
+ 'kcy': '\u043A',
10271
+ 'kfr': '\uD835\uDD28',
10272
+ 'kgreen': '\u0138',
10273
+ 'khcy': '\u0445',
10274
+ 'kjcy': '\u045C',
10275
+ 'kopf': '\uD835\uDD5C',
10276
+ 'kscr': '\uD835\uDCC0',
10277
+ 'lAtail': '\u291B',
10278
+ 'lBarr': '\u290E',
10279
+ 'lEg': '\u2A8B',
10280
+ 'lesseqqgtr': '\u2A8B',
10281
+ 'lHar': '\u2962',
10282
+ 'lacute': '\u013A',
10283
+ 'laemptyv': '\u29B4',
10284
+ 'lambda': '\u03BB',
10285
+ 'langd': '\u2991',
10286
+ 'lap': '\u2A85',
10287
+ 'lessapprox': '\u2A85',
10288
+ 'laquo': '\u00AB',
10289
+ 'larrbfs': '\u291F',
10290
+ 'larrfs': '\u291D',
10291
+ 'larrlp': '\u21AB',
10292
+ 'looparrowleft': '\u21AB',
10293
+ 'larrpl': '\u2939',
10294
+ 'larrsim': '\u2973',
10295
+ 'larrtl': '\u21A2',
10296
+ 'leftarrowtail': '\u21A2',
10297
+ 'lat': '\u2AAB',
10298
+ 'latail': '\u2919',
10299
+ 'late': '\u2AAD',
10300
+ 'lates': '\u2AAD\uFE00',
10301
+ 'lbarr': '\u290C',
10302
+ 'lbbrk': '\u2772',
10303
+ 'lbrace': '\u007B',
10304
+ 'lcub': '\u007B',
10305
+ 'lbrack': '\u005B',
10306
+ 'lsqb': '\u005B',
10307
+ 'lbrke': '\u298B',
10308
+ 'lbrksld': '\u298F',
10309
+ 'lbrkslu': '\u298D',
10310
+ 'lcaron': '\u013E',
10311
+ 'lcedil': '\u013C',
10312
+ 'lcy': '\u043B',
10313
+ 'ldca': '\u2936',
10314
+ 'ldrdhar': '\u2967',
10315
+ 'ldrushar': '\u294B',
10316
+ 'ldsh': '\u21B2',
10317
+ 'le': '\u2264',
10318
+ 'leq': '\u2264',
10319
+ 'leftleftarrows': '\u21C7',
10320
+ 'llarr': '\u21C7',
10321
+ 'leftthreetimes': '\u22CB',
10322
+ 'lthree': '\u22CB',
10323
+ 'lescc': '\u2AA8',
10324
+ 'lesdot': '\u2A7F',
10325
+ 'lesdoto': '\u2A81',
10326
+ 'lesdotor': '\u2A83',
10327
+ 'lesg': '\u22DA\uFE00',
10328
+ 'lesges': '\u2A93',
10329
+ 'lessdot': '\u22D6',
10330
+ 'ltdot': '\u22D6',
10331
+ 'lfisht': '\u297C',
10332
+ 'lfr': '\uD835\uDD29',
10333
+ 'lgE': '\u2A91',
10334
+ 'lharul': '\u296A',
10335
+ 'lhblk': '\u2584',
10336
+ 'ljcy': '\u0459',
10337
+ 'llhard': '\u296B',
10338
+ 'lltri': '\u25FA',
10339
+ 'lmidot': '\u0140',
10340
+ 'lmoust': '\u23B0',
10341
+ 'lmoustache': '\u23B0',
10342
+ 'lnE': '\u2268',
10343
+ 'lneqq': '\u2268',
10344
+ 'lnap': '\u2A89',
10345
+ 'lnapprox': '\u2A89',
10346
+ 'lne': '\u2A87',
10347
+ 'lneq': '\u2A87',
10348
+ 'lnsim': '\u22E6',
10349
+ 'loang': '\u27EC',
10350
+ 'loarr': '\u21FD',
10351
+ 'longmapsto': '\u27FC',
10352
+ 'xmap': '\u27FC',
10353
+ 'looparrowright': '\u21AC',
10354
+ 'rarrlp': '\u21AC',
10355
+ 'lopar': '\u2985',
10356
+ 'lopf': '\uD835\uDD5D',
10357
+ 'loplus': '\u2A2D',
10358
+ 'lotimes': '\u2A34',
10359
+ 'lowast': '\u2217',
10360
+ 'loz': '\u25CA',
10361
+ 'lozenge': '\u25CA',
10362
+ 'lpar': '\u0028',
10363
+ 'lparlt': '\u2993',
10364
+ 'lrhard': '\u296D',
10365
+ 'lrm': '\u200E',
10366
+ 'lrtri': '\u22BF',
10367
+ 'lsaquo': '\u2039',
10368
+ 'lscr': '\uD835\uDCC1',
10369
+ 'lsime': '\u2A8D',
10370
+ 'lsimg': '\u2A8F',
10371
+ 'lsquor': '\u201A',
10372
+ 'sbquo': '\u201A',
10373
+ 'lstrok': '\u0142',
10374
+ 'ltcc': '\u2AA6',
10375
+ 'ltcir': '\u2A79',
10376
+ 'ltimes': '\u22C9',
10377
+ 'ltlarr': '\u2976',
10378
+ 'ltquest': '\u2A7B',
10379
+ 'ltrPar': '\u2996',
10380
+ 'ltri': '\u25C3',
10381
+ 'triangleleft': '\u25C3',
10382
+ 'lurdshar': '\u294A',
10383
+ 'luruhar': '\u2966',
10384
+ 'lvertneqq': '\u2268\uFE00',
10385
+ 'lvnE': '\u2268\uFE00',
10386
+ 'mDDot': '\u223A',
10387
+ 'macr': '\u00AF',
10388
+ 'strns': '\u00AF',
10389
+ 'male': '\u2642',
10390
+ 'malt': '\u2720',
10391
+ 'maltese': '\u2720',
10392
+ 'marker': '\u25AE',
10393
+ 'mcomma': '\u2A29',
10394
+ 'mcy': '\u043C',
10395
+ 'mdash': '\u2014',
10396
+ 'mfr': '\uD835\uDD2A',
10397
+ 'mho': '\u2127',
10398
+ 'micro': '\u00B5',
10399
+ 'midcir': '\u2AF0',
10400
+ 'minus': '\u2212',
10401
+ 'minusdu': '\u2A2A',
10402
+ 'mlcp': '\u2ADB',
10403
+ 'models': '\u22A7',
10404
+ 'mopf': '\uD835\uDD5E',
10405
+ 'mscr': '\uD835\uDCC2',
10406
+ 'mu': '\u03BC',
10407
+ 'multimap': '\u22B8',
10408
+ 'mumap': '\u22B8',
10409
+ 'nGg': '\u22D9\u0338',
10410
+ 'nGt': '\u226B\u20D2',
10411
+ 'nLeftarrow': '\u21CD',
10412
+ 'nlArr': '\u21CD',
10413
+ 'nLeftrightarrow': '\u21CE',
10414
+ 'nhArr': '\u21CE',
10415
+ 'nLl': '\u22D8\u0338',
10416
+ 'nLt': '\u226A\u20D2',
10417
+ 'nRightarrow': '\u21CF',
10418
+ 'nrArr': '\u21CF',
10419
+ 'nVDash': '\u22AF',
10420
+ 'nVdash': '\u22AE',
10421
+ 'nacute': '\u0144',
10422
+ 'nang': '\u2220\u20D2',
10423
+ 'napE': '\u2A70\u0338',
10424
+ 'napid': '\u224B\u0338',
10425
+ 'napos': '\u0149',
10426
+ 'natur': '\u266E',
10427
+ 'natural': '\u266E',
10428
+ 'ncap': '\u2A43',
10429
+ 'ncaron': '\u0148',
10430
+ 'ncedil': '\u0146',
10431
+ 'ncongdot': '\u2A6D\u0338',
10432
+ 'ncup': '\u2A42',
10433
+ 'ncy': '\u043D',
10434
+ 'ndash': '\u2013',
10435
+ 'neArr': '\u21D7',
10436
+ 'nearhk': '\u2924',
10437
+ 'nedot': '\u2250\u0338',
10438
+ 'nesear': '\u2928',
10439
+ 'toea': '\u2928',
10440
+ 'nfr': '\uD835\uDD2B',
10441
+ 'nharr': '\u21AE',
10442
+ 'nleftrightarrow': '\u21AE',
10443
+ 'nhpar': '\u2AF2',
10444
+ 'nis': '\u22FC',
10445
+ 'nisd': '\u22FA',
10446
+ 'njcy': '\u045A',
10447
+ 'nlE': '\u2266\u0338',
10448
+ 'nleqq': '\u2266\u0338',
10449
+ 'nlarr': '\u219A',
10450
+ 'nleftarrow': '\u219A',
10451
+ 'nldr': '\u2025',
10452
+ 'nopf': '\uD835\uDD5F',
10453
+ 'not': '\u00AC',
10454
+ 'notinE': '\u22F9\u0338',
10455
+ 'notindot': '\u22F5\u0338',
10456
+ 'notinvb': '\u22F7',
10457
+ 'notinvc': '\u22F6',
10458
+ 'notnivb': '\u22FE',
10459
+ 'notnivc': '\u22FD',
10460
+ 'nparsl': '\u2AFD\u20E5',
10461
+ 'npart': '\u2202\u0338',
10462
+ 'npolint': '\u2A14',
10463
+ 'nrarr': '\u219B',
10464
+ 'nrightarrow': '\u219B',
10465
+ 'nrarrc': '\u2933\u0338',
10466
+ 'nrarrw': '\u219D\u0338',
10467
+ 'nscr': '\uD835\uDCC3',
10468
+ 'nsub': '\u2284',
10469
+ 'nsubE': '\u2AC5\u0338',
10470
+ 'nsubseteqq': '\u2AC5\u0338',
10471
+ 'nsup': '\u2285',
10472
+ 'nsupE': '\u2AC6\u0338',
10473
+ 'nsupseteqq': '\u2AC6\u0338',
10474
+ 'ntilde': '\u00F1',
10475
+ 'nu': '\u03BD',
10476
+ 'num': '\u0023',
10477
+ 'numero': '\u2116',
10478
+ 'numsp': '\u2007',
10479
+ 'nvDash': '\u22AD',
10480
+ 'nvHarr': '\u2904',
10481
+ 'nvap': '\u224D\u20D2',
10482
+ 'nvdash': '\u22AC',
10483
+ 'nvge': '\u2265\u20D2',
10484
+ 'nvgt': '\u003E\u20D2',
10485
+ 'nvinfin': '\u29DE',
10486
+ 'nvlArr': '\u2902',
10487
+ 'nvle': '\u2264\u20D2',
10488
+ 'nvlt': '\u003C\u20D2',
10489
+ 'nvltrie': '\u22B4\u20D2',
10490
+ 'nvrArr': '\u2903',
10491
+ 'nvrtrie': '\u22B5\u20D2',
10492
+ 'nvsim': '\u223C\u20D2',
10493
+ 'nwArr': '\u21D6',
10494
+ 'nwarhk': '\u2923',
10495
+ 'nwnear': '\u2927',
10496
+ 'oacute': '\u00F3',
10497
+ 'ocirc': '\u00F4',
10498
+ 'ocy': '\u043E',
10499
+ 'odblac': '\u0151',
10500
+ 'odiv': '\u2A38',
10501
+ 'odsold': '\u29BC',
10502
+ 'oelig': '\u0153',
10503
+ 'ofcir': '\u29BF',
10504
+ 'ofr': '\uD835\uDD2C',
10505
+ 'ogon': '\u02DB',
10506
+ 'ograve': '\u00F2',
10507
+ 'ogt': '\u29C1',
10508
+ 'ohbar': '\u29B5',
10509
+ 'olcir': '\u29BE',
10510
+ 'olcross': '\u29BB',
10511
+ 'olt': '\u29C0',
10512
+ 'omacr': '\u014D',
10513
+ 'omega': '\u03C9',
10514
+ 'omicron': '\u03BF',
10515
+ 'omid': '\u29B6',
10516
+ 'oopf': '\uD835\uDD60',
10517
+ 'opar': '\u29B7',
10518
+ 'operp': '\u29B9',
10519
+ 'or': '\u2228',
10520
+ 'vee': '\u2228',
10521
+ 'ord': '\u2A5D',
10522
+ 'order': '\u2134',
10523
+ 'orderof': '\u2134',
10524
+ 'oscr': '\u2134',
10525
+ 'ordf': '\u00AA',
10526
+ 'ordm': '\u00BA',
10527
+ 'origof': '\u22B6',
10528
+ 'oror': '\u2A56',
10529
+ 'orslope': '\u2A57',
10530
+ 'orv': '\u2A5B',
10531
+ 'oslash': '\u00F8',
10532
+ 'osol': '\u2298',
10533
+ 'otilde': '\u00F5',
10534
+ 'otimesas': '\u2A36',
10535
+ 'ouml': '\u00F6',
10536
+ 'ovbar': '\u233D',
10537
+ 'para': '\u00B6',
10538
+ 'parsim': '\u2AF3',
10539
+ 'parsl': '\u2AFD',
10540
+ 'pcy': '\u043F',
10541
+ 'percnt': '\u0025',
10542
+ 'period': '\u002E',
10543
+ 'permil': '\u2030',
10544
+ 'pertenk': '\u2031',
10545
+ 'pfr': '\uD835\uDD2D',
10546
+ 'phi': '\u03C6',
10547
+ 'phiv': '\u03D5',
10548
+ 'straightphi': '\u03D5',
10549
+ 'varphi': '\u03D5',
10550
+ 'phone': '\u260E',
10551
+ 'pi': '\u03C0',
10552
+ 'piv': '\u03D6',
10553
+ 'varpi': '\u03D6',
10554
+ 'planckh': '\u210E',
10555
+ 'plus': '\u002B',
10556
+ 'plusacir': '\u2A23',
10557
+ 'pluscir': '\u2A22',
10558
+ 'plusdu': '\u2A25',
10559
+ 'pluse': '\u2A72',
10560
+ 'plussim': '\u2A26',
10561
+ 'plustwo': '\u2A27',
10562
+ 'pointint': '\u2A15',
10563
+ 'popf': '\uD835\uDD61',
10564
+ 'pound': '\u00A3',
10565
+ 'prE': '\u2AB3',
10566
+ 'prap': '\u2AB7',
10567
+ 'precapprox': '\u2AB7',
10568
+ 'precnapprox': '\u2AB9',
10569
+ 'prnap': '\u2AB9',
10570
+ 'precneqq': '\u2AB5',
10571
+ 'prnE': '\u2AB5',
10572
+ 'precnsim': '\u22E8',
10573
+ 'prnsim': '\u22E8',
10574
+ 'prime': '\u2032',
10575
+ 'profalar': '\u232E',
10576
+ 'profline': '\u2312',
10577
+ 'profsurf': '\u2313',
10578
+ 'prurel': '\u22B0',
10579
+ 'pscr': '\uD835\uDCC5',
10580
+ 'psi': '\u03C8',
10581
+ 'puncsp': '\u2008',
10582
+ 'qfr': '\uD835\uDD2E',
10583
+ 'qopf': '\uD835\uDD62',
10584
+ 'qprime': '\u2057',
10585
+ 'qscr': '\uD835\uDCC6',
10586
+ 'quatint': '\u2A16',
10587
+ 'quest': '\u003F',
10588
+ 'rAtail': '\u291C',
10589
+ 'rHar': '\u2964',
10590
+ 'race': '\u223D\u0331',
10591
+ 'racute': '\u0155',
10592
+ 'raemptyv': '\u29B3',
10593
+ 'rangd': '\u2992',
10594
+ 'range': '\u29A5',
10595
+ 'raquo': '\u00BB',
10596
+ 'rarrap': '\u2975',
10597
+ 'rarrbfs': '\u2920',
10598
+ 'rarrc': '\u2933',
10599
+ 'rarrfs': '\u291E',
10600
+ 'rarrpl': '\u2945',
10601
+ 'rarrsim': '\u2974',
10602
+ 'rarrtl': '\u21A3',
10603
+ 'rightarrowtail': '\u21A3',
10604
+ 'rarrw': '\u219D',
10605
+ 'rightsquigarrow': '\u219D',
10606
+ 'ratail': '\u291A',
10607
+ 'ratio': '\u2236',
10608
+ 'rbbrk': '\u2773',
10609
+ 'rbrace': '\u007D',
10610
+ 'rcub': '\u007D',
10611
+ 'rbrack': '\u005D',
10612
+ 'rsqb': '\u005D',
10613
+ 'rbrke': '\u298C',
10614
+ 'rbrksld': '\u298E',
10615
+ 'rbrkslu': '\u2990',
10616
+ 'rcaron': '\u0159',
10617
+ 'rcedil': '\u0157',
10618
+ 'rcy': '\u0440',
10619
+ 'rdca': '\u2937',
10620
+ 'rdldhar': '\u2969',
10621
+ 'rdsh': '\u21B3',
10622
+ 'rect': '\u25AD',
10623
+ 'rfisht': '\u297D',
10624
+ 'rfr': '\uD835\uDD2F',
10625
+ 'rharul': '\u296C',
10626
+ 'rho': '\u03C1',
10627
+ 'rhov': '\u03F1',
10628
+ 'varrho': '\u03F1',
10629
+ 'rightrightarrows': '\u21C9',
10630
+ 'rrarr': '\u21C9',
10631
+ 'rightthreetimes': '\u22CC',
10632
+ 'rthree': '\u22CC',
10633
+ 'ring': '\u02DA',
10634
+ 'rlm': '\u200F',
10635
+ 'rmoust': '\u23B1',
10636
+ 'rmoustache': '\u23B1',
10637
+ 'rnmid': '\u2AEE',
10638
+ 'roang': '\u27ED',
10639
+ 'roarr': '\u21FE',
10640
+ 'ropar': '\u2986',
10641
+ 'ropf': '\uD835\uDD63',
10642
+ 'roplus': '\u2A2E',
10643
+ 'rotimes': '\u2A35',
10644
+ 'rpar': '\u0029',
10645
+ 'rpargt': '\u2994',
10646
+ 'rppolint': '\u2A12',
10647
+ 'rsaquo': '\u203A',
10648
+ 'rscr': '\uD835\uDCC7',
10649
+ 'rtimes': '\u22CA',
10650
+ 'rtri': '\u25B9',
10651
+ 'triangleright': '\u25B9',
10652
+ 'rtriltri': '\u29CE',
10653
+ 'ruluhar': '\u2968',
10654
+ 'rx': '\u211E',
10655
+ 'sacute': '\u015B',
10656
+ 'scE': '\u2AB4',
10657
+ 'scap': '\u2AB8',
10658
+ 'succapprox': '\u2AB8',
10659
+ 'scaron': '\u0161',
10660
+ 'scedil': '\u015F',
10661
+ 'scirc': '\u015D',
10662
+ 'scnE': '\u2AB6',
10663
+ 'succneqq': '\u2AB6',
10664
+ 'scnap': '\u2ABA',
10665
+ 'succnapprox': '\u2ABA',
10666
+ 'scnsim': '\u22E9',
10667
+ 'succnsim': '\u22E9',
10668
+ 'scpolint': '\u2A13',
10669
+ 'scy': '\u0441',
10670
+ 'sdot': '\u22C5',
10671
+ 'sdote': '\u2A66',
10672
+ 'seArr': '\u21D8',
10673
+ 'sect': '\u00A7',
10674
+ 'semi': '\u003B',
10675
+ 'seswar': '\u2929',
10676
+ 'tosa': '\u2929',
10677
+ 'sext': '\u2736',
10678
+ 'sfr': '\uD835\uDD30',
10679
+ 'sharp': '\u266F',
10680
+ 'shchcy': '\u0449',
10681
+ 'shcy': '\u0448',
10682
+ 'shy': '\u00AD',
10683
+ 'sigma': '\u03C3',
10684
+ 'sigmaf': '\u03C2',
10685
+ 'sigmav': '\u03C2',
10686
+ 'varsigma': '\u03C2',
10687
+ 'simdot': '\u2A6A',
10688
+ 'simg': '\u2A9E',
10689
+ 'simgE': '\u2AA0',
10690
+ 'siml': '\u2A9D',
10691
+ 'simlE': '\u2A9F',
10692
+ 'simne': '\u2246',
10693
+ 'simplus': '\u2A24',
10694
+ 'simrarr': '\u2972',
10695
+ 'smashp': '\u2A33',
10696
+ 'smeparsl': '\u29E4',
10697
+ 'smile': '\u2323',
10698
+ 'ssmile': '\u2323',
10699
+ 'smt': '\u2AAA',
10700
+ 'smte': '\u2AAC',
10701
+ 'smtes': '\u2AAC\uFE00',
10702
+ 'softcy': '\u044C',
10703
+ 'sol': '\u002F',
10704
+ 'solb': '\u29C4',
10705
+ 'solbar': '\u233F',
10706
+ 'sopf': '\uD835\uDD64',
10707
+ 'spades': '\u2660',
10708
+ 'spadesuit': '\u2660',
10709
+ 'sqcaps': '\u2293\uFE00',
10710
+ 'sqcups': '\u2294\uFE00',
10711
+ 'sscr': '\uD835\uDCC8',
10712
+ 'star': '\u2606',
10713
+ 'sub': '\u2282',
10714
+ 'subset': '\u2282',
10715
+ 'subE': '\u2AC5',
10716
+ 'subseteqq': '\u2AC5',
10717
+ 'subdot': '\u2ABD',
10718
+ 'subedot': '\u2AC3',
10719
+ 'submult': '\u2AC1',
10720
+ 'subnE': '\u2ACB',
10721
+ 'subsetneqq': '\u2ACB',
10722
+ 'subne': '\u228A',
10723
+ 'subsetneq': '\u228A',
10724
+ 'subplus': '\u2ABF',
10725
+ 'subrarr': '\u2979',
10726
+ 'subsim': '\u2AC7',
10727
+ 'subsub': '\u2AD5',
10728
+ 'subsup': '\u2AD3',
10729
+ 'sung': '\u266A',
10730
+ 'sup1': '\u00B9',
10731
+ 'sup2': '\u00B2',
10732
+ 'sup3': '\u00B3',
10733
+ 'supE': '\u2AC6',
10734
+ 'supseteqq': '\u2AC6',
10735
+ 'supdot': '\u2ABE',
10736
+ 'supdsub': '\u2AD8',
10737
+ 'supedot': '\u2AC4',
10738
+ 'suphsol': '\u27C9',
10739
+ 'suphsub': '\u2AD7',
10740
+ 'suplarr': '\u297B',
10741
+ 'supmult': '\u2AC2',
10742
+ 'supnE': '\u2ACC',
10743
+ 'supsetneqq': '\u2ACC',
10744
+ 'supne': '\u228B',
10745
+ 'supsetneq': '\u228B',
10746
+ 'supplus': '\u2AC0',
10747
+ 'supsim': '\u2AC8',
10748
+ 'supsub': '\u2AD4',
10749
+ 'supsup': '\u2AD6',
10750
+ 'swArr': '\u21D9',
10751
+ 'swnwar': '\u292A',
10752
+ 'szlig': '\u00DF',
10753
+ 'target': '\u2316',
10754
+ 'tau': '\u03C4',
10755
+ 'tcaron': '\u0165',
10756
+ 'tcedil': '\u0163',
10757
+ 'tcy': '\u0442',
10758
+ 'telrec': '\u2315',
10759
+ 'tfr': '\uD835\uDD31',
10760
+ 'theta': '\u03B8',
10761
+ 'thetasym': '\u03D1',
10762
+ 'thetav': '\u03D1',
10763
+ 'vartheta': '\u03D1',
10764
+ 'thorn': '\u00FE',
10765
+ 'times': '\u00D7',
10766
+ 'timesbar': '\u2A31',
10767
+ 'timesd': '\u2A30',
10768
+ 'topbot': '\u2336',
10769
+ 'topcir': '\u2AF1',
10770
+ 'topf': '\uD835\uDD65',
10771
+ 'topfork': '\u2ADA',
10772
+ 'tprime': '\u2034',
10773
+ 'triangle': '\u25B5',
10774
+ 'utri': '\u25B5',
10775
+ 'triangleq': '\u225C',
10776
+ 'trie': '\u225C',
10777
+ 'tridot': '\u25EC',
10778
+ 'triminus': '\u2A3A',
10779
+ 'triplus': '\u2A39',
10780
+ 'trisb': '\u29CD',
10781
+ 'tritime': '\u2A3B',
10782
+ 'trpezium': '\u23E2',
10783
+ 'tscr': '\uD835\uDCC9',
10784
+ 'tscy': '\u0446',
10785
+ 'tshcy': '\u045B',
10786
+ 'tstrok': '\u0167',
10787
+ 'uHar': '\u2963',
10788
+ 'uacute': '\u00FA',
10789
+ 'ubrcy': '\u045E',
10790
+ 'ubreve': '\u016D',
10791
+ 'ucirc': '\u00FB',
10792
+ 'ucy': '\u0443',
10793
+ 'udblac': '\u0171',
10794
+ 'ufisht': '\u297E',
10795
+ 'ufr': '\uD835\uDD32',
10796
+ 'ugrave': '\u00F9',
10797
+ 'uhblk': '\u2580',
10798
+ 'ulcorn': '\u231C',
10799
+ 'ulcorner': '\u231C',
10800
+ 'ulcrop': '\u230F',
10801
+ 'ultri': '\u25F8',
10802
+ 'umacr': '\u016B',
10803
+ 'uogon': '\u0173',
10804
+ 'uopf': '\uD835\uDD66',
10805
+ 'upsi': '\u03C5',
10806
+ 'upsilon': '\u03C5',
10807
+ 'upuparrows': '\u21C8',
10808
+ 'uuarr': '\u21C8',
10809
+ 'urcorn': '\u231D',
10810
+ 'urcorner': '\u231D',
10811
+ 'urcrop': '\u230E',
10812
+ 'uring': '\u016F',
10813
+ 'urtri': '\u25F9',
10814
+ 'uscr': '\uD835\uDCCA',
10815
+ 'utdot': '\u22F0',
10816
+ 'utilde': '\u0169',
10817
+ 'uuml': '\u00FC',
10818
+ 'uwangle': '\u29A7',
10819
+ 'vBar': '\u2AE8',
10820
+ 'vBarv': '\u2AE9',
10821
+ 'vangrt': '\u299C',
10822
+ 'varsubsetneq': '\u228A\uFE00',
10823
+ 'vsubne': '\u228A\uFE00',
10824
+ 'varsubsetneqq': '\u2ACB\uFE00',
10825
+ 'vsubnE': '\u2ACB\uFE00',
10826
+ 'varsupsetneq': '\u228B\uFE00',
10827
+ 'vsupne': '\u228B\uFE00',
10828
+ 'varsupsetneqq': '\u2ACC\uFE00',
10829
+ 'vsupnE': '\u2ACC\uFE00',
10830
+ 'vcy': '\u0432',
10831
+ 'veebar': '\u22BB',
10832
+ 'veeeq': '\u225A',
10833
+ 'vellip': '\u22EE',
10834
+ 'vfr': '\uD835\uDD33',
10835
+ 'vopf': '\uD835\uDD67',
10836
+ 'vscr': '\uD835\uDCCB',
10837
+ 'vzigzag': '\u299A',
10838
+ 'wcirc': '\u0175',
10839
+ 'wedbar': '\u2A5F',
10840
+ 'wedgeq': '\u2259',
10841
+ 'weierp': '\u2118',
10842
+ 'wp': '\u2118',
10843
+ 'wfr': '\uD835\uDD34',
10844
+ 'wopf': '\uD835\uDD68',
10845
+ 'wscr': '\uD835\uDCCC',
10846
+ 'xfr': '\uD835\uDD35',
10847
+ 'xi': '\u03BE',
10848
+ 'xnis': '\u22FB',
10849
+ 'xopf': '\uD835\uDD69',
10850
+ 'xscr': '\uD835\uDCCD',
10851
+ 'yacute': '\u00FD',
10852
+ 'yacy': '\u044F',
10853
+ 'ycirc': '\u0177',
10854
+ 'ycy': '\u044B',
10855
+ 'yen': '\u00A5',
10856
+ 'yfr': '\uD835\uDD36',
10857
+ 'yicy': '\u0457',
10858
+ 'yopf': '\uD835\uDD6A',
10859
+ 'yscr': '\uD835\uDCCE',
10860
+ 'yucy': '\u044E',
10861
+ 'yuml': '\u00FF',
10862
+ 'zacute': '\u017A',
10863
+ 'zcaron': '\u017E',
10864
+ 'zcy': '\u0437',
10865
+ 'zdot': '\u017C',
10866
+ 'zeta': '\u03B6',
10867
+ 'zfr': '\uD835\uDD37',
10868
+ 'zhcy': '\u0436',
10869
+ 'zigrarr': '\u21DD',
10870
+ 'zopf': '\uD835\uDD6B',
10871
+ 'zscr': '\uD835\uDCCF',
10872
+ 'zwj': '\u200D',
10873
+ 'zwnj': '\u200C'
10874
+ };
10875
+ // The &ngsp; pseudo-entity is denoting a space. see:
10876
+ // https://github.com/dart-lang/angular/blob/0bb611387d29d65b5af7f9d2515ab571fd3fbee4/_tests/test/compiler/preserve_whitespace_test.dart
10877
+ const NGSP_UNICODE = '\uE500';
10878
+ NAMED_ENTITIES['ngsp'] = NGSP_UNICODE;
10879
+
9000
10880
  /**
9001
10881
  * @license
9002
10882
  * Copyright Google LLC All Rights Reserved.
@@ -9580,10 +11460,13 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
9580
11460
  parts.push(this._readChar(true));
9581
11461
  }
9582
11462
  } while (!this._isTextEnd());
11463
+ // It is possible that an interpolation was started but not ended inside this text token.
11464
+ // Make sure that we reset the state of the lexer correctly.
11465
+ this._inInterpolation = false;
9583
11466
  this._endToken([this._processCarriageReturns(parts.join(''))]);
9584
11467
  }
9585
11468
  _isTextEnd() {
9586
- if (this._cursor.peek() === $LT || this._cursor.peek() === $EOF) {
11469
+ if (this._isTagStart() || this._cursor.peek() === $EOF) {
9587
11470
  return true;
9588
11471
  }
9589
11472
  if (this._tokenizeIcu && !this._inInterpolation) {
@@ -9598,6 +11481,24 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
9598
11481
  }
9599
11482
  return false;
9600
11483
  }
11484
+ /**
11485
+ * Returns true if the current cursor is pointing to the start of a tag
11486
+ * (opening/closing/comments/cdata/etc).
11487
+ */
11488
+ _isTagStart() {
11489
+ if (this._cursor.peek() === $LT) {
11490
+ // We assume that `<` followed by whitespace is not the start of an HTML element.
11491
+ const tmp = this._cursor.clone();
11492
+ tmp.advance();
11493
+ // If the next character is alphabetic, ! nor / then it is a tag start
11494
+ const code = tmp.peek();
11495
+ if (($a <= code && code <= $z) || ($A <= code && code <= $Z) ||
11496
+ code === $SLASH || code === $BANG) {
11497
+ return true;
11498
+ }
11499
+ }
11500
+ return false;
11501
+ }
9601
11502
  _readUntil(char) {
9602
11503
  const start = this._cursor.clone();
9603
11504
  this._attemptUntilChar(char);
@@ -12805,11 +14706,23 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
12805
14706
  if (!this.consumeOptionalCharacter($RBRACE)) {
12806
14707
  this.rbracesExpected++;
12807
14708
  do {
14709
+ const keyStart = this.inputIndex;
12808
14710
  const quoted = this.next.isString();
12809
14711
  const key = this.expectIdentifierOrKeywordOrString();
12810
14712
  keys.push({ key, quoted });
12811
- this.expectCharacter($COLON);
12812
- values.push(this.parsePipe());
14713
+ // Properties with quoted keys can't use the shorthand syntax.
14714
+ if (quoted) {
14715
+ this.expectCharacter($COLON);
14716
+ values.push(this.parsePipe());
14717
+ }
14718
+ else if (this.consumeOptionalCharacter($COLON)) {
14719
+ values.push(this.parsePipe());
14720
+ }
14721
+ else {
14722
+ const span = this.span(keyStart);
14723
+ const sourceSpan = this.sourceSpan(keyStart);
14724
+ values.push(new PropertyRead(span, sourceSpan, sourceSpan, new ImplicitReceiver(span, sourceSpan), key));
14725
+ }
12813
14726
  } while (this.consumeOptionalCharacter($COMMA));
12814
14727
  this.rbracesExpected--;
12815
14728
  this.expectCharacter($RBRACE);
@@ -15372,6 +17285,10 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
15372
17285
  notifyImplicitReceiverUse() {
15373
17286
  this._bindingScope.notifyImplicitReceiverUse();
15374
17287
  }
17288
+ // LocalResolver
17289
+ maybeRestoreView() {
17290
+ this._bindingScope.maybeRestoreView();
17291
+ }
15375
17292
  i18nTranslate(message, params = {}, ref, transformFn) {
15376
17293
  const _ref = ref || this.i18nGenerateMainBlockVar();
15377
17294
  // Closure Compiler requires const names to start with `MSG_` but disallows any other const to
@@ -16464,14 +18381,13 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
16464
18381
  lhs: value.lhs,
16465
18382
  declareLocalCallback: value.declareLocalCallback,
16466
18383
  declare: false,
16467
- priority: value.priority,
16468
- localRef: value.localRef
18384
+ priority: value.priority
16469
18385
  };
16470
18386
  // Cache the value locally.
16471
18387
  this.map.set(name, value);
16472
18388
  // Possibly generate a shared context var
16473
18389
  this.maybeGenerateSharedContextVar(value);
16474
- this.maybeRestoreView(value.retrievalLevel, value.localRef);
18390
+ this.maybeRestoreView();
16475
18391
  }
16476
18392
  if (value.declareLocalCallback && !value.declare) {
16477
18393
  value.declare = true;
@@ -16511,7 +18427,6 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
16511
18427
  declare: false,
16512
18428
  declareLocalCallback: declareLocalCallback,
16513
18429
  priority: priority,
16514
- localRef: localRef || false
16515
18430
  });
16516
18431
  return this;
16517
18432
  }
@@ -16575,22 +18490,20 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
16575
18490
  },
16576
18491
  declare: false,
16577
18492
  priority: 2 /* SHARED_CONTEXT */,
16578
- localRef: false
16579
18493
  });
16580
18494
  }
16581
18495
  getComponentProperty(name) {
16582
18496
  const componentValue = this.map.get(SHARED_CONTEXT_KEY + 0);
16583
18497
  componentValue.declare = true;
16584
- this.maybeRestoreView(0, false);
18498
+ this.maybeRestoreView();
16585
18499
  return componentValue.lhs.prop(name);
16586
18500
  }
16587
- maybeRestoreView(retrievalLevel, localRefLookup) {
16588
- // We want to restore the current view in listener fns if:
16589
- // 1 - we are accessing a value in a parent view, which requires walking the view tree rather
16590
- // than using the ctx arg. In this case, the retrieval and binding level will be different.
16591
- // 2 - we are looking up a local ref, which requires restoring the view where the local
16592
- // ref is stored
16593
- if (this.isListenerScope() && (retrievalLevel < this.bindingLevel || localRefLookup)) {
18501
+ maybeRestoreView() {
18502
+ // View restoration is required for listener instructions inside embedded views, because
18503
+ // they only run in creation mode and they can have references to the context object.
18504
+ // If the context object changes in update mode, the reference will be incorrect, because
18505
+ // it was established during creation.
18506
+ if (this.isListenerScope()) {
16594
18507
  if (!this.parent.restoreViewVariable) {
16595
18508
  // parent saves variable to generate a shared `const $s$ = getCurrentView();` instruction
16596
18509
  this.parent.restoreViewVariable = variable(this.parent.freshReferenceName());
@@ -17557,13 +19470,13 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
17557
19470
  * found in the LICENSE file at https://angular.io/license
17558
19471
  */
17559
19472
  /**
17560
- * An interface for retrieving documents by URL that the compiler uses
17561
- * to load templates.
19473
+ * An interface for retrieving documents by URL that the compiler uses to
19474
+ * load templates.
19475
+ *
19476
+ * This is an abstract class, rather than an interface, so that it can be used
19477
+ * as injection token.
17562
19478
  */
17563
19479
  class ResourceLoader {
17564
- get(url) {
17565
- return '';
17566
- }
17567
19480
  }
17568
19481
 
17569
19482
  /**
@@ -18012,7 +19925,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
18012
19925
  * Use of this source code is governed by an MIT-style license that can be
18013
19926
  * found in the LICENSE file at https://angular.io/license
18014
19927
  */
18015
- const VERSION$1 = new Version('12.1.0-next.6');
19928
+ const VERSION$1 = new Version('12.1.3');
18016
19929
 
18017
19930
  /**
18018
19931
  * @license
@@ -18143,7 +20056,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
18143
20056
  const { directives, bindings, references } = DirectiveBinder.apply(target.template, this.directiveMatcher);
18144
20057
  // Finally, run the TemplateBinder to bind references, variables, and other entities within the
18145
20058
  // template. This extracts all the metadata that doesn't depend on directive matching.
18146
- const { expressions, symbols, nestingLevel, usedPipes } = TemplateBinder.apply(target.template, scope);
20059
+ const { expressions, symbols, nestingLevel, usedPipes } = TemplateBinder.applyWithScope(target.template, scope);
18147
20060
  return new R3BoundTarget(target, directives, bindings, references, expressions, symbols, nestingLevel, templateEntities, usedPipes);
18148
20061
  }
18149
20062
  }
@@ -18420,7 +20333,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
18420
20333
  * nesting level (how many levels deep within the template structure the `Template` is), starting
18421
20334
  * at 1.
18422
20335
  */
18423
- static apply(template, scope) {
20336
+ static applyWithScope(template, scope) {
18424
20337
  const expressions = new Map();
18425
20338
  const symbols = new Map();
18426
20339
  const nestingLevel = new Map();
@@ -18651,7 +20564,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
18651
20564
  function compileDeclareClassMetadata(metadata) {
18652
20565
  const definitionMap = new DefinitionMap();
18653
20566
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION));
18654
- definitionMap.set('version', literal('12.1.0-next.6'));
20567
+ definitionMap.set('version', literal('12.1.3'));
18655
20568
  definitionMap.set('ngImport', importExpr(Identifiers.core));
18656
20569
  definitionMap.set('type', metadata.type);
18657
20570
  definitionMap.set('decorators', metadata.decorators);
@@ -18691,7 +20604,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
18691
20604
  function createDirectiveDefinitionMap(meta) {
18692
20605
  const definitionMap = new DefinitionMap();
18693
20606
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$1));
18694
- definitionMap.set('version', literal('12.1.0-next.6'));
20607
+ definitionMap.set('version', literal('12.1.3'));
18695
20608
  // e.g. `type: MyDirective`
18696
20609
  definitionMap.set('type', meta.internalType);
18697
20610
  // e.g. `selector: 'some-dir'`
@@ -18908,7 +20821,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
18908
20821
  function compileDeclareFactoryFunction(meta) {
18909
20822
  const definitionMap = new DefinitionMap();
18910
20823
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$2));
18911
- definitionMap.set('version', literal('12.1.0-next.6'));
20824
+ definitionMap.set('version', literal('12.1.3'));
18912
20825
  definitionMap.set('ngImport', importExpr(Identifiers.core));
18913
20826
  definitionMap.set('type', meta.internalType);
18914
20827
  definitionMap.set('deps', compileDependencies(meta.deps));
@@ -18950,7 +20863,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
18950
20863
  function createInjectableDefinitionMap(meta) {
18951
20864
  const definitionMap = new DefinitionMap();
18952
20865
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$3));
18953
- definitionMap.set('version', literal('12.1.0-next.6'));
20866
+ definitionMap.set('version', literal('12.1.3'));
18954
20867
  definitionMap.set('ngImport', importExpr(Identifiers.core));
18955
20868
  definitionMap.set('type', meta.internalType);
18956
20869
  // Only generate providedIn property if it has a non-null value
@@ -19029,7 +20942,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
19029
20942
  function createInjectorDefinitionMap(meta) {
19030
20943
  const definitionMap = new DefinitionMap();
19031
20944
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$4));
19032
- definitionMap.set('version', literal('12.1.0-next.6'));
20945
+ definitionMap.set('version', literal('12.1.3'));
19033
20946
  definitionMap.set('ngImport', importExpr(Identifiers.core));
19034
20947
  definitionMap.set('type', meta.internalType);
19035
20948
  definitionMap.set('providers', meta.providers);
@@ -19066,7 +20979,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
19066
20979
  function createNgModuleDefinitionMap(meta) {
19067
20980
  const definitionMap = new DefinitionMap();
19068
20981
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$5));
19069
- definitionMap.set('version', literal('12.1.0-next.6'));
20982
+ definitionMap.set('version', literal('12.1.3'));
19070
20983
  definitionMap.set('ngImport', importExpr(Identifiers.core));
19071
20984
  definitionMap.set('type', meta.internalType);
19072
20985
  // We only generate the keys in the metadata if the arrays contain values.
@@ -19124,7 +21037,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
19124
21037
  function createPipeDefinitionMap(meta) {
19125
21038
  const definitionMap = new DefinitionMap();
19126
21039
  definitionMap.set('minVersion', literal(MINIMUM_PARTIAL_LINKER_VERSION$6));
19127
- definitionMap.set('version', literal('12.1.0-next.6'));
21040
+ definitionMap.set('version', literal('12.1.3'));
19128
21041
  definitionMap.set('ngImport', importExpr(Identifiers.core));
19129
21042
  // e.g. `type: MyPipe`
19130
21043
  definitionMap.set('type', meta.internalType);
@@ -19156,7 +21069,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
19156
21069
  * Use of this source code is governed by an MIT-style license that can be
19157
21070
  * found in the LICENSE file at https://angular.io/license
19158
21071
  */
19159
- const VERSION$2 = new Version('12.1.0-next.6');
21072
+ const VERSION$2 = new Version('12.1.3');
19160
21073
 
19161
21074
  /**
19162
21075
  * @license
@@ -21576,6 +23489,9 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
21576
23489
  }
21577
23490
  return { node, from: importDecl.moduleSpecifier.text };
21578
23491
  }
23492
+ else if (ts$1.isModuleDeclaration(decl)) {
23493
+ return { node, from: null };
23494
+ }
21579
23495
  else {
21580
23496
  throw new Error(`Unknown import type?`);
21581
23497
  }
@@ -22426,8 +24342,11 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
22426
24342
  static fromComplexFunctionCall(node, fn) {
22427
24343
  return new DynamicValue(node, fn, 6 /* COMPLEX_FUNCTION_CALL */);
22428
24344
  }
24345
+ static fromDynamicType(node) {
24346
+ return new DynamicValue(node, undefined, 7 /* DYNAMIC_TYPE */);
24347
+ }
22429
24348
  static fromUnknown(node) {
22430
- return new DynamicValue(node, undefined, 7 /* UNKNOWN */);
24349
+ return new DynamicValue(node, undefined, 8 /* UNKNOWN */);
22431
24350
  }
22432
24351
  isFromDynamicInput() {
22433
24352
  return this.code === 0 /* DYNAMIC_INPUT */;
@@ -22450,8 +24369,11 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
22450
24369
  isFromComplexFunctionCall() {
22451
24370
  return this.code === 6 /* COMPLEX_FUNCTION_CALL */;
22452
24371
  }
24372
+ isFromDynamicType() {
24373
+ return this.code === 7 /* DYNAMIC_TYPE */;
24374
+ }
22453
24375
  isFromUnknown() {
22454
- return this.code === 7 /* UNKNOWN */;
24376
+ return this.code === 8 /* UNKNOWN */;
22455
24377
  }
22456
24378
  accept(visitor) {
22457
24379
  switch (this.code) {
@@ -22469,7 +24391,9 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
22469
24391
  return visitor.visitInvalidExpressionType(this);
22470
24392
  case 6 /* COMPLEX_FUNCTION_CALL */:
22471
24393
  return visitor.visitComplexFunctionCall(this);
22472
- case 7 /* UNKNOWN */:
24394
+ case 7 /* DYNAMIC_TYPE */:
24395
+ return visitor.visitDynamicType(this);
24396
+ case 8 /* UNKNOWN */:
22473
24397
  return visitor.visitUnknown(this);
22474
24398
  }
22475
24399
  }
@@ -22637,6 +24561,9 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
22637
24561
  visitUnknownIdentifier(value) {
22638
24562
  return [makeRelatedInformation(value.node, 'Unknown reference.')];
22639
24563
  }
24564
+ visitDynamicType(value) {
24565
+ return [makeRelatedInformation(value.node, 'Dynamic type.')];
24566
+ }
22640
24567
  visitUnsupportedSyntax(value) {
22641
24568
  return [makeRelatedInformation(value.node, 'This syntax is not supported.')];
22642
24569
  }
@@ -23126,6 +25053,23 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
23126
25053
  return this.visitExpression(value, context);
23127
25054
  }
23128
25055
  else if (isVariableDeclarationDeclared(node)) {
25056
+ // If the declaration has a literal type that can be statically reduced to a value, resolve to
25057
+ // that value. If not, the historical behavior for variable declarations is to return a
25058
+ // `Reference` to the variable, as the consumer could use it in a context where knowing its
25059
+ // static value is not necessary.
25060
+ //
25061
+ // Arguably, since the value cannot be statically determined, we should return a
25062
+ // `DynamicValue`. This returns a `Reference` because it's the same behavior as before
25063
+ // `visitType` was introduced.
25064
+ //
25065
+ // TODO(zarend): investigate switching to a `DynamicValue` and verify this won't break any
25066
+ // use cases, especially in ngcc
25067
+ if (node.type !== undefined) {
25068
+ const evaluatedType = this.visitType(node.type, context);
25069
+ if (!(evaluatedType instanceof DynamicValue)) {
25070
+ return evaluatedType;
25071
+ }
25072
+ }
23129
25073
  return this.getReference(node, context);
23130
25074
  }
23131
25075
  else {
@@ -23275,10 +25219,11 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
23275
25219
  if (expr === null) {
23276
25220
  return DynamicValue.fromDynamicInput(node, DynamicValue.fromExternalReference(node.expression, lhs));
23277
25221
  }
23278
- // If the function is declared in a different file, resolve the foreign function expression
23279
- // using the absolute module name of that file (if any).
23280
- if (lhs.bestGuessOwningModule !== null) {
23281
- context = Object.assign(Object.assign({}, context), { absoluteModuleName: lhs.bestGuessOwningModule.specifier, resolutionContext: node.getSourceFile().fileName });
25222
+ // If the foreign expression occurs in a different file, then assume that the owning module
25223
+ // of the call expression should also be used for the resolved foreign expression.
25224
+ if (expr.getSourceFile() !== node.expression.getSourceFile() &&
25225
+ lhs.bestGuessOwningModule !== null) {
25226
+ context = Object.assign(Object.assign({}, context), { absoluteModuleName: lhs.bestGuessOwningModule.specifier, resolutionContext: lhs.bestGuessOwningModule.resolutionContext });
23282
25227
  }
23283
25228
  return this.visitFfrExpression(expr, context);
23284
25229
  }
@@ -23483,6 +25428,25 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
23483
25428
  getReference(node, context) {
23484
25429
  return new Reference$1(node, owningModule(context));
23485
25430
  }
25431
+ visitType(node, context) {
25432
+ if (ts$1.isLiteralTypeNode(node)) {
25433
+ return this.visitExpression(node.literal, context);
25434
+ }
25435
+ else if (ts$1.isTupleTypeNode(node)) {
25436
+ return this.visitTupleType(node, context);
25437
+ }
25438
+ else if (ts$1.isNamedTupleMember(node)) {
25439
+ return this.visitType(node.type, context);
25440
+ }
25441
+ return DynamicValue.fromDynamicType(node);
25442
+ }
25443
+ visitTupleType(node, context) {
25444
+ const res = [];
25445
+ for (const elem of node.elements) {
25446
+ res.push(this.visitType(elem, context));
25447
+ }
25448
+ return res;
25449
+ }
23486
25450
  }
23487
25451
  function isFunctionOrMethodReference(ref) {
23488
25452
  return ts$1.isFunctionDeclaration(ref.node) || ts$1.isMethodDeclaration(ref.node) ||
@@ -24558,6 +26522,24 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
24558
26522
  }
24559
26523
  }
24560
26524
  }
26525
+ xi18n(bundle) {
26526
+ for (const clazz of this.classes.keys()) {
26527
+ const record = this.classes.get(clazz);
26528
+ for (const trait of record.traits) {
26529
+ if (trait.state !== TraitState.Analyzed && trait.state !== TraitState.Resolved) {
26530
+ // Skip traits that haven't been analyzed successfully.
26531
+ continue;
26532
+ }
26533
+ else if (trait.handler.xi18n === undefined) {
26534
+ // Skip traits that don't support xi18n.
26535
+ continue;
26536
+ }
26537
+ if (trait.analysis !== null) {
26538
+ trait.handler.xi18n(bundle, clazz, trait.analysis);
26539
+ }
26540
+ }
26541
+ }
26542
+ }
24561
26543
  updateResources(clazz) {
24562
26544
  if (!this.reflector.isClass(clazz) || !this.classes.has(clazz)) {
24563
26545
  return;
@@ -25730,13 +27712,6 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'os', 'typescript', 'fs', '
25730
27712
  */
25731
27713
  this._after = new Map();
25732
27714
  }
25733
- /**
25734
- * Visit a class declaration, returning at least the transformed declaration and optionally other
25735
- * nodes to insert before the declaration.
25736
- */
25737
- visitClassDeclaration(node) {
25738
- return { node };
25739
- }
25740
27715
  _visitListEntryNode(node, visitor) {
25741
27716
  const result = visitor(node);
25742
27717
  if (result.before !== undefined) {
@@ -28688,6 +30663,10 @@ Either add the @Injectable() decorator to '${provider.node.name
28688
30663
  }
28689
30664
  return { data };
28690
30665
  }
30666
+ xi18n(ctx, node, analysis) {
30667
+ var _a;
30668
+ ctx.updateFromTemplate(analysis.template.content, analysis.template.declaration.resolvedTemplateUrl, (_a = analysis.template.interpolationConfig) !== null && _a !== void 0 ? _a : DEFAULT_INTERPOLATION_CONFIG);
30669
+ }
28691
30670
  updateResources(node, analysis) {
28692
30671
  const containingFile = node.getSourceFile().fileName;
28693
30672
  // If the template is external, re-parse it.
@@ -29579,6 +31558,13 @@ Either add the @Injectable() decorator to '${provider.node.name
29579
31558
  class CycleAnalyzer {
29580
31559
  constructor(importGraph) {
29581
31560
  this.importGraph = importGraph;
31561
+ /**
31562
+ * Cycle detection is requested with the same `from` source file for all used directives and pipes
31563
+ * within a component, which makes it beneficial to cache the results as long as the `from` source
31564
+ * file has not changed. This avoids visiting the import graph that is reachable from multiple
31565
+ * directives/pipes more than once.
31566
+ */
31567
+ this.cachedResults = null;
29582
31568
  }
29583
31569
  /**
29584
31570
  * Check for a cycle to be created in the `ts.Program` by adding an import between `from` and
@@ -29588,10 +31574,12 @@ Either add the @Injectable() decorator to '${provider.node.name
29588
31574
  * otherwise.
29589
31575
  */
29590
31576
  wouldCreateCycle(from, to) {
31577
+ // Try to reuse the cached results as long as the `from` source file is the same.
31578
+ if (this.cachedResults === null || this.cachedResults.from !== from) {
31579
+ this.cachedResults = new CycleResults(from, this.importGraph);
31580
+ }
29591
31581
  // Import of 'from' -> 'to' is illegal if an edge 'to' -> 'from' already exists.
29592
- return this.importGraph.transitiveImportsOf(to).has(from) ?
29593
- new Cycle(this.importGraph, from, to) :
29594
- null;
31582
+ return this.cachedResults.wouldBeCyclic(to) ? new Cycle(this.importGraph, from, to) : null;
29595
31583
  }
29596
31584
  /**
29597
31585
  * Record a synthetic import from `from` to `to`.
@@ -29600,9 +31588,73 @@ Either add the @Injectable() decorator to '${provider.node.name
29600
31588
  * import graph for cycle creation.
29601
31589
  */
29602
31590
  recordSyntheticImport(from, to) {
31591
+ this.cachedResults = null;
29603
31592
  this.importGraph.addSyntheticImport(from, to);
29604
31593
  }
29605
31594
  }
31595
+ const NgCyclicResult = Symbol('NgCyclicResult');
31596
+ /**
31597
+ * Stores the results of cycle detection in a memory efficient manner. A symbol is attached to
31598
+ * source files that indicate what the cyclic analysis result is, as indicated by two markers that
31599
+ * are unique to this instance. This alleviates memory pressure in large import graphs, as each
31600
+ * execution is able to store its results in the same memory location (i.e. in the symbol
31601
+ * on the source file) as earlier executions.
31602
+ */
31603
+ class CycleResults {
31604
+ constructor(from, importGraph) {
31605
+ this.from = from;
31606
+ this.importGraph = importGraph;
31607
+ this.cyclic = {};
31608
+ this.acyclic = {};
31609
+ }
31610
+ wouldBeCyclic(sf) {
31611
+ const cached = this.getCachedResult(sf);
31612
+ if (cached !== null) {
31613
+ // The result for this source file has already been computed, so return its result.
31614
+ return cached;
31615
+ }
31616
+ if (sf === this.from) {
31617
+ // We have reached the source file that we want to create an import from, which means that
31618
+ // doing so would create a cycle.
31619
+ return true;
31620
+ }
31621
+ // Assume for now that the file will be acyclic; this prevents infinite recursion in the case
31622
+ // that `sf` is visited again as part of an existing cycle in the graph.
31623
+ this.markAcyclic(sf);
31624
+ const imports = this.importGraph.importsOf(sf);
31625
+ for (const imported of imports) {
31626
+ if (this.wouldBeCyclic(imported)) {
31627
+ this.markCyclic(sf);
31628
+ return true;
31629
+ }
31630
+ }
31631
+ return false;
31632
+ }
31633
+ /**
31634
+ * Returns whether the source file is already known to be cyclic, or `null` if the result is not
31635
+ * yet known.
31636
+ */
31637
+ getCachedResult(sf) {
31638
+ const result = sf[NgCyclicResult];
31639
+ if (result === this.cyclic) {
31640
+ return true;
31641
+ }
31642
+ else if (result === this.acyclic) {
31643
+ return false;
31644
+ }
31645
+ else {
31646
+ // Either the symbol is missing or its value does not correspond with one of the current
31647
+ // result markers. As such, the result is unknown.
31648
+ return null;
31649
+ }
31650
+ }
31651
+ markCyclic(sf) {
31652
+ sf[NgCyclicResult] = this.cyclic;
31653
+ }
31654
+ markAcyclic(sf) {
31655
+ sf[NgCyclicResult] = this.acyclic;
31656
+ }
31657
+ }
29606
31658
  /**
29607
31659
  * Represents an import cycle between `from` and `to` in the program.
29608
31660
  *
@@ -29643,7 +31695,7 @@ Either add the @Injectable() decorator to '${provider.node.name
29643
31695
  constructor(checker, perf) {
29644
31696
  this.checker = checker;
29645
31697
  this.perf = perf;
29646
- this.map = new Map();
31698
+ this.imports = new Map();
29647
31699
  }
29648
31700
  /**
29649
31701
  * List the direct (not transitive) imports of a given `ts.SourceFile`.
@@ -29651,27 +31703,10 @@ Either add the @Injectable() decorator to '${provider.node.name
29651
31703
  * This operation is cached.
29652
31704
  */
29653
31705
  importsOf(sf) {
29654
- if (!this.map.has(sf)) {
29655
- this.map.set(sf, this.scanImports(sf));
29656
- }
29657
- return this.map.get(sf);
29658
- }
29659
- /**
29660
- * Lists the transitive imports of a given `ts.SourceFile`.
29661
- */
29662
- transitiveImportsOf(sf) {
29663
- const imports = new Set();
29664
- this.transitiveImportsOfHelper(sf, imports);
29665
- return imports;
29666
- }
29667
- transitiveImportsOfHelper(sf, results) {
29668
- if (results.has(sf)) {
29669
- return;
31706
+ if (!this.imports.has(sf)) {
31707
+ this.imports.set(sf, this.scanImports(sf));
29670
31708
  }
29671
- results.add(sf);
29672
- this.importsOf(sf).forEach(imported => {
29673
- this.transitiveImportsOfHelper(imported, results);
29674
- });
31709
+ return this.imports.get(sf);
29675
31710
  }
29676
31711
  /**
29677
31712
  * Find an import path from the `start` SourceFile to the `end` SourceFile.
@@ -29969,6 +32004,213 @@ Either add the @Injectable() decorator to '${provider.node.name
29969
32004
  }
29970
32005
  }
29971
32006
 
32007
+ /**
32008
+ * @license
32009
+ * Copyright Google LLC All Rights Reserved.
32010
+ *
32011
+ * Use of this source code is governed by an MIT-style license that can be
32012
+ * found in the LICENSE file at https://angular.io/license
32013
+ */
32014
+ const NgOriginalFile = Symbol('NgOriginalFile');
32015
+ var UpdateMode;
32016
+ (function (UpdateMode) {
32017
+ /**
32018
+ * A complete update creates a completely new overlay of type-checking code on top of the user's
32019
+ * original program, which doesn't include type-checking code from previous calls to
32020
+ * `updateFiles`.
32021
+ */
32022
+ UpdateMode[UpdateMode["Complete"] = 0] = "Complete";
32023
+ /**
32024
+ * An incremental update changes the contents of some files in the type-checking program without
32025
+ * reverting any prior changes.
32026
+ */
32027
+ UpdateMode[UpdateMode["Incremental"] = 1] = "Incremental";
32028
+ })(UpdateMode || (UpdateMode = {}));
32029
+
32030
+ /**
32031
+ * @license
32032
+ * Copyright Google LLC All Rights Reserved.
32033
+ *
32034
+ * Use of this source code is governed by an MIT-style license that can be
32035
+ * found in the LICENSE file at https://angular.io/license
32036
+ */
32037
+ /**
32038
+ * A `Symbol` which is used to patch extension data onto `ts.SourceFile`s.
32039
+ */
32040
+ const NgExtension = Symbol('NgExtension');
32041
+ /**
32042
+ * Narrows a `ts.SourceFile` if it has an `NgExtension` property.
32043
+ */
32044
+ function isExtended(sf) {
32045
+ return sf[NgExtension] !== undefined;
32046
+ }
32047
+ /**
32048
+ * Check whether `sf` is a shim `ts.SourceFile` (either a per-file shim or a top-level shim).
32049
+ */
32050
+ function isShim(sf) {
32051
+ return isExtended(sf) && (sf[NgExtension].fileShim !== null || sf[NgExtension].isTopLevelShim);
32052
+ }
32053
+
32054
+ /**
32055
+ * @license
32056
+ * Copyright Google LLC All Rights Reserved.
32057
+ *
32058
+ * Use of this source code is governed by an MIT-style license that can be
32059
+ * found in the LICENSE file at https://angular.io/license
32060
+ */
32061
+ const STRIP_NG_FACTORY = /(.*)NgFactory$/;
32062
+ function generatedFactoryTransform(factoryMap, importRewriter) {
32063
+ return (context) => {
32064
+ return (file) => {
32065
+ return transformFactorySourceFile(factoryMap, context, importRewriter, file);
32066
+ };
32067
+ };
32068
+ }
32069
+ function transformFactorySourceFile(factoryMap, context, importRewriter, file) {
32070
+ // If this is not a generated file, it won't have factory info associated with it.
32071
+ if (!factoryMap.has(file.fileName)) {
32072
+ // Don't transform non-generated code.
32073
+ return file;
32074
+ }
32075
+ const { moduleSymbols, sourceFilePath } = factoryMap.get(file.fileName);
32076
+ // Not every exported factory statement is valid. They were generated before the program was
32077
+ // analyzed, and before ngtsc knew which symbols were actually NgModules. factoryMap contains
32078
+ // that knowledge now, so this transform filters the statement list and removes exported factories
32079
+ // that aren't actually factories.
32080
+ //
32081
+ // This could leave the generated factory file empty. To prevent this (it causes issues with
32082
+ // closure compiler) a 'ɵNonEmptyModule' export was added when the factory shim was created.
32083
+ // Preserve that export if needed, and remove it otherwise.
32084
+ //
32085
+ // Additionally, an import to @angular/core is generated, but the current compilation unit could
32086
+ // actually be @angular/core, in which case such an import is invalid and should be replaced with
32087
+ // the proper path to access Ivy symbols in core.
32088
+ // The filtered set of statements.
32089
+ const transformedStatements = [];
32090
+ // The statement identified as the ɵNonEmptyModule export.
32091
+ let nonEmptyExport = null;
32092
+ // Extracted identifiers which refer to import statements from @angular/core.
32093
+ const coreImportIdentifiers = new Set();
32094
+ // Consider all the statements.
32095
+ for (const stmt of file.statements) {
32096
+ // Look for imports to @angular/core.
32097
+ if (ts$1.isImportDeclaration(stmt) && ts$1.isStringLiteral(stmt.moduleSpecifier) &&
32098
+ stmt.moduleSpecifier.text === '@angular/core') {
32099
+ // Update the import path to point to the correct file using the ImportRewriter.
32100
+ const rewrittenModuleSpecifier = importRewriter.rewriteSpecifier('@angular/core', sourceFilePath);
32101
+ if (rewrittenModuleSpecifier !== stmt.moduleSpecifier.text) {
32102
+ transformedStatements.push(ts$1.updateImportDeclaration(stmt, stmt.decorators, stmt.modifiers, stmt.importClause, ts$1.createStringLiteral(rewrittenModuleSpecifier)));
32103
+ // Record the identifier by which this imported module goes, so references to its symbols
32104
+ // can be discovered later.
32105
+ if (stmt.importClause !== undefined && stmt.importClause.namedBindings !== undefined &&
32106
+ ts$1.isNamespaceImport(stmt.importClause.namedBindings)) {
32107
+ coreImportIdentifiers.add(stmt.importClause.namedBindings.name.text);
32108
+ }
32109
+ }
32110
+ else {
32111
+ transformedStatements.push(stmt);
32112
+ }
32113
+ }
32114
+ else if (ts$1.isVariableStatement(stmt) && stmt.declarationList.declarations.length === 1) {
32115
+ const decl = stmt.declarationList.declarations[0];
32116
+ // If this is the ɵNonEmptyModule export, then save it for later.
32117
+ if (ts$1.isIdentifier(decl.name)) {
32118
+ if (decl.name.text === 'ɵNonEmptyModule') {
32119
+ nonEmptyExport = stmt;
32120
+ continue;
32121
+ }
32122
+ // Otherwise, check if this export is a factory for a known NgModule, and retain it if so.
32123
+ const match = STRIP_NG_FACTORY.exec(decl.name.text);
32124
+ const module = match ? moduleSymbols.get(match[1]) : null;
32125
+ if (module) {
32126
+ // If the module can be tree shaken, then the factory should be wrapped in a
32127
+ // `noSideEffects()` call which tells Closure to treat the expression as pure, allowing
32128
+ // it to be removed if the result is not used.
32129
+ //
32130
+ // `NgModule`s with an `id` property will be lazy loaded. Google-internal lazy loading
32131
+ // infra relies on a side effect from the `new NgModuleFactory()` call, which registers
32132
+ // the module globally. Because of this, we **cannot** tree shake any module which has
32133
+ // an `id` property. Doing so would cause lazy loaded modules to never be registered.
32134
+ const moduleIsTreeShakable = !module.hasId;
32135
+ const newStmt = !moduleIsTreeShakable ?
32136
+ stmt :
32137
+ updateInitializers(stmt, (init) => init ? wrapInNoSideEffects(init) : undefined);
32138
+ transformedStatements.push(newStmt);
32139
+ }
32140
+ }
32141
+ else {
32142
+ // Leave the statement alone, as it can't be understood.
32143
+ transformedStatements.push(stmt);
32144
+ }
32145
+ }
32146
+ else {
32147
+ // Include non-variable statements (imports, etc).
32148
+ transformedStatements.push(stmt);
32149
+ }
32150
+ }
32151
+ // Check whether the empty module export is still needed.
32152
+ if (!transformedStatements.some(ts$1.isVariableStatement) && nonEmptyExport !== null) {
32153
+ // If the resulting file has no factories, include an empty export to
32154
+ // satisfy closure compiler.
32155
+ transformedStatements.push(nonEmptyExport);
32156
+ }
32157
+ file = ts$1.updateSourceFileNode(file, transformedStatements);
32158
+ // If any imports to @angular/core were detected and rewritten (which happens when compiling
32159
+ // @angular/core), go through the SourceFile and rewrite references to symbols imported from core.
32160
+ if (coreImportIdentifiers.size > 0) {
32161
+ const visit = (node) => {
32162
+ node = ts$1.visitEachChild(node, child => visit(child), context);
32163
+ // Look for expressions of the form "i.s" where 'i' is a detected name for an @angular/core
32164
+ // import that was changed above. Rewrite 's' using the ImportResolver.
32165
+ if (ts$1.isPropertyAccessExpression(node) && ts$1.isIdentifier(node.expression) &&
32166
+ coreImportIdentifiers.has(node.expression.text)) {
32167
+ // This is an import of a symbol from @angular/core. Transform it with the importRewriter.
32168
+ const rewrittenSymbol = importRewriter.rewriteSymbol(node.name.text, '@angular/core');
32169
+ if (rewrittenSymbol !== node.name.text) {
32170
+ const updated = ts$1.updatePropertyAccess(node, node.expression, ts$1.createIdentifier(rewrittenSymbol));
32171
+ node = updated;
32172
+ }
32173
+ }
32174
+ return node;
32175
+ };
32176
+ file = visit(file);
32177
+ }
32178
+ return file;
32179
+ }
32180
+ /**
32181
+ * Wraps the given expression in a call to `ɵnoSideEffects()`, which tells
32182
+ * Closure we don't care about the side effects of this expression and it should
32183
+ * be treated as "pure". Closure is free to tree shake this expression if its
32184
+ * result is not used.
32185
+ *
32186
+ * Example: Takes `1 + 2` and returns `i0.ɵnoSideEffects(() => 1 + 2)`.
32187
+ */
32188
+ function wrapInNoSideEffects(expr) {
32189
+ const noSideEffects = ts$1.createPropertyAccess(ts$1.createIdentifier('i0'), 'ɵnoSideEffects');
32190
+ return ts$1.createCall(noSideEffects,
32191
+ /* typeArguments */ [],
32192
+ /* arguments */
32193
+ [
32194
+ ts$1.createFunctionExpression(
32195
+ /* modifiers */ [],
32196
+ /* asteriskToken */ undefined,
32197
+ /* name */ undefined,
32198
+ /* typeParameters */ [],
32199
+ /* parameters */ [],
32200
+ /* type */ undefined,
32201
+ /* body */ ts$1.createBlock([
32202
+ ts$1.createReturn(expr),
32203
+ ])),
32204
+ ]);
32205
+ }
32206
+ /**
32207
+ * Clones and updates the initializers for a given statement to use the new
32208
+ * expression provided. Does not mutate the input statement.
32209
+ */
32210
+ function updateInitializers(stmt, update) {
32211
+ return ts$1.updateVariableStatement(stmt, stmt.modifiers, ts$1.updateVariableDeclarationList(stmt.declarationList, stmt.declarationList.declarations.map((decl) => ts$1.updateVariableDeclaration(decl, decl.name, decl.type, update(decl.initializer)))));
32212
+ }
32213
+
29972
32214
  /**
29973
32215
  * @license
29974
32216
  * Copyright Google LLC All Rights Reserved.
@@ -30172,11 +32414,11 @@ Either add the @Injectable() decorator to '${provider.node.name
30172
32414
  break;
30173
32415
  }
30174
32416
  const oldVersions = priorAnalysis.versions;
30175
- const oldFilesArray = oldProgram.getSourceFiles().map(sf => toUnredirectedSourceFile(sf));
32417
+ const oldFilesArray = oldProgram.getSourceFiles().map(toOriginalSourceFile);
30176
32418
  const oldFiles = new Set(oldFilesArray);
30177
32419
  const deletedTsFiles = new Set(oldFilesArray.map(sf => absoluteFromSourceFile(sf)));
30178
32420
  for (const possiblyRedirectedNewFile of program.getSourceFiles()) {
30179
- const sf = toUnredirectedSourceFile(possiblyRedirectedNewFile);
32421
+ const sf = toOriginalSourceFile(possiblyRedirectedNewFile);
30180
32422
  const sfPath = absoluteFromSourceFile(sf);
30181
32423
  // Since we're seeing a file in the incoming program with this name, it can't have been
30182
32424
  // deleted.
@@ -30366,6 +32608,31 @@ Either add the @Injectable() decorator to '${provider.node.name
30366
32608
  return this.step.priorState.emitted.has(sfPath);
30367
32609
  }
30368
32610
  }
32611
+ /**
32612
+ * To accurately detect whether a source file was affected during an incremental rebuild, the
32613
+ * "original" source file needs to be consistently used.
32614
+ *
32615
+ * First, TypeScript may have created source file redirects when declaration files of the same
32616
+ * version of a library are included multiple times. The non-redirected source file should be used
32617
+ * to detect changes, as otherwise the redirected source files cause a mismatch when compared to
32618
+ * a prior program.
32619
+ *
32620
+ * Second, the program that is used for template type checking may contain mutated source files, if
32621
+ * inline type constructors or inline template type-check blocks had to be used. Such source files
32622
+ * store their original, non-mutated source file from the original program in a symbol. For
32623
+ * computing the affected files in an incremental build this original source file should be used, as
32624
+ * the mutated source file would always be considered affected.
32625
+ */
32626
+ function toOriginalSourceFile(sf) {
32627
+ const unredirectedSf = toUnredirectedSourceFile(sf);
32628
+ const originalFile = unredirectedSf[NgOriginalFile];
32629
+ if (originalFile !== undefined) {
32630
+ return originalFile;
32631
+ }
32632
+ else {
32633
+ return unredirectedSf;
32634
+ }
32635
+ }
30369
32636
 
30370
32637
  /**
30371
32638
  * @license
@@ -32063,190 +34330,6 @@ Either add the @Injectable() decorator to '${provider.node.name
32063
34330
  }
32064
34331
  }
32065
34332
 
32066
- /**
32067
- * @license
32068
- * Copyright Google LLC All Rights Reserved.
32069
- *
32070
- * Use of this source code is governed by an MIT-style license that can be
32071
- * found in the LICENSE file at https://angular.io/license
32072
- */
32073
- /**
32074
- * A `Symbol` which is used to patch extension data onto `ts.SourceFile`s.
32075
- */
32076
- const NgExtension = Symbol('NgExtension');
32077
- /**
32078
- * Narrows a `ts.SourceFile` if it has an `NgExtension` property.
32079
- */
32080
- function isExtended(sf) {
32081
- return sf[NgExtension] !== undefined;
32082
- }
32083
- /**
32084
- * Check whether `sf` is a shim `ts.SourceFile` (either a per-file shim or a top-level shim).
32085
- */
32086
- function isShim(sf) {
32087
- return isExtended(sf) && (sf[NgExtension].fileShim !== null || sf[NgExtension].isTopLevelShim);
32088
- }
32089
-
32090
- /**
32091
- * @license
32092
- * Copyright Google LLC All Rights Reserved.
32093
- *
32094
- * Use of this source code is governed by an MIT-style license that can be
32095
- * found in the LICENSE file at https://angular.io/license
32096
- */
32097
- const STRIP_NG_FACTORY = /(.*)NgFactory$/;
32098
- function generatedFactoryTransform(factoryMap, importRewriter) {
32099
- return (context) => {
32100
- return (file) => {
32101
- return transformFactorySourceFile(factoryMap, context, importRewriter, file);
32102
- };
32103
- };
32104
- }
32105
- function transformFactorySourceFile(factoryMap, context, importRewriter, file) {
32106
- // If this is not a generated file, it won't have factory info associated with it.
32107
- if (!factoryMap.has(file.fileName)) {
32108
- // Don't transform non-generated code.
32109
- return file;
32110
- }
32111
- const { moduleSymbols, sourceFilePath } = factoryMap.get(file.fileName);
32112
- // Not every exported factory statement is valid. They were generated before the program was
32113
- // analyzed, and before ngtsc knew which symbols were actually NgModules. factoryMap contains
32114
- // that knowledge now, so this transform filters the statement list and removes exported factories
32115
- // that aren't actually factories.
32116
- //
32117
- // This could leave the generated factory file empty. To prevent this (it causes issues with
32118
- // closure compiler) a 'ɵNonEmptyModule' export was added when the factory shim was created.
32119
- // Preserve that export if needed, and remove it otherwise.
32120
- //
32121
- // Additionally, an import to @angular/core is generated, but the current compilation unit could
32122
- // actually be @angular/core, in which case such an import is invalid and should be replaced with
32123
- // the proper path to access Ivy symbols in core.
32124
- // The filtered set of statements.
32125
- const transformedStatements = [];
32126
- // The statement identified as the ɵNonEmptyModule export.
32127
- let nonEmptyExport = null;
32128
- // Extracted identifiers which refer to import statements from @angular/core.
32129
- const coreImportIdentifiers = new Set();
32130
- // Consider all the statements.
32131
- for (const stmt of file.statements) {
32132
- // Look for imports to @angular/core.
32133
- if (ts$1.isImportDeclaration(stmt) && ts$1.isStringLiteral(stmt.moduleSpecifier) &&
32134
- stmt.moduleSpecifier.text === '@angular/core') {
32135
- // Update the import path to point to the correct file using the ImportRewriter.
32136
- const rewrittenModuleSpecifier = importRewriter.rewriteSpecifier('@angular/core', sourceFilePath);
32137
- if (rewrittenModuleSpecifier !== stmt.moduleSpecifier.text) {
32138
- transformedStatements.push(ts$1.updateImportDeclaration(stmt, stmt.decorators, stmt.modifiers, stmt.importClause, ts$1.createStringLiteral(rewrittenModuleSpecifier)));
32139
- // Record the identifier by which this imported module goes, so references to its symbols
32140
- // can be discovered later.
32141
- if (stmt.importClause !== undefined && stmt.importClause.namedBindings !== undefined &&
32142
- ts$1.isNamespaceImport(stmt.importClause.namedBindings)) {
32143
- coreImportIdentifiers.add(stmt.importClause.namedBindings.name.text);
32144
- }
32145
- }
32146
- else {
32147
- transformedStatements.push(stmt);
32148
- }
32149
- }
32150
- else if (ts$1.isVariableStatement(stmt) && stmt.declarationList.declarations.length === 1) {
32151
- const decl = stmt.declarationList.declarations[0];
32152
- // If this is the ɵNonEmptyModule export, then save it for later.
32153
- if (ts$1.isIdentifier(decl.name)) {
32154
- if (decl.name.text === 'ɵNonEmptyModule') {
32155
- nonEmptyExport = stmt;
32156
- continue;
32157
- }
32158
- // Otherwise, check if this export is a factory for a known NgModule, and retain it if so.
32159
- const match = STRIP_NG_FACTORY.exec(decl.name.text);
32160
- const module = match ? moduleSymbols.get(match[1]) : null;
32161
- if (module) {
32162
- // If the module can be tree shaken, then the factory should be wrapped in a
32163
- // `noSideEffects()` call which tells Closure to treat the expression as pure, allowing
32164
- // it to be removed if the result is not used.
32165
- //
32166
- // `NgModule`s with an `id` property will be lazy loaded. Google-internal lazy loading
32167
- // infra relies on a side effect from the `new NgModuleFactory()` call, which registers
32168
- // the module globally. Because of this, we **cannot** tree shake any module which has
32169
- // an `id` property. Doing so would cause lazy loaded modules to never be registered.
32170
- const moduleIsTreeShakable = !module.hasId;
32171
- const newStmt = !moduleIsTreeShakable ?
32172
- stmt :
32173
- updateInitializers(stmt, (init) => init ? wrapInNoSideEffects(init) : undefined);
32174
- transformedStatements.push(newStmt);
32175
- }
32176
- }
32177
- else {
32178
- // Leave the statement alone, as it can't be understood.
32179
- transformedStatements.push(stmt);
32180
- }
32181
- }
32182
- else {
32183
- // Include non-variable statements (imports, etc).
32184
- transformedStatements.push(stmt);
32185
- }
32186
- }
32187
- // Check whether the empty module export is still needed.
32188
- if (!transformedStatements.some(ts$1.isVariableStatement) && nonEmptyExport !== null) {
32189
- // If the resulting file has no factories, include an empty export to
32190
- // satisfy closure compiler.
32191
- transformedStatements.push(nonEmptyExport);
32192
- }
32193
- file = ts$1.updateSourceFileNode(file, transformedStatements);
32194
- // If any imports to @angular/core were detected and rewritten (which happens when compiling
32195
- // @angular/core), go through the SourceFile and rewrite references to symbols imported from core.
32196
- if (coreImportIdentifiers.size > 0) {
32197
- const visit = (node) => {
32198
- node = ts$1.visitEachChild(node, child => visit(child), context);
32199
- // Look for expressions of the form "i.s" where 'i' is a detected name for an @angular/core
32200
- // import that was changed above. Rewrite 's' using the ImportResolver.
32201
- if (ts$1.isPropertyAccessExpression(node) && ts$1.isIdentifier(node.expression) &&
32202
- coreImportIdentifiers.has(node.expression.text)) {
32203
- // This is an import of a symbol from @angular/core. Transform it with the importRewriter.
32204
- const rewrittenSymbol = importRewriter.rewriteSymbol(node.name.text, '@angular/core');
32205
- if (rewrittenSymbol !== node.name.text) {
32206
- const updated = ts$1.updatePropertyAccess(node, node.expression, ts$1.createIdentifier(rewrittenSymbol));
32207
- node = updated;
32208
- }
32209
- }
32210
- return node;
32211
- };
32212
- file = visit(file);
32213
- }
32214
- return file;
32215
- }
32216
- /**
32217
- * Wraps the given expression in a call to `ɵnoSideEffects()`, which tells
32218
- * Closure we don't care about the side effects of this expression and it should
32219
- * be treated as "pure". Closure is free to tree shake this expression if its
32220
- * result is not used.
32221
- *
32222
- * Example: Takes `1 + 2` and returns `i0.ɵnoSideEffects(() => 1 + 2)`.
32223
- */
32224
- function wrapInNoSideEffects(expr) {
32225
- const noSideEffects = ts$1.createPropertyAccess(ts$1.createIdentifier('i0'), 'ɵnoSideEffects');
32226
- return ts$1.createCall(noSideEffects,
32227
- /* typeArguments */ [],
32228
- /* arguments */
32229
- [
32230
- ts$1.createFunctionExpression(
32231
- /* modifiers */ [],
32232
- /* asteriskToken */ undefined,
32233
- /* name */ undefined,
32234
- /* typeParameters */ [],
32235
- /* parameters */ [],
32236
- /* type */ undefined,
32237
- /* body */ ts$1.createBlock([
32238
- ts$1.createReturn(expr),
32239
- ])),
32240
- ]);
32241
- }
32242
- /**
32243
- * Clones and updates the initializers for a given statement to use the new
32244
- * expression provided. Does not mutate the input statement.
32245
- */
32246
- function updateInitializers(stmt, update) {
32247
- return ts$1.updateVariableStatement(stmt, stmt.modifiers, ts$1.updateVariableDeclarationList(stmt.declarationList, stmt.declarationList.declarations.map((decl) => ts$1.updateVariableDeclaration(decl, decl.name, decl.type, update(decl.initializer)))));
32248
- }
32249
-
32250
34333
  /**
32251
34334
  * @license
32252
34335
  * Copyright Google LLC All Rights Reserved.
@@ -32361,28 +34444,6 @@ Either add the @Injectable() decorator to '${provider.node.name
32361
34444
  decl.initializer.text.endsWith(IVY_SWITCH_PRE_SUFFIX));
32362
34445
  }
32363
34446
 
32364
- /**
32365
- * @license
32366
- * Copyright Google LLC All Rights Reserved.
32367
- *
32368
- * Use of this source code is governed by an MIT-style license that can be
32369
- * found in the LICENSE file at https://angular.io/license
32370
- */
32371
- var UpdateMode;
32372
- (function (UpdateMode) {
32373
- /**
32374
- * A complete update creates a completely new overlay of type-checking code on top of the user's
32375
- * original program, which doesn't include type-checking code from previous calls to
32376
- * `updateFiles`.
32377
- */
32378
- UpdateMode[UpdateMode["Complete"] = 0] = "Complete";
32379
- /**
32380
- * An incremental update changes the contents of some files in the type-checking program without
32381
- * reverting any prior changes.
32382
- */
32383
- UpdateMode[UpdateMode["Incremental"] = 1] = "Incremental";
32384
- })(UpdateMode || (UpdateMode = {}));
32385
-
32386
34447
  /**
32387
34448
  * @license
32388
34449
  * Copyright Google LLC All Rights Reserved.
@@ -33097,6 +35158,7 @@ Either add the @Injectable() decorator to '${provider.node.name
33097
35158
  * Use of this source code is governed by an MIT-style license that can be
33098
35159
  * found in the LICENSE file at https://angular.io/license
33099
35160
  */
35161
+ const INELIGIBLE = {};
33100
35162
  /**
33101
35163
  * Determines whether the provided type can be emitted, which means that it can be safely emitted
33102
35164
  * into a different location.
@@ -33108,13 +35170,29 @@ Either add the @Injectable() decorator to '${provider.node.name
33108
35170
  function canEmitType(type, resolver) {
33109
35171
  return canEmitTypeWorker(type);
33110
35172
  function canEmitTypeWorker(type) {
33111
- return visitTypeNode(type, {
33112
- visitTypeReferenceNode: type => canEmitTypeReference(type),
33113
- visitArrayTypeNode: type => canEmitTypeWorker(type.elementType),
33114
- visitKeywordType: () => true,
33115
- visitLiteralType: () => true,
33116
- visitOtherType: () => false,
33117
- });
35173
+ return visitNode(type) !== INELIGIBLE;
35174
+ }
35175
+ // To determine whether a type can be emitted, we have to recursively look through all type nodes.
35176
+ // If an unsupported type node is found at any position within the type, then the `INELIGIBLE`
35177
+ // constant is returned to stop the recursive walk as the type as a whole cannot be emitted in
35178
+ // that case. Otherwise, the result of visiting all child nodes determines the result. If no
35179
+ // ineligible type reference node is found then the walk returns `undefined`, indicating that
35180
+ // no type node was visited that could not be emitted.
35181
+ function visitNode(node) {
35182
+ // `import('module')` type nodes are not supported, as it may require rewriting the module
35183
+ // specifier which is currently not done.
35184
+ if (ts$1.isImportTypeNode(node)) {
35185
+ return INELIGIBLE;
35186
+ }
35187
+ // Emitting a type reference node in a different context requires that an import for the type
35188
+ // can be created. If a type reference node cannot be emitted, `INELIGIBLE` is returned to stop
35189
+ // the walk.
35190
+ if (ts$1.isTypeReferenceNode(node) && !canEmitTypeReference(node)) {
35191
+ return INELIGIBLE;
35192
+ }
35193
+ else {
35194
+ return ts$1.forEachChild(node, visitNode);
35195
+ }
33118
35196
  }
33119
35197
  function canEmitTypeReference(type) {
33120
35198
  const reference = resolver(type);
@@ -33122,10 +35200,9 @@ Either add the @Injectable() decorator to '${provider.node.name
33122
35200
  if (reference === null) {
33123
35201
  return false;
33124
35202
  }
33125
- // If the type is a reference without a owning module, consider the type not to be eligible for
33126
- // emitting.
33127
- if (reference instanceof Reference$1 && !reference.hasOwningModuleGuess) {
33128
- return false;
35203
+ // If the type is a reference, consider the type to be eligible for emitting.
35204
+ if (reference instanceof Reference$1) {
35205
+ return true;
33129
35206
  }
33130
35207
  // The type can be emitted if either it does not have any type arguments, or all of them can be
33131
35208
  // emitted.
@@ -33167,15 +35244,32 @@ Either add the @Injectable() decorator to '${provider.node.name
33167
35244
  this.emitReference = emitReference;
33168
35245
  }
33169
35246
  emitType(type) {
33170
- return visitTypeNode(type, {
33171
- visitTypeReferenceNode: type => this.emitTypeReference(type),
33172
- visitArrayTypeNode: type => ts$1.updateArrayTypeNode(type, this.emitType(type.elementType)),
33173
- visitKeywordType: type => type,
33174
- visitLiteralType: type => type,
33175
- visitOtherType: () => {
33176
- throw new Error('Unable to emit a complex type');
33177
- },
33178
- });
35247
+ const typeReferenceTransformer = context => {
35248
+ const visitNode = (node) => {
35249
+ if (ts$1.isImportTypeNode(node)) {
35250
+ throw new Error('Unable to emit import type');
35251
+ }
35252
+ if (ts$1.isTypeReferenceNode(node)) {
35253
+ return this.emitTypeReference(node);
35254
+ }
35255
+ else if (ts$1.isLiteralExpression(node)) {
35256
+ // TypeScript would typically take the emit text for a literal expression from the source
35257
+ // file itself. As the type node is being emitted into a different file, however,
35258
+ // TypeScript would extract the literal text from the wrong source file. To mitigate this
35259
+ // issue the literal is cloned and explicitly marked as synthesized by setting its text
35260
+ // range to a negative range, forcing TypeScript to determine the node's literal text from
35261
+ // the synthesized node's text instead of the incorrect source file.
35262
+ const clone = ts$1.getMutableClone(node);
35263
+ ts$1.setTextRange(clone, { pos: -1, end: -1 });
35264
+ return clone;
35265
+ }
35266
+ else {
35267
+ return ts$1.visitEachChild(node, visitNode, context);
35268
+ }
35269
+ };
35270
+ return node => ts$1.visitNode(node, visitNode);
35271
+ };
35272
+ return ts$1.transform(type, [typeReferenceTransformer]).transformed[0];
33179
35273
  }
33180
35274
  emitTypeReference(type) {
33181
35275
  // Determine the reference that the type corresponds with.
@@ -33191,9 +35285,6 @@ Either add the @Injectable() decorator to '${provider.node.name
33191
35285
  // Emit the type name.
33192
35286
  let typeName = type.typeName;
33193
35287
  if (reference instanceof Reference$1) {
33194
- if (!reference.hasOwningModuleGuess) {
33195
- throw new Error('A type reference to emit must be imported from an absolute module');
33196
- }
33197
35288
  const emittedType = this.emitReference(reference);
33198
35289
  if (!ts$1.isTypeReferenceNode(emittedType)) {
33199
35290
  throw new Error(`Expected TypeReferenceNode for emitted reference, got ${ts$1.SyntaxKind[emittedType.kind]}`);
@@ -33203,30 +35294,6 @@ Either add the @Injectable() decorator to '${provider.node.name
33203
35294
  return ts$1.updateTypeReferenceNode(type, typeName, typeArguments);
33204
35295
  }
33205
35296
  }
33206
- function visitTypeNode(type, visitor) {
33207
- if (ts$1.isTypeReferenceNode(type)) {
33208
- return visitor.visitTypeReferenceNode(type);
33209
- }
33210
- else if (ts$1.isArrayTypeNode(type)) {
33211
- return visitor.visitArrayTypeNode(type);
33212
- }
33213
- else if (ts$1.isLiteralTypeNode(type)) {
33214
- return visitor.visitLiteralType(type);
33215
- }
33216
- switch (type.kind) {
33217
- case ts$1.SyntaxKind.AnyKeyword:
33218
- case ts$1.SyntaxKind.UnknownKeyword:
33219
- case ts$1.SyntaxKind.NumberKeyword:
33220
- case ts$1.SyntaxKind.ObjectKeyword:
33221
- case ts$1.SyntaxKind.BooleanKeyword:
33222
- case ts$1.SyntaxKind.StringKeyword:
33223
- case ts$1.SyntaxKind.UndefinedKeyword:
33224
- case ts$1.SyntaxKind.NullKeyword:
33225
- return visitor.visitKeywordType(type);
33226
- default:
33227
- return visitor.visitOtherType(type);
33228
- }
33229
- }
33230
35297
 
33231
35298
  /**
33232
35299
  * @license
@@ -33253,12 +35320,15 @@ Either add the @Injectable() decorator to '${provider.node.name
33253
35320
  return true;
33254
35321
  }
33255
35322
  return this.typeParameters.every(typeParam => {
33256
- if (typeParam.constraint === undefined) {
33257
- return true;
33258
- }
33259
- return canEmitType(typeParam.constraint, type => this.resolveTypeReference(type));
35323
+ return this.canEmitType(typeParam.constraint) && this.canEmitType(typeParam.default);
33260
35324
  });
33261
35325
  }
35326
+ canEmitType(type) {
35327
+ if (type === undefined) {
35328
+ return true;
35329
+ }
35330
+ return canEmitType(type, typeReference => this.resolveTypeReference(typeReference));
35331
+ }
33262
35332
  /**
33263
35333
  * Emits the type parameters using the provided emitter function for `Reference`s.
33264
35334
  */
@@ -33269,11 +35339,12 @@ Either add the @Injectable() decorator to '${provider.node.name
33269
35339
  const emitter = new TypeEmitter(type => this.resolveTypeReference(type), emitReference);
33270
35340
  return this.typeParameters.map(typeParam => {
33271
35341
  const constraint = typeParam.constraint !== undefined ? emitter.emitType(typeParam.constraint) : undefined;
35342
+ const defaultType = typeParam.default !== undefined ? emitter.emitType(typeParam.default) : undefined;
33272
35343
  return ts$1.updateTypeParameterDeclaration(
33273
35344
  /* node */ typeParam,
33274
35345
  /* name */ typeParam.name,
33275
35346
  /* constraint */ constraint,
33276
- /* defaultType */ typeParam.default);
35347
+ /* defaultType */ defaultType);
33277
35348
  });
33278
35349
  }
33279
35350
  resolveTypeReference(type) {
@@ -33296,8 +35367,16 @@ Either add the @Injectable() decorator to '${provider.node.name
33296
35367
  resolutionContext: type.getSourceFile().fileName,
33297
35368
  };
33298
35369
  }
35370
+ // If no owning module is known, the reference needs to be exported to be able to emit an import
35371
+ // statement for it. If the declaration is not exported, null is returned to prevent emit.
35372
+ if (owningModule === null && !this.isStaticallyExported(declaration.node)) {
35373
+ return null;
35374
+ }
33299
35375
  return new Reference$1(declaration.node, owningModule);
33300
35376
  }
35377
+ isStaticallyExported(decl) {
35378
+ return isNamedClassDeclaration(decl) && this.reflector.isStaticallyExported(decl);
35379
+ }
33301
35380
  isLocalTypeParameter(decl) {
33302
35381
  // Checking for local type parameters only occurs during resolution of type parameters, so it is
33303
35382
  // guaranteed that type parameters are present.
@@ -34877,7 +36956,7 @@ Either add the @Injectable() decorator to '${provider.node.name
34877
36956
  }
34878
36957
  /**
34879
36958
  * A `TcbOp` which constructs an instance of a non-generic directive _without_ setting any of its
34880
- * inputs. Inputs are later set in the `TcbDirectiveInputsOp`. Type checking was found to be
36959
+ * inputs. Inputs are later set in the `TcbDirectiveInputsOp`. Type checking was found to be
34881
36960
  * faster when done in this way as opposed to `TcbDirectiveCtorOp` which is only necessary when the
34882
36961
  * directive is generic.
34883
36962
  *
@@ -36489,7 +38568,10 @@ Either add the @Injectable() decorator to '${provider.node.name
36489
38568
  for (const originalSf of this.opMap.keys()) {
36490
38569
  const newText = this.transform(originalSf);
36491
38570
  if (newText !== null) {
36492
- updates.set(absoluteFromSourceFile(originalSf), newText);
38571
+ updates.set(absoluteFromSourceFile(originalSf), {
38572
+ newText,
38573
+ originalFile: originalSf,
38574
+ });
36493
38575
  }
36494
38576
  }
36495
38577
  // Then go through each input file that has pending code generation operations.
@@ -36505,7 +38587,12 @@ Either add the @Injectable() decorator to '${provider.node.name
36505
38587
  path: pendingShimData.file.fileName,
36506
38588
  templates: pendingShimData.templates,
36507
38589
  });
36508
- updates.set(pendingShimData.file.fileName, pendingShimData.file.render(false /* removeComments */));
38590
+ const sfText = pendingShimData.file.render(false /* removeComments */);
38591
+ updates.set(pendingShimData.file.fileName, {
38592
+ newText: sfText,
38593
+ // Shim files do not have an associated original file.
38594
+ originalFile: null,
38595
+ });
36509
38596
  }
36510
38597
  }
36511
38598
  return updates;
@@ -36871,7 +38958,24 @@ Either add the @Injectable() decorator to '${provider.node.name
36871
38958
  }
36872
38959
  getDirectiveMeta(host, directiveDeclaration) {
36873
38960
  var _a;
36874
- const directives = this.templateData.boundTarget.getDirectivesOfNode(host);
38961
+ let directives = this.templateData.boundTarget.getDirectivesOfNode(host);
38962
+ // `getDirectivesOfNode` will not return the directives intended for an element
38963
+ // on a microsyntax template, for example `<div *ngFor="let user of users;" dir>`,
38964
+ // the `dir` will be skipped, but it's needed in language service.
38965
+ const firstChild = host.children[0];
38966
+ if (firstChild instanceof Element) {
38967
+ const isMicrosyntaxTemplate = host instanceof Template &&
38968
+ sourceSpanEqual(firstChild.sourceSpan, host.sourceSpan);
38969
+ if (isMicrosyntaxTemplate) {
38970
+ const firstChildDirectives = this.templateData.boundTarget.getDirectivesOfNode(firstChild);
38971
+ if (firstChildDirectives !== null && directives !== null) {
38972
+ directives = directives.concat(firstChildDirectives);
38973
+ }
38974
+ else {
38975
+ directives = directives !== null && directives !== void 0 ? directives : firstChildDirectives;
38976
+ }
38977
+ }
38978
+ }
36875
38979
  if (directives === null) {
36876
38980
  return null;
36877
38981
  }
@@ -37144,7 +39248,16 @@ Either add the @Injectable() decorator to '${provider.node.name
37144
39248
  const withSpan = (expression instanceof PropertyWrite || expression instanceof MethodCall) ?
37145
39249
  expression.nameSpan :
37146
39250
  expression.sourceSpan;
37147
- let node = findFirstMatchingNode(this.typeCheckBlock, { withSpan, filter: (n) => true });
39251
+ let node = null;
39252
+ // Property reads in templates usually map to a `PropertyAccessExpression`
39253
+ // (e.g. `ctx.foo`) so try looking for one first.
39254
+ if (expression instanceof PropertyRead) {
39255
+ node = findFirstMatchingNode(this.typeCheckBlock, { withSpan, filter: ts$1.isPropertyAccessExpression });
39256
+ }
39257
+ // Otherwise fall back to searching for any AST node.
39258
+ if (node === null) {
39259
+ node = findFirstMatchingNode(this.typeCheckBlock, { withSpan, filter: anyNodeFilter });
39260
+ }
37148
39261
  if (node === null) {
37149
39262
  return null;
37150
39263
  }
@@ -37218,6 +39331,13 @@ Either add the @Injectable() decorator to '${provider.node.name
37218
39331
  }
37219
39332
  }
37220
39333
  }
39334
+ /** Filter predicate function that matches any AST node. */
39335
+ function anyNodeFilter(n) {
39336
+ return true;
39337
+ }
39338
+ function sourceSpanEqual(a, b) {
39339
+ return a.start.offset === b.start.offset && a.end.offset === b.end.offset;
39340
+ }
37221
39341
 
37222
39342
  /**
37223
39343
  * @license
@@ -38242,6 +40362,15 @@ Either add the @Injectable() decorator to '${provider.node.name
38242
40362
  compilation.traitCompiler.index(context);
38243
40363
  return generateAnalysis(context);
38244
40364
  }
40365
+ /**
40366
+ * Collect i18n messages into the `Xi18nContext`.
40367
+ */
40368
+ xi18n(ctx) {
40369
+ // Note that the 'resolve' phase is not strictly necessary for xi18n, but this is not currently
40370
+ // optimized.
40371
+ const compilation = this.ensureAnalyzed();
40372
+ compilation.traitCompiler.xi18n(ctx);
40373
+ }
38245
40374
  ensureAnalyzed() {
38246
40375
  if (this.compilation === null) {
38247
40376
  this.analyzeSync();
@@ -39969,11 +42098,20 @@ https://v9.angular.io/guide/template-typecheck#template-type-checking`,
39969
42098
  TargetNodeKind[TargetNodeKind["AttributeInValueContext"] = 6] = "AttributeInValueContext";
39970
42099
  TargetNodeKind[TargetNodeKind["TwoWayBindingContext"] = 7] = "TwoWayBindingContext";
39971
42100
  })(TargetNodeKind || (TargetNodeKind = {}));
42101
+ /**
42102
+ * Special marker AST that can be used when the cursor is within the `sourceSpan` but not
42103
+ * the key or value span of a node with key/value spans.
42104
+ */
42105
+ class OutsideKeyValueMarkerAst extends AST {
42106
+ visit() {
42107
+ return null;
42108
+ }
42109
+ }
39972
42110
  /**
39973
42111
  * This special marker is added to the path when the cursor is within the sourceSpan but not the key
39974
42112
  * or value span of a node with key/value spans.
39975
42113
  */
39976
- const OUTSIDE_K_V_MARKER = new AST(new ParseSpan(-1, -1), new AbsoluteSourceSpan(-1, -1));
42114
+ const OUTSIDE_K_V_MARKER = new OutsideKeyValueMarkerAst(new ParseSpan(-1, -1), new AbsoluteSourceSpan(-1, -1));
39977
42115
  /**
39978
42116
  * Return the template AST node or expression AST node that most accurately
39979
42117
  * represents the node at the specified cursor `position`.
@@ -42405,7 +44543,7 @@ https://v9.angular.io/guide/template-typecheck#template-type-checking`,
42405
44543
  return program;
42406
44544
  },
42407
44545
  updateFiles(contents) {
42408
- for (const [fileName, newText] of contents) {
44546
+ for (const [fileName, { newText }] of contents) {
42409
44547
  const scriptInfo = getOrCreateTypeCheckScriptInfo(project, fileName);
42410
44548
  const snapshot = scriptInfo.getSnapshot();
42411
44549
  const length = snapshot.getLength();