@angular/compiler 16.0.0-next.4 → 16.0.0-next.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/esm2022/src/compiler_util/expression_converter.mjs +759 -0
  2. package/{esm2020 → esm2022}/src/expression_parser/parser.mjs +3 -2
  3. package/esm2022/src/i18n/digest.mjs +357 -0
  4. package/esm2022/src/i18n/i18n_ast.mjs +184 -0
  5. package/{esm2020 → esm2022}/src/render3/partial/class_metadata.mjs +1 -1
  6. package/{esm2020 → esm2022}/src/render3/partial/directive.mjs +1 -1
  7. package/{esm2020 → esm2022}/src/render3/partial/factory.mjs +1 -1
  8. package/{esm2020 → esm2022}/src/render3/partial/injectable.mjs +1 -1
  9. package/{esm2020 → esm2022}/src/render3/partial/injector.mjs +1 -1
  10. package/{esm2020 → esm2022}/src/render3/partial/ng_module.mjs +1 -1
  11. package/{esm2020 → esm2022}/src/render3/partial/pipe.mjs +1 -1
  12. package/esm2022/src/render3/r3_identifiers.mjs +214 -0
  13. package/esm2022/src/render3/view/i18n/meta.mjs +243 -0
  14. package/esm2022/src/render3/view/style_parser.mjs +86 -0
  15. package/{esm2020 → esm2022}/src/version.mjs +1 -1
  16. package/{fesm2020 → fesm2022}/compiler.mjs +221 -238
  17. package/fesm2022/compiler.mjs.map +1 -0
  18. package/{fesm2015 → fesm2022}/testing.mjs +1 -1
  19. package/index.d.ts +1 -1
  20. package/package.json +9 -17
  21. package/testing/index.d.ts +1 -1
  22. package/esm2020/src/compiler_util/expression_converter.mjs +0 -759
  23. package/esm2020/src/i18n/digest.mjs +0 -357
  24. package/esm2020/src/i18n/i18n_ast.mjs +0 -184
  25. package/esm2020/src/render3/r3_identifiers.mjs +0 -214
  26. package/esm2020/src/render3/view/i18n/meta.mjs +0 -244
  27. package/esm2020/src/render3/view/style_parser.mjs +0 -103
  28. package/fesm2015/compiler.mjs +0 -22352
  29. package/fesm2015/compiler.mjs.map +0 -1
  30. package/fesm2020/compiler.mjs.map +0 -1
  31. package/fesm2020/testing.mjs +0 -39
  32. package/fesm2020/testing.mjs.map +0 -1
  33. /package/{esm2020 → esm2022}/compiler.mjs +0 -0
  34. /package/{esm2020 → esm2022}/index.mjs +0 -0
  35. /package/{esm2020 → esm2022}/public_api.mjs +0 -0
  36. /package/{esm2020 → esm2022}/src/assertions.mjs +0 -0
  37. /package/{esm2020 → esm2022}/src/chars.mjs +0 -0
  38. /package/{esm2020 → esm2022}/src/compiler.mjs +0 -0
  39. /package/{esm2020 → esm2022}/src/compiler_facade_interface.mjs +0 -0
  40. /package/{esm2020 → esm2022}/src/config.mjs +0 -0
  41. /package/{esm2020 → esm2022}/src/constant_pool.mjs +0 -0
  42. /package/{esm2020 → esm2022}/src/core.mjs +0 -0
  43. /package/{esm2020 → esm2022}/src/expression_parser/ast.mjs +0 -0
  44. /package/{esm2020 → esm2022}/src/expression_parser/lexer.mjs +0 -0
  45. /package/{esm2020 → esm2022}/src/i18n/big_integer.mjs +0 -0
  46. /package/{esm2020 → esm2022}/src/i18n/extractor_merger.mjs +0 -0
  47. /package/{esm2020 → esm2022}/src/i18n/i18n_html_parser.mjs +0 -0
  48. /package/{esm2020 → esm2022}/src/i18n/i18n_parser.mjs +0 -0
  49. /package/{esm2020 → esm2022}/src/i18n/index.mjs +0 -0
  50. /package/{esm2020 → esm2022}/src/i18n/message_bundle.mjs +0 -0
  51. /package/{esm2020 → esm2022}/src/i18n/parse_util.mjs +0 -0
  52. /package/{esm2020 → esm2022}/src/i18n/serializers/placeholder.mjs +0 -0
  53. /package/{esm2020 → esm2022}/src/i18n/serializers/serializer.mjs +0 -0
  54. /package/{esm2020 → esm2022}/src/i18n/serializers/xliff.mjs +0 -0
  55. /package/{esm2020 → esm2022}/src/i18n/serializers/xliff2.mjs +0 -0
  56. /package/{esm2020 → esm2022}/src/i18n/serializers/xmb.mjs +0 -0
  57. /package/{esm2020 → esm2022}/src/i18n/serializers/xml_helper.mjs +0 -0
  58. /package/{esm2020 → esm2022}/src/i18n/serializers/xtb.mjs +0 -0
  59. /package/{esm2020 → esm2022}/src/i18n/translation_bundle.mjs +0 -0
  60. /package/{esm2020 → esm2022}/src/injectable_compiler_2.mjs +0 -0
  61. /package/{esm2020 → esm2022}/src/jit_compiler_facade.mjs +0 -0
  62. /package/{esm2020 → esm2022}/src/ml_parser/ast.mjs +0 -0
  63. /package/{esm2020 → esm2022}/src/ml_parser/entities.mjs +0 -0
  64. /package/{esm2020 → esm2022}/src/ml_parser/html_parser.mjs +0 -0
  65. /package/{esm2020 → esm2022}/src/ml_parser/html_tags.mjs +0 -0
  66. /package/{esm2020 → esm2022}/src/ml_parser/html_whitespaces.mjs +0 -0
  67. /package/{esm2020 → esm2022}/src/ml_parser/icu_ast_expander.mjs +0 -0
  68. /package/{esm2020 → esm2022}/src/ml_parser/interpolation_config.mjs +0 -0
  69. /package/{esm2020 → esm2022}/src/ml_parser/lexer.mjs +0 -0
  70. /package/{esm2020 → esm2022}/src/ml_parser/parser.mjs +0 -0
  71. /package/{esm2020 → esm2022}/src/ml_parser/tags.mjs +0 -0
  72. /package/{esm2020 → esm2022}/src/ml_parser/tokens.mjs +0 -0
  73. /package/{esm2020 → esm2022}/src/ml_parser/xml_parser.mjs +0 -0
  74. /package/{esm2020 → esm2022}/src/ml_parser/xml_tags.mjs +0 -0
  75. /package/{esm2020 → esm2022}/src/output/abstract_emitter.mjs +0 -0
  76. /package/{esm2020 → esm2022}/src/output/abstract_js_emitter.mjs +0 -0
  77. /package/{esm2020 → esm2022}/src/output/map_util.mjs +0 -0
  78. /package/{esm2020 → esm2022}/src/output/output_ast.mjs +0 -0
  79. /package/{esm2020 → esm2022}/src/output/output_jit.mjs +0 -0
  80. /package/{esm2020 → esm2022}/src/output/output_jit_trusted_types.mjs +0 -0
  81. /package/{esm2020 → esm2022}/src/output/source_map.mjs +0 -0
  82. /package/{esm2020 → esm2022}/src/parse_util.mjs +0 -0
  83. /package/{esm2020 → esm2022}/src/render3/partial/api.mjs +0 -0
  84. /package/{esm2020 → esm2022}/src/render3/partial/component.mjs +0 -0
  85. /package/{esm2020 → esm2022}/src/render3/partial/util.mjs +0 -0
  86. /package/{esm2020 → esm2022}/src/render3/r3_ast.mjs +0 -0
  87. /package/{esm2020 → esm2022}/src/render3/r3_class_metadata_compiler.mjs +0 -0
  88. /package/{esm2020 → esm2022}/src/render3/r3_factory.mjs +0 -0
  89. /package/{esm2020 → esm2022}/src/render3/r3_injector_compiler.mjs +0 -0
  90. /package/{esm2020 → esm2022}/src/render3/r3_jit.mjs +0 -0
  91. /package/{esm2020 → esm2022}/src/render3/r3_module_compiler.mjs +0 -0
  92. /package/{esm2020 → esm2022}/src/render3/r3_pipe_compiler.mjs +0 -0
  93. /package/{esm2020 → esm2022}/src/render3/r3_template_transform.mjs +0 -0
  94. /package/{esm2020 → esm2022}/src/render3/util.mjs +0 -0
  95. /package/{esm2020 → esm2022}/src/render3/view/api.mjs +0 -0
  96. /package/{esm2020 → esm2022}/src/render3/view/compiler.mjs +0 -0
  97. /package/{esm2020 → esm2022}/src/render3/view/i18n/context.mjs +0 -0
  98. /package/{esm2020 → esm2022}/src/render3/view/i18n/get_msg_utils.mjs +0 -0
  99. /package/{esm2020 → esm2022}/src/render3/view/i18n/icu_serializer.mjs +0 -0
  100. /package/{esm2020 → esm2022}/src/render3/view/i18n/localize_utils.mjs +0 -0
  101. /package/{esm2020 → esm2022}/src/render3/view/i18n/util.mjs +0 -0
  102. /package/{esm2020 → esm2022}/src/render3/view/styling_builder.mjs +0 -0
  103. /package/{esm2020 → esm2022}/src/render3/view/t2_api.mjs +0 -0
  104. /package/{esm2020 → esm2022}/src/render3/view/t2_binder.mjs +0 -0
  105. /package/{esm2020 → esm2022}/src/render3/view/template.mjs +0 -0
  106. /package/{esm2020 → esm2022}/src/render3/view/util.mjs +0 -0
  107. /package/{esm2020 → esm2022}/src/resource_loader.mjs +0 -0
  108. /package/{esm2020 → esm2022}/src/schema/dom_element_schema_registry.mjs +0 -0
  109. /package/{esm2020 → esm2022}/src/schema/dom_security_schema.mjs +0 -0
  110. /package/{esm2020 → esm2022}/src/schema/element_schema_registry.mjs +0 -0
  111. /package/{esm2020 → esm2022}/src/schema/trusted_types_sinks.mjs +0 -0
  112. /package/{esm2020 → esm2022}/src/selector.mjs +0 -0
  113. /package/{esm2020 → esm2022}/src/shadow_css.mjs +0 -0
  114. /package/{esm2020 → esm2022}/src/style_url_resolver.mjs +0 -0
  115. /package/{esm2020 → esm2022}/src/template_parser/binding_parser.mjs +0 -0
  116. /package/{esm2020 → esm2022}/src/template_parser/template_preparser.mjs +0 -0
  117. /package/{esm2020 → esm2022}/src/util.mjs +0 -0
  118. /package/{esm2020 → esm2022}/testing/index.mjs +0 -0
  119. /package/{esm2020 → esm2022}/testing/public_api.mjs +0 -0
  120. /package/{esm2020 → esm2022}/testing/src/testing.mjs +0 -0
  121. /package/{esm2020 → esm2022}/testing/testing.mjs +0 -0
  122. /package/{fesm2015 → fesm2022}/testing.mjs.map +0 -0
@@ -1,103 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- /**
9
- * Parses string representation of a style and converts it into object literal.
10
- *
11
- * @param value string representation of style as used in the `style` attribute in HTML.
12
- * Example: `color: red; height: auto`.
13
- * @returns An array of style property name and value pairs, e.g. `['color', 'red', 'height',
14
- * 'auto']`
15
- */
16
- export function parse(value) {
17
- // we use a string array here instead of a string map
18
- // because a string-map is not guaranteed to retain the
19
- // order of the entries whereas a string array can be
20
- // constructed in a [key, value, key, value] format.
21
- const styles = [];
22
- let i = 0;
23
- let parenDepth = 0;
24
- let quote = 0 /* Char.QuoteNone */;
25
- let valueStart = 0;
26
- let propStart = 0;
27
- let currentProp = null;
28
- let valueHasQuotes = false;
29
- while (i < value.length) {
30
- const token = value.charCodeAt(i++);
31
- switch (token) {
32
- case 40 /* Char.OpenParen */:
33
- parenDepth++;
34
- break;
35
- case 41 /* Char.CloseParen */:
36
- parenDepth--;
37
- break;
38
- case 39 /* Char.QuoteSingle */:
39
- // valueStart needs to be there since prop values don't
40
- // have quotes in CSS
41
- valueHasQuotes = valueHasQuotes || valueStart > 0;
42
- if (quote === 0 /* Char.QuoteNone */) {
43
- quote = 39 /* Char.QuoteSingle */;
44
- }
45
- else if (quote === 39 /* Char.QuoteSingle */ && value.charCodeAt(i - 1) !== 92 /* Char.BackSlash */) {
46
- quote = 0 /* Char.QuoteNone */;
47
- }
48
- break;
49
- case 34 /* Char.QuoteDouble */:
50
- // same logic as above
51
- valueHasQuotes = valueHasQuotes || valueStart > 0;
52
- if (quote === 0 /* Char.QuoteNone */) {
53
- quote = 34 /* Char.QuoteDouble */;
54
- }
55
- else if (quote === 34 /* Char.QuoteDouble */ && value.charCodeAt(i - 1) !== 92 /* Char.BackSlash */) {
56
- quote = 0 /* Char.QuoteNone */;
57
- }
58
- break;
59
- case 58 /* Char.Colon */:
60
- if (!currentProp && parenDepth === 0 && quote === 0 /* Char.QuoteNone */) {
61
- currentProp = hyphenate(value.substring(propStart, i - 1).trim());
62
- valueStart = i;
63
- }
64
- break;
65
- case 59 /* Char.Semicolon */:
66
- if (currentProp && valueStart > 0 && parenDepth === 0 && quote === 0 /* Char.QuoteNone */) {
67
- const styleVal = value.substring(valueStart, i - 1).trim();
68
- styles.push(currentProp, valueHasQuotes ? stripUnnecessaryQuotes(styleVal) : styleVal);
69
- propStart = i;
70
- valueStart = 0;
71
- currentProp = null;
72
- valueHasQuotes = false;
73
- }
74
- break;
75
- }
76
- }
77
- if (currentProp && valueStart) {
78
- const styleVal = value.slice(valueStart).trim();
79
- styles.push(currentProp, valueHasQuotes ? stripUnnecessaryQuotes(styleVal) : styleVal);
80
- }
81
- return styles;
82
- }
83
- export function stripUnnecessaryQuotes(value) {
84
- const qS = value.charCodeAt(0);
85
- const qE = value.charCodeAt(value.length - 1);
86
- if (qS == qE && (qS == 39 /* Char.QuoteSingle */ || qS == 34 /* Char.QuoteDouble */)) {
87
- const tempValue = value.substring(1, value.length - 1);
88
- // special case to avoid using a multi-quoted string that was just chomped
89
- // (e.g. `font-family: "Verdana", "sans-serif"`)
90
- if (tempValue.indexOf('\'') == -1 && tempValue.indexOf('"') == -1) {
91
- value = tempValue;
92
- }
93
- }
94
- return value;
95
- }
96
- export function hyphenate(value) {
97
- return value
98
- .replace(/[a-z][A-Z]/g, v => {
99
- return v.charAt(0) + '-' + v.charAt(1);
100
- })
101
- .toLowerCase();
102
- }
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGVfcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXIvc3JjL3JlbmRlcjMvdmlldy9zdHlsZV9wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBY0g7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxLQUFLLENBQUMsS0FBYTtJQUNqQyxxREFBcUQ7SUFDckQsdURBQXVEO0lBQ3ZELHFEQUFxRDtJQUNyRCxvREFBb0Q7SUFDcEQsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO0lBRTVCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNWLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztJQUNuQixJQUFJLEtBQUsseUJBQXVCLENBQUM7SUFDakMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNsQixJQUFJLFdBQVcsR0FBZ0IsSUFBSSxDQUFDO0lBQ3BDLElBQUksY0FBYyxHQUFHLEtBQUssQ0FBQztJQUMzQixPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQVMsQ0FBQztRQUM1QyxRQUFRLEtBQUssRUFBRTtZQUNiO2dCQUNFLFVBQVUsRUFBRSxDQUFDO2dCQUNiLE1BQU07WUFDUjtnQkFDRSxVQUFVLEVBQUUsQ0FBQztnQkFDYixNQUFNO1lBQ1I7Z0JBQ0UsdURBQXVEO2dCQUN2RCxxQkFBcUI7Z0JBQ3JCLGNBQWMsR0FBRyxjQUFjLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxLQUFLLDJCQUFtQixFQUFFO29CQUM1QixLQUFLLDRCQUFtQixDQUFDO2lCQUMxQjtxQkFBTSxJQUFJLEtBQUssOEJBQXFCLElBQUksS0FBSyxDQUFDLFVB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QWEsRUFDYixDQUFDLENBQUMsRUFBRTtRQUNGLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QyxDQUFDLENBQUM7U0FDTCxXQUFXLEVBQUUsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmNvbnN0IGVudW0gQ2hhciB7XG4gIE9wZW5QYXJlbiA9IDQwLFxuICBDbG9zZVBhcmVuID0gNDEsXG4gIENvbG9uID0gNTgsXG4gIFNlbWljb2xvbiA9IDU5LFxuICBCYWNrU2xhc2ggPSA5MixcbiAgUXVvdGVOb25lID0gMCwgIC8vIGluZGljYXRpbmcgd2UgYXJlIG5vdCBpbnNpZGUgYSBxdW90ZVxuICBRdW90ZURvdWJsZSA9IDM0LFxuICBRdW90ZVNpbmdsZSA9IDM5LFxufVxuXG5cbi8qKlxuICogUGFyc2VzIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHN0eWxlIGFuZCBjb252ZXJ0cyBpdCBpbnRvIG9iamVjdCBsaXRlcmFsLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2Ygc3R5bGUgYXMgdXNlZCBpbiB0aGUgYHN0eWxlYCBhdHRyaWJ1dGUgaW4gSFRNTC5cbiAqICAgRXhhbXBsZTogYGNvbG9yOiByZWQ7IGhlaWdodDogYXV0b2AuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHlsZSBwcm9wZXJ0eSBuYW1lIGFuZCB2YWx1ZSBwYWlycywgZS5nLiBgWydjb2xvcicsICdyZWQnLCAnaGVpZ2h0JyxcbiAqICdhdXRvJ11gXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAvLyB3ZSB1c2UgYSBzdHJpbmcgYXJyYXkgaGVyZSBpbnN0ZWFkIG9mIGEgc3RyaW5nIG1hcFxuICAvLyBiZWNhdXNlIGEgc3RyaW5nLW1hcCBpcyBub3QgZ3VhcmFudGVlZCB0byByZXRhaW4gdGhlXG4gIC8vIG9yZGVyIG9mIHRoZSBlbnRyaWVzIHdoZXJlYXMgYSBzdHJpbmcgYXJyYXkgY2FuIGJlXG4gIC8vIGNvbnN0cnVjdGVkIGluIGEgW2tleSwgdmFsdWUsIGtleSwgdmFsdWVdIGZvcm1hdC5cbiAgY29uc3Qgc3R5bGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGxldCBpID0gMDtcbiAgbGV0IHBhcmVuRGVwdGggPSAwO1xuICBsZXQgcXVvdGU6IENoYXIgPSBDaGFyLlF1b3RlTm9uZTtcbiAgbGV0IHZhbHVlU3RhcnQgPSAwO1xuICBsZXQgcHJvcFN0YXJ0ID0gMDtcbiAgbGV0IGN1cnJlbnRQcm9wOiBzdHJpbmd8bnVsbCA9IG51bGw7XG4gIGxldCB2YWx1ZUhhc1F1b3RlcyA9IGZhbHNlO1xuICB3aGlsZSAoaSA8IHZhbHVlLmxlbmd0aCkge1xuICAgIGNvbnN0IHRva2VuID0gdmFsdWUuY2hhckNvZGVBdChpKyspIGFzIENoYXI7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSBDaGFyLk9wZW5QYXJlbjpcbiAgICAgICAgcGFyZW5EZXB0aCsrO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ2hhci5DbG9zZVBhcmVuOlxuICAgICAgICBwYXJlbkRlcHRoLS07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDaGFyLlF1b3RlU2luZ2xlOlxuICAgICAgICAvLyB2YWx1ZVN0YXJ0IG5lZWRzIHRvIGJlIHRoZXJlIHNpbmNlIHByb3AgdmFsdWVzIGRvbid0XG4gICAgICAgIC8vIGhhdmUgcXVvdGVzIGluIENTU1xuICAgICAgICB2YWx1ZUhhc1F1b3RlcyA9IHZhbHVlSGFzUXVvdGVzIHx8IHZhbHVlU3RhcnQgPiAwO1xuICAgICAgICBpZiAocXVvdGUgPT09IENoYXIuUXVvdGVOb25lKSB7XG4gICAgICAgICAgcXVvdGUgPSBDaGFyLlF1b3RlU2luZ2xlO1xuICAgICAgICB9IGVsc2UgaWYgKHF1b3RlID09PSBDaGFyLlF1b3RlU2luZ2xlICYmIHZhbHVlLmNoYXJDb2RlQXQoaSAtIDEpICE9PSBDaGFyLkJhY2tTbGFzaCkge1xuICAgICAgICAgIHF1b3RlID0gQ2hhci5RdW90ZU5vbmU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENoYXIuUXVvdGVEb3VibGU6XG4gICAgICAgIC8vIHNhbWUgbG9naWMgYXMgYWJvdmVcbiAgICAgICAgdmFsdWVIYXNRdW90ZXMgPSB2YWx1ZUhhc1F1b3RlcyB8fCB2YWx1ZVN0YXJ0ID4gMDtcbiAgICAgICAgaWYgKHF1b3RlID09PSBDaGFyLlF1b3RlTm9uZSkge1xuICAgICAgICAgIHF1b3RlID0gQ2hhci5RdW90ZURvdWJsZTtcbiAgICAgICAgfSBlbHNlIGlmIChxdW90ZSA9PT0gQ2hhci5RdW90ZURvdWJsZSAmJiB2YWx1ZS5jaGFyQ29kZUF0KGkgLSAxKSAhPT0gQ2hhci5CYWNrU2xhc2gpIHtcbiAgICAgICAgICBxdW90ZSA9IENoYXIuUXVvdGVOb25lO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDaGFyLkNvbG9uOlxuICAgICAgICBpZiAoIWN1cnJlbnRQcm9wICYmIHBhcmVuRGVwdGggPT09IDAgJiYgcXVvdGUgPT09IENoYXIuUXVvdGVOb25lKSB7XG4gICAgICAgICAgY3VycmVudFByb3AgPSBoeXBoZW5hdGUodmFsdWUuc3Vic3RyaW5nKHByb3BTdGFydCwgaSAtIDEpLnRyaW0oKSk7XG4gICAgICAgICAgdmFsdWVTdGFydCA9IGk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENoYXIuU2VtaWNvbG9uOlxuICAgICAgICBpZiAoY3VycmVudFByb3AgJiYgdmFsdWVTdGFydCA+IDAgJiYgcGFyZW5EZXB0aCA9PT0gMCAmJiBxdW90ZSA9PT0gQ2hhci5RdW90ZU5vbmUpIHtcbiAgICAgICAgICBjb25zdCBzdHlsZVZhbCA9IHZhbHVlLnN1YnN0cmluZyh2YWx1ZVN0YXJ0LCBpIC0gMSkudHJpbSgpO1xuICAgICAgICAgIHN0eWxlcy5wdXNoKGN1cnJlbnRQcm9wLCB2YWx1ZUhhc1F1b3RlcyA/IHN0cmlwVW5uZWNlc3NhcnlRdW90ZXMoc3R5bGVWYWwpIDogc3R5bGVWYWwpO1xuICAgICAgICAgIHByb3BTdGFydCA9IGk7XG4gICAgICAgICAgdmFsdWVTdGFydCA9IDA7XG4gICAgICAgICAgY3VycmVudFByb3AgPSBudWxsO1xuICAgICAgICAgIHZhbHVlSGFzUXVvdGVzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKGN1cnJlbnRQcm9wICYmIHZhbHVlU3RhcnQpIHtcbiAgICBjb25zdCBzdHlsZVZhbCA9IHZhbHVlLnNsaWNlKHZhbHVlU3RhcnQpLnRyaW0oKTtcbiAgICBzdHlsZXMucHVzaChjdXJyZW50UHJvcCwgdmFsdWVIYXNRdW90ZXMgPyBzdHJpcFVubmVjZXNzYXJ5UXVvdGVzKHN0eWxlVmFsKSA6IHN0eWxlVmFsKTtcbiAgfVxuXG4gIHJldHVybiBzdHlsZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcFVubmVjZXNzYXJ5UXVvdGVzKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBxUyA9IHZhbHVlLmNoYXJDb2RlQXQoMCk7XG4gIGNvbnN0IHFFID0gdmFsdWUuY2hhckNvZGVBdCh2YWx1ZS5sZW5ndGggLSAxKTtcbiAgaWYgKHFTID09IHFFICYmIChxUyA9PSBDaGFyLlF1b3RlU2luZ2xlIHx8IHFTID09IENoYXIuUXVvdGVEb3VibGUpKSB7XG4gICAgY29uc3QgdGVtcFZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDEsIHZhbHVlLmxlbmd0aCAtIDEpO1xuICAgIC8vIHNwZWNpYWwgY2FzZSB0byBhdm9pZCB1c2luZyBhIG11bHRpLXF1b3RlZCBzdHJpbmcgdGhhdCB3YXMganVzdCBjaG9tcGVkXG4gICAgLy8gKGUuZy4gYGZvbnQtZmFtaWx5OiBcIlZlcmRhbmFcIiwgXCJzYW5zLXNlcmlmXCJgKVxuICAgIGlmICh0ZW1wVmFsdWUuaW5kZXhPZignXFwnJykgPT0gLTEgJiYgdGVtcFZhbHVlLmluZGV4T2YoJ1wiJykgPT0gLTEpIHtcbiAgICAgIHZhbHVlID0gdGVtcFZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeXBoZW5hdGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZVxuICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgL1thLXpdW0EtWl0vZyxcbiAgICAgICAgICB2ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB2LmNoYXJBdCgwKSArICctJyArIHYuY2hhckF0KDEpO1xuICAgICAgICAgIH0pXG4gICAgICAudG9Mb3dlckNhc2UoKTtcbn1cbiJdfQ==