@angular/compiler-cli 7.2.4 → 7.2.8
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/index.js +1 -1
- package/package.json +4 -4
- package/src/diagnostics/expression_diagnostics.js +98 -151
- package/src/diagnostics/expression_type.js +122 -139
- package/src/diagnostics/translate_diagnostics.js +12 -12
- package/src/diagnostics/typescript_symbols.js +296 -514
- package/src/diagnostics/typescript_version.js +8 -8
- package/src/extract_i18n.js +11 -13
- package/src/main.js +80 -78
- package/src/metadata/bundle_index_host.js +39 -51
- package/src/metadata/bundler.js +214 -256
- package/src/metadata/collector.js +235 -317
- package/src/metadata/evaluator.js +146 -162
- package/src/metadata/index.js +1 -1
- package/src/metadata/index_writer.js +25 -47
- package/src/metadata/symbols.js +44 -62
- package/src/ngcc/src/packages/build_marker.d.ts +1 -1
- package/src/ngcc/src/packages/build_marker.js +1 -1
- package/src/ngtools_api.js +29 -44
- package/src/ngtools_api2.js +9 -11
- package/src/ngtsc/program.js +122 -162
- package/src/ngtsc/resource_loader.js +35 -50
- package/src/perform_compile.js +87 -93
- package/src/perform_watch.js +50 -51
- package/src/transformers/compiler_host.js +158 -171
- package/src/transformers/inline_resources.js +54 -57
- package/src/transformers/lower_expressions.js +87 -101
- package/src/transformers/metadata_cache.js +21 -50
- package/src/transformers/metadata_reader.js +17 -18
- package/src/transformers/nocollapse_hack.js +9 -9
- package/src/transformers/node_emitter.js +214 -237
- package/src/transformers/node_emitter_transform.js +25 -21
- package/src/transformers/program.js +336 -440
- package/src/transformers/r3_metadata_transform.js +21 -34
- package/src/transformers/r3_strip_decorators.js +29 -31
- package/src/transformers/r3_transform.js +7 -8
- package/src/transformers/tsc_pass_through.js +33 -37
- package/src/transformers/util.js +18 -30
- package/src/version.js +3 -3
|
@@ -11,17 +11,21 @@
|
|
|
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/transformers/node_emitter_transform", ["require", "exports", "
|
|
14
|
+
define("@angular/compiler-cli/src/transformers/node_emitter_transform", ["require", "exports", "typescript", "@angular/compiler-cli/src/transformers/node_emitter", "@angular/compiler-cli/src/transformers/util"], factory);
|
|
15
15
|
}
|
|
16
16
|
})(function (require, exports) {
|
|
17
17
|
"use strict";
|
|
18
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
var util_1 = require("@angular/compiler-cli/src/transformers/util");
|
|
19
|
+
const ts = require("typescript");
|
|
20
|
+
const node_emitter_1 = require("@angular/compiler-cli/src/transformers/node_emitter");
|
|
21
|
+
const util_1 = require("@angular/compiler-cli/src/transformers/util");
|
|
23
22
|
function getPreamble(original) {
|
|
24
|
-
return
|
|
23
|
+
return `/**
|
|
24
|
+
* @fileoverview This file was generated by the Angular template compiler. Do not edit.
|
|
25
|
+
* ${original}
|
|
26
|
+
* @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes}
|
|
27
|
+
* tslint:disable
|
|
28
|
+
*/`;
|
|
25
29
|
}
|
|
26
30
|
/**
|
|
27
31
|
* Returns a transformer that does two things for generated files (ngfactory etc):
|
|
@@ -33,20 +37,20 @@
|
|
|
33
37
|
*/
|
|
34
38
|
function getAngularEmitterTransformFactory(generatedFiles, program) {
|
|
35
39
|
return function () {
|
|
36
|
-
|
|
40
|
+
const emitter = new node_emitter_1.TypeScriptNodeEmitter();
|
|
37
41
|
return function (sourceFile) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
42
|
+
const g = generatedFiles.get(sourceFile.fileName);
|
|
43
|
+
const orig = g && program.getSourceFile(g.srcFileUrl);
|
|
44
|
+
let originalComment = '';
|
|
41
45
|
if (orig)
|
|
42
46
|
originalComment = getFileoverviewComment(orig);
|
|
43
|
-
|
|
47
|
+
const preamble = getPreamble(originalComment);
|
|
44
48
|
if (g && g.stmts) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
if (
|
|
48
|
-
|
|
49
|
-
|
|
49
|
+
const orig = program.getSourceFile(g.srcFileUrl);
|
|
50
|
+
let originalComment = '';
|
|
51
|
+
if (orig)
|
|
52
|
+
originalComment = getFileoverviewComment(orig);
|
|
53
|
+
const [newSourceFile] = emitter.updateSourceFile(sourceFile, g.stmts, preamble);
|
|
50
54
|
return newSourceFile;
|
|
51
55
|
}
|
|
52
56
|
else if (util_1.GENERATED_FILES.test(sourceFile.fileName)) {
|
|
@@ -66,22 +70,22 @@
|
|
|
66
70
|
* in the given source file. Returns the empty string if no such comment can be found.
|
|
67
71
|
*/
|
|
68
72
|
function getFileoverviewComment(sourceFile) {
|
|
69
|
-
|
|
70
|
-
|
|
73
|
+
const trivia = sourceFile.getFullText().substring(0, sourceFile.getStart());
|
|
74
|
+
const leadingComments = ts.getLeadingCommentRanges(trivia, 0);
|
|
71
75
|
if (!leadingComments || leadingComments.length === 0)
|
|
72
76
|
return '';
|
|
73
|
-
|
|
77
|
+
const comment = leadingComments[0];
|
|
74
78
|
if (comment.kind !== ts.SyntaxKind.MultiLineCommentTrivia)
|
|
75
79
|
return '';
|
|
76
80
|
// Only comments separated with a \n\n from the file contents are considered file-level comments
|
|
77
81
|
// in TypeScript.
|
|
78
82
|
if (sourceFile.getFullText().substring(comment.end, comment.end + 2) !== '\n\n')
|
|
79
83
|
return '';
|
|
80
|
-
|
|
84
|
+
const commentText = sourceFile.getFullText().substring(comment.pos, comment.end);
|
|
81
85
|
// Closure Compiler ignores @suppress and similar if the comment contains @license.
|
|
82
86
|
if (commentText.indexOf('@license') !== -1)
|
|
83
87
|
return '';
|
|
84
88
|
return commentText.replace(/^\/\*\*/, '').replace(/ ?\*\/$/, '');
|
|
85
89
|
}
|
|
86
90
|
});
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZV9lbWl0dGVyX3RyYW5zZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvdHJhbnNmb3JtZXJzL25vZGVfZW1pdHRlcl90cmFuc2Zvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7SUFHSCxpQ0FBaUM7SUFFakMsc0ZBQXFEO0lBQ3JELHNFQUF1QztJQUV2QyxTQUFTLFdBQVcsQ0FBQyxRQUFnQjtRQUNuQyxPQUFPOztLQUVKLFFBQVE7OztJQUdULENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILFNBQWdCLGlDQUFpQyxDQUM3QyxjQUEwQyxFQUFFLE9BQW1CO1FBRWpFLE9BQU87WUFDTCxNQUFNLE9BQU8sR0FBRyxJQUFJLG9DQUFxQixFQUFFLENBQUM7WUFDNUMsT0FBTyxVQUFTLFVBQXlCO2dCQUN2QyxNQUFNLENBQUMsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDbEQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLGVBQWUsR0FBRyxFQUFFLENBQUM7Z0JBQ3pCLElBQUksSUFBSTtvQkFBRSxlQUFlLEdBQUcsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3pELE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRTtvQkFDaEIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ2pELElBQUksZUFBZSxHQUFHLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxJQUFJO3dCQUFFLGVBQWUsR0FBRyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDekQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDaEYsT0FBTyxhQUFhLENBQUM7aUJBQ3RCO3FCQUFNLElBQUksc0JBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUNwRCxpRkFBaUY7b0JBQ2pGLHdCQUF3QjtvQkFDeEIsbUZBQW1GO29CQUNuRixrQ0FBa0M7b0JBQ2xDLE9BQU8sRUFBRSxDQUFDLG9CQUFvQixDQUMxQixVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDekU7Z0JBQ0QsT0FBTyxVQUFVLENBQUM7WUFDcEIsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQTVCRCw4RUE0QkM7SUFFRDs7O09BR0c7SUFDSCxTQUFTLHNCQUFzQixDQUFDLFVBQXlCO1FBQ3ZELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLGVBQWUsSUFBSSxlQUFlLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNoRSxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsc0JBQXNCO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDckUsZ0dBQWdHO1FBQ2hHLGlCQUFpQjtRQUNqQixJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUMzRixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pGLG1GQUFtRjtRQUNuRixJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDdEQsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7R2VuZXJhdGVkRmlsZX0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7VHlwZVNjcmlwdE5vZGVFbWl0dGVyfSBmcm9tICcuL25vZGVfZW1pdHRlcic7XG5pbXBvcnQge0dFTkVSQVRFRF9GSUxFU30gZnJvbSAnLi91dGlsJztcblxuZnVuY3Rpb24gZ2V0UHJlYW1ibGUob3JpZ2luYWw6IHN0cmluZykge1xuICByZXR1cm4gYC8qKlxuICogQGZpbGVvdmVydmlldyBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSB0aGUgQW5ndWxhciB0ZW1wbGF0ZSBjb21waWxlci4gRG8gbm90IGVkaXQuXG4gKiAke29yaWdpbmFsfVxuICogQHN1cHByZXNzIHtzdXNwaWNpb3VzQ29kZSx1c2VsZXNzQ29kZSxtaXNzaW5nUHJvcGVydGllcyxtaXNzaW5nT3ZlcnJpZGUsY2hlY2tUeXBlc31cbiAqIHRzbGludDpkaXNhYmxlXG4gKi9gO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSB0cmFuc2Zvcm1lciB0aGF0IGRvZXMgdHdvIHRoaW5ncyBmb3IgZ2VuZXJhdGVkIGZpbGVzIChuZ2ZhY3RvcnkgZXRjKTpcbiAqIC0gYWRkcyBhIGZpbGVvdmVydmlldyBKU0RvYyBjb21tZW50IGNvbnRhaW5pbmcgQ2xvc3VyZSBDb21waWxlciBzcGVjaWZpYyBcInN1cHByZXNzXCJpb25zIGluIEpTRG9jLlxuICogICBUaGUgbmV3IGNvbW1lbnQgd2lsbCBjb250YWluIGFueSBmaWxlb3ZlcnZpZXcgY29tbWVudCB0ZXh0IGZyb20gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoaXNcbiAqICAgZmlsZSB3YXMgZ2VuZXJhdGVkIGZyb20uXG4gKiAtIHVwZGF0ZXMgZ2VuZXJhdGVkIGZpbGVzIHRoYXQgYXJlIG5vdCBpbiB0aGUgZ2l2ZW4gbWFwIG9mIGdlbmVyYXRlZEZpbGVzIHRvIGhhdmUgYW4gZW1wdHlcbiAqICAgbGlzdCBvZiBzdGF0ZW1lbnRzIGFzIHRoZWlyIGJvZHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbmd1bGFyRW1pdHRlclRyYW5zZm9ybUZhY3RvcnkoXG4gICAgZ2VuZXJhdGVkRmlsZXM6IE1hcDxzdHJpbmcsIEdlbmVyYXRlZEZpbGU+LCBwcm9ncmFtOiB0cy5Qcm9ncmFtKTogKCkgPT5cbiAgICAoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSkgPT4gdHMuU291cmNlRmlsZSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBlbWl0dGVyID0gbmV3IFR5cGVTY3JpcHROb2RlRW1pdHRlcigpO1xuICAgIHJldHVybiBmdW5jdGlvbihzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlKTogdHMuU291cmNlRmlsZSB7XG4gICAgICBjb25zdCBnID0gZ2VuZXJhdGVkRmlsZXMuZ2V0KHNvdXJjZUZpbGUuZmlsZU5hbWUpO1xuICAgICAgY29uc3Qgb3JpZyA9IGcgJiYgcHJvZ3JhbS5nZXRTb3VyY2VGaWxlKGcuc3JjRmlsZVVybCk7XG4gICAgICBsZXQgb3JpZ2luYWxDb21tZW50ID0gJyc7XG4gICAgICBpZiAob3JpZykgb3JpZ2luYWxDb21tZW50ID0gZ2V0RmlsZW92ZXJ2aWV3Q29tbWVudChvcmlnKTtcbiAgICAgIGNvbnN0IHByZWFtYmxlID0gZ2V0UHJlYW1ibGUob3JpZ2luYWxDb21tZW50KTtcbiAgICAgIGlmIChnICYmIGcuc3RtdHMpIHtcbiAgICAgICAgY29uc3Qgb3JpZyA9IHByb2dyYW0uZ2V0U291cmNlRmlsZShnLnNyY0ZpbGVVcmwpO1xuICAgICAgICBsZXQgb3JpZ2luYWxDb21tZW50ID0gJyc7XG4gICAgICAgIGlmIChvcmlnKSBvcmlnaW5hbENvbW1lbnQgPSBnZXRGaWxlb3ZlcnZpZXdDb21tZW50KG9yaWcpO1xuICAgICAgICBjb25zdCBbbmV3U291cmNlRmlsZV0gPSBlbWl0dGVyLnVwZGF0ZVNvdXJjZUZpbGUoc291cmNlRmlsZSwgZy5zdG10cywgcHJlYW1ibGUpO1xuICAgICAgICByZXR1cm4gbmV3U291cmNlRmlsZTtcbiAgICAgIH0gZWxzZSBpZiAoR0VORVJBVEVEX0ZJTEVTLnRlc3Qoc291cmNlRmlsZS5maWxlTmFtZSkpIHtcbiAgICAgICAgLy8gVGhlIGZpbGUgc2hvdWxkIGJlIGVtcHR5LCBidXQgZW1pdHRlci51cGRhdGVTb3VyY2VGaWxlIHdvdWxkIHN0aWxsIGFkZCBpbXBvcnRzXG4gICAgICAgIC8vIGFuZCB2YXJpb3VzIG1pbnV0aWFlLlxuICAgICAgICAvLyBDbGVhciBvdXQgdGhlIHNvdXJjZSBmaWxlIGVudGlyZWx5LCBvbmx5IGluY2x1ZGluZyB0aGUgcHJlYW1ibGUgY29tbWVudCwgc28gdGhhdFxuICAgICAgICAvLyBuZ2MgcHJvZHVjZXMgYW4gZW1wdHkgLmpzIGZpbGUuXG4gICAgICAgIHJldHVybiB0cy51cGRhdGVTb3VyY2VGaWxlTm9kZShcbiAgICAgICAgICAgIHNvdXJjZUZpbGUsIFtlbWl0dGVyLmNyZWF0ZUNvbW1lbnRTdGF0ZW1lbnQoc291cmNlRmlsZSwgcHJlYW1ibGUpXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc291cmNlRmlsZTtcbiAgICB9O1xuICB9O1xufVxuXG4vKipcbiAqIFBhcnNlcyBhbmQgcmV0dXJucyB0aGUgY29tbWVudCB0ZXh0ICh3aXRob3V0IHN0YXJ0IGFuZCBlbmQgbWFya2Vycykgb2YgYSBcXEBmaWxlb3ZlcnZpZXcgY29tbWVudFxuICogaW4gdGhlIGdpdmVuIHNvdXJjZSBmaWxlLiBSZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcgaWYgbm8gc3VjaCBjb21tZW50IGNhbiBiZSBmb3VuZC5cbiAqL1xuZnVuY3Rpb24gZ2V0RmlsZW92ZXJ2aWV3Q29tbWVudChzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlKTogc3RyaW5nIHtcbiAgY29uc3QgdHJpdmlhID0gc291cmNlRmlsZS5nZXRGdWxsVGV4dCgpLnN1YnN0cmluZygwLCBzb3VyY2VGaWxlLmdldFN0YXJ0KCkpO1xuICBjb25zdCBsZWFkaW5nQ29tbWVudHMgPSB0cy5nZXRMZWFkaW5nQ29tbWVudFJhbmdlcyh0cml2aWEsIDApO1xuICBpZiAoIWxlYWRpbmdDb21tZW50cyB8fCBsZWFkaW5nQ29tbWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG4gIGNvbnN0IGNvbW1lbnQgPSBsZWFkaW5nQ29tbWVudHNbMF07XG4gIGlmIChjb21tZW50LmtpbmQgIT09IHRzLlN5bnRheEtpbmQuTXVsdGlMaW5lQ29tbWVudFRyaXZpYSkgcmV0dXJuICcnO1xuICAvLyBPbmx5IGNvbW1lbnRzIHNlcGFyYXRlZCB3aXRoIGEgXFxuXFxuIGZyb20gdGhlIGZpbGUgY29udGVudHMgYXJlIGNvbnNpZGVyZWQgZmlsZS1sZXZlbCBjb21tZW50c1xuICAvLyBpbiBUeXBlU2NyaXB0LlxuICBpZiAoc291cmNlRmlsZS5nZXRGdWxsVGV4dCgpLnN1YnN0cmluZyhjb21tZW50LmVuZCwgY29tbWVudC5lbmQgKyAyKSAhPT0gJ1xcblxcbicpIHJldHVybiAnJztcbiAgY29uc3QgY29tbWVudFRleHQgPSBzb3VyY2VGaWxlLmdldEZ1bGxUZXh0KCkuc3Vic3RyaW5nKGNvbW1lbnQucG9zLCBjb21tZW50LmVuZCk7XG4gIC8vIENsb3N1cmUgQ29tcGlsZXIgaWdub3JlcyBAc3VwcHJlc3MgYW5kIHNpbWlsYXIgaWYgdGhlIGNvbW1lbnQgY29udGFpbnMgQGxpY2Vuc2UuXG4gIGlmIChjb21tZW50VGV4dC5pbmRleE9mKCdAbGljZW5zZScpICE9PSAtMSkgcmV0dXJuICcnO1xuICByZXR1cm4gY29tbWVudFRleHQucmVwbGFjZSgvXlxcL1xcKlxcKi8sICcnKS5yZXBsYWNlKC8gP1xcKlxcLyQvLCAnJyk7XG59XG4iXX0=
|