@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.
Files changed (39) hide show
  1. package/index.js +1 -1
  2. package/package.json +4 -4
  3. package/src/diagnostics/expression_diagnostics.js +98 -151
  4. package/src/diagnostics/expression_type.js +122 -139
  5. package/src/diagnostics/translate_diagnostics.js +12 -12
  6. package/src/diagnostics/typescript_symbols.js +296 -514
  7. package/src/diagnostics/typescript_version.js +8 -8
  8. package/src/extract_i18n.js +11 -13
  9. package/src/main.js +80 -78
  10. package/src/metadata/bundle_index_host.js +39 -51
  11. package/src/metadata/bundler.js +214 -256
  12. package/src/metadata/collector.js +235 -317
  13. package/src/metadata/evaluator.js +146 -162
  14. package/src/metadata/index.js +1 -1
  15. package/src/metadata/index_writer.js +25 -47
  16. package/src/metadata/symbols.js +44 -62
  17. package/src/ngcc/src/packages/build_marker.d.ts +1 -1
  18. package/src/ngcc/src/packages/build_marker.js +1 -1
  19. package/src/ngtools_api.js +29 -44
  20. package/src/ngtools_api2.js +9 -11
  21. package/src/ngtsc/program.js +122 -162
  22. package/src/ngtsc/resource_loader.js +35 -50
  23. package/src/perform_compile.js +87 -93
  24. package/src/perform_watch.js +50 -51
  25. package/src/transformers/compiler_host.js +158 -171
  26. package/src/transformers/inline_resources.js +54 -57
  27. package/src/transformers/lower_expressions.js +87 -101
  28. package/src/transformers/metadata_cache.js +21 -50
  29. package/src/transformers/metadata_reader.js +17 -18
  30. package/src/transformers/nocollapse_hack.js +9 -9
  31. package/src/transformers/node_emitter.js +214 -237
  32. package/src/transformers/node_emitter_transform.js +25 -21
  33. package/src/transformers/program.js +336 -440
  34. package/src/transformers/r3_metadata_transform.js +21 -34
  35. package/src/transformers/r3_strip_decorators.js +29 -31
  36. package/src/transformers/r3_transform.js +7 -8
  37. package/src/transformers/tsc_pass_through.js +33 -37
  38. package/src/transformers/util.js +18 -30
  39. package/src/version.js +3 -3
@@ -16,13 +16,13 @@
16
16
  })(function (require, exports) {
17
17
  "use strict";
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
- var ts = require("typescript");
20
- var api_1 = require("@angular/compiler-cli/src/transformers/api");
21
- var util_1 = require("@angular/compiler-cli/src/transformers/util");
19
+ const ts = require("typescript");
20
+ const api_1 = require("@angular/compiler-cli/src/transformers/api");
21
+ const util_1 = require("@angular/compiler-cli/src/transformers/util");
22
22
  function translateDiagnostics(host, untranslatedDiagnostics) {
23
- var ts = [];
24
- var ng = [];
25
- untranslatedDiagnostics.forEach(function (diagnostic) {
23
+ const ts = [];
24
+ const ng = [];
25
+ untranslatedDiagnostics.forEach((diagnostic) => {
26
26
  if (diagnostic.file && diagnostic.start && util_1.GENERATED_FILES.test(diagnostic.file.fileName)) {
27
27
  // We need to filter out diagnostics about unused functions as
28
28
  // they are in fact referenced by nobody and only serve to surface
@@ -30,12 +30,12 @@
30
30
  if (diagnostic.code === /* ... is declared but never used */ 6133) {
31
31
  return;
32
32
  }
33
- var span = sourceSpanOf(host, diagnostic.file, diagnostic.start);
33
+ const span = sourceSpanOf(host, diagnostic.file, diagnostic.start);
34
34
  if (span) {
35
- var fileName = span.start.file.url;
35
+ const fileName = span.start.file.url;
36
36
  ng.push({
37
37
  messageText: diagnosticMessageToString(diagnostic.messageText),
38
- category: diagnostic.category, span: span,
38
+ category: diagnostic.category, span,
39
39
  source: api_1.SOURCE,
40
40
  code: api_1.DEFAULT_ERROR_CODE
41
41
  });
@@ -45,15 +45,15 @@
45
45
  ts.push(diagnostic);
46
46
  }
47
47
  });
48
- return { ts: ts, ng: ng };
48
+ return { ts, ng };
49
49
  }
50
50
  exports.translateDiagnostics = translateDiagnostics;
51
51
  function sourceSpanOf(host, source, start) {
52
- var _a = ts.getLineAndCharacterOfPosition(source, start), line = _a.line, character = _a.character;
52
+ const { line, character } = ts.getLineAndCharacterOfPosition(source, start);
53
53
  return host.parseSourceSpanOf(source.fileName, line, character);
54
54
  }
55
55
  function diagnosticMessageToString(message) {
56
56
  return ts.flattenDiagnosticMessageText(message, '\n');
57
57
  }
58
58
  });
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlX2RpYWdub3N0aWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9kaWFnbm9zdGljcy90cmFuc2xhdGVfZGlhZ25vc3RpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7SUFHSCwrQkFBaUM7SUFFakMsa0VBQTJFO0lBQzNFLG9FQUFxRDtJQU1yRCxTQUFnQixvQkFBb0IsQ0FDaEMsSUFBbUIsRUFBRSx1QkFBcUQ7UUFFNUUsSUFBTSxFQUFFLEdBQW9CLEVBQUUsQ0FBQztRQUMvQixJQUFNLEVBQUUsR0FBaUIsRUFBRSxDQUFDO1FBRTVCLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxVQUFDLFVBQVU7WUFDekMsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxLQUFLLElBQUksc0JBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDekYsOERBQThEO2dCQUM5RCxrRUFBa0U7Z0JBQ2xFLHFCQUFxQjtnQkFDckIsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLG9DQUFvQyxDQUFDLElBQUksRUFBRTtvQkFDakUsT0FBTztpQkFDUjtnQkFDRCxJQUFNLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNuRSxJQUFJLElBQUksRUFBRTtvQkFDUixJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7b0JBQ3JDLEVBQUUsQ0FBQyxJQUFJLENBQUM7d0JBQ04sV0FBVyxFQUFFLHlCQUF5QixDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7d0JBQzlELFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksTUFBQTt3QkFDbkMsTUFBTSxFQUFFLFlBQU07d0JBQ2QsSUFBSSxFQUFFLHdCQUFrQjtxQkFDekIsQ0FBQyxDQUFDO2lCQUNKO2FBQ0Y7aUJBQU07Z0JBQ0wsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUNyQjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxFQUFDLEVBQUUsSUFBQSxFQUFFLEVBQUUsSUFBQSxFQUFDLENBQUM7SUFDbEIsQ0FBQztJQTdCRCxvREE2QkM7SUFFRCxTQUFTLFlBQVksQ0FBQyxJQUFtQixFQUFFLE1BQXFCLEVBQUUsS0FBYTtRQUV2RSxJQUFBLG9EQUFtRSxFQUFsRSxjQUFJLEVBQUUsd0JBQTRELENBQUM7UUFDMUUsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELFNBQVMseUJBQXlCLENBQUMsT0FBMkM7UUFDNUUsT0FBTyxFQUFFLENBQUMsNEJBQTRCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7UGFyc2VTb3VyY2VTcGFufSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtERUZBVUxUX0VSUk9SX0NPREUsIERpYWdub3N0aWMsIFNPVVJDRX0gZnJvbSAnLi4vdHJhbnNmb3JtZXJzL2FwaSc7XG5pbXBvcnQge0dFTkVSQVRFRF9GSUxFU30gZnJvbSAnLi4vdHJhbnNmb3JtZXJzL3V0aWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVDaGVja0hvc3Qge1xuICBwYXJzZVNvdXJjZVNwYW5PZihmaWxlTmFtZTogc3RyaW5nLCBsaW5lOiBudW1iZXIsIGNoYXJhY3RlcjogbnVtYmVyKTogUGFyc2VTb3VyY2VTcGFufG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGVEaWFnbm9zdGljcyhcbiAgICBob3N0OiBUeXBlQ2hlY2tIb3N0LCB1bnRyYW5zbGF0ZWREaWFnbm9zdGljczogUmVhZG9ubHlBcnJheTx0cy5EaWFnbm9zdGljPik6XG4gICAge3RzOiB0cy5EaWFnbm9zdGljW10sIG5nOiBEaWFnbm9zdGljW119IHtcbiAgY29uc3QgdHM6IHRzLkRpYWdub3N0aWNbXSA9IFtdO1xuICBjb25zdCBuZzogRGlhZ25vc3RpY1tdID0gW107XG5cbiAgdW50cmFuc2xhdGVkRGlhZ25vc3RpY3MuZm9yRWFjaCgoZGlhZ25vc3RpYykgPT4ge1xuICAgIGlmIChkaWFnbm9zdGljLmZpbGUgJiYgZGlhZ25vc3RpYy5zdGFydCAmJiBHRU5FUkFURURfRklMRVMudGVzdChkaWFnbm9zdGljLmZpbGUuZmlsZU5hbWUpKSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIGZpbHRlciBvdXQgZGlhZ25vc3RpY3MgYWJvdXQgdW51c2VkIGZ1bmN0aW9ucyBhc1xuICAgICAgLy8gdGhleSBhcmUgaW4gZmFjdCByZWZlcmVuY2VkIGJ5IG5vYm9keSBhbmQgb25seSBzZXJ2ZSB0byBzdXJmYWNlXG4gICAgICAvLyB0eXBlIGNoZWNrIGVycm9ycy5cbiAgICAgIGlmIChkaWFnbm9zdGljLmNvZGUgPT09IC8qIC4uLiBpcyBkZWNsYXJlZCBidXQgbmV2ZXIgdXNlZCAqLyA2MTMzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNwYW4gPSBzb3VyY2VTcGFuT2YoaG9zdCwgZGlhZ25vc3RpYy5maWxlLCBkaWFnbm9zdGljLnN0YXJ0KTtcbiAgICAgIGlmIChzcGFuKSB7XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gc3Bhbi5zdGFydC5maWxlLnVybDtcbiAgICAgICAgbmcucHVzaCh7XG4gICAgICAgICAgbWVzc2FnZVRleHQ6IGRpYWdub3N0aWNNZXNzYWdlVG9TdHJpbmcoZGlhZ25vc3RpYy5tZXNzYWdlVGV4dCksXG4gICAgICAgICAgY2F0ZWdvcnk6IGRpYWdub3N0aWMuY2F0ZWdvcnksIHNwYW4sXG4gICAgICAgICAgc291cmNlOiBTT1VSQ0UsXG4gICAgICAgICAgY29kZTogREVGQVVMVF9FUlJPUl9DT0RFXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cy5wdXNoKGRpYWdub3N0aWMpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7dHMsIG5nfTtcbn1cblxuZnVuY3Rpb24gc291cmNlU3Bhbk9mKGhvc3Q6IFR5cGVDaGVja0hvc3QsIHNvdXJjZTogdHMuU291cmNlRmlsZSwgc3RhcnQ6IG51bWJlcik6IFBhcnNlU291cmNlU3BhbnxcbiAgICBudWxsIHtcbiAgY29uc3Qge2xpbmUsIGNoYXJhY3Rlcn0gPSB0cy5nZXRMaW5lQW5kQ2hhcmFjdGVyT2ZQb3NpdGlvbihzb3VyY2UsIHN0YXJ0KTtcbiAgcmV0dXJuIGhvc3QucGFyc2VTb3VyY2VTcGFuT2Yoc291cmNlLmZpbGVOYW1lLCBsaW5lLCBjaGFyYWN0ZXIpO1xufVxuXG5mdW5jdGlvbiBkaWFnbm9zdGljTWVzc2FnZVRvU3RyaW5nKG1lc3NhZ2U6IHRzLkRpYWdub3N0aWNNZXNzYWdlQ2hhaW4gfCBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdHMuZmxhdHRlbkRpYWdub3N0aWNNZXNzYWdlVGV4dChtZXNzYWdlLCAnXFxuJyk7XG59XG4iXX0=
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlX2RpYWdub3N0aWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9kaWFnbm9zdGljcy90cmFuc2xhdGVfZGlhZ25vc3RpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7SUFHSCxpQ0FBaUM7SUFFakMsb0VBQTJFO0lBQzNFLHNFQUFxRDtJQU1yRCxTQUFnQixvQkFBb0IsQ0FDaEMsSUFBbUIsRUFBRSx1QkFBcUQ7UUFFNUUsTUFBTSxFQUFFLEdBQW9CLEVBQUUsQ0FBQztRQUMvQixNQUFNLEVBQUUsR0FBaUIsRUFBRSxDQUFDO1FBRTVCLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQzdDLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxVQUFVLENBQUMsS0FBSyxJQUFJLHNCQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3pGLDhEQUE4RDtnQkFDOUQsa0VBQWtFO2dCQUNsRSxxQkFBcUI7Z0JBQ3JCLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxvQ0FBb0MsQ0FBQyxJQUFJLEVBQUU7b0JBQ2pFLE9BQU87aUJBQ1I7Z0JBQ0QsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkUsSUFBSSxJQUFJLEVBQUU7b0JBQ1IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO29CQUNyQyxFQUFFLENBQUMsSUFBSSxDQUFDO3dCQUNOLFdBQVcsRUFBRSx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO3dCQUM5RCxRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJO3dCQUNuQyxNQUFNLEVBQUUsWUFBTTt3QkFDZCxJQUFJLEVBQUUsd0JBQWtCO3FCQUN6QixDQUFDLENBQUM7aUJBQ0o7YUFDRjtpQkFBTTtnQkFDTCxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3JCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEVBQUMsRUFBRSxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ2xCLENBQUM7SUE3QkQsb0RBNkJDO0lBRUQsU0FBUyxZQUFZLENBQUMsSUFBbUIsRUFBRSxNQUFxQixFQUFFLEtBQWE7UUFFN0UsTUFBTSxFQUFDLElBQUksRUFBRSxTQUFTLEVBQUMsR0FBRyxFQUFFLENBQUMsNkJBQTZCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFFLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxTQUFTLHlCQUF5QixDQUFDLE9BQTJDO1FBQzVFLE9BQU8sRUFBRSxDQUFDLDRCQUE0QixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1BhcnNlU291cmNlU3Bhbn0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7REVGQVVMVF9FUlJPUl9DT0RFLCBEaWFnbm9zdGljLCBTT1VSQ0V9IGZyb20gJy4uL3RyYW5zZm9ybWVycy9hcGknO1xuaW1wb3J0IHtHRU5FUkFURURfRklMRVN9IGZyb20gJy4uL3RyYW5zZm9ybWVycy91dGlsJztcblxuZXhwb3J0IGludGVyZmFjZSBUeXBlQ2hlY2tIb3N0IHtcbiAgcGFyc2VTb3VyY2VTcGFuT2YoZmlsZU5hbWU6IHN0cmluZywgbGluZTogbnVtYmVyLCBjaGFyYWN0ZXI6IG51bWJlcik6IFBhcnNlU291cmNlU3BhbnxudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNsYXRlRGlhZ25vc3RpY3MoXG4gICAgaG9zdDogVHlwZUNoZWNrSG9zdCwgdW50cmFuc2xhdGVkRGlhZ25vc3RpY3M6IFJlYWRvbmx5QXJyYXk8dHMuRGlhZ25vc3RpYz4pOlxuICAgIHt0czogdHMuRGlhZ25vc3RpY1tdLCBuZzogRGlhZ25vc3RpY1tdfSB7XG4gIGNvbnN0IHRzOiB0cy5EaWFnbm9zdGljW10gPSBbXTtcbiAgY29uc3Qgbmc6IERpYWdub3N0aWNbXSA9IFtdO1xuXG4gIHVudHJhbnNsYXRlZERpYWdub3N0aWNzLmZvckVhY2goKGRpYWdub3N0aWMpID0+IHtcbiAgICBpZiAoZGlhZ25vc3RpYy5maWxlICYmIGRpYWdub3N0aWMuc3RhcnQgJiYgR0VORVJBVEVEX0ZJTEVTLnRlc3QoZGlhZ25vc3RpYy5maWxlLmZpbGVOYW1lKSkge1xuICAgICAgLy8gV2UgbmVlZCB0byBmaWx0ZXIgb3V0IGRpYWdub3N0aWNzIGFib3V0IHVudXNlZCBmdW5jdGlvbnMgYXNcbiAgICAgIC8vIHRoZXkgYXJlIGluIGZhY3QgcmVmZXJlbmNlZCBieSBub2JvZHkgYW5kIG9ubHkgc2VydmUgdG8gc3VyZmFjZVxuICAgICAgLy8gdHlwZSBjaGVjayBlcnJvcnMuXG4gICAgICBpZiAoZGlhZ25vc3RpYy5jb2RlID09PSAvKiAuLi4gaXMgZGVjbGFyZWQgYnV0IG5ldmVyIHVzZWQgKi8gNjEzMykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBzcGFuID0gc291cmNlU3Bhbk9mKGhvc3QsIGRpYWdub3N0aWMuZmlsZSwgZGlhZ25vc3RpYy5zdGFydCk7XG4gICAgICBpZiAoc3Bhbikge1xuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IHNwYW4uc3RhcnQuZmlsZS51cmw7XG4gICAgICAgIG5nLnB1c2goe1xuICAgICAgICAgIG1lc3NhZ2VUZXh0OiBkaWFnbm9zdGljTWVzc2FnZVRvU3RyaW5nKGRpYWdub3N0aWMubWVzc2FnZVRleHQpLFxuICAgICAgICAgIGNhdGVnb3J5OiBkaWFnbm9zdGljLmNhdGVnb3J5LCBzcGFuLFxuICAgICAgICAgIHNvdXJjZTogU09VUkNFLFxuICAgICAgICAgIGNvZGU6IERFRkFVTFRfRVJST1JfQ09ERVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHMucHVzaChkaWFnbm9zdGljKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge3RzLCBuZ307XG59XG5cbmZ1bmN0aW9uIHNvdXJjZVNwYW5PZihob3N0OiBUeXBlQ2hlY2tIb3N0LCBzb3VyY2U6IHRzLlNvdXJjZUZpbGUsIHN0YXJ0OiBudW1iZXIpOiBQYXJzZVNvdXJjZVNwYW58XG4gICAgbnVsbCB7XG4gIGNvbnN0IHtsaW5lLCBjaGFyYWN0ZXJ9ID0gdHMuZ2V0TGluZUFuZENoYXJhY3Rlck9mUG9zaXRpb24oc291cmNlLCBzdGFydCk7XG4gIHJldHVybiBob3N0LnBhcnNlU291cmNlU3Bhbk9mKHNvdXJjZS5maWxlTmFtZSwgbGluZSwgY2hhcmFjdGVyKTtcbn1cblxuZnVuY3Rpb24gZGlhZ25vc3RpY01lc3NhZ2VUb1N0cmluZyhtZXNzYWdlOiB0cy5EaWFnbm9zdGljTWVzc2FnZUNoYWluIHwgc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRzLmZsYXR0ZW5EaWFnbm9zdGljTWVzc2FnZVRleHQobWVzc2FnZSwgJ1xcbicpO1xufVxuIl19