@angular/compiler-cli 11.2.9 → 11.2.13

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 (60) hide show
  1. package/linker/src/file_linker/partial_linkers/partial_linker_selector.d.ts +1 -1
  2. package/linker/src/file_linker/partial_linkers/partial_linker_selector.js +4 -4
  3. package/ngcc/src/analysis/decoration_analyzer.js +6 -6
  4. package/ngcc/src/packages/build_marker.d.ts +1 -1
  5. package/ngcc/src/packages/build_marker.js +1 -1
  6. package/package.json +2 -2
  7. package/src/ngtsc/annotations/src/component.d.ts +2 -3
  8. package/src/ngtsc/annotations/src/component.js +4 -5
  9. package/src/ngtsc/annotations/src/directive.d.ts +3 -4
  10. package/src/ngtsc/annotations/src/directive.js +6 -7
  11. package/src/ngtsc/annotations/src/injectable.d.ts +1 -3
  12. package/src/ngtsc/annotations/src/injectable.js +9 -9
  13. package/src/ngtsc/annotations/src/metadata.d.ts +1 -2
  14. package/src/ngtsc/annotations/src/metadata.js +5 -5
  15. package/src/ngtsc/annotations/src/ng_module.d.ts +2 -3
  16. package/src/ngtsc/annotations/src/ng_module.js +4 -5
  17. package/src/ngtsc/annotations/src/pipe.d.ts +1 -3
  18. package/src/ngtsc/annotations/src/pipe.js +4 -5
  19. package/src/ngtsc/annotations/src/util.d.ts +5 -5
  20. package/src/ngtsc/annotations/src/util.js +12 -11
  21. package/src/ngtsc/core/api/src/interfaces.d.ts +4 -1
  22. package/src/ngtsc/core/api/src/interfaces.js +1 -1
  23. package/src/ngtsc/core/src/compiler.js +9 -10
  24. package/src/ngtsc/core/src/host.d.ts +1 -1
  25. package/src/ngtsc/diagnostics/src/error_code.d.ts +5 -0
  26. package/src/ngtsc/diagnostics/src/error_code.js +6 -1
  27. package/src/ngtsc/imports/index.d.ts +1 -1
  28. package/src/ngtsc/imports/index.js +2 -3
  29. package/src/ngtsc/imports/src/default.d.ts +10 -37
  30. package/src/ngtsc/imports/src/default.js +22 -37
  31. package/src/ngtsc/incremental/src/state.js +6 -4
  32. package/src/ngtsc/resource/src/loader.js +3 -2
  33. package/src/ngtsc/transform/src/transform.d.ts +2 -2
  34. package/src/ngtsc/transform/src/transform.js +18 -16
  35. package/src/ngtsc/translator/index.d.ts +1 -1
  36. package/src/ngtsc/translator/index.js +1 -1
  37. package/src/ngtsc/translator/src/translator.d.ts +3 -3
  38. package/src/ngtsc/translator/src/translator.js +3 -3
  39. package/src/ngtsc/typecheck/api/checker.d.ts +1 -1
  40. package/src/ngtsc/typecheck/api/checker.js +1 -1
  41. package/src/ngtsc/typecheck/api/completion.d.ts +5 -0
  42. package/src/ngtsc/typecheck/api/completion.js +1 -1
  43. package/src/ngtsc/typecheck/src/checker.d.ts +2 -2
  44. package/src/ngtsc/typecheck/src/checker.js +3 -3
  45. package/src/ngtsc/typecheck/src/completion.d.ts +17 -7
  46. package/src/ngtsc/typecheck/src/completion.js +82 -47
  47. package/src/ngtsc/typecheck/src/context.js +26 -14
  48. package/src/ngtsc/typecheck/src/expression.js +4 -2
  49. package/src/ngtsc/typecheck/src/host.js +5 -7
  50. package/src/ngtsc/typecheck/src/tcb_util.d.ts +24 -2
  51. package/src/ngtsc/typecheck/src/tcb_util.js +40 -11
  52. package/src/ngtsc/typecheck/src/type_check_block.d.ts +28 -1
  53. package/src/ngtsc/typecheck/src/type_check_block.js +61 -25
  54. package/src/ngtsc/typecheck/src/type_check_file.d.ts +2 -1
  55. package/src/ngtsc/typecheck/src/type_check_file.js +3 -3
  56. package/src/ngtsc/typecheck/src/type_constructor.js +4 -8
  57. package/src/ngtsc/util/src/typescript.d.ts +4 -0
  58. package/src/ngtsc/util/src/typescript.js +13 -2
  59. package/src/transformers/program.js +70 -3
  60. package/src/version.js +1 -1
@@ -7,7 +7,7 @@
7
7
  */
8
8
  /// <amd-module name="@angular/compiler-cli/src/ngtsc/typecheck/src/tcb_util" />
9
9
  import { AbsoluteSourceSpan, ParseSourceSpan } from '@angular/compiler';
10
- import { ClassDeclaration } from '@angular/compiler-cli/src/ngtsc/reflection';
10
+ import { ClassDeclaration, ReflectionHost } from '@angular/compiler-cli/src/ngtsc/reflection';
11
11
  import * as ts from 'typescript';
12
12
  import { Reference } from '../../imports';
13
13
  import { FullTemplateMapping, SourceLocation, TemplateId, TemplateSourceMapping } from '../api';
@@ -29,7 +29,28 @@ export interface TemplateSourceResolver {
29
29
  */
30
30
  toParseSourceSpan(id: TemplateId, span: AbsoluteSourceSpan): ParseSourceSpan | null;
31
31
  }
32
- export declare function requiresInlineTypeCheckBlock(node: ClassDeclaration<ts.ClassDeclaration>, usedPipes: Map<string, Reference<ClassDeclaration<ts.ClassDeclaration>>>): boolean;
32
+ /**
33
+ * Indicates whether a particular component requires an inline type check block.
34
+ *
35
+ * This is not a boolean state as inlining might only be required to get the best possible
36
+ * type-checking, but the component could theoretically still be checked without it.
37
+ */
38
+ export declare enum TcbInliningRequirement {
39
+ /**
40
+ * There is no way to type check this component without inlining.
41
+ */
42
+ MustInline = 0,
43
+ /**
44
+ * Inlining should be used due to the component's generic bounds, but a non-inlining fallback
45
+ * method can be used if that's not possible.
46
+ */
47
+ ShouldInlineForGenericBounds = 1,
48
+ /**
49
+ * There is no requirement for this component's TCB to be inlined.
50
+ */
51
+ None = 2
52
+ }
53
+ export declare function requiresInlineTypeCheckBlock(node: ClassDeclaration<ts.ClassDeclaration>, usedPipes: Map<string, Reference<ClassDeclaration<ts.ClassDeclaration>>>, reflector: ReflectionHost): TcbInliningRequirement;
33
54
  /** Maps a shim position back to a template location. */
34
55
  export declare function getTemplateMapping(shimSf: ts.SourceFile, position: number, resolver: TemplateSourceResolver, isDiagnosticRequest: boolean): FullTemplateMapping | null;
35
56
  export declare function findTypeCheckBlock(file: ts.SourceFile, id: TemplateId, isDiagnosticRequest: boolean): ts.Node | null;
@@ -40,3 +61,4 @@ export declare function findTypeCheckBlock(file: ts.SourceFile, id: TemplateId,
40
61
  * returns null.
41
62
  */
42
63
  export declare function findSourceLocation(node: ts.Node, sourceFile: ts.SourceFile, isDiagnosticsRequest: boolean): SourceLocation | null;
64
+ export declare function checkIfGenericTypeBoundsAreContextFree(node: ClassDeclaration<ts.ClassDeclaration>, reflector: ReflectionHost): boolean;
@@ -11,37 +11,61 @@
11
11
  if (v !== undefined) module.exports = v;
12
12
  }
13
13
  else if (typeof define === "function" && define.amd) {
14
- define("@angular/compiler-cli/src/ngtsc/typecheck/src/tcb_util", ["require", "exports", "tslib", "typescript", "@angular/compiler-cli/src/ngtsc/util/src/typescript", "@angular/compiler-cli/src/ngtsc/typecheck/src/comments", "@angular/compiler-cli/src/ngtsc/typecheck/src/ts_util"], factory);
14
+ define("@angular/compiler-cli/src/ngtsc/typecheck/src/tcb_util", ["require", "exports", "tslib", "typescript", "@angular/compiler-cli/src/ngtsc/util/src/typescript", "@angular/compiler-cli/src/ngtsc/typecheck/src/comments", "@angular/compiler-cli/src/ngtsc/typecheck/src/ts_util", "@angular/compiler-cli/src/ngtsc/typecheck/src/type_parameter_emitter"], factory);
15
15
  }
16
16
  })(function (require, exports) {
17
17
  "use strict";
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
- exports.findSourceLocation = exports.findTypeCheckBlock = exports.getTemplateMapping = exports.requiresInlineTypeCheckBlock = void 0;
19
+ exports.checkIfGenericTypeBoundsAreContextFree = exports.findSourceLocation = exports.findTypeCheckBlock = exports.getTemplateMapping = exports.requiresInlineTypeCheckBlock = exports.TcbInliningRequirement = void 0;
20
20
  var tslib_1 = require("tslib");
21
21
  var ts = require("typescript");
22
22
  var typescript_1 = require("@angular/compiler-cli/src/ngtsc/util/src/typescript");
23
23
  var comments_1 = require("@angular/compiler-cli/src/ngtsc/typecheck/src/comments");
24
24
  var ts_util_1 = require("@angular/compiler-cli/src/ngtsc/typecheck/src/ts_util");
25
- function requiresInlineTypeCheckBlock(node, usedPipes) {
25
+ var type_parameter_emitter_1 = require("@angular/compiler-cli/src/ngtsc/typecheck/src/type_parameter_emitter");
26
+ /**
27
+ * Indicates whether a particular component requires an inline type check block.
28
+ *
29
+ * This is not a boolean state as inlining might only be required to get the best possible
30
+ * type-checking, but the component could theoretically still be checked without it.
31
+ */
32
+ var TcbInliningRequirement;
33
+ (function (TcbInliningRequirement) {
34
+ /**
35
+ * There is no way to type check this component without inlining.
36
+ */
37
+ TcbInliningRequirement[TcbInliningRequirement["MustInline"] = 0] = "MustInline";
38
+ /**
39
+ * Inlining should be used due to the component's generic bounds, but a non-inlining fallback
40
+ * method can be used if that's not possible.
41
+ */
42
+ TcbInliningRequirement[TcbInliningRequirement["ShouldInlineForGenericBounds"] = 1] = "ShouldInlineForGenericBounds";
43
+ /**
44
+ * There is no requirement for this component's TCB to be inlined.
45
+ */
46
+ TcbInliningRequirement[TcbInliningRequirement["None"] = 2] = "None";
47
+ })(TcbInliningRequirement = exports.TcbInliningRequirement || (exports.TcbInliningRequirement = {}));
48
+ function requiresInlineTypeCheckBlock(node, usedPipes, reflector) {
26
49
  // In order to qualify for a declared TCB (not inline) two conditions must be met:
27
50
  // 1) the class must be exported
28
- // 2) it must not have constrained generic types
51
+ // 2) it must not have contextual generic type bounds
29
52
  if (!ts_util_1.checkIfClassIsExported(node)) {
30
53
  // Condition 1 is false, the class is not exported.
31
- return true;
54
+ return TcbInliningRequirement.MustInline;
32
55
  }
33
- else if (!ts_util_1.checkIfGenericTypesAreUnbound(node)) {
34
- // Condition 2 is false, the class has constrained generic types
35
- return true;
56
+ else if (!checkIfGenericTypeBoundsAreContextFree(node, reflector)) {
57
+ // Condition 2 is false, the class has constrained generic types. It should be checked with an
58
+ // inline TCB if possible, but can potentially use fallbacks to avoid inlining if not.
59
+ return TcbInliningRequirement.ShouldInlineForGenericBounds;
36
60
  }
37
61
  else if (Array.from(usedPipes.values())
38
62
  .some(function (pipeRef) { return !ts_util_1.checkIfClassIsExported(pipeRef.node); })) {
39
63
  // If one of the pipes used by the component is not exported, a non-inline TCB will not be able
40
64
  // to import it, so this requires an inline TCB.
41
- return true;
65
+ return TcbInliningRequirement.MustInline;
42
66
  }
43
67
  else {
44
- return false;
68
+ return TcbInliningRequirement.None;
45
69
  }
46
70
  }
47
71
  exports.requiresInlineTypeCheckBlock = requiresInlineTypeCheckBlock;
@@ -132,5 +156,10 @@
132
156
  return commentText;
133
157
  }) || null;
134
158
  }
159
+ function checkIfGenericTypeBoundsAreContextFree(node, reflector) {
160
+ // Generic type parameters are considered context free if they can be emitted into any context.
161
+ return new type_parameter_emitter_1.TypeParameterEmitter(node.typeParameters, reflector).canEmit();
162
+ }
163
+ exports.checkIfGenericTypeBoundsAreContextFree = checkIfGenericTypeBoundsAreContextFree;
135
164
  });
136
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGNiX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3R5cGVjaGVjay9zcmMvdGNiX3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7OztJQUlILCtCQUFpQztJQUdqQyxrRkFBNkQ7SUFHN0QsbUZBQTBFO0lBQzFFLGlGQUFnRjtJQXVCaEYsU0FBZ0IsNEJBQTRCLENBQ3hDLElBQTJDLEVBQzNDLFNBQXdFO1FBQzFFLGtGQUFrRjtRQUNsRixnQ0FBZ0M7UUFDaEMsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyxnQ0FBc0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNqQyxtREFBbUQ7WUFDbkQsT0FBTyxJQUFJLENBQUM7U0FDYjthQUFNLElBQUksQ0FBQyx1Q0FBNkIsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMvQyxnRUFBZ0U7WUFDaEUsT0FBTyxJQUFJLENBQUM7U0FDYjthQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDekIsSUFBSSxDQUFDLFVBQUEsT0FBTyxJQUFJLE9BQUEsQ0FBQyxnQ0FBc0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQXJDLENBQXFDLENBQUMsRUFBRTtZQUN0RSwrRkFBK0Y7WUFDL0YsZ0RBQWdEO1lBQ2hELE9BQU8sSUFBSSxDQUFDO1NBQ2I7YUFBTTtZQUNMLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBcEJELG9FQW9CQztJQUVELHdEQUF3RDtJQUN4RCxTQUFnQixrQkFBa0IsQ0FDOUIsTUFBcUIsRUFBRSxRQUFnQixFQUFFLFFBQWdDLEVBQ3pFLG1CQUE0QjtRQUM5QixJQUFNLElBQUksR0FBRywrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbEQsSUFBTSxj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QUMsMEJBQTBCLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUk7WUFDMUUsSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsRUFBRTtnQkFDakQsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELElBQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2hFLE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUMsQ0FBZSxJQUFJLElBQUksQ0FBQztJQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7QWJzb2x1dGVTb3VyY2VTcGFuLCBQYXJzZVNvdXJjZVNwYW59IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcbmltcG9ydCB7Q2xhc3NEZWNsYXJhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9yZWZsZWN0aW9uJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge1JlZmVyZW5jZX0gZnJvbSAnLi4vLi4vaW1wb3J0cyc7XG5pbXBvcnQge2dldFRva2VuQXRQb3NpdGlvbn0gZnJvbSAnLi4vLi4vdXRpbC9zcmMvdHlwZXNjcmlwdCc7XG5pbXBvcnQge0Z1bGxUZW1wbGF0ZU1hcHBpbmcsIFNvdXJjZUxvY2F0aW9uLCBUZW1wbGF0ZUlkLCBUZW1wbGF0ZVNvdXJjZU1hcHBpbmd9IGZyb20gJy4uL2FwaSc7XG5cbmltcG9ydCB7aGFzSWdub3JlRm9yRGlhZ25vc3RpY3NNYXJrZXIsIHJlYWRTcGFuQ29tbWVudH0gZnJvbSAnLi9jb21tZW50cyc7XG5pbXBvcnQge2NoZWNrSWZDbGFzc0lzRXhwb3J0ZWQsIGNoZWNrSWZHZW5lcmljVHlwZXNBcmVVbmJvdW5kfSBmcm9tICcuL3RzX3V0aWwnO1xuXG4vKipcbiAqIEFkYXB0ZXIgaW50ZXJmYWNlIHdoaWNoIGFsbG93cyB0aGUgdGVtcGxhdGUgdHlwZS1jaGVja2luZyBkaWFnbm9zdGljcyBjb2RlIHRvIGludGVycHJldCBvZmZzZXRzXG4gKiBpbiBhIFRDQiBhbmQgbWFwIHRoZW0gYmFjayB0byBvcmlnaW5hbCBsb2NhdGlvbnMgaW4gdGhlIHRlbXBsYXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlU291cmNlUmVzb2x2ZXIge1xuICBnZXRUZW1wbGF0ZUlkKG5vZGU6IHRzLkNsYXNzRGVjbGFyYXRpb24pOiBUZW1wbGF0ZUlkO1xuXG4gIC8qKlxuICAgKiBGb3IgdGhlIGdpdmVuIHRlbXBsYXRlIGlkLCByZXRyaWV2ZSB0aGUgb3JpZ2luYWwgc291cmNlIG1hcHBpbmcgd2hpY2ggZGVzY3JpYmVzIGhvdyB0aGUgb2Zmc2V0c1xuICAgKiBpbiB0aGUgdGVtcGxhdGUgc2hvdWxkIGJlIGludGVycHJldGVkLlxuICAgKi9cbiAgZ2V0U291cmNlTWFwcGluZyhpZDogVGVtcGxhdGVJZCk6IFRlbXBsYXRlU291cmNlTWFwcGluZztcblxuICAvKipcbiAgICogQ29udmVydCBhbiBhYnNvbHV0ZSBzb3VyY2Ugc3BhbiBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHRlbXBsYXRlIGlkIGludG8gYSBmdWxsXG4gICAqIGBQYXJzZVNvdXJjZVNwYW5gLiBUaGUgcmV0dXJuZWQgcGFyc2Ugc3BhbiBoYXMgbGluZSBhbmQgY29sdW1uIG51bWJlcnMgaW4gYWRkaXRpb24gdG8gb25seVxuICAgKiBhYnNvbHV0ZSBvZmZzZXRzIGFuZCBnaXZlcyBhY2Nlc3MgdG8gdGhlIG9yaWdpbmFsIHRlbXBsYXRlIHNvdXJjZS5cbiAgICovXG4gIHRvUGFyc2VTb3VyY2VTcGFuKGlkOiBUZW1wbGF0ZUlkLCBzcGFuOiBBYnNvbHV0ZVNvdXJjZVNwYW4pOiBQYXJzZVNvdXJjZVNwYW58bnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVzSW5saW5lVHlwZUNoZWNrQmxvY2soXG4gICAgbm9kZTogQ2xhc3NEZWNsYXJhdGlvbjx0cy5DbGFzc0RlY2xhcmF0aW9uPixcbiAgICB1c2VkUGlwZXM6IE1hcDxzdHJpbmcsIFJlZmVyZW5jZTxDbGFzc0RlY2xhcmF0aW9uPHRzLkNsYXNzRGVjbGFyYXRpb24+Pj4pOiBib29sZWFuIHtcbiAgLy8gSW4gb3JkZXIgdG8gcXVhbGlmeSBmb3IgYSBkZWNsYXJlZCBUQ0IgKG5vdCBpbmxpbmUpIHR3byBjb25kaXRpb25zIG11c3QgYmUgbWV0OlxuICAvLyAxKSB0aGUgY2xhc3MgbXVzdCBiZSBleHBvcnRlZFxuICAvLyAyKSBpdCBtdXN0IG5vdCBoYXZlIGNvbnN0cmFpbmVkIGdlbmVyaWMgdHlwZXNcbiAgaWYgKCFjaGVja0lmQ2xhc3NJc0V4cG9ydGVkKG5vZGUpKSB7XG4gICAgLy8gQ29uZGl0aW9uIDEgaXMgZmFsc2UsIHRoZSBjbGFzcyBpcyBub3QgZXhwb3J0ZWQuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoIWNoZWNrSWZHZW5lcmljVHlwZXNBcmVVbmJvdW5kKG5vZGUpKSB7XG4gICAgLy8gQ29uZGl0aW9uIDIgaXMgZmFsc2UsIHRoZSBjbGFzcyBoYXMgY29uc3RyYWluZWQgZ2VuZXJpYyB0eXBlc1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKEFycmF5LmZyb20odXNlZFBpcGVzLnZhbHVlcygpKVxuICAgICAgICAgICAgICAgICAuc29tZShwaXBlUmVmID0+ICFjaGVja0lmQ2xhc3NJc0V4cG9ydGVkKHBpcGVSZWYubm9kZSkpKSB7XG4gICAgLy8gSWYgb25lIG9mIHRoZSBwaXBlcyB1c2VkIGJ5IHRoZSBjb21wb25lbnQgaXMgbm90IGV4cG9ydGVkLCBhIG5vbi1pbmxpbmUgVENCIHdpbGwgbm90IGJlIGFibGVcbiAgICAvLyB0byBpbXBvcnQgaXQsIHNvIHRoaXMgcmVxdWlyZXMgYW4gaW5saW5lIFRDQi5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqIE1hcHMgYSBzaGltIHBvc2l0aW9uIGJhY2sgdG8gYSB0ZW1wbGF0ZSBsb2NhdGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZW1wbGF0ZU1hcHBpbmcoXG4gICAgc2hpbVNmOiB0cy5Tb3VyY2VGaWxlLCBwb3NpdGlvbjogbnVtYmVyLCByZXNvbHZlcjogVGVtcGxhdGVTb3VyY2VSZXNvbHZlcixcbiAgICBpc0RpYWdub3N0aWNSZXF1ZXN0OiBib29sZWFuKTogRnVsbFRlbXBsYXRlTWFwcGluZ3xudWxsIHtcbiAgY29uc3Qgbm9kZSA9IGdldFRva2VuQXRQb3NpdGlvbihzaGltU2YsIHBvc2l0aW9uKTtcbiAgY29uc3Qgc291cmNlTG9jYXRpb24gPSBmaW5kU291cmNlTG9jYXRpb24obm9kZSwgc2hpbVNmLCBpc0RpYWdub3N0aWNSZXF1ZXN0KTtcbiAgaWYgKHNvdXJjZUxvY2F0aW9uID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBtYXBwaW5nID0gcmVzb2x2ZXIuZ2V0U291cmNlTWFwcGluZyhzb3VyY2VMb2NhdGlvbi5pZCk7XG4gIGNvbnN0IHNwYW4gPSByZXNvbHZlci50b1BhcnNlU291cmNlU3Bhbihzb3VyY2VMb2NhdGlvbi5pZCwgc291cmNlTG9jYXRpb24uc3Bhbik7XG4gIGlmIChzcGFuID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gVE9ETyhhdHNjb3R0KTogQ29uc2lkZXIgYWRkaW5nIGEgY29udGV4dCBzcGFuIGJ5IHdhbGtpbmcgdXAgZnJvbSBgbm9kZWAgdW50aWwgd2UgZ2V0IGFcbiAgLy8gZGlmZmVyZW50IHNwYW4uXG4gIHJldHVybiB7c291cmNlTG9jYXRpb24sIHRlbXBsYXRlU291cmNlTWFwcGluZzogbWFwcGluZywgc3Bhbn07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kVHlwZUNoZWNrQmxvY2soXG4gICAgZmlsZTogdHMuU291cmNlRmlsZSwgaWQ6IFRlbXBsYXRlSWQsIGlzRGlhZ25vc3RpY1JlcXVlc3Q6IGJvb2xlYW4pOiB0cy5Ob2RlfG51bGwge1xuICBmb3IgKGNvbnN0IHN0bXQgb2YgZmlsZS5zdGF0ZW1lbnRzKSB7XG4gICAgaWYgKHRzLmlzRnVuY3Rpb25EZWNsYXJhdGlvbihzdG10KSAmJiBnZXRUZW1wbGF0ZUlkKHN0bXQsIGZpbGUsIGlzRGlhZ25vc3RpY1JlcXVlc3QpID09PSBpZCkge1xuICAgICAgcmV0dXJuIHN0bXQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFRyYXZlcnNlcyB1cCB0aGUgQVNUIHN0YXJ0aW5nIGZyb20gdGhlIGdpdmVuIG5vZGUgdG8gZXh0cmFjdCB0aGUgc291cmNlIGxvY2F0aW9uIGZyb20gY29tbWVudHNcbiAqIHRoYXQgaGF2ZSBiZWVuIGVtaXR0ZWQgaW50byB0aGUgVENCLiBJZiB0aGUgbm9kZSBkb2VzIG5vdCBleGlzdCB3aXRoaW4gYSBUQ0IsIG9yIGlmIGFuIGlnbm9yZVxuICogbWFya2VyIGNvbW1lbnQgaXMgZm91bmQgdXAgdGhlIHRyZWUgKGFuZCB0aGlzIGlzIHBhcnQgb2YgYSBkaWFnbm9zdGljIHJlcXVlc3QpLCB0aGlzIGZ1bmN0aW9uXG4gKiByZXR1cm5zIG51bGwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kU291cmNlTG9jYXRpb24oXG4gICAgbm9kZTogdHMuTm9kZSwgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSwgaXNEaWFnbm9zdGljc1JlcXVlc3Q6IGJvb2xlYW4pOiBTb3VyY2VMb2NhdGlvbnxudWxsIHtcbiAgLy8gU2VhcmNoIGZvciBjb21tZW50cyB1bnRpbCB0aGUgVENCJ3MgZnVuY3Rpb24gZGVjbGFyYXRpb24gaXMgZW5jb3VudGVyZWQuXG4gIHdoaWxlIChub2RlICE9PSB1bmRlZmluZWQgJiYgIXRzLmlzRnVuY3Rpb25EZWNsYXJhdGlvbihub2RlKSkge1xuICAgIGlmIChoYXNJZ25vcmVGb3JEaWFnbm9zdGljc01hcmtlcihub2RlLCBzb3VyY2VGaWxlKSAmJiBpc0RpYWdub3N0aWNzUmVxdWVzdCkge1xuICAgICAgLy8gVGhlcmUncyBhbiBpZ25vcmUgbWFya2VyIG9uIHRoaXMgbm9kZSwgc28gdGhlIGRpYWdub3N0aWMgc2hvdWxkIG5vdCBiZSByZXBvcnRlZC5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHNwYW4gPSByZWFkU3BhbkNvbW1lbnQobm9kZSwgc291cmNlRmlsZSk7XG4gICAgaWYgKHNwYW4gIT09IG51bGwpIHtcbiAgICAgIC8vIE9uY2UgdGhlIHBvc2l0aW9uYWwgaW5mb3JtYXRpb24gaGFzIGJlZW4gZXh0cmFjdGVkLCBzZWFyY2ggZnVydGhlciB1cCB0aGUgVENCIHRvIGV4dHJhY3RcbiAgICAgIC8vIHRoZSB1bmlxdWUgaWQgdGhhdCBpcyBhdHRhY2hlZCB3aXRoIHRoZSBUQ0IncyBmdW5jdGlvbiBkZWNsYXJhdGlvbi5cbiAgICAgIGNvbnN0IGlkID0gZ2V0VGVtcGxhdGVJZChub2RlLCBzb3VyY2VGaWxlLCBpc0RpYWdub3N0aWNzUmVxdWVzdCk7XG4gICAgICBpZiAoaWQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4ge2lkLCBzcGFufTtcbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5wYXJlbnQ7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0VGVtcGxhdGVJZChcbiAgICBub2RlOiB0cy5Ob2RlLCBzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlLCBpc0RpYWdub3N0aWNSZXF1ZXN0OiBib29sZWFuKTogVGVtcGxhdGVJZHxudWxsIHtcbiAgLy8gV2FsayB1cCB0byB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24gb2YgdGhlIFRDQiwgdGhlIGZpbGUgaW5mb3JtYXRpb24gaXMgYXR0YWNoZWQgdGhlcmUuXG4gIHdoaWxlICghdHMuaXNGdW5jdGlvbkRlY2xhcmF0aW9uKG5vZGUpKSB7XG4gICAgaWYgKGhhc0lnbm9yZUZvckRpYWdub3N0aWNzTWFya2VyKG5vZGUsIHNvdXJjZUZpbGUpICYmIGlzRGlhZ25vc3RpY1JlcXVlc3QpIHtcbiAgICAgIC8vIFRoZXJlJ3MgYW4gaWdub3JlIG1hcmtlciBvbiB0aGlzIG5vZGUsIHNvIHRoZSBkaWFnbm9zdGljIHNob3VsZCBub3QgYmUgcmVwb3J0ZWQuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgbm9kZSA9IG5vZGUucGFyZW50O1xuXG4gICAgLy8gQmFpbCBvbmNlIHdlIGhhdmUgcmVhY2hlZCB0aGUgcm9vdC5cbiAgICBpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdGFydCA9IG5vZGUuZ2V0RnVsbFN0YXJ0KCk7XG4gIHJldHVybiB0cy5mb3JFYWNoTGVhZGluZ0NvbW1lbnRSYW5nZShzb3VyY2VGaWxlLnRleHQsIHN0YXJ0LCAocG9zLCBlbmQsIGtpbmQpID0+IHtcbiAgICBpZiAoa2luZCAhPT0gdHMuU3ludGF4S2luZC5NdWx0aUxpbmVDb21tZW50VHJpdmlhKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgY29tbWVudFRleHQgPSBzb3VyY2VGaWxlLnRleHQuc3Vic3RyaW5nKHBvcyArIDIsIGVuZCAtIDIpO1xuICAgIHJldHVybiBjb21tZW50VGV4dDtcbiAgfSkgYXMgVGVtcGxhdGVJZCB8fCBudWxsO1xufVxuIl19
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGNiX3V0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3R5cGVjaGVjay9zcmMvdGNiX3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7OztJQUlILCtCQUFpQztJQUdqQyxrRkFBNkQ7SUFHN0QsbUZBQTBFO0lBQzFFLGlGQUFnRjtJQUNoRiwrR0FBOEQ7SUF1QjlEOzs7OztPQUtHO0lBQ0gsSUFBWSxzQkFnQlg7SUFoQkQsV0FBWSxzQkFBc0I7UUFDaEM7O1dBRUc7UUFDSCwrRUFBVSxDQUFBO1FBRVY7OztXQUdHO1FBQ0gsbUhBQTRCLENBQUE7UUFFNUI7O1dBRUc7UUFDSCxtRUFBSSxDQUFBO0lBQ04sQ0FBQyxFQWhCVyxzQkFBc0IsR0FBdEIsOEJBQXNCLEtBQXRCLDhCQUFzQixRQWdCakM7SUFFRCxTQUFnQiw0QkFBNEIsQ0FDeEMsSUFBMkMsRUFDM0MsU0FBd0UsRUFDeEUsU0FBeUI7UUFDM0Isa0ZBQWtGO1FBQ2xGLGdDQUFnQztRQUNoQyxxREFBcUQ7UUFDckQsSUFBSSxDQUFDLGdDQUFzQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2pDLG1EQUFtRDtZQUNuRCxPQUFPLHNCQUFzQixDQUFDLFVBQVUsQ0FBQztTQUMxQzthQUFNLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUU7WUFDbkUsOEZBQThGO1lBQzlGLHNGQUFzRjtZQUN0RixPQUFPLHNCQUFzQixDQUFDLDRCQUE0QixDQUFDO1NBQzVEO2FBQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUN6QixJQUFJLENBQUMsVUFBQSxPQUFPLElBQUksT0FBQSxDQUFDLGdDQUFzQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBckMsQ0FB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QyxJQUFJLENBQUMsRUFBRTtZQUN0QyxJQUFJLHdDQUE2QixDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxtQkFBbUIsRUFBRTtnQkFDMUUsbUZBQW1GO2dCQUNuRixPQUFPLElBQUksQ0FBQzthQUNiO1lBQ0QsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFFbkIsc0NBQXNDO1lBQ3RDLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtnQkFDdEIsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNGO1FBRUQsSUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xDLE9BQU8sRUFBRSxDQUFDLDBCQUEwQixDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJO1lBQzFFLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsc0JBQXNCLEVBQUU7Z0JBQ2pELE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxJQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNoRSxPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDLENBQWUsSUFBSSxJQUFJLENBQUM7SUFDM0IsQ0FBQztJQUVELFNBQWdCLHNDQUFzQyxDQUNsRCxJQUEyQyxFQUFFLFNBQXlCO1FBQ3hFLCtGQUErRjtRQUMvRixPQUFPLElBQUksNkNBQW9CLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM1RSxDQUFDO0lBSkQsd0ZBSUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtBYnNvbHV0ZVNvdXJjZVNwYW4sIFBhcnNlU291cmNlU3Bhbn0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0IHtDbGFzc0RlY2xhcmF0aW9uLCBSZWZsZWN0aW9uSG9zdH0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9yZWZsZWN0aW9uJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge1JlZmVyZW5jZX0gZnJvbSAnLi4vLi4vaW1wb3J0cyc7XG5pbXBvcnQge2dldFRva2VuQXRQb3NpdGlvbn0gZnJvbSAnLi4vLi4vdXRpbC9zcmMvdHlwZXNjcmlwdCc7XG5pbXBvcnQge0Z1bGxUZW1wbGF0ZU1hcHBpbmcsIFNvdXJjZUxvY2F0aW9uLCBUZW1wbGF0ZUlkLCBUZW1wbGF0ZVNvdXJjZU1hcHBpbmd9IGZyb20gJy4uL2FwaSc7XG5cbmltcG9ydCB7aGFzSWdub3JlRm9yRGlhZ25vc3RpY3NNYXJrZXIsIHJlYWRTcGFuQ29tbWVudH0gZnJvbSAnLi9jb21tZW50cyc7XG5pbXBvcnQge2NoZWNrSWZDbGFzc0lzRXhwb3J0ZWQsIGNoZWNrSWZHZW5lcmljVHlwZXNBcmVVbmJvdW5kfSBmcm9tICcuL3RzX3V0aWwnO1xuaW1wb3J0IHtUeXBlUGFyYW1ldGVyRW1pdHRlcn0gZnJvbSAnLi90eXBlX3BhcmFtZXRlcl9lbWl0dGVyJztcblxuLyoqXG4gKiBBZGFwdGVyIGludGVyZmFjZSB3aGljaCBhbGxvd3MgdGhlIHRlbXBsYXRlIHR5cGUtY2hlY2tpbmcgZGlhZ25vc3RpY3MgY29kZSB0byBpbnRlcnByZXQgb2Zmc2V0c1xuICogaW4gYSBUQ0IgYW5kIG1hcCB0aGVtIGJhY2sgdG8gb3JpZ2luYWwgbG9jYXRpb25zIGluIHRoZSB0ZW1wbGF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZVNvdXJjZVJlc29sdmVyIHtcbiAgZ2V0VGVtcGxhdGVJZChub2RlOiB0cy5DbGFzc0RlY2xhcmF0aW9uKTogVGVtcGxhdGVJZDtcblxuICAvKipcbiAgICogRm9yIHRoZSBnaXZlbiB0ZW1wbGF0ZSBpZCwgcmV0cmlldmUgdGhlIG9yaWdpbmFsIHNvdXJjZSBtYXBwaW5nIHdoaWNoIGRlc2NyaWJlcyBob3cgdGhlIG9mZnNldHNcbiAgICogaW4gdGhlIHRlbXBsYXRlIHNob3VsZCBiZSBpbnRlcnByZXRlZC5cbiAgICovXG4gIGdldFNvdXJjZU1hcHBpbmcoaWQ6IFRlbXBsYXRlSWQpOiBUZW1wbGF0ZVNvdXJjZU1hcHBpbmc7XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYW4gYWJzb2x1dGUgc291cmNlIHNwYW4gYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiB0ZW1wbGF0ZSBpZCBpbnRvIGEgZnVsbFxuICAgKiBgUGFyc2VTb3VyY2VTcGFuYC4gVGhlIHJldHVybmVkIHBhcnNlIHNwYW4gaGFzIGxpbmUgYW5kIGNvbHVtbiBudW1iZXJzIGluIGFkZGl0aW9uIHRvIG9ubHlcbiAgICogYWJzb2x1dGUgb2Zmc2V0cyBhbmQgZ2l2ZXMgYWNjZXNzIHRvIHRoZSBvcmlnaW5hbCB0ZW1wbGF0ZSBzb3VyY2UuXG4gICAqL1xuICB0b1BhcnNlU291cmNlU3BhbihpZDogVGVtcGxhdGVJZCwgc3BhbjogQWJzb2x1dGVTb3VyY2VTcGFuKTogUGFyc2VTb3VyY2VTcGFufG51bGw7XG59XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIGNvbXBvbmVudCByZXF1aXJlcyBhbiBpbmxpbmUgdHlwZSBjaGVjayBibG9jay5cbiAqXG4gKiBUaGlzIGlzIG5vdCBhIGJvb2xlYW4gc3RhdGUgYXMgaW5saW5pbmcgbWlnaHQgb25seSBiZSByZXF1aXJlZCB0byBnZXQgdGhlIGJlc3QgcG9zc2libGVcbiAqIHR5cGUtY2hlY2tpbmcsIGJ1dCB0aGUgY29tcG9uZW50IGNvdWxkIHRoZW9yZXRpY2FsbHkgc3RpbGwgYmUgY2hlY2tlZCB3aXRob3V0IGl0LlxuICovXG5leHBvcnQgZW51bSBUY2JJbmxpbmluZ1JlcXVpcmVtZW50IHtcbiAgLyoqXG4gICAqIFRoZXJlIGlzIG5vIHdheSB0byB0eXBlIGNoZWNrIHRoaXMgY29tcG9uZW50IHdpdGhvdXQgaW5saW5pbmcuXG4gICAqL1xuICBNdXN0SW5saW5lLFxuXG4gIC8qKlxuICAgKiBJbmxpbmluZyBzaG91bGQgYmUgdXNlZCBkdWUgdG8gdGhlIGNvbXBvbmVudCdzIGdlbmVyaWMgYm91bmRzLCBidXQgYSBub24taW5saW5pbmcgZmFsbGJhY2tcbiAgICogbWV0aG9kIGNhbiBiZSB1c2VkIGlmIHRoYXQncyBub3QgcG9zc2libGUuXG4gICAqL1xuICBTaG91bGRJbmxpbmVGb3JHZW5lcmljQm91bmRzLFxuXG4gIC8qKlxuICAgKiBUaGVyZSBpcyBubyByZXF1aXJlbWVudCBmb3IgdGhpcyBjb21wb25lbnQncyBUQ0IgdG8gYmUgaW5saW5lZC5cbiAgICovXG4gIE5vbmUsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlc0lubGluZVR5cGVDaGVja0Jsb2NrKFxuICAgIG5vZGU6IENsYXNzRGVjbGFyYXRpb248dHMuQ2xhc3NEZWNsYXJhdGlvbj4sXG4gICAgdXNlZFBpcGVzOiBNYXA8c3RyaW5nLCBSZWZlcmVuY2U8Q2xhc3NEZWNsYXJhdGlvbjx0cy5DbGFzc0RlY2xhcmF0aW9uPj4+LFxuICAgIHJlZmxlY3RvcjogUmVmbGVjdGlvbkhvc3QpOiBUY2JJbmxpbmluZ1JlcXVpcmVtZW50IHtcbiAgLy8gSW4gb3JkZXIgdG8gcXVhbGlmeSBmb3IgYSBkZWNsYXJlZCBUQ0IgKG5vdCBpbmxpbmUpIHR3byBjb25kaXRpb25zIG11c3QgYmUgbWV0OlxuICAvLyAxKSB0aGUgY2xhc3MgbXVzdCBiZSBleHBvcnRlZFxuICAvLyAyKSBpdCBtdXN0IG5vdCBoYXZlIGNvbnRleHR1YWwgZ2VuZXJpYyB0eXBlIGJvdW5kc1xuICBpZiAoIWNoZWNrSWZDbGFzc0lzRXhwb3J0ZWQobm9kZSkpIHtcbiAgICAvLyBDb25kaXRpb24gMSBpcyBmYWxzZSwgdGhlIGNsYXNzIGlzIG5vdCBleHBvcnRlZC5cbiAgICByZXR1cm4gVGNiSW5saW5pbmdSZXF1aXJlbWVudC5NdXN0SW5saW5lO1xuICB9IGVsc2UgaWYgKCFjaGVja0lmR2VuZXJpY1R5cGVCb3VuZHNBcmVDb250ZXh0RnJlZShub2RlLCByZWZsZWN0b3IpKSB7XG4gICAgLy8gQ29uZGl0aW9uIDIgaXMgZmFsc2UsIHRoZSBjbGFzcyBoYXMgY29uc3RyYWluZWQgZ2VuZXJpYyB0eXBlcy4gSXQgc2hvdWxkIGJlIGNoZWNrZWQgd2l0aCBhblxuICAgIC8vIGlubGluZSBUQ0IgaWYgcG9zc2libGUsIGJ1dCBjYW4gcG90ZW50aWFsbHkgdXNlIGZhbGxiYWNrcyB0byBhdm9pZCBpbmxpbmluZyBpZiBub3QuXG4gICAgcmV0dXJuIFRjYklubGluaW5nUmVxdWlyZW1lbnQuU2hvdWxkSW5saW5lRm9yR2VuZXJpY0JvdW5kcztcbiAgfSBlbHNlIGlmIChBcnJheS5mcm9tKHVzZWRQaXBlcy52YWx1ZXMoKSlcbiAgICAgICAgICAgICAgICAgLnNvbWUocGlwZVJlZiA9PiAhY2hlY2tJZkNsYXNzSXNFeHBvcnRlZChwaXBlUmVmLm5vZGUpKSkge1xuICAgIC8vIElmIG9uZSBvZiB0aGUgcGlwZXMgdXNlZCBieSB0aGUgY29tcG9uZW50IGlzIG5vdCBleHBvcnRlZCwgYSBub24taW5saW5lIFRDQiB3aWxsIG5vdCBiZSBhYmxlXG4gICAgLy8gdG8gaW1wb3J0IGl0LCBzbyB0aGlzIHJlcXVpcmVzIGFuIGlubGluZSBUQ0IuXG4gICAgcmV0dXJuIFRjYklubGluaW5nUmVxdWlyZW1lbnQuTXVzdElubGluZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gVGNiSW5saW5pbmdSZXF1aXJlbWVudC5Ob25lO1xuICB9XG59XG5cbi8qKiBNYXBzIGEgc2hpbSBwb3NpdGlvbiBiYWNrIHRvIGEgdGVtcGxhdGUgbG9jYXRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVtcGxhdGVNYXBwaW5nKFxuICAgIHNoaW1TZjogdHMuU291cmNlRmlsZSwgcG9zaXRpb246IG51bWJlciwgcmVzb2x2ZXI6IFRlbXBsYXRlU291cmNlUmVzb2x2ZXIsXG4gICAgaXNEaWFnbm9zdGljUmVxdWVzdDogYm9vbGVhbik6IEZ1bGxUZW1wbGF0ZU1hcHBpbmd8bnVsbCB7XG4gIGNvbnN0IG5vZGUgPSBnZXRUb2tlbkF0UG9zaXRpb24oc2hpbVNmLCBwb3NpdGlvbik7XG4gIGNvbnN0IHNvdXJjZUxvY2F0aW9uID0gZmluZFNvdXJjZUxvY2F0aW9uKG5vZGUsIHNoaW1TZiwgaXNEaWFnbm9zdGljUmVxdWVzdCk7XG4gIGlmIChzb3VyY2VMb2NhdGlvbiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbWFwcGluZyA9IHJlc29sdmVyLmdldFNvdXJjZU1hcHBpbmcoc291cmNlTG9jYXRpb24uaWQpO1xuICBjb25zdCBzcGFuID0gcmVzb2x2ZXIudG9QYXJzZVNvdXJjZVNwYW4oc291cmNlTG9jYXRpb24uaWQsIHNvdXJjZUxvY2F0aW9uLnNwYW4pO1xuICBpZiAoc3BhbiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8vIFRPRE8oYXRzY290dCk6IENvbnNpZGVyIGFkZGluZyBhIGNvbnRleHQgc3BhbiBieSB3YWxraW5nIHVwIGZyb20gYG5vZGVgIHVudGlsIHdlIGdldCBhXG4gIC8vIGRpZmZlcmVudCBzcGFuLlxuICByZXR1cm4ge3NvdXJjZUxvY2F0aW9uLCB0ZW1wbGF0ZVNvdXJjZU1hcHBpbmc6IG1hcHBpbmcsIHNwYW59O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZFR5cGVDaGVja0Jsb2NrKFxuICAgIGZpbGU6IHRzLlNvdXJjZUZpbGUsIGlkOiBUZW1wbGF0ZUlkLCBpc0RpYWdub3N0aWNSZXF1ZXN0OiBib29sZWFuKTogdHMuTm9kZXxudWxsIHtcbiAgZm9yIChjb25zdCBzdG10IG9mIGZpbGUuc3RhdGVtZW50cykge1xuICAgIGlmICh0cy5pc0Z1bmN0aW9uRGVjbGFyYXRpb24oc3RtdCkgJiYgZ2V0VGVtcGxhdGVJZChzdG10LCBmaWxlLCBpc0RpYWdub3N0aWNSZXF1ZXN0KSA9PT0gaWQpIHtcbiAgICAgIHJldHVybiBzdG10O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBUcmF2ZXJzZXMgdXAgdGhlIEFTVCBzdGFydGluZyBmcm9tIHRoZSBnaXZlbiBub2RlIHRvIGV4dHJhY3QgdGhlIHNvdXJjZSBsb2NhdGlvbiBmcm9tIGNvbW1lbnRzXG4gKiB0aGF0IGhhdmUgYmVlbiBlbWl0dGVkIGludG8gdGhlIFRDQi4gSWYgdGhlIG5vZGUgZG9lcyBub3QgZXhpc3Qgd2l0aGluIGEgVENCLCBvciBpZiBhbiBpZ25vcmVcbiAqIG1hcmtlciBjb21tZW50IGlzIGZvdW5kIHVwIHRoZSB0cmVlIChhbmQgdGhpcyBpcyBwYXJ0IG9mIGEgZGlhZ25vc3RpYyByZXF1ZXN0KSwgdGhpcyBmdW5jdGlvblxuICogcmV0dXJucyBudWxsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZFNvdXJjZUxvY2F0aW9uKFxuICAgIG5vZGU6IHRzLk5vZGUsIHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUsIGlzRGlhZ25vc3RpY3NSZXF1ZXN0OiBib29sZWFuKTogU291cmNlTG9jYXRpb258bnVsbCB7XG4gIC8vIFNlYXJjaCBmb3IgY29tbWVudHMgdW50aWwgdGhlIFRDQidzIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGlzIGVuY291bnRlcmVkLlxuICB3aGlsZSAobm9kZSAhPT0gdW5kZWZpbmVkICYmICF0cy5pc0Z1bmN0aW9uRGVjbGFyYXRpb24obm9kZSkpIHtcbiAgICBpZiAoaGFzSWdub3JlRm9yRGlhZ25vc3RpY3NNYXJrZXIobm9kZSwgc291cmNlRmlsZSkgJiYgaXNEaWFnbm9zdGljc1JlcXVlc3QpIHtcbiAgICAgIC8vIFRoZXJlJ3MgYW4gaWdub3JlIG1hcmtlciBvbiB0aGlzIG5vZGUsIHNvIHRoZSBkaWFnbm9zdGljIHNob3VsZCBub3QgYmUgcmVwb3J0ZWQuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzcGFuID0gcmVhZFNwYW5Db21tZW50KG5vZGUsIHNvdXJjZUZpbGUpO1xuICAgIGlmIChzcGFuICE9PSBudWxsKSB7XG4gICAgICAvLyBPbmNlIHRoZSBwb3NpdGlvbmFsIGluZm9ybWF0aW9uIGhhcyBiZWVuIGV4dHJhY3RlZCwgc2VhcmNoIGZ1cnRoZXIgdXAgdGhlIFRDQiB0byBleHRyYWN0XG4gICAgICAvLyB0aGUgdW5pcXVlIGlkIHRoYXQgaXMgYXR0YWNoZWQgd2l0aCB0aGUgVENCJ3MgZnVuY3Rpb24gZGVjbGFyYXRpb24uXG4gICAgICBjb25zdCBpZCA9IGdldFRlbXBsYXRlSWQobm9kZSwgc291cmNlRmlsZSwgaXNEaWFnbm9zdGljc1JlcXVlc3QpO1xuICAgICAgaWYgKGlkID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtpZCwgc3Bhbn07XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucGFyZW50O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFRlbXBsYXRlSWQoXG4gICAgbm9kZTogdHMuTm9kZSwgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSwgaXNEaWFnbm9zdGljUmVxdWVzdDogYm9vbGVhbik6IFRlbXBsYXRlSWR8bnVsbCB7XG4gIC8vIFdhbGsgdXAgdG8gdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIG9mIHRoZSBUQ0IsIHRoZSBmaWxlIGluZm9ybWF0aW9uIGlzIGF0dGFjaGVkIHRoZXJlLlxuICB3aGlsZSAoIXRzLmlzRnVuY3Rpb25EZWNsYXJhdGlvbihub2RlKSkge1xuICAgIGlmIChoYXNJZ25vcmVGb3JEaWFnbm9zdGljc01hcmtlcihub2RlLCBzb3VyY2VGaWxlKSAmJiBpc0RpYWdub3N0aWNSZXF1ZXN0KSB7XG4gICAgICAvLyBUaGVyZSdzIGFuIGlnbm9yZSBtYXJrZXIgb24gdGhpcyBub2RlLCBzbyB0aGUgZGlhZ25vc3RpYyBzaG91bGQgbm90IGJlIHJlcG9ydGVkLlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIG5vZGUgPSBub2RlLnBhcmVudDtcblxuICAgIC8vIEJhaWwgb25jZSB3ZSBoYXZlIHJlYWNoZWQgdGhlIHJvb3QuXG4gICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3RhcnQgPSBub2RlLmdldEZ1bGxTdGFydCgpO1xuICByZXR1cm4gdHMuZm9yRWFjaExlYWRpbmdDb21tZW50UmFuZ2Uoc291cmNlRmlsZS50ZXh0LCBzdGFydCwgKHBvcywgZW5kLCBraW5kKSA9PiB7XG4gICAgaWYgKGtpbmQgIT09IHRzLlN5bnRheEtpbmQuTXVsdGlMaW5lQ29tbWVudFRyaXZpYSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGNvbW1lbnRUZXh0ID0gc291cmNlRmlsZS50ZXh0LnN1YnN0cmluZyhwb3MgKyAyLCBlbmQgLSAyKTtcbiAgICByZXR1cm4gY29tbWVudFRleHQ7XG4gIH0pIGFzIFRlbXBsYXRlSWQgfHwgbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSWZHZW5lcmljVHlwZUJvdW5kc0FyZUNvbnRleHRGcmVlKFxuICAgIG5vZGU6IENsYXNzRGVjbGFyYXRpb248dHMuQ2xhc3NEZWNsYXJhdGlvbj4sIHJlZmxlY3RvcjogUmVmbGVjdGlvbkhvc3QpOiBib29sZWFuIHtcbiAgLy8gR2VuZXJpYyB0eXBlIHBhcmFtZXRlcnMgYXJlIGNvbnNpZGVyZWQgY29udGV4dCBmcmVlIGlmIHRoZXkgY2FuIGJlIGVtaXR0ZWQgaW50byBhbnkgY29udGV4dC5cbiAgcmV0dXJuIG5ldyBUeXBlUGFyYW1ldGVyRW1pdHRlcihub2RlLnR5cGVQYXJhbWV0ZXJzLCByZWZsZWN0b3IpLmNhbkVtaXQoKTtcbn1cbiJdfQ==
@@ -14,6 +14,31 @@ import { TemplateId, TypeCheckableDirectiveMeta, TypeCheckBlockMetadata } from '
14
14
  import { DomSchemaChecker } from './dom';
15
15
  import { Environment } from './environment';
16
16
  import { OutOfBandDiagnosticRecorder } from './oob';
17
+ /**
18
+ * Controls how generics for the component context class will be handled during TCB generation.
19
+ */
20
+ export declare enum TcbGenericContextBehavior {
21
+ /**
22
+ * References to generic parameter bounds will be emitted via the `TypeParameterEmitter`.
23
+ *
24
+ * The caller must verify that all parameter bounds are emittable in order to use this mode.
25
+ */
26
+ UseEmitter = 0,
27
+ /**
28
+ * Generic parameter declarations will be copied directly from the `ts.ClassDeclaration` of the
29
+ * component class.
30
+ *
31
+ * The caller must only use the generated TCB code in a context where such copies will still be
32
+ * valid, such as an inline type check block.
33
+ */
34
+ CopyClassNodes = 1,
35
+ /**
36
+ * Any generic parameters for the component context class will be set to `any`.
37
+ *
38
+ * Produces a less useful type, but is always safe to use.
39
+ */
40
+ FallbackToAny = 2
41
+ }
17
42
  /**
18
43
  * Given a `ts.ClassDeclaration` for a component, and metadata regarding that component, compose a
19
44
  * "type check block" function.
@@ -35,8 +60,10 @@ import { OutOfBandDiagnosticRecorder } from './oob';
35
60
  * and bindings.
36
61
  * @param oobRecorder used to record errors regarding template elements which could not be correctly
37
62
  * translated into types during TCB generation.
63
+ * @param genericContextBehavior controls how generic parameters (especially parameters with generic
64
+ * bounds) will be referenced from the generated TCB code.
38
65
  */
39
- export declare function generateTypeCheckBlock(env: Environment, ref: Reference<ClassDeclaration<ts.ClassDeclaration>>, name: ts.Identifier, meta: TypeCheckBlockMetadata, domSchemaChecker: DomSchemaChecker, oobRecorder: OutOfBandDiagnosticRecorder): ts.FunctionDeclaration;
66
+ export declare function generateTypeCheckBlock(env: Environment, ref: Reference<ClassDeclaration<ts.ClassDeclaration>>, name: ts.Identifier, meta: TypeCheckBlockMetadata, domSchemaChecker: DomSchemaChecker, oobRecorder: OutOfBandDiagnosticRecorder, genericContextBehavior: TcbGenericContextBehavior): ts.FunctionDeclaration;
40
67
  /**
41
68
  * A code generation operation that's involved in the construction of a Type Check Block.
42
69
  *