@angular/compiler-cli 12.1.1 → 12.1.5

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 (455) hide show
  1. package/linker/src/file_linker/emit_scopes/iife_emit_scope.js +1 -1
  2. package/linker/src/file_linker/partial_linkers/partial_linker_selector.js +2 -2
  3. package/ngcc/src/dependencies/commonjs_dependency_host.js +1 -1
  4. package/ngcc/src/dependencies/dts_dependency_host.js +1 -1
  5. package/ngcc/src/dependencies/esm_dependency_host.js +1 -1
  6. package/ngcc/src/dependencies/umd_dependency_host.js +1 -1
  7. package/ngcc/src/entry_point_finder/program_based_entry_point_finder.js +1 -1
  8. package/ngcc/src/entry_point_finder/targeted_entry_point_finder.js +1 -1
  9. package/ngcc/src/execution/tasks/queues/parallel_task_queue.js +1 -1
  10. package/ngcc/src/execution/tasks/queues/serial_task_queue.js +1 -1
  11. package/ngcc/src/host/commonjs_host.js +1 -1
  12. package/ngcc/src/host/esm2015_host.js +1 -1
  13. package/ngcc/src/host/esm5_host.js +1 -1
  14. package/ngcc/src/host/umd_host.js +1 -1
  15. package/ngcc/src/packages/build_marker.d.ts +1 -1
  16. package/ngcc/src/packages/build_marker.js +1 -1
  17. package/ngcc/src/packages/entry_point_manifest.js +1 -1
  18. package/ngcc/src/packages/ngcc_compiler_host.js +1 -1
  19. package/ngcc/src/rendering/commonjs_rendering_formatter.js +1 -1
  20. package/ngcc/src/rendering/esm5_rendering_formatter.js +1 -1
  21. package/ngcc/src/rendering/umd_rendering_formatter.js +1 -1
  22. package/ngcc/src/writing/new_entry_point_file_writer.js +1 -1
  23. package/package.json +2 -2
  24. package/src/ngtsc/annotations/src/component.js +1 -1
  25. package/src/ngtsc/annotations/src/directive.js +1 -1
  26. package/src/ngtsc/annotations/src/ng_module.js +1 -1
  27. package/src/ngtsc/annotations/src/pipe.js +1 -1
  28. package/src/ngtsc/core/src/compiler.js +1 -1
  29. package/src/ngtsc/cycles/src/analyzer.d.ts +7 -0
  30. package/src/ngtsc/cycles/src/analyzer.js +89 -4
  31. package/src/ngtsc/cycles/src/imports.d.ts +1 -6
  32. package/src/ngtsc/cycles/src/imports.js +5 -23
  33. package/src/ngtsc/file_system/testing/src/mock_file_system_native.js +1 -1
  34. package/src/ngtsc/file_system/testing/src/mock_file_system_posix.js +1 -1
  35. package/src/ngtsc/file_system/testing/src/mock_file_system_windows.js +1 -1
  36. package/src/ngtsc/incremental/semantic_graph/src/graph.js +1 -1
  37. package/src/ngtsc/incremental/src/incremental.js +30 -4
  38. package/src/ngtsc/indexer/src/template.js +1 -1
  39. package/src/ngtsc/metadata/src/dts.js +4 -5
  40. package/src/ngtsc/metadata/src/util.d.ts +2 -2
  41. package/src/ngtsc/metadata/src/util.js +9 -6
  42. package/src/ngtsc/partial_evaluator/src/builtin.js +1 -1
  43. package/src/ngtsc/partial_evaluator/src/interpreter.js +6 -5
  44. package/src/ngtsc/partial_evaluator/src/ts_helpers.js +1 -1
  45. package/src/ngtsc/program_driver/src/api.d.ts +20 -1
  46. package/src/ngtsc/program_driver/src/api.js +3 -2
  47. package/src/ngtsc/program_driver/src/ts_create_program_driver.d.ts +2 -2
  48. package/src/ngtsc/program_driver/src/ts_create_program_driver.js +7 -3
  49. package/src/ngtsc/reflection/src/typescript.js +4 -1
  50. package/src/ngtsc/transform/src/compilation.d.ts +5 -0
  51. package/src/ngtsc/transform/src/compilation.js +95 -72
  52. package/src/ngtsc/transform/src/transform.js +1 -1
  53. package/src/ngtsc/typecheck/src/context.d.ts +2 -1
  54. package/src/ngtsc/typecheck/src/context.js +11 -3
  55. package/src/ngtsc/typecheck/src/template_semantics.js +1 -1
  56. package/src/ngtsc/typecheck/src/template_symbol_builder.js +21 -1
  57. package/src/ngtsc/typecheck/src/type_check_block.js +2 -2
  58. package/src/ngtsc/typecheck/src/type_check_file.js +1 -1
  59. package/src/ngtsc/typecheck/src/type_emitter.js +25 -6
  60. package/src/ngtsc/util/src/visitor.d.ts +1 -1
  61. package/src/ngtsc/util/src/visitor.js +1 -8
  62. package/src/version.js +1 -1
  63. package/compiler-cli.externs.js +0 -0
  64. package/index.mjs +0 -20
  65. package/linker/babel/babel.externs.js +0 -0
  66. package/linker/babel/index.mjs +0 -11
  67. package/linker/babel/src/ast/babel_ast_factory.mjs +0 -137
  68. package/linker/babel/src/ast/babel_ast_host.mjs +0 -154
  69. package/linker/babel/src/babel_declaration_scope.mjs +0 -52
  70. package/linker/babel/src/babel_plugin.mjs +0 -23
  71. package/linker/babel/src/es2015_linker_plugin.mjs +0 -158
  72. package/linker/babel/src/linker_plugin_options.mjs +0 -2
  73. package/linker/index.mjs +0 -7
  74. package/linker/linker.externs.js +0 -0
  75. package/linker/src/ast/ast_host.mjs +0 -9
  76. package/linker/src/ast/ast_value.mjs +0 -256
  77. package/linker/src/ast/typescript/typescript_ast_host.mjs +0 -156
  78. package/linker/src/ast/utils.mjs +0 -17
  79. package/linker/src/fatal_linker_error.mjs +0 -30
  80. package/linker/src/file_linker/declaration_scope.mjs +0 -9
  81. package/linker/src/file_linker/emit_scopes/emit_scope.mjs +0 -41
  82. package/linker/src/file_linker/emit_scopes/iife_emit_scope.mjs +0 -33
  83. package/linker/src/file_linker/file_linker.mjs +0 -70
  84. package/linker/src/file_linker/get_source_file.mjs +0 -28
  85. package/linker/src/file_linker/linker_environment.mjs +0 -23
  86. package/linker/src/file_linker/linker_options.mjs +0 -16
  87. package/linker/src/file_linker/needs_linking.mjs +0 -27
  88. package/linker/src/file_linker/partial_linkers/partial_class_metadata_linker_1.mjs +0 -29
  89. package/linker/src/file_linker/partial_linkers/partial_component_linker_1.mjs +0 -194
  90. package/linker/src/file_linker/partial_linkers/partial_directive_linker_1.mjs +0 -137
  91. package/linker/src/file_linker/partial_linkers/partial_factory_linker_1.mjs +0 -52
  92. package/linker/src/file_linker/partial_linkers/partial_injectable_linker_1.mjs +0 -56
  93. package/linker/src/file_linker/partial_linkers/partial_injector_linker_1.mjs +0 -38
  94. package/linker/src/file_linker/partial_linkers/partial_linker.mjs +0 -2
  95. package/linker/src/file_linker/partial_linkers/partial_linker_selector.mjs +0 -166
  96. package/linker/src/file_linker/partial_linkers/partial_ng_module_linker_1.mjs +0 -110
  97. package/linker/src/file_linker/partial_linkers/partial_pipe_linker_1.mjs +0 -42
  98. package/linker/src/file_linker/partial_linkers/util.mjs +0 -78
  99. package/linker/src/file_linker/translator.mjs +0 -23
  100. package/linker/src/linker_import_generator.mjs +0 -28
  101. package/ngcc/index.mjs +0 -16
  102. package/ngcc/main-ivy-ngcc.mjs +0 -12
  103. package/ngcc/main-ngcc.mjs +0 -32
  104. package/ngcc/ngcc.externs.js +0 -0
  105. package/ngcc/src/analysis/decoration_analyzer.mjs +0 -215
  106. package/ngcc/src/analysis/migration_host.mjs +0 -80
  107. package/ngcc/src/analysis/module_with_providers_analyzer.mjs +0 -178
  108. package/ngcc/src/analysis/ngcc_references_registry.mjs +0 -45
  109. package/ngcc/src/analysis/ngcc_trait_compiler.mjs +0 -70
  110. package/ngcc/src/analysis/private_declarations_analyzer.mjs +0 -47
  111. package/ngcc/src/analysis/switch_marker_analyzer.mjs +0 -34
  112. package/ngcc/src/analysis/types.mjs +0 -2
  113. package/ngcc/src/analysis/util.mjs +0 -19
  114. package/ngcc/src/command_line_options.mjs +0 -142
  115. package/ngcc/src/constants.mjs +0 -10
  116. package/ngcc/src/dependencies/commonjs_dependency_host.mjs +0 -87
  117. package/ngcc/src/dependencies/dependency_host.mjs +0 -102
  118. package/ngcc/src/dependencies/dependency_resolver.mjs +0 -151
  119. package/ngcc/src/dependencies/dts_dependency_host.mjs +0 -18
  120. package/ngcc/src/dependencies/esm_dependency_host.mjs +0 -286
  121. package/ngcc/src/dependencies/module_resolver.mjs +0 -233
  122. package/ngcc/src/dependencies/umd_dependency_host.mjs +0 -33
  123. package/ngcc/src/entry_point_finder/directory_walker_entry_point_finder.mjs +0 -42
  124. package/ngcc/src/entry_point_finder/entry_point_collector.mjs +0 -120
  125. package/ngcc/src/entry_point_finder/interface.mjs +0 -2
  126. package/ngcc/src/entry_point_finder/program_based_entry_point_finder.mjs +0 -91
  127. package/ngcc/src/entry_point_finder/targeted_entry_point_finder.mjs +0 -216
  128. package/ngcc/src/entry_point_finder/tracing_entry_point_finder.mjs +0 -63
  129. package/ngcc/src/entry_point_finder/utils.mjs +0 -176
  130. package/ngcc/src/execution/analyze_entry_points.mjs +0 -130
  131. package/ngcc/src/execution/api.mjs +0 -2
  132. package/ngcc/src/execution/cluster/api.mjs +0 -9
  133. package/ngcc/src/execution/cluster/executor.mjs +0 -27
  134. package/ngcc/src/execution/cluster/master.mjs +0 -261
  135. package/ngcc/src/execution/cluster/package_json_updater.mjs +0 -45
  136. package/ngcc/src/execution/cluster/utils.mjs +0 -59
  137. package/ngcc/src/execution/cluster/worker.mjs +0 -81
  138. package/ngcc/src/execution/create_compile_function.mjs +0 -62
  139. package/ngcc/src/execution/single_process_executor.mjs +0 -57
  140. package/ngcc/src/execution/tasks/api.mjs +0 -22
  141. package/ngcc/src/execution/tasks/completion.mjs +0 -61
  142. package/ngcc/src/execution/tasks/queues/base_task_queue.mjs +0 -78
  143. package/ngcc/src/execution/tasks/queues/parallel_task_queue.mjs +0 -53
  144. package/ngcc/src/execution/tasks/queues/serial_task_queue.mjs +0 -29
  145. package/ngcc/src/execution/tasks/utils.mjs +0 -114
  146. package/ngcc/src/host/commonjs_host.mjs +0 -220
  147. package/ngcc/src/host/commonjs_umd_utils.mjs +0 -186
  148. package/ngcc/src/host/delegating_host.mjs +0 -140
  149. package/ngcc/src/host/esm2015_host.mjs +0 -2293
  150. package/ngcc/src/host/esm5_host.mjs +0 -721
  151. package/ngcc/src/host/ngcc_host.mjs +0 -15
  152. package/ngcc/src/host/umd_host.mjs +0 -486
  153. package/ngcc/src/host/utils.mjs +0 -12
  154. package/ngcc/src/locking/async_locker.mjs +0 -76
  155. package/ngcc/src/locking/lock_file.mjs +0 -4
  156. package/ngcc/src/locking/lock_file_with_child_process/index.mjs +0 -78
  157. package/ngcc/src/locking/lock_file_with_child_process/unlocker.mjs +0 -34
  158. package/ngcc/src/locking/lock_file_with_child_process/util.mjs +0 -29
  159. package/ngcc/src/locking/sync_locker.mjs +0 -52
  160. package/ngcc/src/main.mjs +0 -134
  161. package/ngcc/src/migrations/migration.mjs +0 -2
  162. package/ngcc/src/migrations/missing_injectable_migration.mjs +0 -164
  163. package/ngcc/src/migrations/undecorated_child_migration.mjs +0 -61
  164. package/ngcc/src/migrations/undecorated_parent_migration.mjs +0 -86
  165. package/ngcc/src/migrations/utils.mjs +0 -117
  166. package/ngcc/src/ngcc_options.mjs +0 -119
  167. package/ngcc/src/packages/build_marker.mjs +0 -84
  168. package/ngcc/src/packages/bundle_program.mjs +0 -52
  169. package/ngcc/src/packages/configuration.mjs +0 -255
  170. package/ngcc/src/packages/entry_point.mjs +0 -239
  171. package/ngcc/src/packages/entry_point_bundle.mjs +0 -68
  172. package/ngcc/src/packages/entry_point_manifest.mjs +0 -162
  173. package/ngcc/src/packages/ngcc_compiler_host.mjs +0 -77
  174. package/ngcc/src/packages/patch_ts_expando_initializer.mjs +0 -166
  175. package/ngcc/src/packages/source_file_cache.mjs +0 -187
  176. package/ngcc/src/packages/transformer.mjs +0 -140
  177. package/ngcc/src/path_mappings.mjs +0 -13
  178. package/ngcc/src/rendering/commonjs_rendering_formatter.mjs +0 -65
  179. package/ngcc/src/rendering/dts_renderer.mjs +0 -139
  180. package/ngcc/src/rendering/esm5_rendering_formatter.mjs +0 -50
  181. package/ngcc/src/rendering/esm_rendering_formatter.mjs +0 -251
  182. package/ngcc/src/rendering/ngcc_import_rewriter.mjs +0 -32
  183. package/ngcc/src/rendering/renderer.mjs +0 -170
  184. package/ngcc/src/rendering/rendering_formatter.mjs +0 -2
  185. package/ngcc/src/rendering/source_maps.mjs +0 -54
  186. package/ngcc/src/rendering/umd_rendering_formatter.mjs +0 -292
  187. package/ngcc/src/rendering/utils.mjs +0 -20
  188. package/ngcc/src/utils.mjs +0 -144
  189. package/ngcc/src/writing/cleaning/cleaning_strategies.mjs +0 -61
  190. package/ngcc/src/writing/cleaning/package_cleaner.mjs +0 -67
  191. package/ngcc/src/writing/cleaning/utils.mjs +0 -16
  192. package/ngcc/src/writing/file_writer.mjs +0 -2
  193. package/ngcc/src/writing/in_place_file_writer.mjs +0 -62
  194. package/ngcc/src/writing/new_entry_point_file_writer.mjs +0 -161
  195. package/ngcc/src/writing/package_json_updater.mjs +0 -144
  196. package/src/diagnostics/translate_diagnostics.mjs +0 -47
  197. package/src/diagnostics/typescript_version.mjs +0 -79
  198. package/src/extract_i18n.mjs +0 -46
  199. package/src/language_services.mjs +0 -18
  200. package/src/main.mjs +0 -185
  201. package/src/metadata/bundle_index_host.mjs +0 -107
  202. package/src/metadata/bundler.mjs +0 -556
  203. package/src/metadata/collector.mjs +0 -701
  204. package/src/metadata/evaluator.mjs +0 -643
  205. package/src/metadata/index.mjs +0 -11
  206. package/src/metadata/index_writer.mjs +0 -44
  207. package/src/metadata/schema.mjs +0 -102
  208. package/src/metadata/symbols.mjs +0 -117
  209. package/src/ngtsc/annotations/annotations.externs.js +0 -0
  210. package/src/ngtsc/annotations/index.mjs +0 -15
  211. package/src/ngtsc/annotations/src/api.mjs +0 -9
  212. package/src/ngtsc/annotations/src/component.mjs +0 -1068
  213. package/src/ngtsc/annotations/src/diagnostics.mjs +0 -147
  214. package/src/ngtsc/annotations/src/directive.mjs +0 -692
  215. package/src/ngtsc/annotations/src/factory.mjs +0 -17
  216. package/src/ngtsc/annotations/src/injectable.mjs +0 -260
  217. package/src/ngtsc/annotations/src/metadata.mjs +0 -145
  218. package/src/ngtsc/annotations/src/ng_module.mjs +0 -565
  219. package/src/ngtsc/annotations/src/pipe.mjs +0 -151
  220. package/src/ngtsc/annotations/src/references_registry.mjs +0 -16
  221. package/src/ngtsc/annotations/src/util.mjs +0 -495
  222. package/src/ngtsc/core/api/index.mjs +0 -12
  223. package/src/ngtsc/core/api/src/adapter.mjs +0 -9
  224. package/src/ngtsc/core/api/src/interfaces.mjs +0 -9
  225. package/src/ngtsc/core/api/src/options.mjs +0 -9
  226. package/src/ngtsc/core/api/src/public_options.mjs +0 -9
  227. package/src/ngtsc/core/api.externs.js +0 -0
  228. package/src/ngtsc/core/core.externs.js +0 -0
  229. package/src/ngtsc/core/index.mjs +0 -10
  230. package/src/ngtsc/core/src/compiler.mjs +0 -917
  231. package/src/ngtsc/core/src/config.mjs +0 -15
  232. package/src/ngtsc/core/src/host.mjs +0 -229
  233. package/src/ngtsc/cycles/cycles.externs.js +0 -0
  234. package/src/ngtsc/cycles/index.mjs +0 -10
  235. package/src/ngtsc/cycles/src/analyzer.mjs +0 -60
  236. package/src/ngtsc/cycles/src/imports.mjs +0 -152
  237. package/src/ngtsc/diagnostics/diagnostics.externs.js +0 -0
  238. package/src/ngtsc/diagnostics/index.mjs +0 -11
  239. package/src/ngtsc/diagnostics/src/error.mjs +0 -51
  240. package/src/ngtsc/diagnostics/src/error_code.mjs +0 -198
  241. package/src/ngtsc/diagnostics/src/util.mjs +0 -21
  242. package/src/ngtsc/entry_point/entry_point.externs.js +0 -0
  243. package/src/ngtsc/entry_point/index.mjs +0 -12
  244. package/src/ngtsc/entry_point/src/generator.mjs +0 -35
  245. package/src/ngtsc/entry_point/src/logic.mjs +0 -35
  246. package/src/ngtsc/entry_point/src/private_export_checker.mjs +0 -122
  247. package/src/ngtsc/entry_point/src/reference_graph.mjs +0 -73
  248. package/src/ngtsc/file_system/file_system.externs.js +0 -0
  249. package/src/ngtsc/file_system/index.mjs +0 -13
  250. package/src/ngtsc/file_system/src/compiler_host.mjs +0 -64
  251. package/src/ngtsc/file_system/src/helpers.mjs +0 -99
  252. package/src/ngtsc/file_system/src/invalid_file_system.mjs +0 -95
  253. package/src/ngtsc/file_system/src/logical.mjs +0 -84
  254. package/src/ngtsc/file_system/src/node_js_file_system.mjs +0 -142
  255. package/src/ngtsc/file_system/src/types.mjs +0 -9
  256. package/src/ngtsc/file_system/src/util.mjs +0 -22
  257. package/src/ngtsc/file_system/testing/index.mjs +0 -13
  258. package/src/ngtsc/file_system/testing/src/mock_file_system.mjs +0 -293
  259. package/src/ngtsc/file_system/testing/src/mock_file_system_native.mjs +0 -57
  260. package/src/ngtsc/file_system/testing/src/mock_file_system_posix.mjs +0 -38
  261. package/src/ngtsc/file_system/testing/src/mock_file_system_windows.mjs +0 -38
  262. package/src/ngtsc/file_system/testing/src/test_helper.mjs +0 -108
  263. package/src/ngtsc/file_system/testing/testing.externs.js +0 -0
  264. package/src/ngtsc/imports/imports.externs.js +0 -0
  265. package/src/ngtsc/imports/index.mjs +0 -14
  266. package/src/ngtsc/imports/src/alias.mjs +0 -137
  267. package/src/ngtsc/imports/src/core.mjs +0 -78
  268. package/src/ngtsc/imports/src/default.mjs +0 -135
  269. package/src/ngtsc/imports/src/emitter.mjs +0 -266
  270. package/src/ngtsc/imports/src/find_export.mjs +0 -56
  271. package/src/ngtsc/imports/src/reexport.mjs +0 -9
  272. package/src/ngtsc/imports/src/references.mjs +0 -137
  273. package/src/ngtsc/imports/src/resolver.mjs +0 -24
  274. package/src/ngtsc/incremental/api.externs.js +0 -0
  275. package/src/ngtsc/incremental/api.mjs +0 -9
  276. package/src/ngtsc/incremental/incremental.externs.js +0 -0
  277. package/src/ngtsc/incremental/index.mjs +0 -12
  278. package/src/ngtsc/incremental/semantic_graph/index.mjs +0 -12
  279. package/src/ngtsc/incremental/semantic_graph/semantic_graph.externs.js +0 -0
  280. package/src/ngtsc/incremental/semantic_graph/src/api.mjs +0 -36
  281. package/src/ngtsc/incremental/semantic_graph/src/graph.mjs +0 -237
  282. package/src/ngtsc/incremental/semantic_graph/src/type_parameters.mjs +0 -40
  283. package/src/ngtsc/incremental/semantic_graph/src/util.mjs +0 -69
  284. package/src/ngtsc/incremental/src/dependency_tracking.mjs +0 -117
  285. package/src/ngtsc/incremental/src/incremental.mjs +0 -271
  286. package/src/ngtsc/incremental/src/noop.mjs +0 -13
  287. package/src/ngtsc/incremental/src/state.mjs +0 -17
  288. package/src/ngtsc/incremental/src/strategy.mjs +0 -76
  289. package/src/ngtsc/indexer/index.mjs +0 -11
  290. package/src/ngtsc/indexer/indexer.externs.js +0 -0
  291. package/src/ngtsc/indexer/src/api.mjs +0 -30
  292. package/src/ngtsc/indexer/src/context.mjs +0 -25
  293. package/src/ngtsc/indexer/src/template.mjs +0 -303
  294. package/src/ngtsc/indexer/src/transform.mjs +0 -51
  295. package/src/ngtsc/logging/index.mjs +0 -10
  296. package/src/ngtsc/logging/logging.externs.js +0 -0
  297. package/src/ngtsc/logging/src/console_logger.mjs +0 -43
  298. package/src/ngtsc/logging/src/logger.mjs +0 -15
  299. package/src/ngtsc/logging/testing/index.mjs +0 -9
  300. package/src/ngtsc/logging/testing/src/mock_logger.mjs +0 -32
  301. package/src/ngtsc/logging/testing/testing.externs.js +0 -0
  302. package/src/ngtsc/metadata/index.mjs +0 -15
  303. package/src/ngtsc/metadata/metadata.externs.js +0 -0
  304. package/src/ngtsc/metadata/src/api.mjs +0 -13
  305. package/src/ngtsc/metadata/src/dts.mjs +0 -143
  306. package/src/ngtsc/metadata/src/inheritance.mjs +0 -71
  307. package/src/ngtsc/metadata/src/property_mapping.mjs +0 -136
  308. package/src/ngtsc/metadata/src/registry.mjs +0 -80
  309. package/src/ngtsc/metadata/src/resource_registry.mjs +0 -81
  310. package/src/ngtsc/metadata/src/util.mjs +0 -200
  311. package/src/ngtsc/partial_evaluator/index.mjs +0 -12
  312. package/src/ngtsc/partial_evaluator/partial_evaluator.externs.js +0 -0
  313. package/src/ngtsc/partial_evaluator/src/builtin.mjs +0 -65
  314. package/src/ngtsc/partial_evaluator/src/diagnostics.mjs +0 -174
  315. package/src/ngtsc/partial_evaluator/src/dynamic.mjs +0 -94
  316. package/src/ngtsc/partial_evaluator/src/interface.mjs +0 -27
  317. package/src/ngtsc/partial_evaluator/src/interpreter.mjs +0 -719
  318. package/src/ngtsc/partial_evaluator/src/known_declaration.mjs +0 -43
  319. package/src/ngtsc/partial_evaluator/src/result.mjs +0 -50
  320. package/src/ngtsc/partial_evaluator/src/ts_helpers.mjs +0 -72
  321. package/src/ngtsc/perf/index.mjs +0 -11
  322. package/src/ngtsc/perf/perf.externs.js +0 -0
  323. package/src/ngtsc/perf/src/api.mjs +0 -278
  324. package/src/ngtsc/perf/src/clock.mjs +0 -15
  325. package/src/ngtsc/perf/src/noop.mjs +0 -21
  326. package/src/ngtsc/perf/src/recorder.mjs +0 -125
  327. package/src/ngtsc/program.mjs +0 -271
  328. package/src/ngtsc/program_driver/index.mjs +0 -10
  329. package/src/ngtsc/program_driver/program_driver.externs.js +0 -0
  330. package/src/ngtsc/program_driver/src/api.mjs +0 -22
  331. package/src/ngtsc/program_driver/src/ts_create_program_driver.mjs +0 -164
  332. package/src/ngtsc/reflection/index.mjs +0 -12
  333. package/src/ngtsc/reflection/reflection.externs.js +0 -0
  334. package/src/ngtsc/reflection/src/host.mjs +0 -73
  335. package/src/ngtsc/reflection/src/type_to_value.mjs +0 -243
  336. package/src/ngtsc/reflection/src/typescript.mjs +0 -608
  337. package/src/ngtsc/reflection/src/util.mjs +0 -21
  338. package/src/ngtsc/resource/index.mjs +0 -9
  339. package/src/ngtsc/resource/resource.externs.js +0 -0
  340. package/src/ngtsc/resource/src/loader.mjs +0 -242
  341. package/src/ngtsc/routing/index.mjs +0 -11
  342. package/src/ngtsc/routing/routing.externs.js +0 -0
  343. package/src/ngtsc/routing/src/analyzer.mjs +0 -69
  344. package/src/ngtsc/routing/src/lazy.mjs +0 -168
  345. package/src/ngtsc/routing/src/route.mjs +0 -51
  346. package/src/ngtsc/scope/index.mjs +0 -12
  347. package/src/ngtsc/scope/scope.externs.js +0 -0
  348. package/src/ngtsc/scope/src/api.mjs +0 -9
  349. package/src/ngtsc/scope/src/component_scope.mjs +0 -31
  350. package/src/ngtsc/scope/src/dependency.mjs +0 -134
  351. package/src/ngtsc/scope/src/local.mjs +0 -531
  352. package/src/ngtsc/scope/src/typecheck.mjs +0 -83
  353. package/src/ngtsc/shims/api.externs.js +0 -0
  354. package/src/ngtsc/shims/api.mjs +0 -2
  355. package/src/ngtsc/shims/index.mjs +0 -14
  356. package/src/ngtsc/shims/shims.externs.js +0 -0
  357. package/src/ngtsc/shims/src/adapter.mjs +0 -188
  358. package/src/ngtsc/shims/src/expando.mjs +0 -102
  359. package/src/ngtsc/shims/src/factory_generator.mjs +0 -265
  360. package/src/ngtsc/shims/src/reference_tagger.mjs +0 -67
  361. package/src/ngtsc/shims/src/summary_generator.mjs +0 -64
  362. package/src/ngtsc/shims/src/util.mjs +0 -26
  363. package/src/ngtsc/sourcemaps/index.mjs +0 -11
  364. package/src/ngtsc/sourcemaps/sourcemaps.externs.js +0 -0
  365. package/src/ngtsc/sourcemaps/src/content_origin.mjs +0 -35
  366. package/src/ngtsc/sourcemaps/src/raw_source_map.mjs +0 -2
  367. package/src/ngtsc/sourcemaps/src/segment_marker.mjs +0 -40
  368. package/src/ngtsc/sourcemaps/src/source_file.mjs +0 -459
  369. package/src/ngtsc/sourcemaps/src/source_file_loader.mjs +0 -213
  370. package/src/ngtsc/switch/index.mjs +0 -9
  371. package/src/ngtsc/switch/src/switch.mjs +0 -115
  372. package/src/ngtsc/switch/switch.externs.js +0 -0
  373. package/src/ngtsc/transform/index.mjs +0 -14
  374. package/src/ngtsc/transform/src/alias.mjs +0 -30
  375. package/src/ngtsc/transform/src/api.mjs +0 -63
  376. package/src/ngtsc/transform/src/compilation.mjs +0 -514
  377. package/src/ngtsc/transform/src/declaration.mjs +0 -182
  378. package/src/ngtsc/transform/src/trait.mjs +0 -95
  379. package/src/ngtsc/transform/src/transform.mjs +0 -298
  380. package/src/ngtsc/transform/src/utils.mjs +0 -57
  381. package/src/ngtsc/transform/transform.externs.js +0 -0
  382. package/src/ngtsc/translator/index.mjs +0 -14
  383. package/src/ngtsc/translator/src/api/ast_factory.mjs +0 -9
  384. package/src/ngtsc/translator/src/api/import_generator.mjs +0 -9
  385. package/src/ngtsc/translator/src/context.mjs +0 -24
  386. package/src/ngtsc/translator/src/import_manager.mjs +0 -48
  387. package/src/ngtsc/translator/src/translator.mjs +0 -317
  388. package/src/ngtsc/translator/src/type_translator.mjs +0 -204
  389. package/src/ngtsc/translator/src/typescript_ast_factory.mjs +0 -211
  390. package/src/ngtsc/translator/src/typescript_translator.mjs +0 -17
  391. package/src/ngtsc/translator/translator.externs.js +0 -0
  392. package/src/ngtsc/tsc_plugin.mjs +0 -98
  393. package/src/ngtsc/typecheck/api/api.externs.js +0 -0
  394. package/src/ngtsc/typecheck/api/api.mjs +0 -9
  395. package/src/ngtsc/typecheck/api/checker.mjs +0 -31
  396. package/src/ngtsc/typecheck/api/completion.mjs +0 -16
  397. package/src/ngtsc/typecheck/api/context.mjs +0 -9
  398. package/src/ngtsc/typecheck/api/index.mjs +0 -14
  399. package/src/ngtsc/typecheck/api/scope.mjs +0 -9
  400. package/src/ngtsc/typecheck/api/symbols.mjs +0 -22
  401. package/src/ngtsc/typecheck/diagnostics/diagnostics.externs.js +0 -0
  402. package/src/ngtsc/typecheck/diagnostics/index.mjs +0 -10
  403. package/src/ngtsc/typecheck/diagnostics/src/diagnostic.mjs +0 -99
  404. package/src/ngtsc/typecheck/diagnostics/src/id.mjs +0 -23
  405. package/src/ngtsc/typecheck/index.mjs +0 -12
  406. package/src/ngtsc/typecheck/src/checker.mjs +0 -591
  407. package/src/ngtsc/typecheck/src/comments.mjs +0 -159
  408. package/src/ngtsc/typecheck/src/completion.mjs +0 -155
  409. package/src/ngtsc/typecheck/src/context.mjs +0 -350
  410. package/src/ngtsc/typecheck/src/diagnostics.mjs +0 -95
  411. package/src/ngtsc/typecheck/src/dom.mjs +0 -68
  412. package/src/ngtsc/typecheck/src/environment.mjs +0 -146
  413. package/src/ngtsc/typecheck/src/expression.mjs +0 -412
  414. package/src/ngtsc/typecheck/src/line_mappings.mjs +0 -60
  415. package/src/ngtsc/typecheck/src/oob.mjs +0 -112
  416. package/src/ngtsc/typecheck/src/shim.mjs +0 -37
  417. package/src/ngtsc/typecheck/src/source.mjs +0 -74
  418. package/src/ngtsc/typecheck/src/tcb_util.mjs +0 -135
  419. package/src/ngtsc/typecheck/src/template_semantics.mjs +0 -34
  420. package/src/ngtsc/typecheck/src/template_symbol_builder.mjs +0 -485
  421. package/src/ngtsc/typecheck/src/ts_util.mjs +0 -157
  422. package/src/ngtsc/typecheck/src/type_check_block.mjs +0 -1770
  423. package/src/ngtsc/typecheck/src/type_check_file.mjs +0 -65
  424. package/src/ngtsc/typecheck/src/type_constructor.mjs +0 -227
  425. package/src/ngtsc/typecheck/src/type_emitter.mjs +0 -127
  426. package/src/ngtsc/typecheck/src/type_parameter_emitter.mjs +0 -93
  427. package/src/ngtsc/typecheck/typecheck.externs.js +0 -0
  428. package/src/ngtsc/util/src/path.mjs +0 -18
  429. package/src/ngtsc/util/src/typescript.mjs +0 -143
  430. package/src/ngtsc/util/src/visitor.mjs +0 -107
  431. package/src/ngtsc/util/util.externs.js +0 -0
  432. package/src/ngtsc/xi18n/index.mjs +0 -9
  433. package/src/ngtsc/xi18n/src/context.mjs +0 -9
  434. package/src/ngtsc/xi18n/xi18n.externs.js +0 -0
  435. package/src/perform_compile.mjs +0 -275
  436. package/src/perform_watch.mjs +0 -247
  437. package/src/tooling.mjs +0 -32
  438. package/src/transformers/api.mjs +0 -27
  439. package/src/transformers/compiler_host.mjs +0 -593
  440. package/src/transformers/downlevel_decorators_transform.mjs +0 -507
  441. package/src/transformers/entry_points.mjs +0 -10
  442. package/src/transformers/i18n.mjs +0 -59
  443. package/src/transformers/inline_resources.mjs +0 -269
  444. package/src/transformers/lower_expressions.mjs +0 -336
  445. package/src/transformers/metadata_cache.mjs +0 -53
  446. package/src/transformers/metadata_reader.mjs +0 -104
  447. package/src/transformers/node_emitter.mjs +0 -606
  448. package/src/transformers/node_emitter_transform.mjs +0 -78
  449. package/src/transformers/patch_alias_reference_resolution.mjs +0 -109
  450. package/src/transformers/program.mjs +0 -887
  451. package/src/transformers/r3_metadata_transform.mjs +0 -46
  452. package/src/transformers/r3_transform.mjs +0 -29
  453. package/src/transformers/util.mjs +0 -89
  454. package/src/typescript_support.mjs +0 -57
  455. package/src/version.mjs +0 -15
@@ -1,243 +0,0 @@
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
- import * as ts from 'typescript';
9
- /**
10
- * Potentially convert a `ts.TypeNode` to a `TypeValueReference`, which indicates how to use the
11
- * type given in the `ts.TypeNode` in a value position.
12
- *
13
- * This can return `null` if the `typeNode` is `null`, if it does not refer to a symbol with a value
14
- * declaration, or if it is not possible to statically understand.
15
- */
16
- export function typeToValue(typeNode, checker) {
17
- // It's not possible to get a value expression if the parameter doesn't even have a type.
18
- if (typeNode === null) {
19
- return missingType();
20
- }
21
- if (!ts.isTypeReferenceNode(typeNode)) {
22
- return unsupportedType(typeNode);
23
- }
24
- const symbols = resolveTypeSymbols(typeNode, checker);
25
- if (symbols === null) {
26
- return unknownReference(typeNode);
27
- }
28
- const { local, decl } = symbols;
29
- // It's only valid to convert a type reference to a value reference if the type actually
30
- // has a value declaration associated with it. Note that const enums are an exception,
31
- // because while they do have a value declaration, they don't exist at runtime.
32
- if (decl.valueDeclaration === undefined || decl.flags & ts.SymbolFlags.ConstEnum) {
33
- let typeOnlyDecl = null;
34
- if (decl.declarations !== undefined && decl.declarations.length > 0) {
35
- typeOnlyDecl = decl.declarations[0];
36
- }
37
- return noValueDeclaration(typeNode, typeOnlyDecl);
38
- }
39
- // The type points to a valid value declaration. Rewrite the TypeReference into an
40
- // Expression which references the value pointed to by the TypeReference, if possible.
41
- // Look at the local `ts.Symbol`'s declarations and see if it comes from an import
42
- // statement. If so, extract the module specifier and the name of the imported type.
43
- const firstDecl = local.declarations && local.declarations[0];
44
- if (firstDecl !== undefined) {
45
- if (ts.isImportClause(firstDecl) && firstDecl.name !== undefined) {
46
- // This is a default import.
47
- // import Foo from 'foo';
48
- if (firstDecl.isTypeOnly) {
49
- // Type-only imports cannot be represented as value.
50
- return typeOnlyImport(typeNode, firstDecl);
51
- }
52
- return {
53
- kind: 0 /* LOCAL */,
54
- expression: firstDecl.name,
55
- defaultImportStatement: firstDecl.parent,
56
- };
57
- }
58
- else if (ts.isImportSpecifier(firstDecl)) {
59
- // The symbol was imported by name
60
- // import {Foo} from 'foo';
61
- // or
62
- // import {Foo as Bar} from 'foo';
63
- if (firstDecl.parent.parent.isTypeOnly) {
64
- // Type-only imports cannot be represented as value.
65
- return typeOnlyImport(typeNode, firstDecl.parent.parent);
66
- }
67
- // Determine the name to import (`Foo`) from the import specifier, as the symbol names of
68
- // the imported type could refer to a local alias (like `Bar` in the example above).
69
- const importedName = (firstDecl.propertyName || firstDecl.name).text;
70
- // The first symbol name refers to the local name, which is replaced by `importedName` above.
71
- // Any remaining symbol names make up the complete path to the value.
72
- const [_localName, ...nestedPath] = symbols.symbolNames;
73
- const moduleName = extractModuleName(firstDecl.parent.parent.parent);
74
- return {
75
- kind: 1 /* IMPORTED */,
76
- valueDeclaration: decl.valueDeclaration,
77
- moduleName,
78
- importedName,
79
- nestedPath
80
- };
81
- }
82
- else if (ts.isNamespaceImport(firstDecl)) {
83
- // The import is a namespace import
84
- // import * as Foo from 'foo';
85
- if (firstDecl.parent.isTypeOnly) {
86
- // Type-only imports cannot be represented as value.
87
- return typeOnlyImport(typeNode, firstDecl.parent);
88
- }
89
- if (symbols.symbolNames.length === 1) {
90
- // The type refers to the namespace itself, which cannot be represented as a value.
91
- return namespaceImport(typeNode, firstDecl.parent);
92
- }
93
- // The first symbol name refers to the local name of the namespace, which is is discarded
94
- // as a new namespace import will be generated. This is followed by the symbol name that needs
95
- // to be imported and any remaining names that constitute the complete path to the value.
96
- const [_ns, importedName, ...nestedPath] = symbols.symbolNames;
97
- const moduleName = extractModuleName(firstDecl.parent.parent);
98
- return {
99
- kind: 1 /* IMPORTED */,
100
- valueDeclaration: decl.valueDeclaration,
101
- moduleName,
102
- importedName,
103
- nestedPath
104
- };
105
- }
106
- }
107
- // If the type is not imported, the type reference can be converted into an expression as is.
108
- const expression = typeNodeToValueExpr(typeNode);
109
- if (expression !== null) {
110
- return {
111
- kind: 0 /* LOCAL */,
112
- expression,
113
- defaultImportStatement: null,
114
- };
115
- }
116
- else {
117
- return unsupportedType(typeNode);
118
- }
119
- }
120
- function unsupportedType(typeNode) {
121
- return {
122
- kind: 2 /* UNAVAILABLE */,
123
- reason: { kind: 5 /* UNSUPPORTED */, typeNode },
124
- };
125
- }
126
- function noValueDeclaration(typeNode, decl) {
127
- return {
128
- kind: 2 /* UNAVAILABLE */,
129
- reason: { kind: 1 /* NO_VALUE_DECLARATION */, typeNode, decl },
130
- };
131
- }
132
- function typeOnlyImport(typeNode, importClause) {
133
- return {
134
- kind: 2 /* UNAVAILABLE */,
135
- reason: { kind: 2 /* TYPE_ONLY_IMPORT */, typeNode, importClause },
136
- };
137
- }
138
- function unknownReference(typeNode) {
139
- return {
140
- kind: 2 /* UNAVAILABLE */,
141
- reason: { kind: 3 /* UNKNOWN_REFERENCE */, typeNode },
142
- };
143
- }
144
- function namespaceImport(typeNode, importClause) {
145
- return {
146
- kind: 2 /* UNAVAILABLE */,
147
- reason: { kind: 4 /* NAMESPACE */, typeNode, importClause },
148
- };
149
- }
150
- function missingType() {
151
- return {
152
- kind: 2 /* UNAVAILABLE */,
153
- reason: { kind: 0 /* MISSING_TYPE */ },
154
- };
155
- }
156
- /**
157
- * Attempt to extract a `ts.Expression` that's equivalent to a `ts.TypeNode`, as the two have
158
- * different AST shapes but can reference the same symbols.
159
- *
160
- * This will return `null` if an equivalent expression cannot be constructed.
161
- */
162
- export function typeNodeToValueExpr(node) {
163
- if (ts.isTypeReferenceNode(node)) {
164
- return entityNameToValue(node.typeName);
165
- }
166
- else {
167
- return null;
168
- }
169
- }
170
- /**
171
- * Resolve a `TypeReference` node to the `ts.Symbol`s for both its declaration and its local source.
172
- *
173
- * In the event that the `TypeReference` refers to a locally declared symbol, these will be the
174
- * same. If the `TypeReference` refers to an imported symbol, then `decl` will be the fully resolved
175
- * `ts.Symbol` of the referenced symbol. `local` will be the `ts.Symbol` of the `ts.Identifier`
176
- * which points to the import statement by which the symbol was imported.
177
- *
178
- * All symbol names that make up the type reference are returned left-to-right into the
179
- * `symbolNames` array, which is guaranteed to include at least one entry.
180
- */
181
- function resolveTypeSymbols(typeRef, checker) {
182
- const typeName = typeRef.typeName;
183
- // typeRefSymbol is the ts.Symbol of the entire type reference.
184
- const typeRefSymbol = checker.getSymbolAtLocation(typeName);
185
- if (typeRefSymbol === undefined) {
186
- return null;
187
- }
188
- // `local` is the `ts.Symbol` for the local `ts.Identifier` for the type.
189
- // If the type is actually locally declared or is imported by name, for example:
190
- // import {Foo} from './foo';
191
- // then it'll be the same as `typeRefSymbol`.
192
- //
193
- // If the type is imported via a namespace import, for example:
194
- // import * as foo from './foo';
195
- // and then referenced as:
196
- // constructor(f: foo.Foo)
197
- // then `local` will be the `ts.Symbol` of `foo`, whereas `typeRefSymbol` will be the `ts.Symbol`
198
- // of `foo.Foo`. This allows tracking of the import behind whatever type reference exists.
199
- let local = typeRefSymbol;
200
- // Destructure a name like `foo.X.Y.Z` as follows:
201
- // - in `leftMost`, the `ts.Identifier` of the left-most name (`foo`) in the qualified name.
202
- // This identifier is used to resolve the `ts.Symbol` for `local`.
203
- // - in `symbolNames`, all names involved in the qualified path, or a single symbol name if the
204
- // type is not qualified.
205
- let leftMost = typeName;
206
- const symbolNames = [];
207
- while (ts.isQualifiedName(leftMost)) {
208
- symbolNames.unshift(leftMost.right.text);
209
- leftMost = leftMost.left;
210
- }
211
- symbolNames.unshift(leftMost.text);
212
- if (leftMost !== typeName) {
213
- const localTmp = checker.getSymbolAtLocation(leftMost);
214
- if (localTmp !== undefined) {
215
- local = localTmp;
216
- }
217
- }
218
- // De-alias the top-level type reference symbol to get the symbol of the actual declaration.
219
- let decl = typeRefSymbol;
220
- if (typeRefSymbol.flags & ts.SymbolFlags.Alias) {
221
- decl = checker.getAliasedSymbol(typeRefSymbol);
222
- }
223
- return { local, decl, symbolNames };
224
- }
225
- function entityNameToValue(node) {
226
- if (ts.isQualifiedName(node)) {
227
- const left = entityNameToValue(node.left);
228
- return left !== null ? ts.createPropertyAccess(left, node.right) : null;
229
- }
230
- else if (ts.isIdentifier(node)) {
231
- return ts.getMutableClone(node);
232
- }
233
- else {
234
- return null;
235
- }
236
- }
237
- function extractModuleName(node) {
238
- if (!ts.isStringLiteral(node.moduleSpecifier)) {
239
- throw new Error('not a module specifier');
240
- }
241
- return node.moduleSpecifier.text;
242
- }
243
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZV90b192YWx1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvcmVmbGVjdGlvbi9zcmMvdHlwZV90b192YWx1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUlqQzs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUN2QixRQUEwQixFQUFFLE9BQXVCO0lBQ3JELHlGQUF5RjtJQUN6RixJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUU7UUFDckIsT0FBTyxXQUFXLEVBQUUsQ0FBQztLQUN0QjtJQUVELElBQUksQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDckMsT0FBTyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDbEM7SUFFRCxNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdEQsSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFO1FBQ3BCLE9BQU8sZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDbkM7SUFFRCxNQUFNLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBQyxHQUFHLE9BQU8sQ0FBQztJQUM5Qix3RkFBd0Y7SUFDeEYsc0ZBQXNGO0lBQ3RGLCtFQUErRTtJQUMvRSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRTtRQUNoRixJQUFJLFlBQVksR0FBd0IsSUFBSSxDQUFDO1FBQzdDLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25FLFlBQVks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LENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLElBQTBCO0lBQ25ELElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRTtRQUM3QyxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7S0FDM0M7SUFDRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDO0FBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7VHlwZVZhbHVlUmVmZXJlbmNlLCBUeXBlVmFsdWVSZWZlcmVuY2VLaW5kLCBVbmF2YWlsYWJsZVR5cGVWYWx1ZVJlZmVyZW5jZSwgVmFsdWVVbmF2YWlsYWJsZUtpbmR9IGZyb20gJy4vaG9zdCc7XG5cbi8qKlxuICogUG90ZW50aWFsbHkgY29udmVydCBhIGB0cy5UeXBlTm9kZWAgdG8gYSBgVHlwZVZhbHVlUmVmZXJlbmNlYCwgd2hpY2ggaW5kaWNhdGVzIGhvdyB0byB1c2UgdGhlXG4gKiB0eXBlIGdpdmVuIGluIHRoZSBgdHMuVHlwZU5vZGVgIGluIGEgdmFsdWUgcG9zaXRpb24uXG4gKlxuICogVGhpcyBjYW4gcmV0dXJuIGBudWxsYCBpZiB0aGUgYHR5cGVOb2RlYCBpcyBgbnVsbGAsIGlmIGl0IGRvZXMgbm90IHJlZmVyIHRvIGEgc3ltYm9sIHdpdGggYSB2YWx1ZVxuICogZGVjbGFyYXRpb24sIG9yIGlmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBzdGF0aWNhbGx5IHVuZGVyc3RhbmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0eXBlVG9WYWx1ZShcbiAgICB0eXBlTm9kZTogdHMuVHlwZU5vZGV8bnVsbCwgY2hlY2tlcjogdHMuVHlwZUNoZWNrZXIpOiBUeXBlVmFsdWVSZWZlcmVuY2Uge1xuICAvLyBJdCdzIG5vdCBwb3NzaWJsZSB0byBnZXQgYSB2YWx1ZSBleHByZXNzaW9uIGlmIHRoZSBwYXJhbWV0ZXIgZG9lc24ndCBldmVuIGhhdmUgYSB0eXBlLlxuICBpZiAodHlwZU5vZGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbWlzc2luZ1R5cGUoKTtcbiAgfVxuXG4gIGlmICghdHMuaXNUeXBlUmVmZXJlbmNlTm9kZSh0eXBlTm9kZSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRUeXBlKHR5cGVOb2RlKTtcbiAgfVxuXG4gIGNvbnN0IHN5bWJvbHMgPSByZXNvbHZlVHlwZVN5bWJvbHModHlwZU5vZGUsIGNoZWNrZXIpO1xuICBpZiAoc3ltYm9scyA9PT0gbnVsbCkge1xuICAgIHJldHVybiB1bmtub3duUmVmZXJlbmNlKHR5cGVOb2RlKTtcbiAgfVxuXG4gIGNvbnN0IHtsb2NhbCwgZGVjbH0gPSBzeW1ib2xzO1xuICAvLyBJdCdzIG9ubHkgdmFsaWQgdG8gY29udmVydCBhIHR5cGUgcmVmZXJlbmNlIHRvIGEgdmFsdWUgcmVmZXJlbmNlIGlmIHRoZSB0eXBlIGFjdHVhbGx5XG4gIC8vIGhhcyBhIHZhbHVlIGRlY2xhcmF0aW9uIGFzc29jaWF0ZWQgd2l0aCBpdC4gTm90ZSB0aGF0IGNvbnN0IGVudW1zIGFyZSBhbiBleGNlcHRpb24sXG4gIC8vIGJlY2F1c2Ugd2hpbGUgdGhleSBkbyBoYXZlIGEgdmFsdWUgZGVjbGFyYXRpb24sIHRoZXkgZG9uJ3QgZXhpc3QgYXQgcnVudGltZS5cbiAgaWYgKGRlY2wudmFsdWVEZWNsYXJhdGlvbiA9PT0gdW5kZWZpbmVkIHx8IGRlY2wuZmxhZ3MgJiB0cy5TeW1ib2xGbGFncy5Db25zdEVudW0pIHtcbiAgICBsZXQgdHlwZU9ubHlEZWNsOiB0cy5EZWNsYXJhdGlvbnxudWxsID0gbnVsbDtcbiAgICBpZiAoZGVjbC5kZWNsYXJhdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBkZWNsLmRlY2xhcmF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0eXBlT25seURlY2wgPSBkZWNsLmRlY2xhcmF0aW9uc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIG5vVmFsdWVEZWNsYXJhdGlvbih0eXBlTm9kZSwgdHlwZU9ubHlEZWNsKTtcbiAgfVxuXG4gIC8vIFRoZSB0eXBlIHBvaW50cyB0byBhIHZhbGlkIHZhbHVlIGRlY2xhcmF0aW9uLiBSZXdyaXRlIHRoZSBUeXBlUmVmZXJlbmNlIGludG8gYW5cbiAgLy8gRXhwcmVzc2lvbiB3aGljaCByZWZlcmVuY2VzIHRoZSB2YWx1ZSBwb2ludGVkIHRvIGJ5IHRoZSBUeXBlUmVmZXJlbmNlLCBpZiBwb3NzaWJsZS5cblxuICAvLyBMb29rIGF0IHRoZSBsb2NhbCBgdHMuU3ltYm9sYCdzIGRlY2xhcmF0aW9ucyBhbmQgc2VlIGlmIGl0IGNvbWVzIGZyb20gYW4gaW1wb3J0XG4gIC8vIHN0YXRlbWVudC4gSWYgc28sIGV4dHJhY3QgdGhlIG1vZHVsZSBzcGVjaWZpZXIgYW5kIHRoZSBuYW1lIG9mIHRoZSBpbXBvcnRlZCB0eXBlLlxuICBjb25zdCBmaXJzdERlY2wgPSBsb2NhbC5kZWNsYXJhdGlvbnMgJiYgbG9jYWwuZGVjbGFyYXRpb25zWzBdO1xuICBpZiAoZmlyc3REZWNsICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHMuaXNJbXBvcnRDbGF1c2UoZmlyc3REZWNsKSAmJiBmaXJzdERlY2wubmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgZGVmYXVsdCBpbXBvcnQuXG4gICAgICAvLyAgIGltcG9ydCBGb28gZnJvbSAnZm9vJztcblxuICAgICAgaWYgKGZpcnN0RGVjbC5pc1R5cGVPbmx5KSB7XG4gICAgICAgIC8vIFR5cGUtb25seSBpbXBvcnRzIGNhbm5vdCBiZSByZXByZXNlbnRlZCBhcyB2YWx1ZS5cbiAgICAgICAgcmV0dXJuIHR5cGVPbmx5SW1wb3J0KHR5cGVOb2RlLCBmaXJzdERlY2wpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBraW5kOiBUeXBlVmFsdWVSZWZlcmVuY2VLaW5kLkxPQ0FMLFxuICAgICAgICBleHByZXNzaW9uOiBmaXJzdERlY2wubmFtZSxcbiAgICAgICAgZGVmYXVsdEltcG9ydFN0YXRlbWVudDogZmlyc3REZWNsLnBhcmVudCxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0cy5pc0ltcG9ydFNwZWNpZmllcihmaXJzdERlY2wpKSB7XG4gICAgICAvLyBUaGUgc3ltYm9sIHdhcyBpbXBvcnRlZCBieSBuYW1lXG4gICAgICAvLyAgIGltcG9ydCB7Rm9vfSBmcm9tICdmb28nO1xuICAgICAgLy8gb3JcbiAgICAgIC8vICAgaW1wb3J0IHtGb28gYXMgQmFyfSBmcm9tICdmb28nO1xuXG4gICAgICBpZiAoZmlyc3REZWNsLnBhcmVudC5wYXJlbnQuaXNUeXBlT25seSkge1xuICAgICAgICAvLyBUeXBlLW9ubHkgaW1wb3J0cyBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYXMgdmFsdWUuXG4gICAgICAgIHJldHVybiB0eXBlT25seUltcG9ydCh0eXBlTm9kZSwgZmlyc3REZWNsLnBhcmVudC5wYXJlbnQpO1xuICAgICAgfVxuXG4gICAgICAvLyBEZXRlcm1pbmUgdGhlIG5hbWUgdG8gaW1wb3J0IChgRm9vYCkgZnJvbSB0aGUgaW1wb3J0IHNwZWNpZmllciwgYXMgdGhlIHN5bWJvbCBuYW1lcyBvZlxuICAgICAgLy8gdGhlIGltcG9ydGVkIHR5cGUgY291bGQgcmVmZXIgdG8gYSBsb2NhbCBhbGlhcyAobGlrZSBgQmFyYCBpbiB0aGUgZXhhbXBsZSBhYm92ZSkuXG4gICAgICBjb25zdCBpbXBvcnRlZE5hbWUgPSAoZmlyc3REZWNsLnByb3BlcnR5TmFtZSB8fCBmaXJzdERlY2wubmFtZSkudGV4dDtcblxuICAgICAgLy8gVGhlIGZpcnN0IHN5bWJvbCBuYW1lIHJlZmVycyB0byB0aGUgbG9jYWwgbmFtZSwgd2hpY2ggaXMgcmVwbGFjZWQgYnkgYGltcG9ydGVkTmFtZWAgYWJvdmUuXG4gICAgICAvLyBBbnkgcmVtYWluaW5nIHN5bWJvbCBuYW1lcyBtYWtlIHVwIHRoZSBjb21wbGV0ZSBwYXRoIHRvIHRoZSB2YWx1ZS5cbiAgICAgIGNvbnN0IFtfbG9jYWxOYW1lLCAuLi5uZXN0ZWRQYXRoXSA9IHN5bWJvbHMuc3ltYm9sTmFtZXM7XG5cbiAgICAgIGNvbnN0IG1vZHVsZU5hbWUgPSBleHRyYWN0TW9kdWxlTmFtZShmaXJzdERlY2wucGFyZW50LnBhcmVudC5wYXJlbnQpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2luZDogVHlwZVZhbHVlUmVmZXJlbmNlS2luZC5JTVBPUlRFRCxcbiAgICAgICAgdmFsdWVEZWNsYXJhdGlvbjogZGVjbC52YWx1ZURlY2xhcmF0aW9uLFxuICAgICAgICBtb2R1bGVOYW1lLFxuICAgICAgICBpbXBvcnRlZE5hbWUsXG4gICAgICAgIG5lc3RlZFBhdGhcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0cy5pc05hbWVzcGFjZUltcG9ydChmaXJzdERlY2wpKSB7XG4gICAgICAvLyBUaGUgaW1wb3J0IGlzIGEgbmFtZXNwYWNlIGltcG9ydFxuICAgICAgLy8gICBpbXBvcnQgKiBhcyBGb28gZnJvbSAnZm9vJztcblxuICAgICAgaWYgKGZpcnN0RGVjbC5wYXJlbnQuaXNUeXBlT25seSkge1xuICAgICAgICAvLyBUeXBlLW9ubHkgaW1wb3J0cyBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYXMgdmFsdWUuXG4gICAgICAgIHJldHVybiB0eXBlT25seUltcG9ydCh0eXBlTm9kZSwgZmlyc3REZWNsLnBhcmVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzeW1ib2xzLnN5bWJvbE5hbWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyBUaGUgdHlwZSByZWZlcnMgdG8gdGhlIG5hbWVzcGFjZSBpdHNlbGYsIHdoaWNoIGNhbm5vdCBiZSByZXByZXNlbnRlZCBhcyBhIHZhbHVlLlxuICAgICAgICByZXR1cm4gbmFtZXNwYWNlSW1wb3J0KHR5cGVOb2RlLCBmaXJzdERlY2wucGFyZW50KTtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGZpcnN0IHN5bWJvbCBuYW1lIHJlZmVycyB0byB0aGUgbG9jYWwgbmFtZSBvZiB0aGUgbmFtZXNwYWNlLCB3aGljaCBpcyBpcyBkaXNjYXJkZWRcbiAgICAgIC8vIGFzIGEgbmV3IG5hbWVzcGFjZSBpbXBvcnQgd2lsbCBiZSBnZW5lcmF0ZWQuIFRoaXMgaXMgZm9sbG93ZWQgYnkgdGhlIHN5bWJvbCBuYW1lIHRoYXQgbmVlZHNcbiAgICAgIC8vIHRvIGJlIGltcG9ydGVkIGFuZCBhbnkgcmVtYWluaW5nIG5hbWVzIHRoYXQgY29uc3RpdHV0ZSB0aGUgY29tcGxldGUgcGF0aCB0byB0aGUgdmFsdWUuXG4gICAgICBjb25zdCBbX25zLCBpbXBvcnRlZE5hbWUsIC4uLm5lc3RlZFBhdGhdID0gc3ltYm9scy5zeW1ib2xOYW1lcztcblxuICAgICAgY29uc3QgbW9kdWxlTmFtZSA9IGV4dHJhY3RNb2R1bGVOYW1lKGZpcnN0RGVjbC5wYXJlbnQucGFyZW50KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtpbmQ6IFR5cGVWYWx1ZVJlZmVyZW5jZUtpbmQuSU1QT1JURUQsXG4gICAgICAgIHZhbHVlRGVjbGFyYXRpb246IGRlY2wudmFsdWVEZWNsYXJhdGlvbixcbiAgICAgICAgbW9kdWxlTmFtZSxcbiAgICAgICAgaW1wb3J0ZWROYW1lLFxuICAgICAgICBuZXN0ZWRQYXRoXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIElmIHRoZSB0eXBlIGlzIG5vdCBpbXBvcnRlZCwgdGhlIHR5cGUgcmVmZXJlbmNlIGNhbiBiZSBjb252ZXJ0ZWQgaW50byBhbiBleHByZXNzaW9uIGFzIGlzLlxuICBjb25zdCBleHByZXNzaW9uID0gdHlwZU5vZGVUb1ZhbHVlRXhwcih0eXBlTm9kZSk7XG4gIGlmIChleHByZXNzaW9uICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtpbmQ6IFR5cGVWYWx1ZVJlZmVyZW5jZUtpbmQuTE9DQUwsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgZGVmYXVsdEltcG9ydFN0YXRlbWVudDogbnVsbCxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFR5cGUodHlwZU5vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuc3VwcG9ydGVkVHlwZSh0eXBlTm9kZTogdHMuVHlwZU5vZGUpOiBVbmF2YWlsYWJsZVR5cGVWYWx1ZVJlZmVyZW5jZSB7XG4gIHJldHVybiB7XG4gICAga2luZDogVHlwZVZhbHVlUmVmZXJlbmNlS2luZC5VTkFWQUlMQUJMRSxcbiAgICByZWFzb246IHtraW5kOiBWYWx1ZVVuYXZhaWxhYmxlS2luZC5VTlNVUFBPUlRFRCwgdHlwZU5vZGV9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBub1ZhbHVlRGVjbGFyYXRpb24oXG4gICAgdHlwZU5vZGU6IHRzLlR5cGVOb2RlLCBkZWNsOiB0cy5EZWNsYXJhdGlvbnxudWxsKTogVW5hdmFpbGFibGVUeXBlVmFsdWVSZWZlcmVuY2Uge1xuICByZXR1cm4ge1xuICAgIGtpbmQ6IFR5cGVWYWx1ZVJlZmVyZW5jZUtpbmQuVU5BVkFJTEFCTEUsXG4gICAgcmVhc29uOiB7a2luZDogVmFsdWVVbmF2YWlsYWJsZUtpbmQuTk9fVkFMVUVfREVDTEFSQVRJT04sIHR5cGVOb2RlLCBkZWNsfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gdHlwZU9ubHlJbXBvcnQoXG4gICAgdHlwZU5vZGU6IHRzLlR5cGVOb2RlLCBpbXBvcnRDbGF1c2U6IHRzLkltcG9ydENsYXVzZSk6IFVuYXZhaWxhYmxlVHlwZVZhbHVlUmVmZXJlbmNlIHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiBUeXBlVmFsdWVSZWZlcmVuY2VLaW5kLlVOQVZBSUxBQkxFLFxuICAgIHJlYXNvbjoge2tpbmQ6IFZhbHVlVW5hdmFpbGFibGVLaW5kLlRZUEVfT05MWV9JTVBPUlQsIHR5cGVOb2RlLCBpbXBvcnRDbGF1c2V9LFxuICB9O1xufVxuXG5mdW5jdGlvbiB1bmtub3duUmVmZXJlbmNlKHR5cGVOb2RlOiB0cy5UeXBlTm9kZSk6IFVuYXZhaWxhYmxlVHlwZVZhbHVlUmVmZXJlbmNlIHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiBUeXBlVmFsdWVSZWZlcmVuY2VLaW5kLlVOQVZBSUxBQkxFLFxuICAgIHJlYXNvbjoge2tpbmQ6IFZhbHVlVW5hdmFpbGFibGVLaW5kLlVOS05PV05fUkVGRVJFTkNFLCB0eXBlTm9kZX0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIG5hbWVzcGFjZUltcG9ydChcbiAgICB0eXBlTm9kZTogdHMuVHlwZU5vZGUsIGltcG9ydENsYXVzZTogdHMuSW1wb3J0Q2xhdXNlKTogVW5hdmFpbGFibGVUeXBlVmFsdWVSZWZlcmVuY2Uge1xuICByZXR1cm4ge1xuICAgIGtpbmQ6IFR5cGVWYWx1ZVJlZmVyZW5jZUtpbmQuVU5BVkFJTEFCTEUsXG4gICAgcmVhc29uOiB7a2luZDogVmFsdWVVbmF2YWlsYWJsZUtpbmQuTkFNRVNQQUNFLCB0eXBlTm9kZSwgaW1wb3J0Q2xhdXNlfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWlzc2luZ1R5cGUoKTogVW5hdmFpbGFibGVUeXBlVmFsdWVSZWZlcmVuY2Uge1xuICByZXR1cm4ge1xuICAgIGtpbmQ6IFR5cGVWYWx1ZVJlZmVyZW5jZUtpbmQuVU5BVkFJTEFCTEUsXG4gICAgcmVhc29uOiB7a2luZDogVmFsdWVVbmF2YWlsYWJsZUtpbmQuTUlTU0lOR19UWVBFfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBBdHRlbXB0IHRvIGV4dHJhY3QgYSBgdHMuRXhwcmVzc2lvbmAgdGhhdCdzIGVxdWl2YWxlbnQgdG8gYSBgdHMuVHlwZU5vZGVgLCBhcyB0aGUgdHdvIGhhdmVcbiAqIGRpZmZlcmVudCBBU1Qgc2hhcGVzIGJ1dCBjYW4gcmVmZXJlbmNlIHRoZSBzYW1lIHN5bWJvbHMuXG4gKlxuICogVGhpcyB3aWxsIHJldHVybiBgbnVsbGAgaWYgYW4gZXF1aXZhbGVudCBleHByZXNzaW9uIGNhbm5vdCBiZSBjb25zdHJ1Y3RlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHR5cGVOb2RlVG9WYWx1ZUV4cHIobm9kZTogdHMuVHlwZU5vZGUpOiB0cy5FeHByZXNzaW9ufG51bGwge1xuICBpZiAodHMuaXNUeXBlUmVmZXJlbmNlTm9kZShub2RlKSkge1xuICAgIHJldHVybiBlbnRpdHlOYW1lVG9WYWx1ZShub2RlLnR5cGVOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIFJlc29sdmUgYSBgVHlwZVJlZmVyZW5jZWAgbm9kZSB0byB0aGUgYHRzLlN5bWJvbGBzIGZvciBib3RoIGl0cyBkZWNsYXJhdGlvbiBhbmQgaXRzIGxvY2FsIHNvdXJjZS5cbiAqXG4gKiBJbiB0aGUgZXZlbnQgdGhhdCB0aGUgYFR5cGVSZWZlcmVuY2VgIHJlZmVycyB0byBhIGxvY2FsbHkgZGVjbGFyZWQgc3ltYm9sLCB0aGVzZSB3aWxsIGJlIHRoZVxuICogc2FtZS4gSWYgdGhlIGBUeXBlUmVmZXJlbmNlYCByZWZlcnMgdG8gYW4gaW1wb3J0ZWQgc3ltYm9sLCB0aGVuIGBkZWNsYCB3aWxsIGJlIHRoZSBmdWxseSByZXNvbHZlZFxuICogYHRzLlN5bWJvbGAgb2YgdGhlIHJlZmVyZW5jZWQgc3ltYm9sLiBgbG9jYWxgIHdpbGwgYmUgdGhlIGB0cy5TeW1ib2xgIG9mIHRoZSBgdHMuSWRlbnRpZmllcmBcbiAqIHdoaWNoIHBvaW50cyB0byB0aGUgaW1wb3J0IHN0YXRlbWVudCBieSB3aGljaCB0aGUgc3ltYm9sIHdhcyBpbXBvcnRlZC5cbiAqXG4gKiBBbGwgc3ltYm9sIG5hbWVzIHRoYXQgbWFrZSB1cCB0aGUgdHlwZSByZWZlcmVuY2UgYXJlIHJldHVybmVkIGxlZnQtdG8tcmlnaHQgaW50byB0aGVcbiAqIGBzeW1ib2xOYW1lc2AgYXJyYXksIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gaW5jbHVkZSBhdCBsZWFzdCBvbmUgZW50cnkuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVUeXBlU3ltYm9scyh0eXBlUmVmOiB0cy5UeXBlUmVmZXJlbmNlTm9kZSwgY2hlY2tlcjogdHMuVHlwZUNoZWNrZXIpOlxuICAgIHtsb2NhbDogdHMuU3ltYm9sLCBkZWNsOiB0cy5TeW1ib2wsIHN5bWJvbE5hbWVzOiBzdHJpbmdbXX18bnVsbCB7XG4gIGNvbnN0IHR5cGVOYW1lID0gdHlwZVJlZi50eXBlTmFtZTtcbiAgLy8gdHlwZVJlZlN5bWJvbCBpcyB0aGUgdHMuU3ltYm9sIG9mIHRoZSBlbnRpcmUgdHlwZSByZWZlcmVuY2UuXG4gIGNvbnN0IHR5cGVSZWZTeW1ib2w6IHRzLlN5bWJvbHx1bmRlZmluZWQgPSBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24odHlwZU5hbWUpO1xuICBpZiAodHlwZVJlZlN5bWJvbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBgbG9jYWxgIGlzIHRoZSBgdHMuU3ltYm9sYCBmb3IgdGhlIGxvY2FsIGB0cy5JZGVudGlmaWVyYCBmb3IgdGhlIHR5cGUuXG4gIC8vIElmIHRoZSB0eXBlIGlzIGFjdHVhbGx5IGxvY2FsbHkgZGVjbGFyZWQgb3IgaXMgaW1wb3J0ZWQgYnkgbmFtZSwgZm9yIGV4YW1wbGU6XG4gIC8vICAgaW1wb3J0IHtGb299IGZyb20gJy4vZm9vJztcbiAgLy8gdGhlbiBpdCdsbCBiZSB0aGUgc2FtZSBhcyBgdHlwZVJlZlN5bWJvbGAuXG4gIC8vXG4gIC8vIElmIHRoZSB0eXBlIGlzIGltcG9ydGVkIHZpYSBhIG5hbWVzcGFjZSBpbXBvcnQsIGZvciBleGFtcGxlOlxuICAvLyAgIGltcG9ydCAqIGFzIGZvbyBmcm9tICcuL2Zvbyc7XG4gIC8vIGFuZCB0aGVuIHJlZmVyZW5jZWQgYXM6XG4gIC8vICAgY29uc3RydWN0b3IoZjogZm9vLkZvbylcbiAgLy8gdGhlbiBgbG9jYWxgIHdpbGwgYmUgdGhlIGB0cy5TeW1ib2xgIG9mIGBmb29gLCB3aGVyZWFzIGB0eXBlUmVmU3ltYm9sYCB3aWxsIGJlIHRoZSBgdHMuU3ltYm9sYFxuICAvLyBvZiBgZm9vLkZvb2AuIFRoaXMgYWxsb3dzIHRyYWNraW5nIG9mIHRoZSBpbXBvcnQgYmVoaW5kIHdoYXRldmVyIHR5cGUgcmVmZXJlbmNlIGV4aXN0cy5cbiAgbGV0IGxvY2FsID0gdHlwZVJlZlN5bWJvbDtcblxuICAvLyBEZXN0cnVjdHVyZSBhIG5hbWUgbGlrZSBgZm9vLlguWS5aYCBhcyBmb2xsb3dzOlxuICAvLyAtIGluIGBsZWZ0TW9zdGAsIHRoZSBgdHMuSWRlbnRpZmllcmAgb2YgdGhlIGxlZnQtbW9zdCBuYW1lIChgZm9vYCkgaW4gdGhlIHF1YWxpZmllZCBuYW1lLlxuICAvLyAgIFRoaXMgaWRlbnRpZmllciBpcyB1c2VkIHRvIHJlc29sdmUgdGhlIGB0cy5TeW1ib2xgIGZvciBgbG9jYWxgLlxuICAvLyAtIGluIGBzeW1ib2xOYW1lc2AsIGFsbCBuYW1lcyBpbnZvbHZlZCBpbiB0aGUgcXVhbGlmaWVkIHBhdGgsIG9yIGEgc2luZ2xlIHN5bWJvbCBuYW1lIGlmIHRoZVxuICAvLyAgIHR5cGUgaXMgbm90IHF1YWxpZmllZC5cbiAgbGV0IGxlZnRNb3N0ID0gdHlwZU5hbWU7XG4gIGNvbnN0IHN5bWJvbE5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICB3aGlsZSAodHMuaXNRdWFsaWZpZWROYW1lKGxlZnRNb3N0KSkge1xuICAgIHN5bWJvbE5hbWVzLnVuc2hpZnQobGVmdE1vc3QucmlnaHQudGV4dCk7XG4gICAgbGVmdE1vc3QgPSBsZWZ0TW9zdC5sZWZ0O1xuICB9XG4gIHN5bWJvbE5hbWVzLnVuc2hpZnQobGVmdE1vc3QudGV4dCk7XG5cbiAgaWYgKGxlZnRNb3N0ICE9PSB0eXBlTmFtZSkge1xuICAgIGNvbnN0IGxvY2FsVG1wID0gY2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKGxlZnRNb3N0KTtcbiAgICBpZiAobG9jYWxUbXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWwgPSBsb2NhbFRtcDtcbiAgICB9XG4gIH1cblxuICAvLyBEZS1hbGlhcyB0aGUgdG9wLWxldmVsIHR5cGUgcmVmZXJlbmNlIHN5bWJvbCB0byBnZXQgdGhlIHN5bWJvbCBvZiB0aGUgYWN0dWFsIGRlY2xhcmF0aW9uLlxuICBsZXQgZGVjbCA9IHR5cGVSZWZTeW1ib2w7XG4gIGlmICh0eXBlUmVmU3ltYm9sLmZsYWdzICYgdHMuU3ltYm9sRmxhZ3MuQWxpYXMpIHtcbiAgICBkZWNsID0gY2hlY2tlci5nZXRBbGlhc2VkU3ltYm9sKHR5cGVSZWZTeW1ib2wpO1xuICB9XG4gIHJldHVybiB7bG9jYWwsIGRlY2wsIHN5bWJvbE5hbWVzfTtcbn1cblxuZnVuY3Rpb24gZW50aXR5TmFtZVRvVmFsdWUobm9kZTogdHMuRW50aXR5TmFtZSk6IHRzLkV4cHJlc3Npb258bnVsbCB7XG4gIGlmICh0cy5pc1F1YWxpZmllZE5hbWUobm9kZSkpIHtcbiAgICBjb25zdCBsZWZ0ID0gZW50aXR5TmFtZVRvVmFsdWUobm9kZS5sZWZ0KTtcbiAgICByZXR1cm4gbGVmdCAhPT0gbnVsbCA/IHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKGxlZnQsIG5vZGUucmlnaHQpIDogbnVsbDtcbiAgfSBlbHNlIGlmICh0cy5pc0lkZW50aWZpZXIobm9kZSkpIHtcbiAgICByZXR1cm4gdHMuZ2V0TXV0YWJsZUNsb25lKG5vZGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RNb2R1bGVOYW1lKG5vZGU6IHRzLkltcG9ydERlY2xhcmF0aW9uKTogc3RyaW5nIHtcbiAgaWYgKCF0cy5pc1N0cmluZ0xpdGVyYWwobm9kZS5tb2R1bGVTcGVjaWZpZXIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3QgYSBtb2R1bGUgc3BlY2lmaWVyJyk7XG4gIH1cbiAgcmV0dXJuIG5vZGUubW9kdWxlU3BlY2lmaWVyLnRleHQ7XG59XG4iXX0=