@angular/compiler-cli 12.2.3 → 12.2.7
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/linker/src/file_linker/partial_linkers/partial_linker_selector.js +2 -2
- package/ngcc/src/host/delegating_host.d.ts +1 -1
- package/ngcc/src/host/delegating_host.js +3 -3
- package/ngcc/src/packages/build_marker.d.ts +1 -1
- package/ngcc/src/packages/build_marker.js +1 -1
- package/package.json +2 -2
- package/src/ngtsc/core/src/compiler.js +7 -3
- package/src/ngtsc/diagnostics/src/error_code.d.ts +9 -0
- package/src/ngtsc/diagnostics/src/error_code.js +10 -1
- package/src/ngtsc/reflection/src/host.d.ts +6 -6
- package/src/ngtsc/reflection/src/host.js +1 -1
- package/src/ngtsc/reflection/src/typescript.d.ts +3 -3
- package/src/ngtsc/reflection/src/typescript.js +15 -16
- package/src/ngtsc/typecheck/extended/api/api.d.ts +18 -4
- package/src/ngtsc/typecheck/extended/api/api.js +106 -2
- package/src/ngtsc/typecheck/extended/checks/invalid_banana_in_box/index.d.ts +22 -0
- package/src/ngtsc/typecheck/extended/checks/invalid_banana_in_box/index.js +52 -0
- package/src/ngtsc/typecheck/extended/checks/nullish_coalescing_not_nullable/index.d.ts +23 -0
- package/src/ngtsc/typecheck/extended/checks/nullish_coalescing_not_nullable/index.js +64 -0
- package/src/ngtsc/typecheck/extended/src/extended_template_checker.d.ts +1 -2
- package/src/ngtsc/typecheck/extended/src/extended_template_checker.js +4 -74
- package/src/ngtsc/typecheck/src/type_parameter_emitter.d.ts +1 -1
- package/src/ngtsc/typecheck/src/type_parameter_emitter.js +11 -7
- package/src/transformers/downlevel_decorators_transform.js +85 -91
- package/src/version.js +1 -1
- package/src/ngtsc/typecheck/extended/src/template_checks/invalid_banana_in_box/index.d.ts +0 -21
- package/src/ngtsc/typecheck/extended/src/template_checks/invalid_banana_in_box/index.js +0 -83
|
@@ -0,0 +1,23 @@
|
|
|
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
|
+
/// <amd-module name="@angular/compiler-cli/src/ngtsc/typecheck/extended/checks/nullish_coalescing_not_nullable" />
|
|
9
|
+
import { AST, TmplAstNode } from '@angular/compiler';
|
|
10
|
+
import * as ts from 'typescript';
|
|
11
|
+
import { ErrorCode } from '../../../../diagnostics';
|
|
12
|
+
import { NgTemplateDiagnostic } from '../../../api';
|
|
13
|
+
import { TemplateCheckWithVisitor, TemplateContext } from '../../api';
|
|
14
|
+
/**
|
|
15
|
+
* Ensures the left side of a nullish coalescing operation is nullable.
|
|
16
|
+
* Returns diagnostics for the cases where the operator is useless.
|
|
17
|
+
* This check should only be use if `strictNullChecks` is enabled,
|
|
18
|
+
* otherwise it would produce inaccurate results.
|
|
19
|
+
*/
|
|
20
|
+
export declare class NullishCoalescingNotNullableCheck extends TemplateCheckWithVisitor<ErrorCode.NULLISH_COALESCING_NOT_NULLABLE> {
|
|
21
|
+
code: ErrorCode.NULLISH_COALESCING_NOT_NULLABLE;
|
|
22
|
+
visitNode(ctx: TemplateContext, component: ts.ClassDeclaration, node: TmplAstNode | AST): NgTemplateDiagnostic<ErrorCode.NULLISH_COALESCING_NOT_NULLABLE>[];
|
|
23
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
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
|
+
(function (factory) {
|
|
9
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
10
|
+
var v = factory(require, exports);
|
|
11
|
+
if (v !== undefined) module.exports = v;
|
|
12
|
+
}
|
|
13
|
+
else if (typeof define === "function" && define.amd) {
|
|
14
|
+
define("@angular/compiler-cli/src/ngtsc/typecheck/extended/checks/nullish_coalescing_not_nullable", ["require", "exports", "tslib", "@angular/compiler", "typescript", "@angular/compiler-cli/src/ngtsc/diagnostics", "@angular/compiler-cli/src/ngtsc/typecheck/api", "@angular/compiler-cli/src/ngtsc/typecheck/extended/api"], factory);
|
|
15
|
+
}
|
|
16
|
+
})(function (require, exports) {
|
|
17
|
+
"use strict";
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.NullishCoalescingNotNullableCheck = void 0;
|
|
20
|
+
var tslib_1 = require("tslib");
|
|
21
|
+
var compiler_1 = require("@angular/compiler");
|
|
22
|
+
var ts = require("typescript");
|
|
23
|
+
var diagnostics_1 = require("@angular/compiler-cli/src/ngtsc/diagnostics");
|
|
24
|
+
var api_1 = require("@angular/compiler-cli/src/ngtsc/typecheck/api");
|
|
25
|
+
var api_2 = require("@angular/compiler-cli/src/ngtsc/typecheck/extended/api");
|
|
26
|
+
/**
|
|
27
|
+
* Ensures the left side of a nullish coalescing operation is nullable.
|
|
28
|
+
* Returns diagnostics for the cases where the operator is useless.
|
|
29
|
+
* This check should only be use if `strictNullChecks` is enabled,
|
|
30
|
+
* otherwise it would produce inaccurate results.
|
|
31
|
+
*/
|
|
32
|
+
var NullishCoalescingNotNullableCheck = /** @class */ (function (_super) {
|
|
33
|
+
tslib_1.__extends(NullishCoalescingNotNullableCheck, _super);
|
|
34
|
+
function NullishCoalescingNotNullableCheck() {
|
|
35
|
+
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
36
|
+
_this.code = diagnostics_1.ErrorCode.NULLISH_COALESCING_NOT_NULLABLE;
|
|
37
|
+
return _this;
|
|
38
|
+
}
|
|
39
|
+
NullishCoalescingNotNullableCheck.prototype.visitNode = function (ctx, component, node) {
|
|
40
|
+
if (!(node instanceof compiler_1.Binary) || node.operation !== '??')
|
|
41
|
+
return [];
|
|
42
|
+
var symbolLeft = ctx.templateTypeChecker.getSymbolOfNode(node.left, component);
|
|
43
|
+
if (symbolLeft === null || symbolLeft.kind !== api_1.SymbolKind.Expression) {
|
|
44
|
+
return [];
|
|
45
|
+
}
|
|
46
|
+
var typeLeft = symbolLeft.tsType;
|
|
47
|
+
// If the left operand's type is different from its non-nullable self, then it must
|
|
48
|
+
// contain a null or undefined so this nullish coalescing operator is useful. No diagnostic to
|
|
49
|
+
// report.
|
|
50
|
+
if (typeLeft.getNonNullableType() !== typeLeft)
|
|
51
|
+
return [];
|
|
52
|
+
var symbol = ctx.templateTypeChecker.getSymbolOfNode(node, component);
|
|
53
|
+
if (symbol.kind !== api_1.SymbolKind.Expression) {
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
var span = ctx.templateTypeChecker.getTemplateMappingAtShimLocation(symbol.shimLocation).span;
|
|
57
|
+
var diagnostic = ctx.templateTypeChecker.makeTemplateDiagnostic(component, span, ts.DiagnosticCategory.Warning, diagnostics_1.ErrorCode.NULLISH_COALESCING_NOT_NULLABLE, "The left side of this nullish coalescing operation does not include 'null' or 'undefined' in its type, therefore the '??' operator can be safely removed.");
|
|
58
|
+
return [diagnostic];
|
|
59
|
+
};
|
|
60
|
+
return NullishCoalescingNotNullableCheck;
|
|
61
|
+
}(api_2.TemplateCheckWithVisitor));
|
|
62
|
+
exports.NullishCoalescingNotNullableCheck = NullishCoalescingNotNullableCheck;
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3R5cGVjaGVjay9leHRlbmRlZC9jaGVja3MvbnVsbGlzaF9jb2FsZXNjaW5nX25vdF9udWxsYWJsZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7O0lBRUgsOENBQTJEO0lBQzNELCtCQUFpQztJQUVqQywyRUFBa0Q7SUFDbEQscUVBQThEO0lBQzlELDhFQUFvRTtJQUVwRTs7Ozs7T0FLRztJQUNIO1FBQ0ksNkRBQW1FO1FBRHZFO1lBQUEscUVBNkJDO1lBM0JVLFVBQUksR0FBRyx1QkFBUyxDQUFDLCtCQUF3QyxDQUFDOztRQTJCckUsQ0FBQztRQXpCVSxxREFBUyxHQUFsQixVQUFtQixHQUFvQixFQUFFLFNBQThCLEVBQUUsSUFBcUI7WUFFNUYsSUFBSSxDQUFDLENBQUMsSUFBSSxZQUFZLGlCQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUk7Z0JBQUUsT0FBTyxFQUFFLENBQUM7WUFFcEUsSUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ2pGLElBQUksVUFBVSxLQUFLLElBQUksSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLGdCQUFVLENBQUMsVUFBVSxFQUFFO2dCQUNwRSxPQUFPLEVBQUUsQ0FBQzthQUNYO1lBQ0QsSUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUNuQyxtRkFBbUY7WUFDbkYsOEZBQThGO1lBQzlGLFVBQVU7WUFDVixJQUFJLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLFFBQVE7Z0JBQUUsT0FBTyxFQUFFLENBQUM7WUFFMUQsSUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFFLENBQUM7WUFDekUsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGdCQUFVLENBQUMsVUFBVSxFQUFFO2dCQUN6QyxPQUFPLEVBQUUsQ0FBQzthQUNYO1lBQ0QsSUFBTSxJQUFJLEdBQ04sR0FBRyxDQUFDLG1CQUFtQixDQUFDLGdDQUFnQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUUsQ0FBQyxJQUFJLENBQUM7WUFDeEYsSUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQixDQUM3RCxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsdUJBQVMsQ0FBQywrQkFBK0IsRUFDekYsMkpBQTJKLENBQUMsQ0FBQztZQUNqSyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEIsQ0FBQztRQUNILHdDQUFDO0lBQUQsQ0FBQyxBQTdCRCxDQUNJLDhCQUF3QixHQTRCM0I7SUE3QlksOEVBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7QVNULCBCaW5hcnksIFRtcGxBc3ROb2RlfSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtFcnJvckNvZGV9IGZyb20gJy4uLy4uLy4uLy4uL2RpYWdub3N0aWNzJztcbmltcG9ydCB7TmdUZW1wbGF0ZURpYWdub3N0aWMsIFN5bWJvbEtpbmR9IGZyb20gJy4uLy4uLy4uL2FwaSc7XG5pbXBvcnQge1RlbXBsYXRlQ2hlY2tXaXRoVmlzaXRvciwgVGVtcGxhdGVDb250ZXh0fSBmcm9tICcuLi8uLi9hcGknO1xuXG4vKipcbiAqIEVuc3VyZXMgdGhlIGxlZnQgc2lkZSBvZiBhIG51bGxpc2ggY29hbGVzY2luZyBvcGVyYXRpb24gaXMgbnVsbGFibGUuXG4gKiBSZXR1cm5zIGRpYWdub3N0aWNzIGZvciB0aGUgY2FzZXMgd2hlcmUgdGhlIG9wZXJhdG9yIGlzIHVzZWxlc3MuXG4gKiBUaGlzIGNoZWNrIHNob3VsZCBvbmx5IGJlIHVzZSBpZiBgc3RyaWN0TnVsbENoZWNrc2AgaXMgZW5hYmxlZCxcbiAqIG90aGVyd2lzZSBpdCB3b3VsZCBwcm9kdWNlIGluYWNjdXJhdGUgcmVzdWx0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIE51bGxpc2hDb2FsZXNjaW5nTm90TnVsbGFibGVDaGVjayBleHRlbmRzXG4gICAgVGVtcGxhdGVDaGVja1dpdGhWaXNpdG9yPEVycm9yQ29kZS5OVUxMSVNIX0NPQUxFU0NJTkdfTk9UX05VTExBQkxFPiB7XG4gIG92ZXJyaWRlIGNvZGUgPSBFcnJvckNvZGUuTlVMTElTSF9DT0FMRVNDSU5HX05PVF9OVUxMQUJMRSBhcyBjb25zdDtcblxuICBvdmVycmlkZSB2aXNpdE5vZGUoY3R4OiBUZW1wbGF0ZUNvbnRleHQsIGNvbXBvbmVudDogdHMuQ2xhc3NEZWNsYXJhdGlvbiwgbm9kZTogVG1wbEFzdE5vZGV8QVNUKTpcbiAgICAgIE5nVGVtcGxhdGVEaWFnbm9zdGljPEVycm9yQ29kZS5OVUxMSVNIX0NPQUxFU0NJTkdfTk9UX05VTExBQkxFPltdIHtcbiAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgQmluYXJ5KSB8fCBub2RlLm9wZXJhdGlvbiAhPT0gJz8/JykgcmV0dXJuIFtdO1xuXG4gICAgY29uc3Qgc3ltYm9sTGVmdCA9IGN0eC50ZW1wbGF0ZVR5cGVDaGVja2VyLmdldFN5bWJvbE9mTm9kZShub2RlLmxlZnQsIGNvbXBvbmVudCk7XG4gICAgaWYgKHN5bWJvbExlZnQgPT09IG51bGwgfHwgc3ltYm9sTGVmdC5raW5kICE9PSBTeW1ib2xLaW5kLkV4cHJlc3Npb24pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgdHlwZUxlZnQgPSBzeW1ib2xMZWZ0LnRzVHlwZTtcbiAgICAvLyBJZiB0aGUgbGVmdCBvcGVyYW5kJ3MgdHlwZSBpcyBkaWZmZXJlbnQgZnJvbSBpdHMgbm9uLW51bGxhYmxlIHNlbGYsIHRoZW4gaXQgbXVzdFxuICAgIC8vIGNvbnRhaW4gYSBudWxsIG9yIHVuZGVmaW5lZCBzbyB0aGlzIG51bGxpc2ggY29hbGVzY2luZyBvcGVyYXRvciBpcyB1c2VmdWwuIE5vIGRpYWdub3N0aWMgdG9cbiAgICAvLyByZXBvcnQuXG4gICAgaWYgKHR5cGVMZWZ0LmdldE5vbk51bGxhYmxlVHlwZSgpICE9PSB0eXBlTGVmdCkgcmV0dXJuIFtdO1xuXG4gICAgY29uc3Qgc3ltYm9sID0gY3R4LnRlbXBsYXRlVHlwZUNoZWNrZXIuZ2V0U3ltYm9sT2ZOb2RlKG5vZGUsIGNvbXBvbmVudCkhO1xuICAgIGlmIChzeW1ib2wua2luZCAhPT0gU3ltYm9sS2luZC5FeHByZXNzaW9uKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IHNwYW4gPVxuICAgICAgICBjdHgudGVtcGxhdGVUeXBlQ2hlY2tlci5nZXRUZW1wbGF0ZU1hcHBpbmdBdFNoaW1Mb2NhdGlvbihzeW1ib2wuc2hpbUxvY2F0aW9uKSEuc3BhbjtcbiAgICBjb25zdCBkaWFnbm9zdGljID0gY3R4LnRlbXBsYXRlVHlwZUNoZWNrZXIubWFrZVRlbXBsYXRlRGlhZ25vc3RpYyhcbiAgICAgICAgY29tcG9uZW50LCBzcGFuLCB0cy5EaWFnbm9zdGljQ2F0ZWdvcnkuV2FybmluZywgRXJyb3JDb2RlLk5VTExJU0hfQ09BTEVTQ0lOR19OT1RfTlVMTEFCTEUsXG4gICAgICAgIGBUaGUgbGVmdCBzaWRlIG9mIHRoaXMgbnVsbGlzaCBjb2FsZXNjaW5nIG9wZXJhdGlvbiBkb2VzIG5vdCBpbmNsdWRlICdudWxsJyBvciAndW5kZWZpbmVkJyBpbiBpdHMgdHlwZSwgdGhlcmVmb3JlIHRoZSAnPz8nIG9wZXJhdG9yIGNhbiBiZSBzYWZlbHkgcmVtb3ZlZC5gKTtcbiAgICByZXR1cm4gW2RpYWdub3N0aWNdO1xuICB9XG59XG4iXX0=
|
|
@@ -11,9 +11,8 @@ import { ErrorCode } from '../../../diagnostics';
|
|
|
11
11
|
import { TemplateDiagnostic, TemplateTypeChecker } from '../../api';
|
|
12
12
|
import { ExtendedTemplateChecker, TemplateCheck } from '../api';
|
|
13
13
|
export declare class ExtendedTemplateCheckerImpl implements ExtendedTemplateChecker {
|
|
14
|
-
private readonly templateTypeChecker;
|
|
15
|
-
private readonly typeChecker;
|
|
16
14
|
private readonly templateChecks;
|
|
15
|
+
private ctx;
|
|
17
16
|
constructor(templateTypeChecker: TemplateTypeChecker, typeChecker: ts.TypeChecker, templateChecks: TemplateCheck<ErrorCode>[]);
|
|
18
17
|
getDiagnosticsForComponent(component: ts.ClassDeclaration): TemplateDiagnostic[];
|
|
19
18
|
}
|
|
@@ -20,13 +20,12 @@
|
|
|
20
20
|
var tslib_1 = require("tslib");
|
|
21
21
|
var ExtendedTemplateCheckerImpl = /** @class */ (function () {
|
|
22
22
|
function ExtendedTemplateCheckerImpl(templateTypeChecker, typeChecker, templateChecks) {
|
|
23
|
-
this.templateTypeChecker = templateTypeChecker;
|
|
24
|
-
this.typeChecker = typeChecker;
|
|
25
23
|
this.templateChecks = templateChecks;
|
|
24
|
+
this.ctx = { templateTypeChecker: templateTypeChecker, typeChecker: typeChecker };
|
|
26
25
|
}
|
|
27
26
|
ExtendedTemplateCheckerImpl.prototype.getDiagnosticsForComponent = function (component) {
|
|
28
27
|
var e_1, _a;
|
|
29
|
-
var template = this.templateTypeChecker.getTemplate(component);
|
|
28
|
+
var template = this.ctx.templateTypeChecker.getTemplate(component);
|
|
30
29
|
// Skip checks if component has no template. This can happen if the user writes a
|
|
31
30
|
// `@Component()` but doesn't add the template, could happen in the language service
|
|
32
31
|
// when users are in the middle of typing code.
|
|
@@ -34,15 +33,10 @@
|
|
|
34
33
|
return [];
|
|
35
34
|
}
|
|
36
35
|
var diagnostics = [];
|
|
37
|
-
var ctx = {
|
|
38
|
-
templateTypeChecker: this.templateTypeChecker,
|
|
39
|
-
typeChecker: this.typeChecker,
|
|
40
|
-
component: component
|
|
41
|
-
};
|
|
42
36
|
try {
|
|
43
37
|
for (var _b = tslib_1.__values(this.templateChecks), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
44
38
|
var check = _c.value;
|
|
45
|
-
diagnostics.push.apply(diagnostics, tslib_1.__spreadArray([], tslib_1.__read(
|
|
39
|
+
diagnostics.push.apply(diagnostics, tslib_1.__spreadArray([], tslib_1.__read(check.run(this.ctx, component, template))));
|
|
46
40
|
}
|
|
47
41
|
}
|
|
48
42
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
@@ -57,69 +51,5 @@
|
|
|
57
51
|
return ExtendedTemplateCheckerImpl;
|
|
58
52
|
}());
|
|
59
53
|
exports.ExtendedTemplateCheckerImpl = ExtendedTemplateCheckerImpl;
|
|
60
|
-
// Filter out duplicated diagnostics, this is possible due to the way the compiler
|
|
61
|
-
// handles desugaring and produces `AST`s. Ex.
|
|
62
|
-
//
|
|
63
|
-
// ```
|
|
64
|
-
// <div *ngIf="true" (foo)="bar">test</div>
|
|
65
|
-
// ```
|
|
66
|
-
//
|
|
67
|
-
// Would result in the following AST:
|
|
68
|
-
//
|
|
69
|
-
// ```
|
|
70
|
-
// Template {
|
|
71
|
-
// outputs: [
|
|
72
|
-
// BoundEvent {
|
|
73
|
-
// name: 'foo',
|
|
74
|
-
// /.../
|
|
75
|
-
// }
|
|
76
|
-
// ],
|
|
77
|
-
// children: [
|
|
78
|
-
// Element {
|
|
79
|
-
// outputs: [
|
|
80
|
-
// BoundEvent {
|
|
81
|
-
// name: 'foo',
|
|
82
|
-
// /.../
|
|
83
|
-
// }
|
|
84
|
-
// ]
|
|
85
|
-
// }
|
|
86
|
-
// ],
|
|
87
|
-
// /.../
|
|
88
|
-
// }
|
|
89
|
-
// ```
|
|
90
|
-
//
|
|
91
|
-
// In this case a duplicated diagnostic could be generated for the output `foo`.
|
|
92
|
-
// TODO(danieltrevino): handle duplicated diagnostics when they are being generated
|
|
93
|
-
// to avoid extra work (could be directly in the visitor).
|
|
94
|
-
// https://github.com/angular/angular/pull/42984#discussion_r684823926
|
|
95
|
-
function deduplicateDiagnostics(diagnostics) {
|
|
96
|
-
var e_2, _a;
|
|
97
|
-
var result = [];
|
|
98
|
-
var _loop_1 = function (newDiag) {
|
|
99
|
-
var isDuplicateDiag = result.some(function (existingDiag) { return areDiagnosticsEqual(newDiag, existingDiag); });
|
|
100
|
-
if (!isDuplicateDiag) {
|
|
101
|
-
result.push(newDiag);
|
|
102
|
-
}
|
|
103
|
-
};
|
|
104
|
-
try {
|
|
105
|
-
for (var diagnostics_1 = tslib_1.__values(diagnostics), diagnostics_1_1 = diagnostics_1.next(); !diagnostics_1_1.done; diagnostics_1_1 = diagnostics_1.next()) {
|
|
106
|
-
var newDiag = diagnostics_1_1.value;
|
|
107
|
-
_loop_1(newDiag);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
111
|
-
finally {
|
|
112
|
-
try {
|
|
113
|
-
if (diagnostics_1_1 && !diagnostics_1_1.done && (_a = diagnostics_1.return)) _a.call(diagnostics_1);
|
|
114
|
-
}
|
|
115
|
-
finally { if (e_2) throw e_2.error; }
|
|
116
|
-
}
|
|
117
|
-
return result;
|
|
118
|
-
}
|
|
119
|
-
function areDiagnosticsEqual(first, second) {
|
|
120
|
-
var _a, _b;
|
|
121
|
-
return ((_a = first.file) === null || _a === void 0 ? void 0 : _a.fileName) === ((_b = second.file) === null || _b === void 0 ? void 0 : _b.fileName) && first.start === second.start &&
|
|
122
|
-
first.length === second.length && first.code === second.code;
|
|
123
|
-
}
|
|
124
54
|
});
|
|
125
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5kZWRfdGVtcGxhdGVfY2hlY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvdHlwZWNoZWNrL2V4dGVuZGVkL3NyYy9leHRlbmRlZF90ZW1wbGF0ZV9jaGVja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7SUFRSDtRQUdFLHFDQUNJLG1CQUF3QyxFQUFFLFdBQTJCLEVBQ3BELGNBQTBDO1lBQTFDLG1CQUFjLEdBQWQsY0FBYyxDQUE0QjtZQUM3RCxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUMsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFDM0QsQ0FBQztRQUN0QixDQUFDO1FBRUQsZ0VBQTBCLEdBQTFCLFVBQTJCLFNBQThCOztZQUN2RCxJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNyRSxpRkFBaUY7WUFDakYsb0ZBQW9GO1lBQ3BGLCtDQUErQztZQUMvQyxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUU7Z0JBQ3JCLE9BQU8sRUFBRSxDQUFDO2FBQ1g7WUFDRCxJQUFNLFdBQVcsR0FBeUIsRUFBRSxDQUFDOztnQkFFN0MsS0FBb0IsSUFBQSxLQUFBLGlCQUFBLElBQUksQ0FBQyxjQUFjLENBQUEsZ0JBQUEsNEJBQUU7b0JBQXBDLElBQU0sS0FBSyxXQUFBO29CQUNkLFdBQVcsQ0FBQyxJQUFJLE9BQWhCLFdBQVcsMkNBQVMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsSUFBRTtpQkFDL0Q7Ozs7Ozs7OztZQUVELE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUM7UUFDSCxrQ0FBQztJQUFELENBQUMsQUExQkQsSUEwQkM7SUExQlksa0VBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge0Vycm9yQ29kZX0gZnJvbSAnLi4vLi4vLi4vZGlhZ25vc3RpY3MnO1xuaW1wb3J0IHtUZW1wbGF0ZURpYWdub3N0aWMsIFRlbXBsYXRlVHlwZUNoZWNrZXJ9IGZyb20gJy4uLy4uL2FwaSc7XG5pbXBvcnQge0V4dGVuZGVkVGVtcGxhdGVDaGVja2VyLCBUZW1wbGF0ZUNoZWNrLCBUZW1wbGF0ZUNvbnRleHR9IGZyb20gJy4uL2FwaSc7XG5cbmV4cG9ydCBjbGFzcyBFeHRlbmRlZFRlbXBsYXRlQ2hlY2tlckltcGwgaW1wbGVtZW50cyBFeHRlbmRlZFRlbXBsYXRlQ2hlY2tlciB7XG4gIHByaXZhdGUgY3R4OiBUZW1wbGF0ZUNvbnRleHQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICB0ZW1wbGF0ZVR5cGVDaGVja2VyOiBUZW1wbGF0ZVR5cGVDaGVja2VyLCB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IHRlbXBsYXRlQ2hlY2tzOiBUZW1wbGF0ZUNoZWNrPEVycm9yQ29kZT5bXSkge1xuICAgIHRoaXMuY3R4ID0ge3RlbXBsYXRlVHlwZUNoZWNrZXI6IHRlbXBsYXRlVHlwZUNoZWNrZXIsIHR5cGVDaGVja2VyOiB0eXBlQ2hlY2tlcn0gYXNcbiAgICAgICAgVGVtcGxhdGVDb250ZXh0O1xuICB9XG5cbiAgZ2V0RGlhZ25vc3RpY3NGb3JDb21wb25lbnQoY29tcG9uZW50OiB0cy5DbGFzc0RlY2xhcmF0aW9uKTogVGVtcGxhdGVEaWFnbm9zdGljW10ge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy5jdHgudGVtcGxhdGVUeXBlQ2hlY2tlci5nZXRUZW1wbGF0ZShjb21wb25lbnQpO1xuICAgIC8vIFNraXAgY2hlY2tzIGlmIGNvbXBvbmVudCBoYXMgbm8gdGVtcGxhdGUuIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgdXNlciB3cml0ZXMgYVxuICAgIC8vIGBAQ29tcG9uZW50KClgIGJ1dCBkb2Vzbid0IGFkZCB0aGUgdGVtcGxhdGUsIGNvdWxkIGhhcHBlbiBpbiB0aGUgbGFuZ3VhZ2Ugc2VydmljZVxuICAgIC8vIHdoZW4gdXNlcnMgYXJlIGluIHRoZSBtaWRkbGUgb2YgdHlwaW5nIGNvZGUuXG4gICAgaWYgKHRlbXBsYXRlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGRpYWdub3N0aWNzOiBUZW1wbGF0ZURpYWdub3N0aWNbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBjaGVjayBvZiB0aGlzLnRlbXBsYXRlQ2hlY2tzKSB7XG4gICAgICBkaWFnbm9zdGljcy5wdXNoKC4uLmNoZWNrLnJ1bih0aGlzLmN0eCwgY29tcG9uZW50LCB0ZW1wbGF0ZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBkaWFnbm9zdGljcztcbiAgfVxufVxuIl19
|
|
@@ -28,6 +28,6 @@ export declare class TypeParameterEmitter {
|
|
|
28
28
|
*/
|
|
29
29
|
emit(emitReference: (ref: Reference) => ts.TypeNode): ts.TypeParameterDeclaration[] | undefined;
|
|
30
30
|
private resolveTypeReference;
|
|
31
|
-
private
|
|
31
|
+
private isTopLevelExport;
|
|
32
32
|
private isLocalTypeParameter;
|
|
33
33
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
if (v !== undefined) module.exports = v;
|
|
5
5
|
}
|
|
6
6
|
else if (typeof define === "function" && define.amd) {
|
|
7
|
-
define("@angular/compiler-cli/src/ngtsc/typecheck/src/type_parameter_emitter", ["require", "exports", "typescript", "@angular/compiler-cli/src/ngtsc/imports", "@angular/compiler-cli/src/ngtsc/
|
|
7
|
+
define("@angular/compiler-cli/src/ngtsc/typecheck/src/type_parameter_emitter", ["require", "exports", "typescript", "@angular/compiler-cli/src/ngtsc/imports", "@angular/compiler-cli/src/ngtsc/typecheck/src/type_emitter"], factory);
|
|
8
8
|
}
|
|
9
9
|
})(function (require, exports) {
|
|
10
10
|
"use strict";
|
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
*/
|
|
20
20
|
var ts = require("typescript");
|
|
21
21
|
var imports_1 = require("@angular/compiler-cli/src/ngtsc/imports");
|
|
22
|
-
var reflection_1 = require("@angular/compiler-cli/src/ngtsc/reflection");
|
|
23
22
|
var type_emitter_1 = require("@angular/compiler-cli/src/ngtsc/typecheck/src/type_emitter");
|
|
24
23
|
/**
|
|
25
24
|
* See `TypeEmitter` for more information on the emitting process.
|
|
@@ -89,15 +88,20 @@
|
|
|
89
88
|
resolutionContext: type.getSourceFile().fileName,
|
|
90
89
|
};
|
|
91
90
|
}
|
|
92
|
-
//
|
|
91
|
+
// The declaration needs to be exported as a top-level export to be able to emit an import
|
|
93
92
|
// statement for it. If the declaration is not exported, null is returned to prevent emit.
|
|
94
|
-
if (
|
|
93
|
+
if (!this.isTopLevelExport(declaration.node)) {
|
|
95
94
|
return null;
|
|
96
95
|
}
|
|
97
96
|
return new imports_1.Reference(declaration.node, owningModule);
|
|
98
97
|
};
|
|
99
|
-
TypeParameterEmitter.prototype.
|
|
100
|
-
|
|
98
|
+
TypeParameterEmitter.prototype.isTopLevelExport = function (decl) {
|
|
99
|
+
if (decl.parent === undefined || !ts.isSourceFile(decl.parent)) {
|
|
100
|
+
// The declaration has to exist at the top-level, as the reference emitters are not capable of
|
|
101
|
+
// generating imports to classes declared in a namespace.
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
return this.reflector.isStaticallyExported(decl);
|
|
101
105
|
};
|
|
102
106
|
TypeParameterEmitter.prototype.isLocalTypeParameter = function (decl) {
|
|
103
107
|
// Checking for local type parameters only occurs during resolution of type parameters, so it is
|
|
@@ -108,4 +112,4 @@
|
|
|
108
112
|
}());
|
|
109
113
|
exports.TypeParameterEmitter = TypeParameterEmitter;
|
|
110
114
|
});
|
|
111
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZV9wYXJhbWV0ZXJfZW1pdHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvdHlwZWNoZWNrL3NyYy90eXBlX3BhcmFtZXRlcl9lbWl0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQUFBOzs7Ozs7T0FNRztJQUNILCtCQUFpQztJQUVqQyxtRUFBc0Q7SUFHdEQsMkZBQStFO0lBRy9FOztPQUVHO0lBQ0g7UUFDRSw4QkFDWSxjQUFtRSxFQUNuRSxTQUF5QjtZQUR6QixtQkFBYyxHQUFkLGNBQWMsQ0FBcUQ7WUFDbkUsY0FBUyxHQUFULFNBQVMsQ0FBZ0I7UUFBRyxDQUFDO1FBRXpDOzs7O1dBSUc7UUFDSCxzQ0FBTyxHQUFQO1lBQUEsaUJBUUM7WUFQQyxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssU0FBUyxFQUFFO2dCQUNyQyxPQUFPLElBQUksQ0FBQzthQUNiO1lBRUQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxVQUFBLFNBQVM7Z0JBQ3hDLE9BQU8sS0FBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkYsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRU8sMENBQVcsR0FBbkIsVUFBb0IsSUFBMkI7WUFBL0MsaUJBTUM7WUFMQyxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7Z0JBQ3RCLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFFRCxPQUFPLDBCQUFXLENBQUMsSUFBSSxFQUFFLFVBQUEsYUFBYSxJQUFJLE9BQUEsS0FBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxFQUF4QyxDQUF3QyxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUVEOztXQUVHO1FBQ0gsbUNB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aEQsZ0dBQWdHO1lBQ2hHLCtDQUErQztZQUMvQyxPQUFPLElBQUksQ0FBQyxjQUFlLENBQUMsSUFBSSxDQUFDLFVBQUEsS0FBSyxJQUFJLE9BQUEsS0FBSyxLQUFLLElBQUksRUFBZCxDQUFjLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQ0gsMkJBQUM7SUFBRCxDQUFDLEFBcEdELElBb0dDO0lBcEdZLG9EQUFvQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7T3duaW5nTW9kdWxlLCBSZWZlcmVuY2V9IGZyb20gJy4uLy4uL2ltcG9ydHMnO1xuaW1wb3J0IHtEZWNsYXJhdGlvbk5vZGUsIFJlZmxlY3Rpb25Ib3N0fSBmcm9tICcuLi8uLi9yZWZsZWN0aW9uJztcblxuaW1wb3J0IHtjYW5FbWl0VHlwZSwgUmVzb2x2ZWRUeXBlUmVmZXJlbmNlLCBUeXBlRW1pdHRlcn0gZnJvbSAnLi90eXBlX2VtaXR0ZXInO1xuXG5cbi8qKlxuICogU2VlIGBUeXBlRW1pdHRlcmAgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGVtaXR0aW5nIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBUeXBlUGFyYW1ldGVyRW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSB0eXBlUGFyYW1ldGVyczogdHMuTm9kZUFycmF5PHRzLlR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbj58dW5kZWZpbmVkLFxuICAgICAgcHJpdmF0ZSByZWZsZWN0b3I6IFJlZmxlY3Rpb25Ib3N0KSB7fVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHR5cGUgcGFyYW1ldGVycyBjYW4gYmUgZW1pdHRlZC4gSWYgdGhpcyByZXR1cm5zIHRydWUsIHRoZW4gYSBjYWxsIHRvXG4gICAqIGBlbWl0YCBpcyBrbm93biB0byBzdWNjZWVkLiBWaWNlIHZlcnNhLCBpZiBmYWxzZSBpcyByZXR1cm5lZCB0aGVuIGBlbWl0YCBzaG91bGQgbm90IGJlXG4gICAqIGNhbGxlZCwgYXMgaXQgd291bGQgZmFpbC5cbiAgICovXG4gIGNhbkVtaXQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMudHlwZVBhcmFtZXRlcnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudHlwZVBhcmFtZXRlcnMuZXZlcnkodHlwZVBhcmFtID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNhbkVtaXRUeXBlKHR5cGVQYXJhbS5jb25zdHJhaW50KSAmJiB0aGlzLmNhbkVtaXRUeXBlKHR5cGVQYXJhbS5kZWZhdWx0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuRW1pdFR5cGUodHlwZTogdHMuVHlwZU5vZGV8dW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbkVtaXRUeXBlKHR5cGUsIHR5cGVSZWZlcmVuY2UgPT4gdGhpcy5yZXNvbHZlVHlwZVJlZmVyZW5jZSh0eXBlUmVmZXJlbmNlKSk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgdGhlIHR5cGUgcGFyYW1ldGVycyB1c2luZyB0aGUgcHJvdmlkZWQgZW1pdHRlciBmdW5jdGlvbiBmb3IgYFJlZmVyZW5jZWBzLlxuICAgKi9cbiAgZW1pdChlbWl0UmVmZXJlbmNlOiAocmVmOiBSZWZlcmVuY2UpID0+IHRzLlR5cGVOb2RlKTogdHMuVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uW118dW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy50eXBlUGFyYW1ldGVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGVtaXR0ZXIgPSBuZXcgVHlwZUVtaXR0ZXIodHlwZSA9PiB0aGlzLnJlc29sdmVUeXBlUmVmZXJlbmNlKHR5cGUpLCBlbWl0UmVmZXJlbmNlKTtcblxuICAgIHJldHVybiB0aGlzLnR5cGVQYXJhbWV0ZXJzLm1hcCh0eXBlUGFyYW0gPT4ge1xuICAgICAgY29uc3QgY29uc3RyYWludCA9XG4gICAgICAgICAgdHlwZVBhcmFtLmNvbnN0cmFpbnQgIT09IHVuZGVmaW5lZCA/IGVtaXR0ZXIuZW1pdFR5cGUodHlwZVBhcmFtLmNvbnN0cmFpbnQpIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZGVmYXVsdFR5cGUgPVxuICAgICAgICAgIHR5cGVQYXJhbS5kZWZhdWx0ICE9PSB1bmRlZmluZWQgPyBlbWl0dGVyLmVtaXRUeXBlKHR5cGVQYXJhbS5kZWZhdWx0KSA6IHVuZGVmaW5lZDtcblxuICAgICAgcmV0dXJuIHRzLnVwZGF0ZVR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbihcbiAgICAgICAgICAvKiBub2RlICovIHR5cGVQYXJhbSxcbiAgICAgICAgICAvKiBuYW1lICovIHR5cGVQYXJhbS5uYW1lLFxuICAgICAgICAgIC8qIGNvbnN0cmFpbnQgKi8gY29uc3RyYWludCxcbiAgICAgICAgICAvKiBkZWZhdWx0VHlwZSAqLyBkZWZhdWx0VHlwZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVUeXBlUmVmZXJlbmNlKHR5cGU6IHRzLlR5cGVSZWZlcmVuY2VOb2RlKTogUmVzb2x2ZWRUeXBlUmVmZXJlbmNlIHtcbiAgICBjb25zdCB0YXJnZXQgPSB0cy5pc0lkZW50aWZpZXIodHlwZS50eXBlTmFtZSkgPyB0eXBlLnR5cGVOYW1lIDogdHlwZS50eXBlTmFtZS5yaWdodDtcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHRoaXMucmVmbGVjdG9yLmdldERlY2xhcmF0aW9uT2ZJZGVudGlmaWVyKHRhcmdldCk7XG5cbiAgICAvLyBJZiBubyBkZWNsYXJhdGlvbiBjb3VsZCBiZSByZXNvbHZlZCBvciBkb2VzIG5vdCBoYXZlIGEgYHRzLkRlY2xhcmF0aW9uYCwgdGhlIHR5cGUgY2Fubm90IGJlXG4gICAgLy8gcmVzb2x2ZWQuXG4gICAgaWYgKGRlY2xhcmF0aW9uID09PSBudWxsIHx8IGRlY2xhcmF0aW9uLm5vZGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBkZWNsYXJhdGlvbiBjb3JyZXNwb25kcyB3aXRoIGEgbG9jYWwgdHlwZSBwYXJhbWV0ZXIsIHRoZSB0eXBlIHJlZmVyZW5jZSBjYW4gYmUgdXNlZFxuICAgIC8vIGFzIGlzLlxuICAgIGlmICh0aGlzLmlzTG9jYWxUeXBlUGFyYW1ldGVyKGRlY2xhcmF0aW9uLm5vZGUpKSB7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG5cbiAgICBsZXQgb3duaW5nTW9kdWxlOiBPd25pbmdNb2R1bGV8bnVsbCA9IG51bGw7XG4gICAgaWYgKGRlY2xhcmF0aW9uLnZpYU1vZHVsZSAhPT0gbnVsbCkge1xuICAgICAgb3duaW5nTW9kdWxlID0ge1xuICAgICAgICBzcGVjaWZpZXI6IGRlY2xhcmF0aW9uLnZpYU1vZHVsZSxcbiAgICAgICAgcmVzb2x1dGlvbkNvbnRleHQ6IHR5cGUuZ2V0U291cmNlRmlsZSgpLmZpbGVOYW1lLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBUaGUgZGVjbGFyYXRpb24gbmVlZHMgdG8gYmUgZXhwb3J0ZWQgYXMgYSB0b3AtbGV2ZWwgZXhwb3J0IHRvIGJlIGFibGUgdG8gZW1pdCBhbiBpbXBvcnRcbiAgICAvLyBzdGF0ZW1lbnQgZm9yIGl0LiBJZiB0aGUgZGVjbGFyYXRpb24gaXMgbm90IGV4cG9ydGVkLCBudWxsIGlzIHJldHVybmVkIHRvIHByZXZlbnQgZW1pdC5cbiAgICBpZiAoIXRoaXMuaXNUb3BMZXZlbEV4cG9ydChkZWNsYXJhdGlvbi5ub2RlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSZWZlcmVuY2UoZGVjbGFyYXRpb24ubm9kZSwgb3duaW5nTW9kdWxlKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNUb3BMZXZlbEV4cG9ydChkZWNsOiBEZWNsYXJhdGlvbk5vZGUpOiBib29sZWFuIHtcbiAgICBpZiAoZGVjbC5wYXJlbnQgPT09IHVuZGVmaW5lZCB8fCAhdHMuaXNTb3VyY2VGaWxlKGRlY2wucGFyZW50KSkge1xuICAgICAgLy8gVGhlIGRlY2xhcmF0aW9uIGhhcyB0byBleGlzdCBhdCB0aGUgdG9wLWxldmVsLCBhcyB0aGUgcmVmZXJlbmNlIGVtaXR0ZXJzIGFyZSBub3QgY2FwYWJsZSBvZlxuICAgICAgLy8gZ2VuZXJhdGluZyBpbXBvcnRzIHRvIGNsYXNzZXMgZGVjbGFyZWQgaW4gYSBuYW1lc3BhY2UuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmVmbGVjdG9yLmlzU3RhdGljYWxseUV4cG9ydGVkKGRlY2wpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0xvY2FsVHlwZVBhcmFtZXRlcihkZWNsOiBEZWNsYXJhdGlvbk5vZGUpOiBib29sZWFuIHtcbiAgICAvLyBDaGVja2luZyBmb3IgbG9jYWwgdHlwZSBwYXJhbWV0ZXJzIG9ubHkgb2NjdXJzIGR1cmluZyByZXNvbHV0aW9uIG9mIHR5cGUgcGFyYW1ldGVycywgc28gaXQgaXNcbiAgICAvLyBndWFyYW50ZWVkIHRoYXQgdHlwZSBwYXJhbWV0ZXJzIGFyZSBwcmVzZW50LlxuICAgIHJldHVybiB0aGlzLnR5cGVQYXJhbWV0ZXJzIS5zb21lKHBhcmFtID0+IHBhcmFtID09PSBkZWNsKTtcbiAgfVxufVxuIl19
|