@angular/compiler-cli 9.0.0-rc.9 → 9.0.0

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 (158) hide show
  1. package/ngcc/src/analysis/decoration_analyzer.d.ts +9 -23
  2. package/ngcc/src/analysis/decoration_analyzer.js +82 -144
  3. package/ngcc/src/analysis/migration_host.d.ts +5 -16
  4. package/ngcc/src/analysis/migration_host.js +20 -91
  5. package/ngcc/src/analysis/module_with_providers_analyzer.js +2 -2
  6. package/ngcc/src/analysis/ngcc_trait_compiler.d.ts +42 -0
  7. package/ngcc/src/analysis/ngcc_trait_compiler.js +107 -0
  8. package/ngcc/src/analysis/types.d.ts +6 -20
  9. package/ngcc/src/analysis/types.js +1 -1
  10. package/ngcc/src/analysis/util.d.ts +0 -5
  11. package/ngcc/src/analysis/util.js +2 -116
  12. package/ngcc/src/dependencies/dts_dependency_host.d.ts +5 -1
  13. package/ngcc/src/dependencies/dts_dependency_host.js +9 -2
  14. package/ngcc/src/dependencies/esm_dependency_host.d.ts +7 -0
  15. package/ngcc/src/dependencies/esm_dependency_host.js +29 -21
  16. package/ngcc/src/entry_point_finder/targeted_entry_point_finder.d.ts +2 -0
  17. package/ngcc/src/entry_point_finder/targeted_entry_point_finder.js +49 -9
  18. package/ngcc/src/execution/cluster/executor.d.ts +3 -1
  19. package/ngcc/src/execution/cluster/executor.js +11 -6
  20. package/ngcc/src/execution/cluster/package_json_updater.js +3 -2
  21. package/ngcc/src/execution/lock_file.d.ts +43 -0
  22. package/ngcc/src/execution/lock_file.js +129 -0
  23. package/ngcc/src/execution/single_process_executor.d.ts +3 -1
  24. package/ngcc/src/execution/single_process_executor.js +18 -15
  25. package/ngcc/src/host/commonjs_host.js +5 -4
  26. package/ngcc/src/host/esm2015_host.d.ts +3 -1
  27. package/ngcc/src/host/esm2015_host.js +40 -9
  28. package/ngcc/src/host/esm5_host.js +3 -1
  29. package/ngcc/src/host/umd_host.js +5 -4
  30. package/ngcc/src/main.js +62 -122
  31. package/ngcc/src/migrations/migration.d.ts +1 -0
  32. package/ngcc/src/migrations/migration.js +1 -1
  33. package/ngcc/src/packages/build_marker.d.ts +17 -8
  34. package/ngcc/src/packages/build_marker.js +61 -32
  35. package/ngcc/src/packages/entry_point_bundle.js +2 -2
  36. package/ngcc/src/rendering/dts_renderer.js +7 -4
  37. package/ngcc/src/rendering/renderer.js +4 -4
  38. package/ngcc/src/writing/cleaning/cleaning_strategies.d.ts +45 -0
  39. package/ngcc/src/writing/cleaning/cleaning_strategies.js +77 -0
  40. package/ngcc/src/writing/cleaning/package_cleaner.d.ts +39 -0
  41. package/ngcc/src/writing/cleaning/package_cleaner.js +125 -0
  42. package/ngcc/src/writing/cleaning/utils.d.ts +16 -0
  43. package/ngcc/src/writing/cleaning/utils.js +29 -0
  44. package/ngcc/src/writing/in_place_file_writer.d.ts +1 -0
  45. package/ngcc/src/writing/in_place_file_writer.js +3 -2
  46. package/ngcc/src/writing/new_entry_point_file_writer.d.ts +2 -0
  47. package/ngcc/src/writing/new_entry_point_file_writer.js +5 -4
  48. package/ngcc/src/writing/package_json_updater.d.ts +24 -10
  49. package/ngcc/src/writing/package_json_updater.js +53 -10
  50. package/package.json +5 -4
  51. package/src/ngtsc/annotations/src/component.d.ts +1 -1
  52. package/src/ngtsc/annotations/src/component.js +4 -3
  53. package/src/ngtsc/annotations/src/directive.js +4 -3
  54. package/src/ngtsc/annotations/src/injectable.js +2 -1
  55. package/src/ngtsc/annotations/src/ng_module.js +2 -1
  56. package/src/ngtsc/annotations/src/pipe.js +2 -1
  57. package/src/ngtsc/annotations/src/util.js +3 -3
  58. package/src/ngtsc/core/api.d.ts +368 -0
  59. package/src/ngtsc/core/api.js +20 -0
  60. package/src/ngtsc/core/index.d.ts +10 -0
  61. package/src/ngtsc/core/index.js +24 -0
  62. package/src/ngtsc/core/src/compiler.d.ts +120 -0
  63. package/src/ngtsc/core/src/compiler.js +769 -0
  64. package/src/ngtsc/core/src/host.d.ts +85 -0
  65. package/src/ngtsc/core/src/host.js +208 -0
  66. package/src/ngtsc/diagnostics/index.d.ts +1 -1
  67. package/src/ngtsc/diagnostics/index.js +5 -5
  68. package/src/ngtsc/diagnostics/src/error.d.ts +1 -1
  69. package/src/ngtsc/diagnostics/src/error.js +1 -1
  70. package/src/ngtsc/diagnostics/src/{code.d.ts → error_code.d.ts} +4 -6
  71. package/src/ngtsc/diagnostics/src/error_code.js +128 -0
  72. package/src/ngtsc/file_system/src/cached_file_system.d.ts +3 -1
  73. package/src/ngtsc/file_system/src/cached_file_system.js +48 -4
  74. package/src/ngtsc/file_system/src/invalid_file_system.d.ts +3 -1
  75. package/src/ngtsc/file_system/src/invalid_file_system.js +4 -2
  76. package/src/ngtsc/file_system/src/node_js_file_system.d.ts +3 -1
  77. package/src/ngtsc/file_system/src/node_js_file_system.js +8 -4
  78. package/src/ngtsc/file_system/src/types.d.ts +3 -1
  79. package/src/ngtsc/file_system/src/types.js +1 -1
  80. package/src/ngtsc/imports/index.d.ts +3 -3
  81. package/src/ngtsc/imports/index.js +4 -4
  82. package/src/ngtsc/imports/src/alias.d.ts +12 -11
  83. package/src/ngtsc/imports/src/alias.js +21 -16
  84. package/src/ngtsc/imports/src/emitter.d.ts +37 -16
  85. package/src/ngtsc/imports/src/emitter.js +51 -18
  86. package/src/ngtsc/imports/src/references.d.ts +0 -4
  87. package/src/ngtsc/imports/src/references.js +1 -6
  88. package/src/ngtsc/incremental/api.d.ts +2 -1
  89. package/src/ngtsc/incremental/api.js +1 -1
  90. package/src/ngtsc/incremental/src/dependency_tracking.d.ts +4 -3
  91. package/src/ngtsc/incremental/src/dependency_tracking.js +2 -2
  92. package/src/ngtsc/incremental/src/state.js +33 -13
  93. package/src/ngtsc/indexer/index.d.ts +1 -0
  94. package/src/ngtsc/indexer/index.js +4 -2
  95. package/src/ngtsc/modulewithproviders/src/scanner.js +2 -2
  96. package/src/ngtsc/partial_evaluator/src/builtin.d.ts +7 -6
  97. package/src/ngtsc/partial_evaluator/src/builtin.js +54 -9
  98. package/src/ngtsc/partial_evaluator/src/interpreter.js +9 -5
  99. package/src/ngtsc/partial_evaluator/src/known_declaration.d.ts +19 -0
  100. package/src/ngtsc/partial_evaluator/src/known_declaration.js +38 -0
  101. package/src/ngtsc/partial_evaluator/src/result.d.ts +1 -1
  102. package/src/ngtsc/partial_evaluator/src/result.js +1 -1
  103. package/src/ngtsc/partial_evaluator/src/ts_helpers.d.ts +1 -1
  104. package/src/ngtsc/partial_evaluator/src/ts_helpers.js +13 -3
  105. package/src/ngtsc/program.d.ts +46 -64
  106. package/src/ngtsc/program.js +76 -724
  107. package/src/ngtsc/reflection/src/host.d.ts +19 -2
  108. package/src/ngtsc/reflection/src/host.js +17 -3
  109. package/src/ngtsc/reflection/src/typescript.js +4 -4
  110. package/src/ngtsc/resource/index.d.ts +9 -0
  111. package/src/ngtsc/resource/index.js +22 -0
  112. package/src/ngtsc/{resource_loader.d.ts → resource/src/loader.d.ts} +4 -4
  113. package/src/ngtsc/resource/src/loader.js +193 -0
  114. package/src/ngtsc/shims/index.d.ts +1 -1
  115. package/src/ngtsc/shims/index.js +2 -5
  116. package/src/ngtsc/shims/src/api.d.ts +25 -0
  117. package/src/ngtsc/shims/src/api.js +13 -0
  118. package/src/ngtsc/shims/src/factory_generator.d.ts +1 -1
  119. package/src/ngtsc/shims/src/factory_generator.js +1 -1
  120. package/src/ngtsc/shims/src/summary_generator.d.ts +1 -1
  121. package/src/ngtsc/shims/src/summary_generator.js +1 -1
  122. package/src/ngtsc/shims/src/typecheck_shim.d.ts +1 -1
  123. package/src/ngtsc/shims/src/typecheck_shim.js +1 -1
  124. package/src/ngtsc/transform/index.d.ts +2 -0
  125. package/src/ngtsc/transform/index.js +7 -2
  126. package/src/ngtsc/transform/src/alias.d.ts +1 -1
  127. package/src/ngtsc/transform/src/alias.js +1 -1
  128. package/src/ngtsc/transform/src/api.d.ts +16 -0
  129. package/src/ngtsc/transform/src/api.js +1 -1
  130. package/src/ngtsc/transform/src/compilation.d.ts +8 -6
  131. package/src/ngtsc/transform/src/compilation.js +47 -20
  132. package/src/ngtsc/transform/src/declaration.d.ts +1 -1
  133. package/src/ngtsc/transform/src/declaration.js +1 -1
  134. package/src/ngtsc/typecheck/index.d.ts +1 -0
  135. package/src/ngtsc/typecheck/index.js +4 -2
  136. package/src/ngtsc/typecheck/src/api.d.ts +8 -0
  137. package/src/ngtsc/typecheck/src/api.js +1 -1
  138. package/src/ngtsc/typecheck/src/diagnostics.d.ts +13 -3
  139. package/src/ngtsc/typecheck/src/diagnostics.js +14 -5
  140. package/src/ngtsc/typecheck/src/dom.js +3 -3
  141. package/src/ngtsc/typecheck/src/environment.js +7 -3
  142. package/src/ngtsc/typecheck/src/host.d.ts +1 -0
  143. package/src/ngtsc/typecheck/src/host.js +4 -1
  144. package/src/ngtsc/typecheck/src/oob.js +4 -4
  145. package/src/ngtsc/typecheck/src/ts_util.js +36 -1
  146. package/src/ngtsc/typecheck/src/type_check_block.js +31 -18
  147. package/src/ngtsc/util/src/typescript.d.ts +2 -0
  148. package/src/ngtsc/util/src/typescript.js +12 -4
  149. package/src/perform_watch.js +6 -5
  150. package/src/transformers/api.d.ts +3 -206
  151. package/src/transformers/api.js +1 -1
  152. package/src/transformers/compiler_host.js +2 -2
  153. package/src/transformers/program.js +1 -1
  154. package/src/version.js +1 -1
  155. package/src/ngtsc/diagnostics/src/code.js +0 -126
  156. package/src/ngtsc/resource_loader.js +0 -193
  157. package/src/ngtsc/shims/src/host.d.ts +0 -46
  158. package/src/ngtsc/shims/src/host.js +0 -82
@@ -1,126 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google Inc. 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/diagnostics/src/code", ["require", "exports"], factory);
15
- }
16
- })(function (require, exports) {
17
- "use strict";
18
- Object.defineProperty(exports, "__esModule", { value: true });
19
- var ErrorCode;
20
- (function (ErrorCode) {
21
- ErrorCode[ErrorCode["DECORATOR_ARG_NOT_LITERAL"] = 1001] = "DECORATOR_ARG_NOT_LITERAL";
22
- ErrorCode[ErrorCode["DECORATOR_ARITY_WRONG"] = 1002] = "DECORATOR_ARITY_WRONG";
23
- ErrorCode[ErrorCode["DECORATOR_NOT_CALLED"] = 1003] = "DECORATOR_NOT_CALLED";
24
- ErrorCode[ErrorCode["DECORATOR_ON_ANONYMOUS_CLASS"] = 1004] = "DECORATOR_ON_ANONYMOUS_CLASS";
25
- ErrorCode[ErrorCode["DECORATOR_UNEXPECTED"] = 1005] = "DECORATOR_UNEXPECTED";
26
- /**
27
- * This error code indicates that there are incompatible decorators on a type or a class field.
28
- */
29
- ErrorCode[ErrorCode["DECORATOR_COLLISION"] = 1006] = "DECORATOR_COLLISION";
30
- ErrorCode[ErrorCode["VALUE_HAS_WRONG_TYPE"] = 1010] = "VALUE_HAS_WRONG_TYPE";
31
- ErrorCode[ErrorCode["VALUE_NOT_LITERAL"] = 1011] = "VALUE_NOT_LITERAL";
32
- ErrorCode[ErrorCode["COMPONENT_MISSING_TEMPLATE"] = 2001] = "COMPONENT_MISSING_TEMPLATE";
33
- ErrorCode[ErrorCode["PIPE_MISSING_NAME"] = 2002] = "PIPE_MISSING_NAME";
34
- ErrorCode[ErrorCode["PARAM_MISSING_TOKEN"] = 2003] = "PARAM_MISSING_TOKEN";
35
- ErrorCode[ErrorCode["DIRECTIVE_MISSING_SELECTOR"] = 2004] = "DIRECTIVE_MISSING_SELECTOR";
36
- /** Raised when an undecorated class is passed in as a provider to a module or a directive. */
37
- ErrorCode[ErrorCode["UNDECORATED_PROVIDER"] = 2005] = "UNDECORATED_PROVIDER";
38
- /**
39
- * Raised when a Directive inherits its constructor from a base class without an Angular
40
- * decorator.
41
- */
42
- ErrorCode[ErrorCode["DIRECTIVE_INHERITS_UNDECORATED_CTOR"] = 2006] = "DIRECTIVE_INHERITS_UNDECORATED_CTOR";
43
- ErrorCode[ErrorCode["SYMBOL_NOT_EXPORTED"] = 3001] = "SYMBOL_NOT_EXPORTED";
44
- ErrorCode[ErrorCode["SYMBOL_EXPORTED_UNDER_DIFFERENT_NAME"] = 3002] = "SYMBOL_EXPORTED_UNDER_DIFFERENT_NAME";
45
- ErrorCode[ErrorCode["CONFIG_FLAT_MODULE_NO_INDEX"] = 4001] = "CONFIG_FLAT_MODULE_NO_INDEX";
46
- ErrorCode[ErrorCode["CONFIG_STRICT_TEMPLATES_IMPLIES_FULL_TEMPLATE_TYPECHECK"] = 4002] = "CONFIG_STRICT_TEMPLATES_IMPLIES_FULL_TEMPLATE_TYPECHECK";
47
- /**
48
- * Raised when a host expression has a parse error, such as a host listener or host binding
49
- * expression containing a pipe.
50
- */
51
- ErrorCode[ErrorCode["HOST_BINDING_PARSE_ERROR"] = 5001] = "HOST_BINDING_PARSE_ERROR";
52
- /**
53
- * Raised when an NgModule contains an invalid reference in `declarations`.
54
- */
55
- ErrorCode[ErrorCode["NGMODULE_INVALID_DECLARATION"] = 6001] = "NGMODULE_INVALID_DECLARATION";
56
- /**
57
- * Raised when an NgModule contains an invalid type in `imports`.
58
- */
59
- ErrorCode[ErrorCode["NGMODULE_INVALID_IMPORT"] = 6002] = "NGMODULE_INVALID_IMPORT";
60
- /**
61
- * Raised when an NgModule contains an invalid type in `exports`.
62
- */
63
- ErrorCode[ErrorCode["NGMODULE_INVALID_EXPORT"] = 6003] = "NGMODULE_INVALID_EXPORT";
64
- /**
65
- * Raised when an NgModule contains a type in `exports` which is neither in `declarations` nor
66
- * otherwise imported.
67
- */
68
- ErrorCode[ErrorCode["NGMODULE_INVALID_REEXPORT"] = 6004] = "NGMODULE_INVALID_REEXPORT";
69
- /**
70
- * Raised when a `ModuleWithProviders` with a missing
71
- * generic type argument is passed into an `NgModule`.
72
- */
73
- ErrorCode[ErrorCode["NGMODULE_MODULE_WITH_PROVIDERS_MISSING_GENERIC"] = 6005] = "NGMODULE_MODULE_WITH_PROVIDERS_MISSING_GENERIC";
74
- /**
75
- * Raised when an NgModule exports multiple directives/pipes of the same name and the compiler
76
- * attempts to generate private re-exports within the NgModule file.
77
- */
78
- ErrorCode[ErrorCode["NGMODULE_REEXPORT_NAME_COLLISION"] = 6006] = "NGMODULE_REEXPORT_NAME_COLLISION";
79
- /**
80
- * Raised when a directive/pipe is part of the declarations of two or more NgModules.
81
- */
82
- ErrorCode[ErrorCode["NGMODULE_DECLARATION_NOT_UNIQUE"] = 6007] = "NGMODULE_DECLARATION_NOT_UNIQUE";
83
- /**
84
- * Raised when ngcc tries to inject a synthetic decorator over one that already exists.
85
- */
86
- ErrorCode[ErrorCode["NGCC_MIGRATION_DECORATOR_INJECTION_ERROR"] = 7001] = "NGCC_MIGRATION_DECORATOR_INJECTION_ERROR";
87
- /**
88
- * An element name failed validation against the DOM schema.
89
- */
90
- ErrorCode[ErrorCode["SCHEMA_INVALID_ELEMENT"] = 8001] = "SCHEMA_INVALID_ELEMENT";
91
- /**
92
- * An element's attribute name failed validation against the DOM schema.
93
- */
94
- ErrorCode[ErrorCode["SCHEMA_INVALID_ATTRIBUTE"] = 8002] = "SCHEMA_INVALID_ATTRIBUTE";
95
- /**
96
- * No matching directive was found for a `#ref="target"` expression.
97
- */
98
- ErrorCode[ErrorCode["MISSING_REFERENCE_TARGET"] = 8003] = "MISSING_REFERENCE_TARGET";
99
- /**
100
- * No matching pipe was found for a
101
- */
102
- ErrorCode[ErrorCode["MISSING_PIPE"] = 8004] = "MISSING_PIPE";
103
- /**
104
- * The left-hand side of an assignment expression was a template variable. Effectively, the
105
- * template looked like:
106
- *
107
- * ```
108
- * <ng-template let-something>
109
- * <button (click)="something = ...">...</button>
110
- * </ng-template>
111
- * ```
112
- *
113
- * Template variables are read-only.
114
- */
115
- ErrorCode[ErrorCode["WRITE_TO_READ_ONLY_VARIABLE"] = 8005] = "WRITE_TO_READ_ONLY_VARIABLE";
116
- /**
117
- * An injectable already has a `ɵprov` property.
118
- */
119
- ErrorCode[ErrorCode["INJECTABLE_DUPLICATE_PROV"] = 9001] = "INJECTABLE_DUPLICATE_PROV";
120
- })(ErrorCode = exports.ErrorCode || (exports.ErrorCode = {}));
121
- function ngErrorCode(code) {
122
- return parseInt('-99' + code);
123
- }
124
- exports.ngErrorCode = ngErrorCode;
125
- });
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvZGlhZ25vc3RpY3Mvc3JjL2NvZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7SUFFSCxJQUFZLFNBMEhYO0lBMUhELFdBQVksU0FBUztRQUNuQixzRkFBZ0MsQ0FBQTtRQUNoQyw4RUFBNEIsQ0FBQTtRQUM1Qiw0RUFBMkIsQ0FBQTtRQUMzQiw0RkFBbUMsQ0FBQTtRQUNuQyw0RUFBMkIsQ0FBQTtRQUUzQjs7V0FFRztRQUNILDBFQUEwQixDQUFBO1FBRTFCLDRFQUEyQixDQUFBO1FBQzNCLHNFQUF3QixDQUFBO1FBRXhCLHdGQUFpQyxDQUFBO1FBQ2pDLHNFQUF3QixDQUFBO1FBQ3hCLDBFQUEwQixDQUFBO1FBQzFCLHdGQUFpQyxDQUFBO1FBRWpDLDhGQUE4RjtRQUM5Riw0RUFBMkIsQ0FBQTtRQUUzQjs7O1dBR0c7UUFDSCwwR0FBMEMsQ0FBQTtRQUUxQywwRUFBMEIsQ0FBQTtRQUMxQiw0R0FBMkMsQ0FBQTtRQUUzQywwRkFBa0MsQ0FBQTtRQUNsQyxrSkFBOEQsQ0FBQTtRQUU5RDs7O1dBR0c7UUFDSCxvRkFBK0IsQ0FBQTtRQUUvQjs7V0FFRztRQUNILDRGQUFtQyxDQUFBO1FBRW5DOztXQUVHO1FBQ0gsa0ZBQThCLENBQUE7UUFFOUI7O1dBRUc7UUFDSCxrRkFBOEIsQ0FBQTtRQUU5Qjs7O1dBR0c7UUFDSCxzRkFBZ0MsQ0FBQTtRQUVoQzs7O1dBR0c7UUFDSCxnSUFBcUQsQ0FBQTtRQUVyRDs7O1dBR0c7UUFDSCxvR0FBdUMsQ0FBQTtRQUV2Qzs7V0FFRztRQUNILGtHQUFzQyxDQUFBO1FBRXRDOztXQUVHO1FBQ0gsb0hBQStDLENBQUE7UUFFL0M7O1dBRUc7UUFDSCxnRkFBNkIsQ0FBQTtRQUU3Qjs7V0FFRztRQUNILG9GQUErQixDQUFBO1FBRS9COztXQUVHO1FBQ0gsb0ZBQStCLENBQUE7UUFFL0I7O1dBRUc7UUFDSCw0REFBbUIsQ0FBQTtRQUVuQjs7Ozs7Ozs7Ozs7V0FXRztRQUNILDBGQUFrQyxDQUFBO1FBRWxDOztXQUVHO1FBQ0gsc0ZBQWdDLENBQUE7SUFDbEMsQ0FBQyxFQTFIVyxTQUFTLEdBQVQsaUJBQVMsS0FBVCxpQkFBUyxRQTBIcEI7SUFFRCxTQUFnQixXQUFXLENBQUMsSUFBZTtRQUN6QyxPQUFPLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUZELGtDQUVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5leHBvcnQgZW51bSBFcnJvckNvZGUge1xuICBERUNPUkFUT1JfQVJHX05PVF9MSVRFUkFMID0gMTAwMSxcbiAgREVDT1JBVE9SX0FSSVRZX1dST05HID0gMTAwMixcbiAgREVDT1JBVE9SX05PVF9DQUxMRUQgPSAxMDAzLFxuICBERUNPUkFUT1JfT05fQU5PTllNT1VTX0NMQVNTID0gMTAwNCxcbiAgREVDT1JBVE9SX1VORVhQRUNURUQgPSAxMDA1LFxuXG4gIC8qKlxuICAgKiBUaGlzIGVycm9yIGNvZGUgaW5kaWNhdGVzIHRoYXQgdGhlcmUgYXJlIGluY29tcGF0aWJsZSBkZWNvcmF0b3JzIG9uIGEgdHlwZSBvciBhIGNsYXNzIGZpZWxkLlxuICAgKi9cbiAgREVDT1JBVE9SX0NPTExJU0lPTiA9IDEwMDYsXG5cbiAgVkFMVUVfSEFTX1dST05HX1RZUEUgPSAxMDEwLFxuICBWQUxVRV9OT1RfTElURVJBTCA9IDEwMTEsXG5cbiAgQ09NUE9ORU5UX01JU1NJTkdfVEVNUExBVEUgPSAyMDAxLFxuICBQSVBFX01JU1NJTkdfTkFNRSA9IDIwMDIsXG4gIFBBUkFNX01JU1NJTkdfVE9LRU4gPSAyMDAzLFxuICBESVJFQ1RJVkVfTUlTU0lOR19TRUxFQ1RPUiA9IDIwMDQsXG5cbiAgLyoqIFJhaXNlZCB3aGVuIGFuIHVuZGVjb3JhdGVkIGNsYXNzIGlzIHBhc3NlZCBpbiBhcyBhIHByb3ZpZGVyIHRvIGEgbW9kdWxlIG9yIGEgZGlyZWN0aXZlLiAqL1xuICBVTkRFQ09SQVRFRF9QUk9WSURFUiA9IDIwMDUsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGEgRGlyZWN0aXZlIGluaGVyaXRzIGl0cyBjb25zdHJ1Y3RvciBmcm9tIGEgYmFzZSBjbGFzcyB3aXRob3V0IGFuIEFuZ3VsYXJcbiAgICogZGVjb3JhdG9yLlxuICAgKi9cbiAgRElSRUNUSVZFX0lOSEVSSVRTX1VOREVDT1JBVEVEX0NUT1IgPSAyMDA2LFxuXG4gIFNZTUJPTF9OT1RfRVhQT1JURUQgPSAzMDAxLFxuICBTWU1CT0xfRVhQT1JURURfVU5ERVJfRElGRkVSRU5UX05BTUUgPSAzMDAyLFxuXG4gIENPTkZJR19GTEFUX01PRFVMRV9OT19JTkRFWCA9IDQwMDEsXG4gIENPTkZJR19TVFJJQ1RfVEVNUExBVEVTX0lNUExJRVNfRlVMTF9URU1QTEFURV9UWVBFQ0hFQ0sgPSA0MDAyLFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhIGhvc3QgZXhwcmVzc2lvbiBoYXMgYSBwYXJzZSBlcnJvciwgc3VjaCBhcyBhIGhvc3QgbGlzdGVuZXIgb3IgaG9zdCBiaW5kaW5nXG4gICAqIGV4cHJlc3Npb24gY29udGFpbmluZyBhIHBpcGUuXG4gICAqL1xuICBIT1NUX0JJTkRJTkdfUEFSU0VfRVJST1IgPSA1MDAxLFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhbiBOZ01vZHVsZSBjb250YWlucyBhbiBpbnZhbGlkIHJlZmVyZW5jZSBpbiBgZGVjbGFyYXRpb25zYC5cbiAgICovXG4gIE5HTU9EVUxFX0lOVkFMSURfREVDTEFSQVRJT04gPSA2MDAxLFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhbiBOZ01vZHVsZSBjb250YWlucyBhbiBpbnZhbGlkIHR5cGUgaW4gYGltcG9ydHNgLlxuICAgKi9cbiAgTkdNT0RVTEVfSU5WQUxJRF9JTVBPUlQgPSA2MDAyLFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhbiBOZ01vZHVsZSBjb250YWlucyBhbiBpbnZhbGlkIHR5cGUgaW4gYGV4cG9ydHNgLlxuICAgKi9cbiAgTkdNT0RVTEVfSU5WQUxJRF9FWFBPUlQgPSA2MDAzLFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhbiBOZ01vZHVsZSBjb250YWlucyBhIHR5cGUgaW4gYGV4cG9ydHNgIHdoaWNoIGlzIG5laXRoZXIgaW4gYGRlY2xhcmF0aW9uc2Agbm9yXG4gICAqIG90aGVyd2lzZSBpbXBvcnRlZC5cbiAgICovXG4gIE5HTU9EVUxFX0lOVkFMSURfUkVFWFBPUlQgPSA2MDA0LFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhIGBNb2R1bGVXaXRoUHJvdmlkZXJzYCB3aXRoIGEgbWlzc2luZ1xuICAgKiBnZW5lcmljIHR5cGUgYXJndW1lbnQgaXMgcGFzc2VkIGludG8gYW4gYE5nTW9kdWxlYC5cbiAgICovXG4gIE5HTU9EVUxFX01PRFVMRV9XSVRIX1BST1ZJREVSU19NSVNTSU5HX0dFTkVSSUMgPSA2MDA1LFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhbiBOZ01vZHVsZSBleHBvcnRzIG11bHRpcGxlIGRpcmVjdGl2ZXMvcGlwZXMgb2YgdGhlIHNhbWUgbmFtZSBhbmQgdGhlIGNvbXBpbGVyXG4gICAqIGF0dGVtcHRzIHRvIGdlbmVyYXRlIHByaXZhdGUgcmUtZXhwb3J0cyB3aXRoaW4gdGhlIE5nTW9kdWxlIGZpbGUuXG4gICAqL1xuICBOR01PRFVMRV9SRUVYUE9SVF9OQU1FX0NPTExJU0lPTiA9IDYwMDYsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGEgZGlyZWN0aXZlL3BpcGUgaXMgcGFydCBvZiB0aGUgZGVjbGFyYXRpb25zIG9mIHR3byBvciBtb3JlIE5nTW9kdWxlcy5cbiAgICovXG4gIE5HTU9EVUxFX0RFQ0xBUkFUSU9OX05PVF9VTklRVUUgPSA2MDA3LFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBuZ2NjIHRyaWVzIHRvIGluamVjdCBhIHN5bnRoZXRpYyBkZWNvcmF0b3Igb3ZlciBvbmUgdGhhdCBhbHJlYWR5IGV4aXN0cy5cbiAgICovXG4gIE5HQ0NfTUlHUkFUSU9OX0RFQ09SQVRPUl9JTkpFQ1RJT05fRVJST1IgPSA3MDAxLFxuXG4gIC8qKlxuICAgKiBBbiBlbGVtZW50IG5hbWUgZmFpbGVkIHZhbGlkYXRpb24gYWdhaW5zdCB0aGUgRE9NIHNjaGVtYS5cbiAgICovXG4gIFNDSEVNQV9JTlZBTElEX0VMRU1FTlQgPSA4MDAxLFxuXG4gIC8qKlxuICAgKiBBbiBlbGVtZW50J3MgYXR0cmlidXRlIG5hbWUgZmFpbGVkIHZhbGlkYXRpb24gYWdhaW5zdCB0aGUgRE9NIHNjaGVtYS5cbiAgICovXG4gIFNDSEVNQV9JTlZBTElEX0FUVFJJQlVURSA9IDgwMDIsXG5cbiAgLyoqXG4gICAqIE5vIG1hdGNoaW5nIGRpcmVjdGl2ZSB3YXMgZm91bmQgZm9yIGEgYCNyZWY9XCJ0YXJnZXRcImAgZXhwcmVzc2lvbi5cbiAgICovXG4gIE1JU1NJTkdfUkVGRVJFTkNFX1RBUkdFVCA9IDgwMDMsXG5cbiAgLyoqXG4gICAqIE5vIG1hdGNoaW5nIHBpcGUgd2FzIGZvdW5kIGZvciBhXG4gICAqL1xuICBNSVNTSU5HX1BJUEUgPSA4MDA0LFxuXG4gIC8qKlxuICAgKiBUaGUgbGVmdC1oYW5kIHNpZGUgb2YgYW4gYXNzaWdubWVudCBleHByZXNzaW9uIHdhcyBhIHRlbXBsYXRlIHZhcmlhYmxlLiBFZmZlY3RpdmVseSwgdGhlXG4gICAqIHRlbXBsYXRlIGxvb2tlZCBsaWtlOlxuICAgKlxuICAgKiBgYGBcbiAgICogPG5nLXRlbXBsYXRlIGxldC1zb21ldGhpbmc+XG4gICAqICAgPGJ1dHRvbiAoY2xpY2spPVwic29tZXRoaW5nID0gLi4uXCI+Li4uPC9idXR0b24+XG4gICAqIDwvbmctdGVtcGxhdGU+XG4gICAqIGBgYFxuICAgKlxuICAgKiBUZW1wbGF0ZSB2YXJpYWJsZXMgYXJlIHJlYWQtb25seS5cbiAgICovXG4gIFdSSVRFX1RPX1JFQURfT05MWV9WQVJJQUJMRSA9IDgwMDUsXG5cbiAgLyoqXG4gICAqIEFuIGluamVjdGFibGUgYWxyZWFkeSBoYXMgYSBgybVwcm92YCBwcm9wZXJ0eS5cbiAgICovXG4gIElOSkVDVEFCTEVfRFVQTElDQVRFX1BST1YgPSA5MDAxLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gbmdFcnJvckNvZGUoY29kZTogRXJyb3JDb2RlKTogbnVtYmVyIHtcbiAgcmV0dXJuIHBhcnNlSW50KCctOTknICsgY29kZSk7XG59XG4iXX0=
@@ -1,193 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google Inc. 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/resource_loader", ["require", "exports", "tslib", "typescript", "@angular/compiler-cli/src/ngtsc/file_system", "@angular/compiler-cli/src/ngtsc/util/src/typescript"], factory);
15
- }
16
- })(function (require, exports) {
17
- "use strict";
18
- Object.defineProperty(exports, "__esModule", { value: true });
19
- var tslib_1 = require("tslib");
20
- var ts = require("typescript");
21
- var file_system_1 = require("@angular/compiler-cli/src/ngtsc/file_system");
22
- var typescript_1 = require("@angular/compiler-cli/src/ngtsc/util/src/typescript");
23
- var CSS_PREPROCESSOR_EXT = /(\.scss|\.less|\.styl)$/;
24
- /**
25
- * `ResourceLoader` which delegates to a `CompilerHost` resource loading method.
26
- */
27
- var HostResourceLoader = /** @class */ (function () {
28
- function HostResourceLoader(host, options) {
29
- this.host = host;
30
- this.options = options;
31
- this.cache = new Map();
32
- this.fetching = new Map();
33
- this.canPreload = !!this.host.readResource;
34
- this.rootDirs = typescript_1.getRootDirs(host, options);
35
- }
36
- /**
37
- * Resolve the url of a resource relative to the file that contains the reference to it.
38
- * The return value of this method can be used in the `load()` and `preload()` methods.
39
- *
40
- * Uses the provided CompilerHost if it supports mapping resources to filenames.
41
- * Otherwise, uses a fallback mechanism that searches the module resolution candidates.
42
- *
43
- * @param url The, possibly relative, url of the resource.
44
- * @param fromFile The path to the file that contains the URL of the resource.
45
- * @returns A resolved url of resource.
46
- * @throws An error if the resource cannot be resolved.
47
- */
48
- HostResourceLoader.prototype.resolve = function (url, fromFile) {
49
- var resolvedUrl = null;
50
- if (this.host.resourceNameToFileName) {
51
- resolvedUrl = this.host.resourceNameToFileName(url, fromFile);
52
- }
53
- else {
54
- resolvedUrl = this.fallbackResolve(url, fromFile);
55
- }
56
- if (resolvedUrl === null) {
57
- throw new Error("HostResourceResolver: could not resolve " + url + " in context of " + fromFile + ")");
58
- }
59
- return resolvedUrl;
60
- };
61
- /**
62
- * Preload the specified resource, asynchronously.
63
- *
64
- * Once the resource is loaded, its value is cached so it can be accessed synchronously via the
65
- * `load()` method.
66
- *
67
- * @param resolvedUrl The url (resolved by a call to `resolve()`) of the resource to preload.
68
- * @returns A Promise that is resolved once the resource has been loaded or `undefined` if the
69
- * file has already been loaded.
70
- * @throws An Error if pre-loading is not available.
71
- */
72
- HostResourceLoader.prototype.preload = function (resolvedUrl) {
73
- var _this = this;
74
- if (!this.host.readResource) {
75
- throw new Error('HostResourceLoader: the CompilerHost provided does not support pre-loading resources.');
76
- }
77
- if (this.cache.has(resolvedUrl)) {
78
- return undefined;
79
- }
80
- else if (this.fetching.has(resolvedUrl)) {
81
- return this.fetching.get(resolvedUrl);
82
- }
83
- var result = this.host.readResource(resolvedUrl);
84
- if (typeof result === 'string') {
85
- this.cache.set(resolvedUrl, result);
86
- return undefined;
87
- }
88
- else {
89
- var fetchCompletion = result.then(function (str) {
90
- _this.fetching.delete(resolvedUrl);
91
- _this.cache.set(resolvedUrl, str);
92
- });
93
- this.fetching.set(resolvedUrl, fetchCompletion);
94
- return fetchCompletion;
95
- }
96
- };
97
- /**
98
- * Load the resource at the given url, synchronously.
99
- *
100
- * The contents of the resource may have been cached by a previous call to `preload()`.
101
- *
102
- * @param resolvedUrl The url (resolved by a call to `resolve()`) of the resource to load.
103
- * @returns The contents of the resource.
104
- */
105
- HostResourceLoader.prototype.load = function (resolvedUrl) {
106
- if (this.cache.has(resolvedUrl)) {
107
- return this.cache.get(resolvedUrl);
108
- }
109
- var result = this.host.readResource ? this.host.readResource(resolvedUrl) :
110
- this.host.readFile(resolvedUrl);
111
- if (typeof result !== 'string') {
112
- throw new Error("HostResourceLoader: loader(" + resolvedUrl + ") returned a Promise");
113
- }
114
- this.cache.set(resolvedUrl, result);
115
- return result;
116
- };
117
- /**
118
- * Attempt to resolve `url` in the context of `fromFile`, while respecting the rootDirs
119
- * option from the tsconfig. First, normalize the file name.
120
- */
121
- HostResourceLoader.prototype.fallbackResolve = function (url, fromFile) {
122
- var e_1, _a;
123
- var candidateLocations;
124
- if (url.startsWith('/')) {
125
- // This path is not really an absolute path, but instead the leading '/' means that it's
126
- // rooted in the project rootDirs. So look for it according to the rootDirs.
127
- candidateLocations = this.getRootedCandidateLocations(url);
128
- }
129
- else {
130
- // This path is a "relative" path and can be resolved as such. To make this easier on the
131
- // downstream resolver, the './' prefix is added if missing to distinguish these paths from
132
- // absolute node_modules paths.
133
- if (!url.startsWith('.')) {
134
- url = "./" + url;
135
- }
136
- candidateLocations = this.getResolvedCandidateLocations(url, fromFile);
137
- }
138
- try {
139
- for (var candidateLocations_1 = tslib_1.__values(candidateLocations), candidateLocations_1_1 = candidateLocations_1.next(); !candidateLocations_1_1.done; candidateLocations_1_1 = candidateLocations_1.next()) {
140
- var candidate = candidateLocations_1_1.value;
141
- if (this.host.fileExists(candidate)) {
142
- return candidate;
143
- }
144
- else if (CSS_PREPROCESSOR_EXT.test(candidate)) {
145
- /**
146
- * If the user specified styleUrl points to *.scss, but the Sass compiler was run before
147
- * Angular, then the resource may have been generated as *.css. Simply try the resolution
148
- * again.
149
- */
150
- var cssFallbackUrl = candidate.replace(CSS_PREPROCESSOR_EXT, '.css');
151
- if (this.host.fileExists(cssFallbackUrl)) {
152
- return cssFallbackUrl;
153
- }
154
- }
155
- }
156
- }
157
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
158
- finally {
159
- try {
160
- if (candidateLocations_1_1 && !candidateLocations_1_1.done && (_a = candidateLocations_1.return)) _a.call(candidateLocations_1);
161
- }
162
- finally { if (e_1) throw e_1.error; }
163
- }
164
- return null;
165
- };
166
- HostResourceLoader.prototype.getRootedCandidateLocations = function (url) {
167
- // The path already starts with '/', so add a '.' to make it relative.
168
- var segment = ('.' + url);
169
- return this.rootDirs.map(function (rootDir) { return file_system_1.join(rootDir, segment); });
170
- };
171
- /**
172
- * TypeScript provides utilities to resolve module names, but not resource files (which aren't
173
- * a part of the ts.Program). However, TypeScript's module resolution can be used creatively
174
- * to locate where resource files should be expected to exist. Since module resolution returns
175
- * a list of file names that were considered, the loader can enumerate the possible locations
176
- * for the file by setting up a module resolution for it that will fail.
177
- */
178
- HostResourceLoader.prototype.getResolvedCandidateLocations = function (url, fromFile) {
179
- // clang-format off
180
- var failedLookup = ts.resolveModuleName(url + '.$ngresource$', fromFile, this.options, this.host);
181
- // clang-format on
182
- if (failedLookup.failedLookupLocations === undefined) {
183
- throw new Error("Internal error: expected to find failedLookupLocations during resolution of resource '" + url + "' in context of " + fromFile);
184
- }
185
- return failedLookup.failedLookupLocations
186
- .filter(function (candidate) { return candidate.endsWith('.$ngresource$.ts'); })
187
- .map(function (candidate) { return candidate.replace(/\.\$ngresource\$\.ts$/, ''); });
188
- };
189
- return HostResourceLoader;
190
- }());
191
- exports.HostResourceLoader = HostResourceLoader;
192
- });
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2VfbG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9yZXNvdXJjZV9sb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7O0lBRUgsK0JBQWlDO0lBS2pDLDJFQUFnRTtJQUNoRSxrRkFBa0Q7SUFFbEQsSUFBTSxvQkFBb0IsR0FBRyx5QkFBeUIsQ0FBQztJQUV2RDs7T0FFRztJQUNIO1FBUUUsNEJBQW9CLElBQWtCLEVBQVUsT0FBMkI7WUFBdkQsU0FBSSxHQUFKLElBQUksQ0FBYztZQUFVLFlBQU8sR0FBUCxPQUFPLENBQW9CO1lBUG5FLFVBQUssR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztZQUNsQyxhQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUM7WUFJcEQsZUFBVSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUdwQyxJQUFJLENBQUMsUUFBUSxHQUFHLHdCQUFXLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFFRDs7Ozs7Ozs7Ozs7V0FXRztRQUNILG9DQUFPLEdBQVAsVUFBUSxHQUFXLEVBQUUsUUFBZ0I7WUFDbkMsSUFBSSxXQUFXLEdBQWdCLElBQUksQ0FBQztZQUNwQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7Z0JBQ3BDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQzthQUMvRDtpQkFBTTtnQkFDTCxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7YUFDbkQ7WUFDRCxJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUU7Z0JBQ3hCLE1BQU0sSUFBSSxL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L0ksa0JBQWtCO1lBQ2xCLElBQUksWUFBWSxDQUFDLHFCQUFxQixLQUFLLFNBQVMsRUFBRTtnQkFDcEQsTUFBTSxJQUFJLEtBQUssQ0FDWCwyRkFBeUYsR0FBRyx3QkFBbUIsUUFBVSxDQUFDLENBQUM7YUFDaEk7WUFFRCxPQUFPLFlBQVksQ0FBQyxxQkFBcUI7aUJBQ3BDLE1BQU0sQ0FBQyxVQUFBLFNBQVMsSUFBSSxPQUFBLFNBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsRUFBdEMsQ0FBc0MsQ0FBQztpQkFDM0QsR0FBRyxDQUFDLFVBQUEsU0FBUyxJQUFJLE9BQUEsU0FBUyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLENBQUMsRUFBOUMsQ0FBOEMsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFDSCx5QkFBQztJQUFELENBQUMsQUFyS0QsSUFxS0M7SUFyS1ksZ0RBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtDb21waWxlckhvc3R9IGZyb20gJy4uL3RyYW5zZm9ybWVycy9hcGknO1xuXG5pbXBvcnQge1Jlc291cmNlTG9hZGVyfSBmcm9tICcuL2Fubm90YXRpb25zJztcbmltcG9ydCB7QWJzb2x1dGVGc1BhdGgsIFBhdGhTZWdtZW50LCBqb2lufSBmcm9tICcuL2ZpbGVfc3lzdGVtJztcbmltcG9ydCB7Z2V0Um9vdERpcnN9IGZyb20gJy4vdXRpbC9zcmMvdHlwZXNjcmlwdCc7XG5cbmNvbnN0IENTU19QUkVQUk9DRVNTT1JfRVhUID0gLyhcXC5zY3NzfFxcLmxlc3N8XFwuc3R5bCkkLztcblxuLyoqXG4gKiBgUmVzb3VyY2VMb2FkZXJgIHdoaWNoIGRlbGVnYXRlcyB0byBhIGBDb21waWxlckhvc3RgIHJlc291cmNlIGxvYWRpbmcgbWV0aG9kLlxuICovXG5leHBvcnQgY2xhc3MgSG9zdFJlc291cmNlTG9hZGVyIGltcGxlbWVudHMgUmVzb3VyY2VMb2FkZXIge1xuICBwcml2YXRlIGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBmZXRjaGluZyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPHZvaWQ+PigpO1xuXG4gIHByaXZhdGUgcm9vdERpcnM6IEFic29sdXRlRnNQYXRoW107XG5cbiAgY2FuUHJlbG9hZCA9ICEhdGhpcy5ob3N0LnJlYWRSZXNvdXJjZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGhvc3Q6IENvbXBpbGVySG9zdCwgcHJpdmF0ZSBvcHRpb25zOiB0cy5Db21waWxlck9wdGlvbnMpIHtcbiAgICB0aGlzLnJvb3REaXJzID0gZ2V0Um9vdERpcnMoaG9zdCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgdXJsIG9mIGEgcmVzb3VyY2UgcmVsYXRpdmUgdG8gdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgcmVmZXJlbmNlIHRvIGl0LlxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIGluIHRoZSBgbG9hZCgpYCBhbmQgYHByZWxvYWQoKWAgbWV0aG9kcy5cbiAgICpcbiAgICogVXNlcyB0aGUgcHJvdmlkZWQgQ29tcGlsZXJIb3N0IGlmIGl0IHN1cHBvcnRzIG1hcHBpbmcgcmVzb3VyY2VzIHRvIGZpbGVuYW1lcy5cbiAgICogT3RoZXJ3aXNlLCB1c2VzIGEgZmFsbGJhY2sgbWVjaGFuaXNtIHRoYXQgc2VhcmNoZXMgdGhlIG1vZHVsZSByZXNvbHV0aW9uIGNhbmRpZGF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB1cmwgVGhlLCBwb3NzaWJseSByZWxhdGl2ZSwgdXJsIG9mIHRoZSByZXNvdXJjZS5cbiAgICogQHBhcmFtIGZyb21GaWxlIFRoZSBwYXRoIHRvIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIFVSTCBvZiB0aGUgcmVzb3VyY2UuXG4gICAqIEByZXR1cm5zIEEgcmVzb2x2ZWQgdXJsIG9mIHJlc291cmNlLlxuICAgKiBAdGhyb3dzIEFuIGVycm9yIGlmIHRoZSByZXNvdXJjZSBjYW5ub3QgYmUgcmVzb2x2ZWQuXG4gICAqL1xuICByZXNvbHZlKHVybDogc3RyaW5nLCBmcm9tRmlsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzb2x2ZWRVcmw6IHN0cmluZ3xudWxsID0gbnVsbDtcbiAgICBpZiAodGhpcy5ob3N0LnJlc291cmNlTmFtZVRvRmlsZU5hbWUpIHtcbiAgICAgIHJlc29sdmVkVXJsID0gdGhpcy5ob3N0LnJlc291cmNlTmFtZVRvRmlsZU5hbWUodXJsLCBmcm9tRmlsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc29sdmVkVXJsID0gdGhpcy5mYWxsYmFja1Jlc29sdmUodXJsLCBmcm9tRmlsZSk7XG4gICAgfVxuICAgIGlmIChyZXNvbHZlZFVybCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBIb3N0UmVzb3VyY2VSZXNvbHZlcjogY291bGQgbm90IHJlc29sdmUgJHt1cmx9IGluIGNvbnRleHQgb2YgJHtmcm9tRmlsZX0pYCk7XG4gICAgfVxuICAgIHJldHVybiByZXNvbHZlZFVybDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVsb2FkIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UsIGFzeW5jaHJvbm91c2x5LlxuICAgKlxuICAgKiBPbmNlIHRoZSByZXNvdXJjZSBpcyBsb2FkZWQsIGl0cyB2YWx1ZSBpcyBjYWNoZWQgc28gaXQgY2FuIGJlIGFjY2Vzc2VkIHN5bmNocm9ub3VzbHkgdmlhIHRoZVxuICAgKiBgbG9hZCgpYCBtZXRob2QuXG4gICAqXG4gICAqIEBwYXJhbSByZXNvbHZlZFVybCBUaGUgdXJsIChyZXNvbHZlZCBieSBhIGNhbGwgdG8gYHJlc29sdmUoKWApIG9mIHRoZSByZXNvdXJjZSB0byBwcmVsb2FkLlxuICAgKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCBpcyByZXNvbHZlZCBvbmNlIHRoZSByZXNvdXJjZSBoYXMgYmVlbiBsb2FkZWQgb3IgYHVuZGVmaW5lZGAgaWYgdGhlXG4gICAqIGZpbGUgaGFzIGFscmVhZHkgYmVlbiBsb2FkZWQuXG4gICAqIEB0aHJvd3MgQW4gRXJyb3IgaWYgcHJlLWxvYWRpbmcgaXMgbm90IGF2YWlsYWJsZS5cbiAgICovXG4gIHByZWxvYWQocmVzb2x2ZWRVcmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD58dW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMuaG9zdC5yZWFkUmVzb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnSG9zdFJlc291cmNlTG9hZGVyOiB0aGUgQ29tcGlsZXJIb3N0IHByb3ZpZGVkIGRvZXMgbm90IHN1cHBvcnQgcHJlLWxvYWRpbmcgcmVzb3VyY2VzLicpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jYWNoZS5oYXMocmVzb2x2ZWRVcmwpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSBpZiAodGhpcy5mZXRjaGluZy5oYXMocmVzb2x2ZWRVcmwpKSB7XG4gICAgICByZXR1cm4gdGhpcy5mZXRjaGluZy5nZXQocmVzb2x2ZWRVcmwpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuaG9zdC5yZWFkUmVzb3VyY2UocmVzb2x2ZWRVcmwpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5jYWNoZS5zZXQocmVzb2x2ZWRVcmwsIHJlc3VsdCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmZXRjaENvbXBsZXRpb24gPSByZXN1bHQudGhlbihzdHIgPT4ge1xuICAgICAgICB0aGlzLmZldGNoaW5nLmRlbGV0ZShyZXNvbHZlZFVybCk7XG4gICAgICAgIHRoaXMuY2FjaGUuc2V0KHJlc29sdmVkVXJsLCBzdHIpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmZldGNoaW5nLnNldChyZXNvbHZlZFVybCwgZmV0Y2hDb21wbGV0aW9uKTtcbiAgICAgIHJldHVybiBmZXRjaENvbXBsZXRpb247XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIHJlc291cmNlIGF0IHRoZSBnaXZlbiB1cmwsIHN5bmNocm9ub3VzbHkuXG4gICAqXG4gICAqIFRoZSBjb250ZW50cyBvZiB0aGUgcmVzb3VyY2UgbWF5IGhhdmUgYmVlbiBjYWNoZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIGBwcmVsb2FkKClgLlxuICAgKlxuICAgKiBAcGFyYW0gcmVzb2x2ZWRVcmwgVGhlIHVybCAocmVzb2x2ZWQgYnkgYSBjYWxsIHRvIGByZXNvbHZlKClgKSBvZiB0aGUgcmVzb3VyY2UgdG8gbG9hZC5cbiAgICogQHJldHVybnMgVGhlIGNvbnRlbnRzIG9mIHRoZSByZXNvdXJjZS5cbiAgICovXG4gIGxvYWQocmVzb2x2ZWRVcmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuY2FjaGUuaGFzKHJlc29sdmVkVXJsKSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2FjaGUuZ2V0KHJlc29sdmVkVXJsKSAhO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuaG9zdC5yZWFkUmVzb3VyY2UgPyB0aGlzLmhvc3QucmVhZFJlc291cmNlKHJlc29sdmVkVXJsKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaG9zdC5yZWFkRmlsZShyZXNvbHZlZFVybCk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEhvc3RSZXNvdXJjZUxvYWRlcjogbG9hZGVyKCR7cmVzb2x2ZWRVcmx9KSByZXR1cm5lZCBhIFByb21pc2VgKTtcbiAgICB9XG4gICAgdGhpcy5jYWNoZS5zZXQocmVzb2x2ZWRVcmwsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRlbXB0IHRvIHJlc29sdmUgYHVybGAgaW4gdGhlIGNvbnRleHQgb2YgYGZyb21GaWxlYCwgd2hpbGUgcmVzcGVjdGluZyB0aGUgcm9vdERpcnNcbiAgICogb3B0aW9uIGZyb20gdGhlIHRzY29uZmlnLiBGaXJzdCwgbm9ybWFsaXplIHRoZSBmaWxlIG5hbWUuXG4gICAqL1xuICBwcml2YXRlIGZhbGxiYWNrUmVzb2x2ZSh1cmw6IHN0cmluZywgZnJvbUZpbGU6IHN0cmluZyk6IHN0cmluZ3xudWxsIHtcbiAgICBsZXQgY2FuZGlkYXRlTG9jYXRpb25zOiBzdHJpbmdbXTtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgLy8gVGhpcyBwYXRoIGlzIG5vdCByZWFsbHkgYW4gYWJzb2x1dGUgcGF0aCwgYnV0IGluc3RlYWQgdGhlIGxlYWRpbmcgJy8nIG1lYW5zIHRoYXQgaXQnc1xuICAgICAgLy8gcm9vdGVkIGluIHRoZSBwcm9qZWN0IHJvb3REaXJzLiBTbyBsb29rIGZvciBpdCBhY2NvcmRpbmcgdG8gdGhlIHJvb3REaXJzLlxuICAgICAgY2FuZGlkYXRlTG9jYXRpb25zID0gdGhpcy5nZXRSb290ZWRDYW5kaWRhdGVMb2NhdGlvbnModXJsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBwYXRoIGlzIGEgXCJyZWxhdGl2ZVwiIHBhdGggYW5kIGNhbiBiZSByZXNvbHZlZCBhcyBzdWNoLiBUbyBtYWtlIHRoaXMgZWFzaWVyIG9uIHRoZVxuICAgICAgLy8gZG93bnN0cmVhbSByZXNvbHZlciwgdGhlICcuLycgcHJlZml4IGlzIGFkZGVkIGlmIG1pc3NpbmcgdG8gZGlzdGluZ3Vpc2ggdGhlc2UgcGF0aHMgZnJvbVxuICAgICAgLy8gYWJzb2x1dGUgbm9kZV9tb2R1bGVzIHBhdGhzLlxuICAgICAgaWYgKCF1cmwuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICAgIHVybCA9IGAuLyR7dXJsfWA7XG4gICAgICB9XG4gICAgICBjYW5kaWRhdGVMb2NhdGlvbnMgPSB0aGlzLmdldFJlc29sdmVkQ2FuZGlkYXRlTG9jYXRpb25zKHVybCwgZnJvbUZpbGUpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIGNhbmRpZGF0ZUxvY2F0aW9ucykge1xuICAgICAgaWYgKHRoaXMuaG9zdC5maWxlRXhpc3RzKGNhbmRpZGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgICAgIH0gZWxzZSBpZiAoQ1NTX1BSRVBST0NFU1NPUl9FWFQudGVzdChjYW5kaWRhdGUpKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiB0aGUgdXNlciBzcGVjaWZpZWQgc3R5bGVVcmwgcG9pbnRzIHRvICouc2NzcywgYnV0IHRoZSBTYXNzIGNvbXBpbGVyIHdhcyBydW4gYmVmb3JlXG4gICAgICAgICAqIEFuZ3VsYXIsIHRoZW4gdGhlIHJlc291cmNlIG1heSBoYXZlIGJlZW4gZ2VuZXJhdGVkIGFzICouY3NzLiBTaW1wbHkgdHJ5IHRoZSByZXNvbHV0aW9uXG4gICAgICAgICAqIGFnYWluLlxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgY3NzRmFsbGJhY2tVcmwgPSBjYW5kaWRhdGUucmVwbGFjZShDU1NfUFJFUFJPQ0VTU09SX0VYVCwgJy5jc3MnKTtcbiAgICAgICAgaWYgKHRoaXMuaG9zdC5maWxlRXhpc3RzKGNzc0ZhbGxiYWNrVXJsKSkge1xuICAgICAgICAgIHJldHVybiBjc3NGYWxsYmFja1VybDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Um9vdGVkQ2FuZGlkYXRlTG9jYXRpb25zKHVybDogc3RyaW5nKTogQWJzb2x1dGVGc1BhdGhbXSB7XG4gICAgLy8gVGhlIHBhdGggYWxyZWFkeSBzdGFydHMgd2l0aCAnLycsIHNvIGFkZCBhICcuJyB0byBtYWtlIGl0IHJlbGF0aXZlLlxuICAgIGNvbnN0IHNlZ21lbnQ6IFBhdGhTZWdtZW50ID0gKCcuJyArIHVybCkgYXMgUGF0aFNlZ21lbnQ7XG4gICAgcmV0dXJuIHRoaXMucm9vdERpcnMubWFwKHJvb3REaXIgPT4gam9pbihyb290RGlyLCBzZWdtZW50KSk7XG4gIH1cblxuICAvKipcbiAgICogVHlwZVNjcmlwdCBwcm92aWRlcyB1dGlsaXRpZXMgdG8gcmVzb2x2ZSBtb2R1bGUgbmFtZXMsIGJ1dCBub3QgcmVzb3VyY2UgZmlsZXMgKHdoaWNoIGFyZW4ndFxuICAgKiBhIHBhcnQgb2YgdGhlIHRzLlByb2dyYW0pLiBIb3dldmVyLCBUeXBlU2NyaXB0J3MgbW9kdWxlIHJlc29sdXRpb24gY2FuIGJlIHVzZWQgY3JlYXRpdmVseVxuICAgKiB0byBsb2NhdGUgd2hlcmUgcmVzb3VyY2UgZmlsZXMgc2hvdWxkIGJlIGV4cGVjdGVkIHRvIGV4aXN0LiBTaW5jZSBtb2R1bGUgcmVzb2x1dGlvbiByZXR1cm5zXG4gICAqIGEgbGlzdCBvZiBmaWxlIG5hbWVzIHRoYXQgd2VyZSBjb25zaWRlcmVkLCB0aGUgbG9hZGVyIGNhbiBlbnVtZXJhdGUgdGhlIHBvc3NpYmxlIGxvY2F0aW9uc1xuICAgKiBmb3IgdGhlIGZpbGUgYnkgc2V0dGluZyB1cCBhIG1vZHVsZSByZXNvbHV0aW9uIGZvciBpdCB0aGF0IHdpbGwgZmFpbC5cbiAgICovXG4gIHByaXZhdGUgZ2V0UmVzb2x2ZWRDYW5kaWRhdGVMb2NhdGlvbnModXJsOiBzdHJpbmcsIGZyb21GaWxlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgLy8gYGZhaWxlZExvb2t1cExvY2F0aW9uc2AgaXMgaW4gdGhlIG5hbWUgb2YgdGhlIHR5cGUgdHMuUmVzb2x2ZWRNb2R1bGVXaXRoRmFpbGVkTG9va3VwTG9jYXRpb25zXG4gICAgLy8gYnV0IGlzIG1hcmtlZCBAaW50ZXJuYWwgaW4gVHlwZVNjcmlwdC4gU2VlXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yODc3MC5cbiAgICB0eXBlIFJlc29sdmVkTW9kdWxlV2l0aEZhaWxlZExvb2t1cExvY2F0aW9ucyA9XG4gICAgICAgIHRzLlJlc29sdmVkTW9kdWxlV2l0aEZhaWxlZExvb2t1cExvY2F0aW9ucyAmIHtmYWlsZWRMb29rdXBMb2NhdGlvbnM6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPn07XG5cbiAgICAvLyBjbGFuZy1mb3JtYXQgb2ZmXG4gICAgY29uc3QgZmFpbGVkTG9va3VwID0gdHMucmVzb2x2ZU1vZHVsZU5hbWUodXJsICsgJy4kbmdyZXNvdXJjZSQnLCBmcm9tRmlsZSwgdGhpcy5vcHRpb25zLCB0aGlzLmhvc3QpIGFzIFJlc29sdmVkTW9kdWxlV2l0aEZhaWxlZExvb2t1cExvY2F0aW9ucztcbiAgICAvLyBjbGFuZy1mb3JtYXQgb25cbiAgICBpZiAoZmFpbGVkTG9va3VwLmZhaWxlZExvb2t1cExvY2F0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEludGVybmFsIGVycm9yOiBleHBlY3RlZCB0byBmaW5kIGZhaWxlZExvb2t1cExvY2F0aW9ucyBkdXJpbmcgcmVzb2x1dGlvbiBvZiByZXNvdXJjZSAnJHt1cmx9JyBpbiBjb250ZXh0IG9mICR7ZnJvbUZpbGV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhaWxlZExvb2t1cC5mYWlsZWRMb29rdXBMb2NhdGlvbnNcbiAgICAgICAgLmZpbHRlcihjYW5kaWRhdGUgPT4gY2FuZGlkYXRlLmVuZHNXaXRoKCcuJG5ncmVzb3VyY2UkLnRzJykpXG4gICAgICAgIC5tYXAoY2FuZGlkYXRlID0+IGNhbmRpZGF0ZS5yZXBsYWNlKC9cXC5cXCRuZ3Jlc291cmNlXFwkXFwudHMkLywgJycpKTtcbiAgfVxufVxuIl19
@@ -1,46 +0,0 @@
1
- /// <amd-module name="@angular/compiler-cli/src/ngtsc/shims/src/host" />
2
- /**
3
- * @license
4
- * Copyright Google Inc. All Rights Reserved.
5
- *
6
- * Use of this source code is governed by an MIT-style license that can be
7
- * found in the LICENSE file at https://angular.io/license
8
- */
9
- import * as ts from 'typescript';
10
- import { AbsoluteFsPath } from '../../file_system';
11
- export interface ShimGenerator {
12
- /**
13
- * Returns `true` if this generator is intended to handle the given file.
14
- */
15
- recognize(fileName: AbsoluteFsPath): boolean;
16
- /**
17
- * Generate a shim's `ts.SourceFile` for the given original file.
18
- *
19
- * `readFile` is a function which allows the generator to look up the contents of existing source
20
- * files. It returns null if the requested file doesn't exist.
21
- *
22
- * If `generate` returns null, then the shim generator declines to generate the file after all.
23
- */
24
- generate(genFileName: AbsoluteFsPath, readFile: (fileName: string) => ts.SourceFile | null): ts.SourceFile | null;
25
- }
26
- /**
27
- * A wrapper around a `ts.CompilerHost` which supports generated files.
28
- */
29
- export declare class GeneratedShimsHostWrapper implements ts.CompilerHost {
30
- private delegate;
31
- private shimGenerators;
32
- constructor(delegate: ts.CompilerHost, shimGenerators: ShimGenerator[]);
33
- resolveModuleNames?: (moduleNames: string[], containingFile: string, reusedNames: string[], redirectedReference: ts.ResolvedProjectReference, options?: ts.CompilerOptions) => (ts.ResolvedModule | undefined)[];
34
- resolveTypeReferenceDirectives?: (names: string[], containingFile: string) => ts.ResolvedTypeReferenceDirective[];
35
- directoryExists?: (directoryName: string) => boolean;
36
- getSourceFile(fileName: string, languageVersion: ts.ScriptTarget, onError?: ((message: string) => void) | undefined, shouldCreateNewSourceFile?: boolean | undefined): ts.SourceFile | undefined;
37
- getDefaultLibFileName(options: ts.CompilerOptions): string;
38
- writeFile(fileName: string, data: string, writeByteOrderMark: boolean, onError: ((message: string) => void) | undefined, sourceFiles: ReadonlyArray<ts.SourceFile> | undefined): void;
39
- getCurrentDirectory(): string;
40
- getDirectories?: (path: string) => string[];
41
- getCanonicalFileName(fileName: string): string;
42
- useCaseSensitiveFileNames(): boolean;
43
- getNewLine(): string;
44
- fileExists(fileName: string): boolean;
45
- readFile(fileName: string): string | undefined;
46
- }
@@ -1,82 +0,0 @@
1
- (function (factory) {
2
- if (typeof module === "object" && typeof module.exports === "object") {
3
- var v = factory(require, exports);
4
- if (v !== undefined) module.exports = v;
5
- }
6
- else if (typeof define === "function" && define.amd) {
7
- define("@angular/compiler-cli/src/ngtsc/shims/src/host", ["require", "exports", "@angular/compiler-cli/src/ngtsc/file_system"], factory);
8
- }
9
- })(function (require, exports) {
10
- "use strict";
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- var file_system_1 = require("@angular/compiler-cli/src/ngtsc/file_system");
13
- /**
14
- * A wrapper around a `ts.CompilerHost` which supports generated files.
15
- */
16
- var GeneratedShimsHostWrapper = /** @class */ (function () {
17
- function GeneratedShimsHostWrapper(delegate, shimGenerators) {
18
- this.delegate = delegate;
19
- this.shimGenerators = shimGenerators;
20
- if (delegate.resolveModuleNames !== undefined) {
21
- this.resolveModuleNames =
22
- function (moduleNames, containingFile, reusedNames, redirectedReference, options) {
23
- // FIXME: Additional parameters are required in TS3.6, but ignored in 3.5.
24
- // Remove the any cast once google3 is fully on TS3.6.
25
- return delegate.resolveModuleNames(moduleNames, containingFile, reusedNames, redirectedReference, options);
26
- };
27
- }
28
- if (delegate.resolveTypeReferenceDirectives) {
29
- this.resolveTypeReferenceDirectives = function (names, containingFile) {
30
- return delegate.resolveTypeReferenceDirectives(names, containingFile);
31
- };
32
- }
33
- if (delegate.directoryExists !== undefined) {
34
- this.directoryExists = function (directoryName) { return delegate.directoryExists(directoryName); };
35
- }
36
- if (delegate.getDirectories !== undefined) {
37
- this.getDirectories = function (path) { return delegate.getDirectories(path); };
38
- }
39
- }
40
- GeneratedShimsHostWrapper.prototype.getSourceFile = function (fileName, languageVersion, onError, shouldCreateNewSourceFile) {
41
- var _this = this;
42
- for (var i = 0; i < this.shimGenerators.length; i++) {
43
- var generator = this.shimGenerators[i];
44
- // TypeScript internal paths are guaranteed to be POSIX-like absolute file paths.
45
- var absoluteFsPath = file_system_1.resolve(fileName);
46
- if (generator.recognize(absoluteFsPath)) {
47
- var readFile = function (originalFile) {
48
- return _this.delegate.getSourceFile(originalFile, languageVersion, onError, shouldCreateNewSourceFile) ||
49
- null;
50
- };
51
- return generator.generate(absoluteFsPath, readFile) || undefined;
52
- }
53
- }
54
- return this.delegate.getSourceFile(fileName, languageVersion, onError, shouldCreateNewSourceFile);
55
- };
56
- GeneratedShimsHostWrapper.prototype.getDefaultLibFileName = function (options) {
57
- return this.delegate.getDefaultLibFileName(options);
58
- };
59
- GeneratedShimsHostWrapper.prototype.writeFile = function (fileName, data, writeByteOrderMark, onError, sourceFiles) {
60
- return this.delegate.writeFile(fileName, data, writeByteOrderMark, onError, sourceFiles);
61
- };
62
- GeneratedShimsHostWrapper.prototype.getCurrentDirectory = function () { return this.delegate.getCurrentDirectory(); };
63
- GeneratedShimsHostWrapper.prototype.getCanonicalFileName = function (fileName) {
64
- return this.delegate.getCanonicalFileName(fileName);
65
- };
66
- GeneratedShimsHostWrapper.prototype.useCaseSensitiveFileNames = function () { return this.delegate.useCaseSensitiveFileNames(); };
67
- GeneratedShimsHostWrapper.prototype.getNewLine = function () { return this.delegate.getNewLine(); };
68
- GeneratedShimsHostWrapper.prototype.fileExists = function (fileName) {
69
- // Consider the file as existing whenever
70
- // 1) it really does exist in the delegate host, or
71
- // 2) at least one of the shim generators recognizes it
72
- // Note that we can pass the file name as branded absolute fs path because TypeScript
73
- // internally only passes POSIX-like paths.
74
- return this.delegate.fileExists(fileName) ||
75
- this.shimGenerators.some(function (gen) { return gen.recognize(file_system_1.absoluteFrom(fileName)); });
76
- };
77
- GeneratedShimsHostWrapper.prototype.readFile = function (fileName) { return this.delegate.readFile(fileName); };
78
- return GeneratedShimsHostWrapper;
79
- }());
80
- exports.GeneratedShimsHostWrapper = GeneratedShimsHostWrapper;
81
- });
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2Mvc2hpbXMvc3JjL2hvc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUFRQSwyRUFBd0U7SUFvQnhFOztPQUVHO0lBQ0g7UUFDRSxtQ0FBb0IsUUFBeUIsRUFBVSxjQUErQjtZQUFsRSxhQUFRLEdBQVIsUUFBUSxDQUFpQjtZQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFpQjtZQUNwRixJQUFJLFFBQVEsQ0FBQyxrQkFBa0IsS0FBSyxTQUFTLEVBQUU7Z0JBQzdDLElBQUksQ0FBQyxrQkFBa0I7b0JBQ25CLFVBQUMsV0FBcUIsRUFBRSxjQUFzQixFQUFFLFdBQXFCLEVBQ3BFLG1CQUFnRCxFQUFFLE9BQTRCO3dCQUMzRSwwRUFBMEU7d0JBQzlFLHNEQUFzRDt3QkFDdEQsT0FBQyxRQUFRLENBQUMsa0JBQTRCLENBQ2xDLFdBQVcsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE9BQU8sQ0FBQztvQkFEM0UsQ0FDMkUsQ0FBQzthQUNqRjtZQUNELElBQUksUUFBUSxDQUFDLDhCQUE4QixFQUFFO2dCQU0zQyxJQUFJLENBQUMsOEJBQThCLEdBQUcsVUFBQyxLQUFlLEVBQUUsY0FBc0I7b0JBQzFFLE9BQUMsUUFBUSxDQUFDLDhCQUFzRSxDQUM1RSxLQUFLLEVBQUUsY0FBYyxDQUFDO2dCQUQxQixDQUMwQixDQUFDO2FBQ2hDO1lBQ0QsSUFBSSxRQUFRLENBQUMsZUFBZSxLQUFLLFNBQVMsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxVQUFDLGFBQXFCLElBQUssT0FBQSxRQUFRLENBQUMsZUFBaUIsQ0FBQyxhQUFhLENBQUMsRUFBekMsQ0FBeUMsQ0FBQzthQUM3RjtZQUNELElBQUksUUFBUSxDQUFDLGNBQWMsS0FBSyxTQUFTLEVBQUU7Z0JB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cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQge0Fic29sdXRlRnNQYXRoLCBhYnNvbHV0ZUZyb20sIHJlc29sdmV9IGZyb20gJy4uLy4uL2ZpbGVfc3lzdGVtJztcblxuZXhwb3J0IGludGVyZmFjZSBTaGltR2VuZXJhdG9yIHtcbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIHRoaXMgZ2VuZXJhdG9yIGlzIGludGVuZGVkIHRvIGhhbmRsZSB0aGUgZ2l2ZW4gZmlsZS5cbiAgICovXG4gIHJlY29nbml6ZShmaWxlTmFtZTogQWJzb2x1dGVGc1BhdGgpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIHNoaW0ncyBgdHMuU291cmNlRmlsZWAgZm9yIHRoZSBnaXZlbiBvcmlnaW5hbCBmaWxlLlxuICAgKlxuICAgKiBgcmVhZEZpbGVgIGlzIGEgZnVuY3Rpb24gd2hpY2ggYWxsb3dzIHRoZSBnZW5lcmF0b3IgdG8gbG9vayB1cCB0aGUgY29udGVudHMgb2YgZXhpc3Rpbmcgc291cmNlXG4gICAqIGZpbGVzLiBJdCByZXR1cm5zIG51bGwgaWYgdGhlIHJlcXVlc3RlZCBmaWxlIGRvZXNuJ3QgZXhpc3QuXG4gICAqXG4gICAqIElmIGBnZW5lcmF0ZWAgcmV0dXJucyBudWxsLCB0aGVuIHRoZSBzaGltIGdlbmVyYXRvciBkZWNsaW5lcyB0byBnZW5lcmF0ZSB0aGUgZmlsZSBhZnRlciBhbGwuXG4gICAqL1xuICBnZW5lcmF0ZShnZW5GaWxlTmFtZTogQWJzb2x1dGVGc1BhdGgsIHJlYWRGaWxlOiAoZmlsZU5hbWU6IHN0cmluZykgPT4gdHMuU291cmNlRmlsZSB8IG51bGwpOlxuICAgICAgdHMuU291cmNlRmlsZXxudWxsO1xufVxuXG4vKipcbiAqIEEgd3JhcHBlciBhcm91bmQgYSBgdHMuQ29tcGlsZXJIb3N0YCB3aGljaCBzdXBwb3J0cyBnZW5lcmF0ZWQgZmlsZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBHZW5lcmF0ZWRTaGltc0hvc3RXcmFwcGVyIGltcGxlbWVudHMgdHMuQ29tcGlsZXJIb3N0IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkZWxlZ2F0ZTogdHMuQ29tcGlsZXJIb3N0LCBwcml2YXRlIHNoaW1HZW5lcmF0b3JzOiBTaGltR2VuZXJhdG9yW10pIHtcbiAgICBpZiAoZGVsZWdhdGUucmVzb2x2ZU1vZHVsZU5hbWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucmVzb2x2ZU1vZHVsZU5hbWVzID1cbiAgICAgICAgICAobW9kdWxlTmFtZXM6IHN0cmluZ1tdLCBjb250YWluaW5nRmlsZTogc3RyaW5nLCByZXVzZWROYW1lczogc3RyaW5nW10sXG4gICAgICAgICAgIHJlZGlyZWN0ZWRSZWZlcmVuY2U6IHRzLlJlc29sdmVkUHJvamVjdFJlZmVyZW5jZSwgb3B0aW9ucz86IHRzLkNvbXBpbGVyT3B0aW9ucykgPT5cbiAgICAgICAgICAgICAgLy8gRklYTUU6IEFkZGl0aW9uYWwgcGFyYW1ldGVycyBhcmUgcmVxdWlyZWQgaW4gVFMzLjYsIGJ1dCBpZ25vcmVkIGluIDMuNS5cbiAgICAgICAgICAvLyBSZW1vdmUgdGhlIGFueSBjYXN0IG9uY2UgZ29vZ2xlMyBpcyBmdWxseSBvbiBUUzMuNi5cbiAgICAgICAgICAoZGVsZWdhdGUucmVzb2x2ZU1vZHVsZU5hbWVzIGFzIGFueSkgIShcbiAgICAgICAgICAgICAgbW9kdWxlTmFtZXMsIGNvbnRhaW5pbmdGaWxlLCByZXVzZWROYW1lcywgcmVkaXJlY3RlZFJlZmVyZW5jZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChkZWxlZ2F0ZS5yZXNvbHZlVHlwZVJlZmVyZW5jZURpcmVjdGl2ZXMpIHtcbiAgICAgIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBUeXBlU2NyaXB0IDIuOSBhbmQgb2xkZXIgc2luY2UgcmV0dXJuXG4gICAgICAvLyB0eXBlIGhhcyBjaGFuZ2VkIGZyb20gKHRzLlJlc29sdmVkVHlwZVJlZmVyZW5jZURpcmVjdGl2ZSB8IHVuZGVmaW5lZClbXVxuICAgICAgLy8gdG8gdHMuUmVzb2x2ZWRUeXBlUmVmZXJlbmNlRGlyZWN0aXZlW10gaW4gVHlwZXNjcmlwdCAzLjBcbiAgICAgIHR5cGUgdHMzUmVzb2x2ZVR5cGVSZWZlcmVuY2VEaXJlY3RpdmVzID0gKG5hbWVzOiBzdHJpbmdbXSwgY29udGFpbmluZ0ZpbGU6IHN0cmluZykgPT5cbiAgICAgICAgICB0cy5SZXNvbHZlZFR5cGVSZWZlcmVuY2VEaXJlY3RpdmVbXTtcbiAgICAgIHRoaXMucmVzb2x2ZVR5cGVSZWZlcmVuY2VEaXJlY3RpdmVzID0gKG5hbWVzOiBzdHJpbmdbXSwgY29udGFpbmluZ0ZpbGU6IHN0cmluZykgPT5cbiAgICAgICAgICAoZGVsZWdhdGUucmVzb2x2ZVR5cGVSZWZlcmVuY2VEaXJlY3RpdmVzIGFzIHRzM1Jlc29sdmVUeXBlUmVmZXJlbmNlRGlyZWN0aXZlcykgIShcbiAgICAgICAgICAgICAgbmFtZXMsIGNvbnRhaW5pbmdGaWxlKTtcbiAgICB9XG4gICAgaWYgKGRlbGVnYXRlLmRpcmVjdG9yeUV4aXN0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmRpcmVjdG9yeUV4aXN0cyA9IChkaXJlY3RvcnlOYW1lOiBzdHJpbmcpID0+IGRlbGVnYXRlLmRpcmVjdG9yeUV4aXN0cyAhKGRpcmVjdG9yeU5hbWUpO1xuICAgIH1cbiAgICBpZiAoZGVsZWdhdGUuZ2V0RGlyZWN0b3JpZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5nZXREaXJlY3RvcmllcyA9IChwYXRoOiBzdHJpbmcpID0+IGRlbGVnYXRlLmdldERpcmVjdG9yaWVzICEocGF0aCk7XG4gICAgfVxuICB9XG5cbiAgLy8gRklYTUU6IEFkZGl0aW9uYWwgb3B0aW9ucyBwYXJhbSBpcyBuZWVkZWQgaW4gVFMzLjYsIGJ1dCBub3QgYWxsb293ZWQgaW4gMy41LlxuICAvLyBNYWtlIHRoZSBvcHRpb25zIHBhcmFtIG5vbi1vcHRpb25hbCBvbmNlIGdvb2dsZTMgaXMgZnVsbHkgb24gVFMzLjYuXG4gIHJlc29sdmVNb2R1bGVOYW1lcz86XG4gICAgICAobW9kdWxlTmFtZXM6IHN0cmluZ1tdLCBjb250YWluaW5nRmlsZTogc3RyaW5nLCByZXVzZWROYW1lczogc3RyaW5nW10sXG4gICAgICAgcmVkaXJlY3RlZFJlZmVyZW5jZTogdHMuUmVzb2x2ZWRQcm9qZWN0UmVmZXJlbmNlLFxuICAgICAgIG9wdGlvbnM/OiB0cy5Db21waWxlck9wdGlvbnMpID0+ICh0cy5SZXNvbHZlZE1vZHVsZSB8IHVuZGVmaW5lZClbXTtcblxuICByZXNvbHZlVHlwZVJlZmVyZW5jZURpcmVjdGl2ZXM/OlxuICAgICAgKG5hbWVzOiBzdHJpbmdbXSwgY29udGFpbmluZ0ZpbGU6IHN0cmluZykgPT4gdHMuUmVzb2x2ZWRUeXBlUmVmZXJlbmNlRGlyZWN0aXZlW107XG5cbiAgZGlyZWN0b3J5RXhpc3RzPzogKGRpcmVjdG9yeU5hbWU6IHN0cmluZykgPT4gYm9vbGVhbjtcblxuICBnZXRTb3VyY2VGaWxlKFxuICAgICAgZmlsZU5hbWU6IHN0cmluZywgbGFuZ3VhZ2VWZXJzaW9uOiB0cy5TY3JpcHRUYXJnZXQsXG4gICAgICBvbkVycm9yPzogKChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQpfHVuZGVmaW5lZCxcbiAgICAgIHNob3VsZENyZWF0ZU5ld1NvdXJjZUZpbGU/OiBib29sZWFufHVuZGVmaW5lZCk6IHRzLlNvdXJjZUZpbGV8dW5kZWZpbmVkIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2hpbUdlbmVyYXRvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGdlbmVyYXRvciA9IHRoaXMuc2hpbUdlbmVyYXRvcnNbaV07XG4gICAgICAvLyBUeXBlU2NyaXB0IGludGVybmFsIHBhdGhzIGFyZSBndWFyYW50ZWVkIHRvIGJlIFBPU0lYLWxpa2UgYWJzb2x1dGUgZmlsZSBwYXRocy5cbiAgICAgIGNvbnN0IGFic29sdXRlRnNQYXRoID0gcmVzb2x2ZShmaWxlTmFtZSk7XG4gICAgICBpZiAoZ2VuZXJhdG9yLnJlY29nbml6ZShhYnNvbHV0ZUZzUGF0aCkpIHtcbiAgICAgICAgY29uc3QgcmVhZEZpbGUgPSAob3JpZ2luYWxGaWxlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5nZXRTb3VyY2VGaWxlKFxuICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxGaWxlLCBsYW5ndWFnZVZlcnNpb24sIG9uRXJyb3IsIHNob3VsZENyZWF0ZU5ld1NvdXJjZUZpbGUpIHx8XG4gICAgICAgICAgICAgIG51bGw7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5nZW5lcmF0ZShhYnNvbHV0ZUZzUGF0aCwgcmVhZEZpbGUpIHx8IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuZ2V0U291cmNlRmlsZShcbiAgICAgICAgZmlsZU5hbWUsIGxhbmd1YWdlVmVyc2lvbiwgb25FcnJvciwgc2hvdWxkQ3JlYXRlTmV3U291cmNlRmlsZSk7XG4gIH1cblxuICBnZXREZWZhdWx0TGliRmlsZU5hbWUob3B0aW9uczogdHMuQ29tcGlsZXJPcHRpb25zKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5nZXREZWZhdWx0TGliRmlsZU5hbWUob3B0aW9ucyk7XG4gIH1cblxuICB3cml0ZUZpbGUoXG4gICAgICBmaWxlTmFtZTogc3RyaW5nLCBkYXRhOiBzdHJpbmcsIHdyaXRlQnl0ZU9yZGVyTWFyazogYm9vbGVhbixcbiAgICAgIG9uRXJyb3I6ICgobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkKXx1bmRlZmluZWQsXG4gICAgICBzb3VyY2VGaWxlczogUmVhZG9ubHlBcnJheTx0cy5Tb3VyY2VGaWxlPnx1bmRlZmluZWQpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS53cml0ZUZpbGUoZmlsZU5hbWUsIGRhdGEsIHdyaXRlQnl0ZU9yZGVyTWFyaywgb25FcnJvciwgc291cmNlRmlsZXMpO1xuICB9XG5cbiAgZ2V0Q3VycmVudERpcmVjdG9yeSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5nZXRDdXJyZW50RGlyZWN0b3J5KCk7IH1cblxuICBnZXREaXJlY3Rvcmllcz86IChwYXRoOiBzdHJpbmcpID0+IHN0cmluZ1tdO1xuXG4gIGdldENhbm9uaWNhbEZpbGVOYW1lKGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmdldENhbm9uaWNhbEZpbGVOYW1lKGZpbGVOYW1lKTtcbiAgfVxuXG4gIHVzZUNhc2VTZW5zaXRpdmVGaWxlTmFtZXMoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmRlbGVnYXRlLnVzZUNhc2VTZW5zaXRpdmVGaWxlTmFtZXMoKTsgfVxuXG4gIGdldE5ld0xpbmUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZGVsZWdhdGUuZ2V0TmV3TGluZSgpOyB9XG5cbiAgZmlsZUV4aXN0cyhmaWxlTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gQ29uc2lkZXIgdGhlIGZpbGUgYXMgZXhpc3Rpbmcgd2hlbmV2ZXJcbiAgICAvLyAgMSkgaXQgcmVhbGx5IGRvZXMgZXhpc3QgaW4gdGhlIGRlbGVnYXRlIGhvc3QsIG9yXG4gICAgLy8gIDIpIGF0IGxlYXN0IG9uZSBvZiB0aGUgc2hpbSBnZW5lcmF0b3JzIHJlY29nbml6ZXMgaXRcbiAgICAvLyBOb3RlIHRoYXQgd2UgY2FuIHBhc3MgdGhlIGZpbGUgbmFtZSBhcyBicmFuZGVkIGFic29sdXRlIGZzIHBhdGggYmVjYXVzZSBUeXBlU2NyaXB0XG4gICAgLy8gaW50ZXJuYWxseSBvbmx5IHBhc3NlcyBQT1NJWC1saWtlIHBhdGhzLlxuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmZpbGVFeGlzdHMoZmlsZU5hbWUpIHx8XG4gICAgICAgIHRoaXMuc2hpbUdlbmVyYXRvcnMuc29tZShnZW4gPT4gZ2VuLnJlY29nbml6ZShhYnNvbHV0ZUZyb20oZmlsZU5hbWUpKSk7XG4gIH1cblxuICByZWFkRmlsZShmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nfHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLmRlbGVnYXRlLnJlYWRGaWxlKGZpbGVOYW1lKTsgfVxufVxuIl19