@angular/compiler 17.1.0-next.3 → 17.1.0-next.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/esm2022/src/compiler.mjs +2 -2
  2. package/esm2022/src/compiler_facade_interface.mjs +1 -1
  3. package/esm2022/src/constant_pool.mjs +5 -3
  4. package/esm2022/src/jit_compiler_facade.mjs +46 -17
  5. package/esm2022/src/ml_parser/tags.mjs +8 -3
  6. package/esm2022/src/render3/partial/api.mjs +1 -1
  7. package/esm2022/src/render3/partial/class_metadata.mjs +1 -1
  8. package/esm2022/src/render3/partial/directive.mjs +112 -17
  9. package/esm2022/src/render3/partial/factory.mjs +1 -1
  10. package/esm2022/src/render3/partial/injectable.mjs +1 -1
  11. package/esm2022/src/render3/partial/injector.mjs +1 -1
  12. package/esm2022/src/render3/partial/ng_module.mjs +1 -1
  13. package/esm2022/src/render3/partial/pipe.mjs +1 -1
  14. package/esm2022/src/render3/r3_identifiers.mjs +4 -1
  15. package/esm2022/src/render3/view/api.mjs +1 -1
  16. package/esm2022/src/render3/view/compiler.mjs +24 -9
  17. package/esm2022/src/render3/view/template.mjs +14 -9
  18. package/esm2022/src/render3/view/util.mjs +8 -2
  19. package/esm2022/src/template/pipeline/ir/src/enums.mjs +15 -19
  20. package/esm2022/src/template/pipeline/ir/src/expression.mjs +26 -20
  21. package/esm2022/src/template/pipeline/ir/src/ops/create.mjs +47 -17
  22. package/esm2022/src/template/pipeline/ir/src/ops/host.mjs +4 -2
  23. package/esm2022/src/template/pipeline/ir/src/ops/update.mjs +18 -10
  24. package/esm2022/src/template/pipeline/src/emit.mjs +6 -6
  25. package/esm2022/src/template/pipeline/src/ingest.mjs +295 -184
  26. package/esm2022/src/template/pipeline/src/instruction.mjs +30 -24
  27. package/esm2022/src/template/pipeline/src/phases/assign_i18n_slot_dependencies.mjs +40 -56
  28. package/esm2022/src/template/pipeline/src/phases/attribute_extraction.mjs +24 -22
  29. package/esm2022/src/template/pipeline/src/phases/binding_specialization.mjs +4 -4
  30. package/esm2022/src/template/pipeline/src/phases/const_collection.mjs +60 -15
  31. package/esm2022/src/template/pipeline/src/phases/convert_i18n_bindings.mjs +2 -2
  32. package/esm2022/src/template/pipeline/src/phases/create_defer_deps_fns.mjs +3 -2
  33. package/esm2022/src/template/pipeline/src/phases/create_i18n_contexts.mjs +63 -29
  34. package/esm2022/src/template/pipeline/src/phases/deduplicate_text_bindings.mjs +40 -0
  35. package/esm2022/src/template/pipeline/src/phases/extract_i18n_messages.mjs +52 -49
  36. package/esm2022/src/template/pipeline/src/phases/generate_variables.mjs +7 -1
  37. package/esm2022/src/template/pipeline/src/phases/host_style_property_parsing.mjs +2 -2
  38. package/esm2022/src/template/pipeline/src/phases/i18n_const_collection.mjs +11 -8
  39. package/esm2022/src/template/pipeline/src/phases/i18n_text_extraction.mjs +22 -3
  40. package/esm2022/src/template/pipeline/src/phases/naming.mjs +13 -5
  41. package/esm2022/src/template/pipeline/src/phases/ordering.mjs +17 -5
  42. package/esm2022/src/template/pipeline/src/phases/parse_extracted_styles.mjs +22 -3
  43. package/esm2022/src/template/pipeline/src/phases/phase_remove_content_selectors.mjs +1 -10
  44. package/esm2022/src/template/pipeline/src/phases/propagate_i18n_blocks.mjs +31 -14
  45. package/esm2022/src/template/pipeline/src/phases/reify.mjs +46 -24
  46. package/esm2022/src/template/pipeline/src/phases/resolve_i18n_element_placeholders.mjs +60 -14
  47. package/esm2022/src/template/pipeline/src/phases/resolve_i18n_expression_placeholders.mjs +23 -10
  48. package/esm2022/src/template/pipeline/src/phases/resolve_sanitizers.mjs +78 -14
  49. package/esm2022/src/template/pipeline/src/phases/slot_allocation.mjs +3 -1
  50. package/esm2022/src/template/pipeline/src/phases/track_fn_generation.mjs +4 -1
  51. package/esm2022/src/template/pipeline/src/phases/var_counting.mjs +10 -1
  52. package/esm2022/src/template/pipeline/src/phases/wrap_icus.mjs +4 -3
  53. package/esm2022/src/template/pipeline/src/util/elements.mjs +8 -1
  54. package/esm2022/src/version.mjs +1 -1
  55. package/fesm2022/compiler.mjs +1252 -650
  56. package/fesm2022/compiler.mjs.map +1 -1
  57. package/index.d.ts +41 -8
  58. package/package.json +2 -2
  59. package/esm2022/src/template/pipeline/src/phases/resolve_i18n_icu_placeholders.mjs +0 -62
package/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v17.1.0-next.3
2
+ * @license Angular v17.1.0-next.5
3
3
  * (c) 2010-2022 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -804,7 +804,7 @@ export declare class ConstantPool {
804
804
  literalFactory: outputAst.Expression;
805
805
  literalFactoryArguments: outputAst.Expression[];
806
806
  };
807
- getSharedFunctionReference(fn: outputAst.FunctionExpr | outputAst.ArrowFunctionExpr, prefix: string): outputAst.Expression;
807
+ getSharedFunctionReference(fn: outputAst.FunctionExpr | outputAst.ArrowFunctionExpr, prefix: string, useUniqueName?: boolean): outputAst.Expression;
808
808
  private _getLiteralFactory;
809
809
  /**
810
810
  * Produce a unique name.
@@ -1178,6 +1178,16 @@ export declare class EmptyExpr extends AST {
1178
1178
  visit(visitor: AstVisitor, context?: any): void;
1179
1179
  }
1180
1180
 
1181
+ /**
1182
+ * Encapsulates a CSS stylesheet with emulated view encapsulation.
1183
+ * This allows a stylesheet to be used with an Angular component that
1184
+ * is using the `ViewEncapsulation.Emulated` mode.
1185
+ *
1186
+ * @param style The content of a CSS stylesheet.
1187
+ * @returns The encapsulated content for the style.
1188
+ */
1189
+ export declare function encapsulateStyle(style: string): string;
1190
+
1181
1191
  declare interface EncodedEntityToken extends TokenBase {
1182
1192
  type: LexerTokenType.ENCODED_ENTITY;
1183
1193
  parts: [decoded: string, encoded: string];
@@ -1741,6 +1751,12 @@ export declare class LeadingComment {
1741
1751
 
1742
1752
  export declare function leadingComment(text: string, multiline?: boolean, trailingNewline?: boolean): LeadingComment;
1743
1753
 
1754
+ export declare type LegacyInputPartialMapping = string | [
1755
+ bindingPropertyName: string,
1756
+ classPropertyName: string,
1757
+ transformFunction?: outputAst.Expression
1758
+ ];
1759
+
1744
1760
  export declare class Lexer {
1745
1761
  tokenize(text: string): Token[];
1746
1762
  }
@@ -3236,11 +3252,13 @@ export declare interface R3DeclareDirectiveMetadata extends R3PartialDeclaration
3236
3252
  * binding property name and class property name if the names are different.
3237
3253
  */
3238
3254
  inputs?: {
3239
- [classPropertyName: string]: string | [
3240
- bindingPropertyName: string,
3241
- classPropertyName: string,
3242
- transformFunction?: outputAst.Expression
3243
- ];
3255
+ [fieldName: string]: {
3256
+ classPropertyName: string;
3257
+ publicName: string;
3258
+ isSignal: boolean;
3259
+ isRequired: boolean;
3260
+ transformFunction: outputAst.Expression | null;
3261
+ } | LegacyInputPartialMapping;
3244
3262
  };
3245
3263
  /**
3246
3264
  * A mapping of outputs from class property names to binding property names.
@@ -3975,6 +3993,14 @@ export declare class R3Identifiers {
3975
3993
  static trustConstantHtml: outputAst.ExternalReference;
3976
3994
  static trustConstantResourceUrl: outputAst.ExternalReference;
3977
3995
  static validateIframeAttribute: outputAst.ExternalReference;
3996
+ static InputSignalBrandWriteType: {
3997
+ name: string;
3998
+ moduleName: string;
3999
+ };
4000
+ static UnwrapDirectiveSignalInputs: {
4001
+ name: string;
4002
+ moduleName: string;
4003
+ };
3978
4004
  }
3979
4005
 
3980
4006
  export declare interface R3InjectableMetadata {
@@ -4003,6 +4029,13 @@ export declare interface R3InputMetadata {
4003
4029
  classPropertyName: string;
4004
4030
  bindingPropertyName: string;
4005
4031
  required: boolean;
4032
+ isSignal: boolean;
4033
+ /**
4034
+ * Transform function for the input.
4035
+ *
4036
+ * Null if there is no transform, or if this is a signal input.
4037
+ * Signal inputs capture their transform as part of the `InputSignal`.
4038
+ */
4006
4039
  transformFunction: outputAst.Expression | null;
4007
4040
  }
4008
4041
 
@@ -4605,7 +4638,7 @@ export declare class SplitInterpolation {
4605
4638
  constructor(strings: InterpolationPiece[], expressions: InterpolationPiece[], offsets: number[]);
4606
4639
  }
4607
4640
 
4608
- export declare function splitNsName(elementName: string): [string | null, string];
4641
+ export declare function splitNsName(elementName: string, fatal?: boolean): [string | null, string];
4609
4642
 
4610
4643
  export declare abstract class Statement {
4611
4644
  modifiers: StmtModifier;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@angular/compiler",
3
- "version": "17.1.0-next.3",
3
+ "version": "17.1.0-next.5",
4
4
  "description": "Angular - the compiler library",
5
5
  "author": "angular",
6
6
  "license": "MIT",
@@ -11,7 +11,7 @@
11
11
  "tslib": "^2.3.0"
12
12
  },
13
13
  "peerDependencies": {
14
- "@angular/core": "17.1.0-next.3"
14
+ "@angular/core": "17.1.0-next.5"
15
15
  },
16
16
  "peerDependenciesMeta": {
17
17
  "@angular/core": {
@@ -1,62 +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
- import * as i18n from '../../../../i18n/i18n_ast';
9
- import * as ir from '../../ir';
10
- /**
11
- * Resolves placeholders for element tags inside of an ICU.
12
- */
13
- export function resolveI18nIcuPlaceholders(job) {
14
- for (const unit of job.units) {
15
- for (const op of unit.create) {
16
- if (op.kind === ir.OpKind.I18nContext && op.contextKind === ir.I18nContextKind.Icu) {
17
- for (const node of op.message.nodes) {
18
- node.visit(new ResolveIcuPlaceholdersVisitor(op.postprocessingParams));
19
- }
20
- }
21
- }
22
- }
23
- }
24
- /**
25
- * Visitor for i18n AST that resolves ICU params into the given map.
26
- */
27
- class ResolveIcuPlaceholdersVisitor extends i18n.RecurseVisitor {
28
- constructor(params) {
29
- super();
30
- this.params = params;
31
- }
32
- visitContainerPlaceholder(placeholder) {
33
- // Add the start and end source span for container placeholders. These need to be recorded for
34
- // elements inside ICUs. The slots for the nodes were recorded separately under the i18n
35
- // block's context as part of the `resolveI18nElementPlaceholders` phase.
36
- if (placeholder.startName && placeholder.startSourceSpan &&
37
- !this.params.has(placeholder.startName)) {
38
- this.params.set(placeholder.startName, [{
39
- value: placeholder.startSourceSpan?.toString(),
40
- subTemplateIndex: null,
41
- flags: ir.I18nParamValueFlags.None
42
- }]);
43
- }
44
- if (placeholder.closeName && placeholder.endSourceSpan &&
45
- !this.params.has(placeholder.closeName)) {
46
- this.params.set(placeholder.closeName, [{
47
- value: placeholder.endSourceSpan?.toString(),
48
- subTemplateIndex: null,
49
- flags: ir.I18nParamValueFlags.None
50
- }]);
51
- }
52
- }
53
- visitTagPlaceholder(placeholder) {
54
- super.visitTagPlaceholder(placeholder);
55
- this.visitContainerPlaceholder(placeholder);
56
- }
57
- visitBlockPlaceholder(placeholder) {
58
- super.visitBlockPlaceholder(placeholder);
59
- this.visitContainerPlaceholder(placeholder);
60
- }
61
- }
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZV9pMThuX2ljdV9wbGFjZWhvbGRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci9zcmMvdGVtcGxhdGUvcGlwZWxpbmUvc3JjL3BoYXNlcy9yZXNvbHZlX2kxOG5faWN1X3BsYWNlaG9sZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEtBQUssSUFBSSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRy9COztHQUVHO0FBQ0gsTUFBTSxVQUFVLDBCQUEwQixDQUFDLEdBQW1CO0lBQzVELEtBQUssTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzdCLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsV0FBVyxLQUFLLEVBQUUsQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ25GLEtBQUssTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLDZCQUE2QixDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pFLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLDZCQUE4QixTQUFRLElBQUksQ0FBQyxjQUFjO0lBQzdELFlBQTZCLE1BQXdDO1FBQ25FLEtBQUssRUFBRSxDQUFDO1FBRG1CLFdBQU0sR0FBTixNQUFNLENBQWtDO0lBRXJFLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxXQUFzRDtRQUN0Riw4RkFBOEY7UUFDOUYsd0ZBQXdGO1FBQ3hGLHlFQUF5RTtRQUN6RSxJQUFJLFdBQVcsQ0FBQyxTQUFTLElBQUksV0FBVyxDQUFDLGVBQWU7WUFDcEQsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ3RCLEtBQUssRUFBRSxXQUFXLENBQUMsZUFBZSxFQUFFLFFBQVEsRUFBRTtvQkFDOUMsZ0JBQWdCLEVBQUUsSUFBSTtvQkFDdEIsS0FBSyxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJO2lCQUNuQyxDQUFDLENBQUMsQ0FBQztRQUN0QixDQUFDO1FBQ0QsSUFBSSxXQUFXLENBQUMsU0FBUyxJQUFJLFdBQVcsQ0FBQyxhQUFhO1lBQ2xELENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUN0QixLQUFLLEVBQUUsV0FBVyxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUU7b0JBQzVDLGdCQUFnQixFQUFFLElBQUk7b0JBQ3RCLEtBQUssRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSTtpQkFDbkMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFUSxtQkFBbUIsQ0FBQyxXQUFnQztRQUMzRCxLQUFLLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFUSxxQkFBcUIsQ0FBQyxXQUFrQztRQUMvRCxLQUFLLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzlDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyBpMThuIGZyb20gJy4uLy4uLy4uLy4uL2kxOG4vaTE4bl9hc3QnO1xuaW1wb3J0ICogYXMgaXIgZnJvbSAnLi4vLi4vaXInO1xuaW1wb3J0IHtDb21waWxhdGlvbkpvYn0gZnJvbSAnLi4vY29tcGlsYXRpb24nO1xuXG4vKipcbiAqIFJlc29sdmVzIHBsYWNlaG9sZGVycyBmb3IgZWxlbWVudCB0YWdzIGluc2lkZSBvZiBhbiBJQ1UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlSTE4bkljdVBsYWNlaG9sZGVycyhqb2I6IENvbXBpbGF0aW9uSm9iKSB7XG4gIGZvciAoY29uc3QgdW5pdCBvZiBqb2IudW5pdHMpIHtcbiAgICBmb3IgKGNvbnN0IG9wIG9mIHVuaXQuY3JlYXRlKSB7XG4gICAgICBpZiAob3Aua2luZCA9PT0gaXIuT3BLaW5kLkkxOG5Db250ZXh0ICYmIG9wLmNvbnRleHRLaW5kID09PSBpci5JMThuQ29udGV4dEtpbmQuSWN1KSB7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBvcC5tZXNzYWdlLm5vZGVzKSB7XG4gICAgICAgICAgbm9kZS52aXNpdChuZXcgUmVzb2x2ZUljdVBsYWNlaG9sZGVyc1Zpc2l0b3Iob3AucG9zdHByb2Nlc3NpbmdQYXJhbXMpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFZpc2l0b3IgZm9yIGkxOG4gQVNUIHRoYXQgcmVzb2x2ZXMgSUNVIHBhcmFtcyBpbnRvIHRoZSBnaXZlbiBtYXAuXG4gKi9cbmNsYXNzIFJlc29sdmVJY3VQbGFjZWhvbGRlcnNWaXNpdG9yIGV4dGVuZHMgaTE4bi5SZWN1cnNlVmlzaXRvciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcGFyYW1zOiBNYXA8c3RyaW5nLCBpci5JMThuUGFyYW1WYWx1ZVtdPikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwcml2YXRlIHZpc2l0Q29udGFpbmVyUGxhY2Vob2xkZXIocGxhY2Vob2xkZXI6IGkxOG4uVGFnUGxhY2Vob2xkZXJ8aTE4bi5CbG9ja1BsYWNlaG9sZGVyKSB7XG4gICAgLy8gQWRkIHRoZSBzdGFydCBhbmQgZW5kIHNvdXJjZSBzcGFuIGZvciBjb250YWluZXIgcGxhY2Vob2xkZXJzLiBUaGVzZSBuZWVkIHRvIGJlIHJlY29yZGVkIGZvclxuICAgIC8vIGVsZW1lbnRzIGluc2lkZSBJQ1VzLiBUaGUgc2xvdHMgZm9yIHRoZSBub2RlcyB3ZXJlIHJlY29yZGVkIHNlcGFyYXRlbHkgdW5kZXIgdGhlIGkxOG5cbiAgICAvLyBibG9jaydzIGNvbnRleHQgYXMgcGFydCBvZiB0aGUgYHJlc29sdmVJMThuRWxlbWVudFBsYWNlaG9sZGVyc2AgcGhhc2UuXG4gICAgaWYgKHBsYWNlaG9sZGVyLnN0YXJ0TmFtZSAmJiBwbGFjZWhvbGRlci5zdGFydFNvdXJjZVNwYW4gJiZcbiAgICAgICAgIXRoaXMucGFyYW1zLmhhcyhwbGFjZWhvbGRlci5zdGFydE5hbWUpKSB7XG4gICAgICB0aGlzLnBhcmFtcy5zZXQocGxhY2Vob2xkZXIuc3RhcnROYW1lLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBsYWNlaG9sZGVyLnN0YXJ0U291cmNlU3Bhbj8udG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YlRlbXBsYXRlSW5kZXg6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFnczogaXIuSTE4blBhcmFtVmFsdWVGbGFncy5Ob25lXG4gICAgICAgICAgICAgICAgICAgICAgfV0pO1xuICAgIH1cbiAgICBpZiAocGxhY2Vob2xkZXIuY2xvc2VOYW1lICYmIHBsYWNlaG9sZGVyLmVuZFNvdXJjZVNwYW4gJiZcbiAgICAgICAgIXRoaXMucGFyYW1zLmhhcyhwbGFjZWhvbGRlci5jbG9zZU5hbWUpKSB7XG4gICAgICB0aGlzLnBhcmFtcy5zZXQocGxhY2Vob2xkZXIuY2xvc2VOYW1lLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBsYWNlaG9sZGVyLmVuZFNvdXJjZVNwYW4/LnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJUZW1wbGF0ZUluZGV4OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M6IGlyLkkxOG5QYXJhbVZhbHVlRmxhZ3MuTm9uZVxuICAgICAgICAgICAgICAgICAgICAgIH1dKTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSB2aXNpdFRhZ1BsYWNlaG9sZGVyKHBsYWNlaG9sZGVyOiBpMThuLlRhZ1BsYWNlaG9sZGVyKSB7XG4gICAgc3VwZXIudmlzaXRUYWdQbGFjZWhvbGRlcihwbGFjZWhvbGRlcik7XG4gICAgdGhpcy52aXNpdENvbnRhaW5lclBsYWNlaG9sZGVyKHBsYWNlaG9sZGVyKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHZpc2l0QmxvY2tQbGFjZWhvbGRlcihwbGFjZWhvbGRlcjogaTE4bi5CbG9ja1BsYWNlaG9sZGVyKSB7XG4gICAgc3VwZXIudmlzaXRCbG9ja1BsYWNlaG9sZGVyKHBsYWNlaG9sZGVyKTtcbiAgICB0aGlzLnZpc2l0Q29udGFpbmVyUGxhY2Vob2xkZXIocGxhY2Vob2xkZXIpO1xuICB9XG59XG4iXX0=