@angular/compiler-cli 12.1.1 → 12.1.2

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 (445) 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/file_system/testing/src/mock_file_system_native.js +1 -1
  30. package/src/ngtsc/file_system/testing/src/mock_file_system_posix.js +1 -1
  31. package/src/ngtsc/file_system/testing/src/mock_file_system_windows.js +1 -1
  32. package/src/ngtsc/incremental/semantic_graph/src/graph.js +1 -1
  33. package/src/ngtsc/incremental/src/incremental.js +30 -4
  34. package/src/ngtsc/indexer/src/template.js +1 -1
  35. package/src/ngtsc/partial_evaluator/src/builtin.js +1 -1
  36. package/src/ngtsc/partial_evaluator/src/ts_helpers.js +1 -1
  37. package/src/ngtsc/program_driver/src/api.d.ts +20 -1
  38. package/src/ngtsc/program_driver/src/api.js +3 -2
  39. package/src/ngtsc/program_driver/src/ts_create_program_driver.d.ts +2 -2
  40. package/src/ngtsc/program_driver/src/ts_create_program_driver.js +7 -3
  41. package/src/ngtsc/reflection/src/typescript.js +4 -1
  42. package/src/ngtsc/transform/src/transform.js +1 -1
  43. package/src/ngtsc/typecheck/src/context.d.ts +2 -1
  44. package/src/ngtsc/typecheck/src/context.js +11 -3
  45. package/src/ngtsc/typecheck/src/template_semantics.js +1 -1
  46. package/src/ngtsc/typecheck/src/template_symbol_builder.js +21 -1
  47. package/src/ngtsc/typecheck/src/type_check_block.js +2 -2
  48. package/src/ngtsc/typecheck/src/type_check_file.js +1 -1
  49. package/src/ngtsc/typecheck/src/type_emitter.js +25 -6
  50. package/src/ngtsc/util/src/visitor.d.ts +1 -1
  51. package/src/ngtsc/util/src/visitor.js +1 -8
  52. package/src/version.js +1 -1
  53. package/compiler-cli.externs.js +0 -0
  54. package/index.mjs +0 -20
  55. package/linker/babel/babel.externs.js +0 -0
  56. package/linker/babel/index.mjs +0 -11
  57. package/linker/babel/src/ast/babel_ast_factory.mjs +0 -137
  58. package/linker/babel/src/ast/babel_ast_host.mjs +0 -154
  59. package/linker/babel/src/babel_declaration_scope.mjs +0 -52
  60. package/linker/babel/src/babel_plugin.mjs +0 -23
  61. package/linker/babel/src/es2015_linker_plugin.mjs +0 -158
  62. package/linker/babel/src/linker_plugin_options.mjs +0 -2
  63. package/linker/index.mjs +0 -7
  64. package/linker/linker.externs.js +0 -0
  65. package/linker/src/ast/ast_host.mjs +0 -9
  66. package/linker/src/ast/ast_value.mjs +0 -256
  67. package/linker/src/ast/typescript/typescript_ast_host.mjs +0 -156
  68. package/linker/src/ast/utils.mjs +0 -17
  69. package/linker/src/fatal_linker_error.mjs +0 -30
  70. package/linker/src/file_linker/declaration_scope.mjs +0 -9
  71. package/linker/src/file_linker/emit_scopes/emit_scope.mjs +0 -41
  72. package/linker/src/file_linker/emit_scopes/iife_emit_scope.mjs +0 -33
  73. package/linker/src/file_linker/file_linker.mjs +0 -70
  74. package/linker/src/file_linker/get_source_file.mjs +0 -28
  75. package/linker/src/file_linker/linker_environment.mjs +0 -23
  76. package/linker/src/file_linker/linker_options.mjs +0 -16
  77. package/linker/src/file_linker/needs_linking.mjs +0 -27
  78. package/linker/src/file_linker/partial_linkers/partial_class_metadata_linker_1.mjs +0 -29
  79. package/linker/src/file_linker/partial_linkers/partial_component_linker_1.mjs +0 -194
  80. package/linker/src/file_linker/partial_linkers/partial_directive_linker_1.mjs +0 -137
  81. package/linker/src/file_linker/partial_linkers/partial_factory_linker_1.mjs +0 -52
  82. package/linker/src/file_linker/partial_linkers/partial_injectable_linker_1.mjs +0 -56
  83. package/linker/src/file_linker/partial_linkers/partial_injector_linker_1.mjs +0 -38
  84. package/linker/src/file_linker/partial_linkers/partial_linker.mjs +0 -2
  85. package/linker/src/file_linker/partial_linkers/partial_linker_selector.mjs +0 -166
  86. package/linker/src/file_linker/partial_linkers/partial_ng_module_linker_1.mjs +0 -110
  87. package/linker/src/file_linker/partial_linkers/partial_pipe_linker_1.mjs +0 -42
  88. package/linker/src/file_linker/partial_linkers/util.mjs +0 -78
  89. package/linker/src/file_linker/translator.mjs +0 -23
  90. package/linker/src/linker_import_generator.mjs +0 -28
  91. package/ngcc/index.mjs +0 -16
  92. package/ngcc/main-ivy-ngcc.mjs +0 -12
  93. package/ngcc/main-ngcc.mjs +0 -32
  94. package/ngcc/ngcc.externs.js +0 -0
  95. package/ngcc/src/analysis/decoration_analyzer.mjs +0 -215
  96. package/ngcc/src/analysis/migration_host.mjs +0 -80
  97. package/ngcc/src/analysis/module_with_providers_analyzer.mjs +0 -178
  98. package/ngcc/src/analysis/ngcc_references_registry.mjs +0 -45
  99. package/ngcc/src/analysis/ngcc_trait_compiler.mjs +0 -70
  100. package/ngcc/src/analysis/private_declarations_analyzer.mjs +0 -47
  101. package/ngcc/src/analysis/switch_marker_analyzer.mjs +0 -34
  102. package/ngcc/src/analysis/types.mjs +0 -2
  103. package/ngcc/src/analysis/util.mjs +0 -19
  104. package/ngcc/src/command_line_options.mjs +0 -142
  105. package/ngcc/src/constants.mjs +0 -10
  106. package/ngcc/src/dependencies/commonjs_dependency_host.mjs +0 -87
  107. package/ngcc/src/dependencies/dependency_host.mjs +0 -102
  108. package/ngcc/src/dependencies/dependency_resolver.mjs +0 -151
  109. package/ngcc/src/dependencies/dts_dependency_host.mjs +0 -18
  110. package/ngcc/src/dependencies/esm_dependency_host.mjs +0 -286
  111. package/ngcc/src/dependencies/module_resolver.mjs +0 -233
  112. package/ngcc/src/dependencies/umd_dependency_host.mjs +0 -33
  113. package/ngcc/src/entry_point_finder/directory_walker_entry_point_finder.mjs +0 -42
  114. package/ngcc/src/entry_point_finder/entry_point_collector.mjs +0 -120
  115. package/ngcc/src/entry_point_finder/interface.mjs +0 -2
  116. package/ngcc/src/entry_point_finder/program_based_entry_point_finder.mjs +0 -91
  117. package/ngcc/src/entry_point_finder/targeted_entry_point_finder.mjs +0 -216
  118. package/ngcc/src/entry_point_finder/tracing_entry_point_finder.mjs +0 -63
  119. package/ngcc/src/entry_point_finder/utils.mjs +0 -176
  120. package/ngcc/src/execution/analyze_entry_points.mjs +0 -130
  121. package/ngcc/src/execution/api.mjs +0 -2
  122. package/ngcc/src/execution/cluster/api.mjs +0 -9
  123. package/ngcc/src/execution/cluster/executor.mjs +0 -27
  124. package/ngcc/src/execution/cluster/master.mjs +0 -261
  125. package/ngcc/src/execution/cluster/package_json_updater.mjs +0 -45
  126. package/ngcc/src/execution/cluster/utils.mjs +0 -59
  127. package/ngcc/src/execution/cluster/worker.mjs +0 -81
  128. package/ngcc/src/execution/create_compile_function.mjs +0 -62
  129. package/ngcc/src/execution/single_process_executor.mjs +0 -57
  130. package/ngcc/src/execution/tasks/api.mjs +0 -22
  131. package/ngcc/src/execution/tasks/completion.mjs +0 -61
  132. package/ngcc/src/execution/tasks/queues/base_task_queue.mjs +0 -78
  133. package/ngcc/src/execution/tasks/queues/parallel_task_queue.mjs +0 -53
  134. package/ngcc/src/execution/tasks/queues/serial_task_queue.mjs +0 -29
  135. package/ngcc/src/execution/tasks/utils.mjs +0 -114
  136. package/ngcc/src/host/commonjs_host.mjs +0 -220
  137. package/ngcc/src/host/commonjs_umd_utils.mjs +0 -186
  138. package/ngcc/src/host/delegating_host.mjs +0 -140
  139. package/ngcc/src/host/esm2015_host.mjs +0 -2293
  140. package/ngcc/src/host/esm5_host.mjs +0 -721
  141. package/ngcc/src/host/ngcc_host.mjs +0 -15
  142. package/ngcc/src/host/umd_host.mjs +0 -486
  143. package/ngcc/src/host/utils.mjs +0 -12
  144. package/ngcc/src/locking/async_locker.mjs +0 -76
  145. package/ngcc/src/locking/lock_file.mjs +0 -4
  146. package/ngcc/src/locking/lock_file_with_child_process/index.mjs +0 -78
  147. package/ngcc/src/locking/lock_file_with_child_process/unlocker.mjs +0 -34
  148. package/ngcc/src/locking/lock_file_with_child_process/util.mjs +0 -29
  149. package/ngcc/src/locking/sync_locker.mjs +0 -52
  150. package/ngcc/src/main.mjs +0 -134
  151. package/ngcc/src/migrations/migration.mjs +0 -2
  152. package/ngcc/src/migrations/missing_injectable_migration.mjs +0 -164
  153. package/ngcc/src/migrations/undecorated_child_migration.mjs +0 -61
  154. package/ngcc/src/migrations/undecorated_parent_migration.mjs +0 -86
  155. package/ngcc/src/migrations/utils.mjs +0 -117
  156. package/ngcc/src/ngcc_options.mjs +0 -119
  157. package/ngcc/src/packages/build_marker.mjs +0 -84
  158. package/ngcc/src/packages/bundle_program.mjs +0 -52
  159. package/ngcc/src/packages/configuration.mjs +0 -255
  160. package/ngcc/src/packages/entry_point.mjs +0 -239
  161. package/ngcc/src/packages/entry_point_bundle.mjs +0 -68
  162. package/ngcc/src/packages/entry_point_manifest.mjs +0 -162
  163. package/ngcc/src/packages/ngcc_compiler_host.mjs +0 -77
  164. package/ngcc/src/packages/patch_ts_expando_initializer.mjs +0 -166
  165. package/ngcc/src/packages/source_file_cache.mjs +0 -187
  166. package/ngcc/src/packages/transformer.mjs +0 -140
  167. package/ngcc/src/path_mappings.mjs +0 -13
  168. package/ngcc/src/rendering/commonjs_rendering_formatter.mjs +0 -65
  169. package/ngcc/src/rendering/dts_renderer.mjs +0 -139
  170. package/ngcc/src/rendering/esm5_rendering_formatter.mjs +0 -50
  171. package/ngcc/src/rendering/esm_rendering_formatter.mjs +0 -251
  172. package/ngcc/src/rendering/ngcc_import_rewriter.mjs +0 -32
  173. package/ngcc/src/rendering/renderer.mjs +0 -170
  174. package/ngcc/src/rendering/rendering_formatter.mjs +0 -2
  175. package/ngcc/src/rendering/source_maps.mjs +0 -54
  176. package/ngcc/src/rendering/umd_rendering_formatter.mjs +0 -292
  177. package/ngcc/src/rendering/utils.mjs +0 -20
  178. package/ngcc/src/utils.mjs +0 -144
  179. package/ngcc/src/writing/cleaning/cleaning_strategies.mjs +0 -61
  180. package/ngcc/src/writing/cleaning/package_cleaner.mjs +0 -67
  181. package/ngcc/src/writing/cleaning/utils.mjs +0 -16
  182. package/ngcc/src/writing/file_writer.mjs +0 -2
  183. package/ngcc/src/writing/in_place_file_writer.mjs +0 -62
  184. package/ngcc/src/writing/new_entry_point_file_writer.mjs +0 -161
  185. package/ngcc/src/writing/package_json_updater.mjs +0 -144
  186. package/src/diagnostics/translate_diagnostics.mjs +0 -47
  187. package/src/diagnostics/typescript_version.mjs +0 -79
  188. package/src/extract_i18n.mjs +0 -46
  189. package/src/language_services.mjs +0 -18
  190. package/src/main.mjs +0 -185
  191. package/src/metadata/bundle_index_host.mjs +0 -107
  192. package/src/metadata/bundler.mjs +0 -556
  193. package/src/metadata/collector.mjs +0 -701
  194. package/src/metadata/evaluator.mjs +0 -643
  195. package/src/metadata/index.mjs +0 -11
  196. package/src/metadata/index_writer.mjs +0 -44
  197. package/src/metadata/schema.mjs +0 -102
  198. package/src/metadata/symbols.mjs +0 -117
  199. package/src/ngtsc/annotations/annotations.externs.js +0 -0
  200. package/src/ngtsc/annotations/index.mjs +0 -15
  201. package/src/ngtsc/annotations/src/api.mjs +0 -9
  202. package/src/ngtsc/annotations/src/component.mjs +0 -1068
  203. package/src/ngtsc/annotations/src/diagnostics.mjs +0 -147
  204. package/src/ngtsc/annotations/src/directive.mjs +0 -692
  205. package/src/ngtsc/annotations/src/factory.mjs +0 -17
  206. package/src/ngtsc/annotations/src/injectable.mjs +0 -260
  207. package/src/ngtsc/annotations/src/metadata.mjs +0 -145
  208. package/src/ngtsc/annotations/src/ng_module.mjs +0 -565
  209. package/src/ngtsc/annotations/src/pipe.mjs +0 -151
  210. package/src/ngtsc/annotations/src/references_registry.mjs +0 -16
  211. package/src/ngtsc/annotations/src/util.mjs +0 -495
  212. package/src/ngtsc/core/api/index.mjs +0 -12
  213. package/src/ngtsc/core/api/src/adapter.mjs +0 -9
  214. package/src/ngtsc/core/api/src/interfaces.mjs +0 -9
  215. package/src/ngtsc/core/api/src/options.mjs +0 -9
  216. package/src/ngtsc/core/api/src/public_options.mjs +0 -9
  217. package/src/ngtsc/core/api.externs.js +0 -0
  218. package/src/ngtsc/core/core.externs.js +0 -0
  219. package/src/ngtsc/core/index.mjs +0 -10
  220. package/src/ngtsc/core/src/compiler.mjs +0 -917
  221. package/src/ngtsc/core/src/config.mjs +0 -15
  222. package/src/ngtsc/core/src/host.mjs +0 -229
  223. package/src/ngtsc/cycles/cycles.externs.js +0 -0
  224. package/src/ngtsc/cycles/index.mjs +0 -10
  225. package/src/ngtsc/cycles/src/analyzer.mjs +0 -60
  226. package/src/ngtsc/cycles/src/imports.mjs +0 -152
  227. package/src/ngtsc/diagnostics/diagnostics.externs.js +0 -0
  228. package/src/ngtsc/diagnostics/index.mjs +0 -11
  229. package/src/ngtsc/diagnostics/src/error.mjs +0 -51
  230. package/src/ngtsc/diagnostics/src/error_code.mjs +0 -198
  231. package/src/ngtsc/diagnostics/src/util.mjs +0 -21
  232. package/src/ngtsc/entry_point/entry_point.externs.js +0 -0
  233. package/src/ngtsc/entry_point/index.mjs +0 -12
  234. package/src/ngtsc/entry_point/src/generator.mjs +0 -35
  235. package/src/ngtsc/entry_point/src/logic.mjs +0 -35
  236. package/src/ngtsc/entry_point/src/private_export_checker.mjs +0 -122
  237. package/src/ngtsc/entry_point/src/reference_graph.mjs +0 -73
  238. package/src/ngtsc/file_system/file_system.externs.js +0 -0
  239. package/src/ngtsc/file_system/index.mjs +0 -13
  240. package/src/ngtsc/file_system/src/compiler_host.mjs +0 -64
  241. package/src/ngtsc/file_system/src/helpers.mjs +0 -99
  242. package/src/ngtsc/file_system/src/invalid_file_system.mjs +0 -95
  243. package/src/ngtsc/file_system/src/logical.mjs +0 -84
  244. package/src/ngtsc/file_system/src/node_js_file_system.mjs +0 -142
  245. package/src/ngtsc/file_system/src/types.mjs +0 -9
  246. package/src/ngtsc/file_system/src/util.mjs +0 -22
  247. package/src/ngtsc/file_system/testing/index.mjs +0 -13
  248. package/src/ngtsc/file_system/testing/src/mock_file_system.mjs +0 -293
  249. package/src/ngtsc/file_system/testing/src/mock_file_system_native.mjs +0 -57
  250. package/src/ngtsc/file_system/testing/src/mock_file_system_posix.mjs +0 -38
  251. package/src/ngtsc/file_system/testing/src/mock_file_system_windows.mjs +0 -38
  252. package/src/ngtsc/file_system/testing/src/test_helper.mjs +0 -108
  253. package/src/ngtsc/file_system/testing/testing.externs.js +0 -0
  254. package/src/ngtsc/imports/imports.externs.js +0 -0
  255. package/src/ngtsc/imports/index.mjs +0 -14
  256. package/src/ngtsc/imports/src/alias.mjs +0 -137
  257. package/src/ngtsc/imports/src/core.mjs +0 -78
  258. package/src/ngtsc/imports/src/default.mjs +0 -135
  259. package/src/ngtsc/imports/src/emitter.mjs +0 -266
  260. package/src/ngtsc/imports/src/find_export.mjs +0 -56
  261. package/src/ngtsc/imports/src/reexport.mjs +0 -9
  262. package/src/ngtsc/imports/src/references.mjs +0 -137
  263. package/src/ngtsc/imports/src/resolver.mjs +0 -24
  264. package/src/ngtsc/incremental/api.externs.js +0 -0
  265. package/src/ngtsc/incremental/api.mjs +0 -9
  266. package/src/ngtsc/incremental/incremental.externs.js +0 -0
  267. package/src/ngtsc/incremental/index.mjs +0 -12
  268. package/src/ngtsc/incremental/semantic_graph/index.mjs +0 -12
  269. package/src/ngtsc/incremental/semantic_graph/semantic_graph.externs.js +0 -0
  270. package/src/ngtsc/incremental/semantic_graph/src/api.mjs +0 -36
  271. package/src/ngtsc/incremental/semantic_graph/src/graph.mjs +0 -237
  272. package/src/ngtsc/incremental/semantic_graph/src/type_parameters.mjs +0 -40
  273. package/src/ngtsc/incremental/semantic_graph/src/util.mjs +0 -69
  274. package/src/ngtsc/incremental/src/dependency_tracking.mjs +0 -117
  275. package/src/ngtsc/incremental/src/incremental.mjs +0 -271
  276. package/src/ngtsc/incremental/src/noop.mjs +0 -13
  277. package/src/ngtsc/incremental/src/state.mjs +0 -17
  278. package/src/ngtsc/incremental/src/strategy.mjs +0 -76
  279. package/src/ngtsc/indexer/index.mjs +0 -11
  280. package/src/ngtsc/indexer/indexer.externs.js +0 -0
  281. package/src/ngtsc/indexer/src/api.mjs +0 -30
  282. package/src/ngtsc/indexer/src/context.mjs +0 -25
  283. package/src/ngtsc/indexer/src/template.mjs +0 -303
  284. package/src/ngtsc/indexer/src/transform.mjs +0 -51
  285. package/src/ngtsc/logging/index.mjs +0 -10
  286. package/src/ngtsc/logging/logging.externs.js +0 -0
  287. package/src/ngtsc/logging/src/console_logger.mjs +0 -43
  288. package/src/ngtsc/logging/src/logger.mjs +0 -15
  289. package/src/ngtsc/logging/testing/index.mjs +0 -9
  290. package/src/ngtsc/logging/testing/src/mock_logger.mjs +0 -32
  291. package/src/ngtsc/logging/testing/testing.externs.js +0 -0
  292. package/src/ngtsc/metadata/index.mjs +0 -15
  293. package/src/ngtsc/metadata/metadata.externs.js +0 -0
  294. package/src/ngtsc/metadata/src/api.mjs +0 -13
  295. package/src/ngtsc/metadata/src/dts.mjs +0 -143
  296. package/src/ngtsc/metadata/src/inheritance.mjs +0 -71
  297. package/src/ngtsc/metadata/src/property_mapping.mjs +0 -136
  298. package/src/ngtsc/metadata/src/registry.mjs +0 -80
  299. package/src/ngtsc/metadata/src/resource_registry.mjs +0 -81
  300. package/src/ngtsc/metadata/src/util.mjs +0 -200
  301. package/src/ngtsc/partial_evaluator/index.mjs +0 -12
  302. package/src/ngtsc/partial_evaluator/partial_evaluator.externs.js +0 -0
  303. package/src/ngtsc/partial_evaluator/src/builtin.mjs +0 -65
  304. package/src/ngtsc/partial_evaluator/src/diagnostics.mjs +0 -174
  305. package/src/ngtsc/partial_evaluator/src/dynamic.mjs +0 -94
  306. package/src/ngtsc/partial_evaluator/src/interface.mjs +0 -27
  307. package/src/ngtsc/partial_evaluator/src/interpreter.mjs +0 -719
  308. package/src/ngtsc/partial_evaluator/src/known_declaration.mjs +0 -43
  309. package/src/ngtsc/partial_evaluator/src/result.mjs +0 -50
  310. package/src/ngtsc/partial_evaluator/src/ts_helpers.mjs +0 -72
  311. package/src/ngtsc/perf/index.mjs +0 -11
  312. package/src/ngtsc/perf/perf.externs.js +0 -0
  313. package/src/ngtsc/perf/src/api.mjs +0 -278
  314. package/src/ngtsc/perf/src/clock.mjs +0 -15
  315. package/src/ngtsc/perf/src/noop.mjs +0 -21
  316. package/src/ngtsc/perf/src/recorder.mjs +0 -125
  317. package/src/ngtsc/program.mjs +0 -271
  318. package/src/ngtsc/program_driver/index.mjs +0 -10
  319. package/src/ngtsc/program_driver/program_driver.externs.js +0 -0
  320. package/src/ngtsc/program_driver/src/api.mjs +0 -22
  321. package/src/ngtsc/program_driver/src/ts_create_program_driver.mjs +0 -164
  322. package/src/ngtsc/reflection/index.mjs +0 -12
  323. package/src/ngtsc/reflection/reflection.externs.js +0 -0
  324. package/src/ngtsc/reflection/src/host.mjs +0 -73
  325. package/src/ngtsc/reflection/src/type_to_value.mjs +0 -243
  326. package/src/ngtsc/reflection/src/typescript.mjs +0 -608
  327. package/src/ngtsc/reflection/src/util.mjs +0 -21
  328. package/src/ngtsc/resource/index.mjs +0 -9
  329. package/src/ngtsc/resource/resource.externs.js +0 -0
  330. package/src/ngtsc/resource/src/loader.mjs +0 -242
  331. package/src/ngtsc/routing/index.mjs +0 -11
  332. package/src/ngtsc/routing/routing.externs.js +0 -0
  333. package/src/ngtsc/routing/src/analyzer.mjs +0 -69
  334. package/src/ngtsc/routing/src/lazy.mjs +0 -168
  335. package/src/ngtsc/routing/src/route.mjs +0 -51
  336. package/src/ngtsc/scope/index.mjs +0 -12
  337. package/src/ngtsc/scope/scope.externs.js +0 -0
  338. package/src/ngtsc/scope/src/api.mjs +0 -9
  339. package/src/ngtsc/scope/src/component_scope.mjs +0 -31
  340. package/src/ngtsc/scope/src/dependency.mjs +0 -134
  341. package/src/ngtsc/scope/src/local.mjs +0 -531
  342. package/src/ngtsc/scope/src/typecheck.mjs +0 -83
  343. package/src/ngtsc/shims/api.externs.js +0 -0
  344. package/src/ngtsc/shims/api.mjs +0 -2
  345. package/src/ngtsc/shims/index.mjs +0 -14
  346. package/src/ngtsc/shims/shims.externs.js +0 -0
  347. package/src/ngtsc/shims/src/adapter.mjs +0 -188
  348. package/src/ngtsc/shims/src/expando.mjs +0 -102
  349. package/src/ngtsc/shims/src/factory_generator.mjs +0 -265
  350. package/src/ngtsc/shims/src/reference_tagger.mjs +0 -67
  351. package/src/ngtsc/shims/src/summary_generator.mjs +0 -64
  352. package/src/ngtsc/shims/src/util.mjs +0 -26
  353. package/src/ngtsc/sourcemaps/index.mjs +0 -11
  354. package/src/ngtsc/sourcemaps/sourcemaps.externs.js +0 -0
  355. package/src/ngtsc/sourcemaps/src/content_origin.mjs +0 -35
  356. package/src/ngtsc/sourcemaps/src/raw_source_map.mjs +0 -2
  357. package/src/ngtsc/sourcemaps/src/segment_marker.mjs +0 -40
  358. package/src/ngtsc/sourcemaps/src/source_file.mjs +0 -459
  359. package/src/ngtsc/sourcemaps/src/source_file_loader.mjs +0 -213
  360. package/src/ngtsc/switch/index.mjs +0 -9
  361. package/src/ngtsc/switch/src/switch.mjs +0 -115
  362. package/src/ngtsc/switch/switch.externs.js +0 -0
  363. package/src/ngtsc/transform/index.mjs +0 -14
  364. package/src/ngtsc/transform/src/alias.mjs +0 -30
  365. package/src/ngtsc/transform/src/api.mjs +0 -63
  366. package/src/ngtsc/transform/src/compilation.mjs +0 -514
  367. package/src/ngtsc/transform/src/declaration.mjs +0 -182
  368. package/src/ngtsc/transform/src/trait.mjs +0 -95
  369. package/src/ngtsc/transform/src/transform.mjs +0 -298
  370. package/src/ngtsc/transform/src/utils.mjs +0 -57
  371. package/src/ngtsc/transform/transform.externs.js +0 -0
  372. package/src/ngtsc/translator/index.mjs +0 -14
  373. package/src/ngtsc/translator/src/api/ast_factory.mjs +0 -9
  374. package/src/ngtsc/translator/src/api/import_generator.mjs +0 -9
  375. package/src/ngtsc/translator/src/context.mjs +0 -24
  376. package/src/ngtsc/translator/src/import_manager.mjs +0 -48
  377. package/src/ngtsc/translator/src/translator.mjs +0 -317
  378. package/src/ngtsc/translator/src/type_translator.mjs +0 -204
  379. package/src/ngtsc/translator/src/typescript_ast_factory.mjs +0 -211
  380. package/src/ngtsc/translator/src/typescript_translator.mjs +0 -17
  381. package/src/ngtsc/translator/translator.externs.js +0 -0
  382. package/src/ngtsc/tsc_plugin.mjs +0 -98
  383. package/src/ngtsc/typecheck/api/api.externs.js +0 -0
  384. package/src/ngtsc/typecheck/api/api.mjs +0 -9
  385. package/src/ngtsc/typecheck/api/checker.mjs +0 -31
  386. package/src/ngtsc/typecheck/api/completion.mjs +0 -16
  387. package/src/ngtsc/typecheck/api/context.mjs +0 -9
  388. package/src/ngtsc/typecheck/api/index.mjs +0 -14
  389. package/src/ngtsc/typecheck/api/scope.mjs +0 -9
  390. package/src/ngtsc/typecheck/api/symbols.mjs +0 -22
  391. package/src/ngtsc/typecheck/diagnostics/diagnostics.externs.js +0 -0
  392. package/src/ngtsc/typecheck/diagnostics/index.mjs +0 -10
  393. package/src/ngtsc/typecheck/diagnostics/src/diagnostic.mjs +0 -99
  394. package/src/ngtsc/typecheck/diagnostics/src/id.mjs +0 -23
  395. package/src/ngtsc/typecheck/index.mjs +0 -12
  396. package/src/ngtsc/typecheck/src/checker.mjs +0 -591
  397. package/src/ngtsc/typecheck/src/comments.mjs +0 -159
  398. package/src/ngtsc/typecheck/src/completion.mjs +0 -155
  399. package/src/ngtsc/typecheck/src/context.mjs +0 -350
  400. package/src/ngtsc/typecheck/src/diagnostics.mjs +0 -95
  401. package/src/ngtsc/typecheck/src/dom.mjs +0 -68
  402. package/src/ngtsc/typecheck/src/environment.mjs +0 -146
  403. package/src/ngtsc/typecheck/src/expression.mjs +0 -412
  404. package/src/ngtsc/typecheck/src/line_mappings.mjs +0 -60
  405. package/src/ngtsc/typecheck/src/oob.mjs +0 -112
  406. package/src/ngtsc/typecheck/src/shim.mjs +0 -37
  407. package/src/ngtsc/typecheck/src/source.mjs +0 -74
  408. package/src/ngtsc/typecheck/src/tcb_util.mjs +0 -135
  409. package/src/ngtsc/typecheck/src/template_semantics.mjs +0 -34
  410. package/src/ngtsc/typecheck/src/template_symbol_builder.mjs +0 -485
  411. package/src/ngtsc/typecheck/src/ts_util.mjs +0 -157
  412. package/src/ngtsc/typecheck/src/type_check_block.mjs +0 -1770
  413. package/src/ngtsc/typecheck/src/type_check_file.mjs +0 -65
  414. package/src/ngtsc/typecheck/src/type_constructor.mjs +0 -227
  415. package/src/ngtsc/typecheck/src/type_emitter.mjs +0 -127
  416. package/src/ngtsc/typecheck/src/type_parameter_emitter.mjs +0 -93
  417. package/src/ngtsc/typecheck/typecheck.externs.js +0 -0
  418. package/src/ngtsc/util/src/path.mjs +0 -18
  419. package/src/ngtsc/util/src/typescript.mjs +0 -143
  420. package/src/ngtsc/util/src/visitor.mjs +0 -107
  421. package/src/ngtsc/util/util.externs.js +0 -0
  422. package/src/ngtsc/xi18n/index.mjs +0 -9
  423. package/src/ngtsc/xi18n/src/context.mjs +0 -9
  424. package/src/ngtsc/xi18n/xi18n.externs.js +0 -0
  425. package/src/perform_compile.mjs +0 -275
  426. package/src/perform_watch.mjs +0 -247
  427. package/src/tooling.mjs +0 -32
  428. package/src/transformers/api.mjs +0 -27
  429. package/src/transformers/compiler_host.mjs +0 -593
  430. package/src/transformers/downlevel_decorators_transform.mjs +0 -507
  431. package/src/transformers/entry_points.mjs +0 -10
  432. package/src/transformers/i18n.mjs +0 -59
  433. package/src/transformers/inline_resources.mjs +0 -269
  434. package/src/transformers/lower_expressions.mjs +0 -336
  435. package/src/transformers/metadata_cache.mjs +0 -53
  436. package/src/transformers/metadata_reader.mjs +0 -104
  437. package/src/transformers/node_emitter.mjs +0 -606
  438. package/src/transformers/node_emitter_transform.mjs +0 -78
  439. package/src/transformers/patch_alias_reference_resolution.mjs +0 -109
  440. package/src/transformers/program.mjs +0 -887
  441. package/src/transformers/r3_metadata_transform.mjs +0 -46
  442. package/src/transformers/r3_transform.mjs +0 -29
  443. package/src/transformers/util.mjs +0 -89
  444. package/src/typescript_support.mjs +0 -57
  445. package/src/version.mjs +0 -15
@@ -1,233 +0,0 @@
1
- import { isRelativePath, resolveFileWithPostfixes } from '../utils';
2
- /**
3
- * This is a very cut-down implementation of the TypeScript module resolution strategy.
4
- *
5
- * It is specific to the needs of ngcc and is not intended to be a drop-in replacement
6
- * for the TS module resolver. It is used to compute the dependencies between entry-points
7
- * that may be compiled by ngcc.
8
- *
9
- * The algorithm only finds `.js` files for internal/relative imports and paths to
10
- * the folder containing the `package.json` of the entry-point for external imports.
11
- *
12
- * It can cope with nested `node_modules` folders and also supports `paths`/`baseUrl`
13
- * configuration properties, as provided in a `ts.CompilerOptions` object.
14
- */
15
- export class ModuleResolver {
16
- constructor(fs, pathMappings, relativeExtensions = ['', '.js', '/index.js']) {
17
- this.fs = fs;
18
- this.relativeExtensions = relativeExtensions;
19
- this.pathMappings = pathMappings ? this.processPathMappings(pathMappings) : [];
20
- }
21
- /**
22
- * Resolve an absolute path for the `moduleName` imported into a file at `fromPath`.
23
- * @param moduleName The name of the import to resolve.
24
- * @param fromPath The path to the file containing the import.
25
- * @returns A path to the resolved module or null if missing.
26
- * Specifically:
27
- * * the absolute path to the package.json of an external module
28
- * * a JavaScript file of an internal module
29
- * * null if none exists.
30
- */
31
- resolveModuleImport(moduleName, fromPath) {
32
- if (isRelativePath(moduleName)) {
33
- return this.resolveAsRelativePath(moduleName, fromPath);
34
- }
35
- else {
36
- return this.pathMappings.length && this.resolveByPathMappings(moduleName, fromPath) ||
37
- this.resolveAsEntryPoint(moduleName, fromPath);
38
- }
39
- }
40
- /**
41
- * Convert the `pathMappings` into a collection of `PathMapper` functions.
42
- */
43
- processPathMappings(pathMappings) {
44
- const baseUrl = this.fs.resolve(pathMappings.baseUrl);
45
- return Object.keys(pathMappings.paths).map(pathPattern => {
46
- const matcher = splitOnStar(pathPattern);
47
- const templates = pathMappings.paths[pathPattern].map(splitOnStar);
48
- return { matcher, templates, baseUrl };
49
- });
50
- }
51
- /**
52
- * Try to resolve a module name, as a relative path, from the `fromPath`.
53
- *
54
- * As it is relative, it only looks for files that end in one of the `relativeExtensions`.
55
- * For example: `${moduleName}.js` or `${moduleName}/index.js`.
56
- * If neither of these files exist then the method returns `null`.
57
- */
58
- resolveAsRelativePath(moduleName, fromPath) {
59
- const resolvedPath = resolveFileWithPostfixes(this.fs, this.fs.resolve(this.fs.dirname(fromPath), moduleName), this.relativeExtensions);
60
- return resolvedPath && new ResolvedRelativeModule(resolvedPath);
61
- }
62
- /**
63
- * Try to resolve the `moduleName`, by applying the computed `pathMappings` and
64
- * then trying to resolve the mapped path as a relative or external import.
65
- *
66
- * Whether the mapped path is relative is defined as it being "below the `fromPath`" and not
67
- * containing `node_modules`.
68
- *
69
- * If the mapped path is not relative but does not resolve to an external entry-point, then we
70
- * check whether it would have resolved to a relative path, in which case it is marked as a
71
- * "deep-import".
72
- */
73
- resolveByPathMappings(moduleName, fromPath) {
74
- const mappedPaths = this.findMappedPaths(moduleName);
75
- if (mappedPaths.length > 0) {
76
- const packagePath = this.findPackagePath(fromPath);
77
- if (packagePath !== null) {
78
- for (const mappedPath of mappedPaths) {
79
- if (this.isEntryPoint(mappedPath)) {
80
- return new ResolvedExternalModule(mappedPath);
81
- }
82
- const nonEntryPointImport = this.resolveAsRelativePath(mappedPath, fromPath);
83
- if (nonEntryPointImport !== null) {
84
- return isRelativeImport(packagePath, mappedPath) ? nonEntryPointImport :
85
- new ResolvedDeepImport(mappedPath);
86
- }
87
- }
88
- }
89
- }
90
- return null;
91
- }
92
- /**
93
- * Try to resolve the `moduleName` as an external entry-point by searching the `node_modules`
94
- * folders up the tree for a matching `.../node_modules/${moduleName}`.
95
- *
96
- * If a folder is found but the path does not contain a `package.json` then it is marked as a
97
- * "deep-import".
98
- */
99
- resolveAsEntryPoint(moduleName, fromPath) {
100
- let folder = fromPath;
101
- while (!this.fs.isRoot(folder)) {
102
- folder = this.fs.dirname(folder);
103
- if (folder.endsWith('node_modules')) {
104
- // Skip up if the folder already ends in node_modules
105
- folder = this.fs.dirname(folder);
106
- }
107
- const modulePath = this.fs.resolve(folder, 'node_modules', moduleName);
108
- if (this.isEntryPoint(modulePath)) {
109
- return new ResolvedExternalModule(modulePath);
110
- }
111
- else if (this.resolveAsRelativePath(modulePath, fromPath)) {
112
- return new ResolvedDeepImport(modulePath);
113
- }
114
- }
115
- return null;
116
- }
117
- /**
118
- * Can we consider the given path as an entry-point to a package?
119
- *
120
- * This is achieved by checking for the existence of `${modulePath}/package.json`.
121
- */
122
- isEntryPoint(modulePath) {
123
- return this.fs.exists(this.fs.join(modulePath, 'package.json'));
124
- }
125
- /**
126
- * Apply the `pathMappers` to the `moduleName` and return all the possible
127
- * paths that match.
128
- *
129
- * The mapped path is computed for each template in `mapping.templates` by
130
- * replacing the `matcher.prefix` and `matcher.postfix` strings in `path with the
131
- * `template.prefix` and `template.postfix` strings.
132
- */
133
- findMappedPaths(moduleName) {
134
- const matches = this.pathMappings.map(mapping => this.matchMapping(moduleName, mapping));
135
- let bestMapping;
136
- let bestMatch;
137
- for (let index = 0; index < this.pathMappings.length; index++) {
138
- const mapping = this.pathMappings[index];
139
- const match = matches[index];
140
- if (match !== null) {
141
- // If this mapping had no wildcard then this must be a complete match.
142
- if (!mapping.matcher.hasWildcard) {
143
- bestMatch = match;
144
- bestMapping = mapping;
145
- break;
146
- }
147
- // The best matched mapping is the one with the longest prefix.
148
- if (!bestMapping || mapping.matcher.prefix > bestMapping.matcher.prefix) {
149
- bestMatch = match;
150
- bestMapping = mapping;
151
- }
152
- }
153
- }
154
- return (bestMapping !== undefined && bestMatch !== undefined) ?
155
- this.computeMappedTemplates(bestMapping, bestMatch) :
156
- [];
157
- }
158
- /**
159
- * Attempt to find a mapped path for the given `path` and a `mapping`.
160
- *
161
- * The `path` matches the `mapping` if if it starts with `matcher.prefix` and ends with
162
- * `matcher.postfix`.
163
- *
164
- * @returns the wildcard segment of a matched `path`, or `null` if no match.
165
- */
166
- matchMapping(path, mapping) {
167
- const { prefix, postfix, hasWildcard } = mapping.matcher;
168
- if (hasWildcard) {
169
- return (path.startsWith(prefix) && path.endsWith(postfix)) ?
170
- path.substring(prefix.length, path.length - postfix.length) :
171
- null;
172
- }
173
- else {
174
- return (path === prefix) ? '' : null;
175
- }
176
- }
177
- /**
178
- * Compute the candidate paths from the given mapping's templates using the matched
179
- * string.
180
- */
181
- computeMappedTemplates(mapping, match) {
182
- return mapping.templates.map(template => this.fs.resolve(mapping.baseUrl, template.prefix + match + template.postfix));
183
- }
184
- /**
185
- * Search up the folder tree for the first folder that contains `package.json`
186
- * or `null` if none is found.
187
- */
188
- findPackagePath(path) {
189
- let folder = path;
190
- while (!this.fs.isRoot(folder)) {
191
- folder = this.fs.dirname(folder);
192
- if (this.fs.exists(this.fs.join(folder, 'package.json'))) {
193
- return folder;
194
- }
195
- }
196
- return null;
197
- }
198
- }
199
- /**
200
- * A module that is external to the package doing the importing.
201
- * In this case we capture the folder containing the entry-point.
202
- */
203
- export class ResolvedExternalModule {
204
- constructor(entryPointPath) {
205
- this.entryPointPath = entryPointPath;
206
- }
207
- }
208
- /**
209
- * A module that is relative to the module doing the importing, and so internal to the
210
- * source module's package.
211
- */
212
- export class ResolvedRelativeModule {
213
- constructor(modulePath) {
214
- this.modulePath = modulePath;
215
- }
216
- }
217
- /**
218
- * A module that is external to the package doing the importing but pointing to a
219
- * module that is deep inside a package, rather than to an entry-point of the package.
220
- */
221
- export class ResolvedDeepImport {
222
- constructor(importPath) {
223
- this.importPath = importPath;
224
- }
225
- }
226
- function splitOnStar(str) {
227
- const [prefix, postfix] = str.split('*', 2);
228
- return { prefix, postfix: postfix || '', hasWildcard: postfix !== undefined };
229
- }
230
- function isRelativeImport(from, to) {
231
- return to.startsWith(from) && !to.includes('node_modules');
232
- }
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlX3Jlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL25nY2Mvc3JjL2RlcGVuZGVuY2llcy9tb2R1bGVfcmVzb2x2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBU0EsT0FBTyxFQUFDLGNBQWMsRUFBRSx3QkFBd0IsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUVsRTs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLE9BQU8sY0FBYztJQUd6QixZQUNZLEVBQXNCLEVBQUUsWUFBMkIsRUFDbEQscUJBQXFCLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUM7UUFEOUMsT0FBRSxHQUFGLEVBQUUsQ0FBb0I7UUFDckIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUEyQjtRQUN4RCxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDakYsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILG1CQUFtQixDQUFDLFVBQWtCLEVBQUUsUUFBd0I7UUFDOUQsSUFBSSxjQUFjLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDOUIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3pEO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDO2dCQUMvRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3BEO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssbUJBQW1CLENBQUMsWUFBMEI7UUFDcEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3ZELE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN6QyxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNuRSxPQUFPLEVBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxxQkFBcUIsQ0FBQyxVQUFrQixFQUFFLFFBQXdCO1FBQ3hFLE1BQU0sWUFBWSxHQUFHLHdCQUF3QixDQUN6QyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzlGLE9BQU8sWUFBWSxJQUFJLElBQUksc0JBQXNCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSyxxQkFBcUIsQ0FBQyxVQUFrQixFQUFFLFFBQXdCO1FBQ3hFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDckQsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMxQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25ELElBQUksV0FBVyxLQUFLLElBQUksRUFBRTtnQkFDeEIsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLEVBQUU7b0JBQ3BDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFBRTt3QkFDakMsT0FBTyxJQUFJLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDO3FCQUMvQztvQkFDRCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBQzdFLElBQUksbUJBQW1CLEtBQUssSUFBSSxFQUFFO3dCQUNoQyxPQUFPLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQzs0QkFDckIsSUFBSSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztxQkFDdkY7aUJBQ0Y7YUFDRjtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssbUJBQW1CLENBQUMsVUFBa0IsRUFBRSxRQUF3QjtRQUN0RSxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUM7UUFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzlCLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUU7Z0JBQ25DLHFEQUFxRDtnQkFDckQsTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ2xDO1lBQ0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUN2RSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQ2pDLE9BQU8sSUFBSSxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUMvQztpQkFBTSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUU7Z0JBQzNELE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUMzQztTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBR0Q7Ozs7T0FJRztJQUNLLFlBQVksQ0FBQyxVQUEwQjtRQUM3QyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssZUFBZSxDQUFDLFVBQWtCO1FBQ3hDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUV6RixJQUFJLFdBQTJDLENBQUM7UUFDaEQsSUFBSSxTQUEyQixDQUFDO1FBRWhDLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUM3RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7Z0JBQ2xCLHNFQUFzRTtnQkFDdEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFO29CQUNoQyxTQUFTLEdBQUcsS0FBSyxDQUFDO29CQUNsQixXQUFXLEdBQUcsT0FBTyxDQUFDO29CQUN0QixNQUFNO2lCQUNQO2dCQUNELCtEQUErRDtnQkFDL0QsSUFBSSxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtvQkFDdkUsU0FBUyxHQUFHLEtBQUssQ0FBQztvQkFDbEIsV0FBVyxHQUFHLE9BQU8sQ0FBQztpQkFDdkI7YUFDRjtTQUNGO1FBRUQsT0FBTyxDQUFDLFdBQVcsS0FBSyxTQUFTLElBQUksU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ3JELEVBQUUsQ0FBQztJQUNULENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssWUFBWSxDQUFDLElBQVksRUFBRSxPQUE2QjtRQUM5RCxNQUFNLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ3ZELElBQUksV0FBVyxFQUFFO1lBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLENBQUM7U0FDVjthQUFNO1lBQ0wsT0FBTyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7U0FDdEM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssc0JBQXNCLENBQUMsT0FBNkIsRUFBRSxLQUFhO1FBQ3pFLE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQ3hCLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsTUFBTSxHQUFHLEtBQUssR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssZUFBZSxDQUFDLElBQW9CO1FBQzFDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztRQUNsQixPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDOUIsTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3hELE9BQU8sTUFBTSxDQUFDO2FBQ2Y7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGO0FBS0Q7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxZQUFtQixjQUE4QjtRQUE5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFBRyxDQUFDO0NBQ3REO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxZQUFtQixVQUEwQjtRQUExQixlQUFVLEdBQVYsVUFBVSxDQUFnQjtJQUFHLENBQUM7Q0FDbEQ7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLFlBQW1CLFVBQTBCO1FBQTFCLGVBQVUsR0FBVixVQUFVLENBQWdCO0lBQUcsQ0FBQztDQUNsRDtBQUVELFNBQVMsV0FBVyxDQUFDLEdBQVc7SUFDOUIsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1QyxPQUFPLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxPQUFPLEtBQUssU0FBUyxFQUFDLENBQUM7QUFDOUUsQ0FBQztBQWNELFNBQVMsZ0JBQWdCLENBQUMsSUFBb0IsRUFBRSxFQUFrQjtJQUNoRSxPQUFPLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzdELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7QWJzb2x1dGVGc1BhdGgsIFJlYWRvbmx5RmlsZVN5c3RlbX0gZnJvbSAnLi4vLi4vLi4vc3JjL25ndHNjL2ZpbGVfc3lzdGVtJztcbmltcG9ydCB7UGF0aE1hcHBpbmdzfSBmcm9tICcuLi9wYXRoX21hcHBpbmdzJztcbmltcG9ydCB7aXNSZWxhdGl2ZVBhdGgsIHJlc29sdmVGaWxlV2l0aFBvc3RmaXhlc30gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIFRoaXMgaXMgYSB2ZXJ5IGN1dC1kb3duIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUeXBlU2NyaXB0IG1vZHVsZSByZXNvbHV0aW9uIHN0cmF0ZWd5LlxuICpcbiAqIEl0IGlzIHNwZWNpZmljIHRvIHRoZSBuZWVkcyBvZiBuZ2NjIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgYSBkcm9wLWluIHJlcGxhY2VtZW50XG4gKiBmb3IgdGhlIFRTIG1vZHVsZSByZXNvbHZlci4gSXQgaXMgdXNlZCB0byBjb21wdXRlIHRoZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiBlbnRyeS1wb2ludHNcbiAqIHRoYXQgbWF5IGJlIGNvbXBpbGVkIGJ5IG5nY2MuXG4gKlxuICogVGhlIGFsZ29yaXRobSBvbmx5IGZpbmRzIGAuanNgIGZpbGVzIGZvciBpbnRlcm5hbC9yZWxhdGl2ZSBpbXBvcnRzIGFuZCBwYXRocyB0b1xuICogdGhlIGZvbGRlciBjb250YWluaW5nIHRoZSBgcGFja2FnZS5qc29uYCBvZiB0aGUgZW50cnktcG9pbnQgZm9yIGV4dGVybmFsIGltcG9ydHMuXG4gKlxuICogSXQgY2FuIGNvcGUgd2l0aCBuZXN0ZWQgYG5vZGVfbW9kdWxlc2AgZm9sZGVycyBhbmQgYWxzbyBzdXBwb3J0cyBgcGF0aHNgL2BiYXNlVXJsYFxuICogY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzLCBhcyBwcm92aWRlZCBpbiBhIGB0cy5Db21waWxlck9wdGlvbnNgIG9iamVjdC5cbiAqL1xuZXhwb3J0IGNsYXNzIE1vZHVsZVJlc29sdmVyIHtcbiAgcHJpdmF0ZSBwYXRoTWFwcGluZ3M6IFByb2Nlc3NlZFBhdGhNYXBwaW5nW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIGZzOiBSZWFkb25seUZpbGVTeXN0ZW0sIHBhdGhNYXBwaW5ncz86IFBhdGhNYXBwaW5ncyxcbiAgICAgIHJlYWRvbmx5IHJlbGF0aXZlRXh0ZW5zaW9ucyA9IFsnJywgJy5qcycsICcvaW5kZXguanMnXSkge1xuICAgIHRoaXMucGF0aE1hcHBpbmdzID0gcGF0aE1hcHBpbmdzID8gdGhpcy5wcm9jZXNzUGF0aE1hcHBpbmdzKHBhdGhNYXBwaW5ncykgOiBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIGFuIGFic29sdXRlIHBhdGggZm9yIHRoZSBgbW9kdWxlTmFtZWAgaW1wb3J0ZWQgaW50byBhIGZpbGUgYXQgYGZyb21QYXRoYC5cbiAgICogQHBhcmFtIG1vZHVsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGltcG9ydCB0byByZXNvbHZlLlxuICAgKiBAcGFyYW0gZnJvbVBhdGggVGhlIHBhdGggdG8gdGhlIGZpbGUgY29udGFpbmluZyB0aGUgaW1wb3J0LlxuICAgKiBAcmV0dXJucyBBIHBhdGggdG8gdGhlIHJlc29sdmVkIG1vZHVsZSBvciBudWxsIGlmIG1pc3NpbmcuXG4gICAqIFNwZWNpZmljYWxseTpcbiAgICogICogdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHBhY2thZ2UuanNvbiBvZiBhbiBleHRlcm5hbCBtb2R1bGVcbiAgICogICogYSBKYXZhU2NyaXB0IGZpbGUgb2YgYW4gaW50ZXJuYWwgbW9kdWxlXG4gICAqICAqIG51bGwgaWYgbm9uZSBleGlzdHMuXG4gICAqL1xuICByZXNvbHZlTW9kdWxlSW1wb3J0KG1vZHVsZU5hbWU6IHN0cmluZywgZnJvbVBhdGg6IEFic29sdXRlRnNQYXRoKTogUmVzb2x2ZWRNb2R1bGV8bnVsbCB7XG4gICAgaWYgKGlzUmVsYXRpdmVQYXRoKG1vZHVsZU5hbWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlQXNSZWxhdGl2ZVBhdGgobW9kdWxlTmFtZSwgZnJvbVBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXRoTWFwcGluZ3MubGVuZ3RoICYmIHRoaXMucmVzb2x2ZUJ5UGF0aE1hcHBpbmdzKG1vZHVsZU5hbWUsIGZyb21QYXRoKSB8fFxuICAgICAgICAgIHRoaXMucmVzb2x2ZUFzRW50cnlQb2ludChtb2R1bGVOYW1lLCBmcm9tUGF0aCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIGBwYXRoTWFwcGluZ3NgIGludG8gYSBjb2xsZWN0aW9uIG9mIGBQYXRoTWFwcGVyYCBmdW5jdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIHByb2Nlc3NQYXRoTWFwcGluZ3MocGF0aE1hcHBpbmdzOiBQYXRoTWFwcGluZ3MpOiBQcm9jZXNzZWRQYXRoTWFwcGluZ1tdIHtcbiAgICBjb25zdCBiYXNlVXJsID0gdGhpcy5mcy5yZXNvbHZlKHBhdGhNYXBwaW5ncy5iYXNlVXJsKTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocGF0aE1hcHBpbmdzLnBhdGhzKS5tYXAocGF0aFBhdHRlcm4gPT4ge1xuICAgICAgY29uc3QgbWF0Y2hlciA9IHNwbGl0T25TdGFyKHBhdGhQYXR0ZXJuKTtcbiAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IHBhdGhNYXBwaW5ncy5wYXRoc1twYXRoUGF0dGVybl0ubWFwKHNwbGl0T25TdGFyKTtcbiAgICAgIHJldHVybiB7bWF0Y2hlciwgdGVtcGxhdGVzLCBiYXNlVXJsfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcnkgdG8gcmVzb2x2ZSBhIG1vZHVsZSBuYW1lLCBhcyBhIHJlbGF0aXZlIHBhdGgsIGZyb20gdGhlIGBmcm9tUGF0aGAuXG4gICAqXG4gICAqIEFzIGl0IGlzIHJlbGF0aXZlLCBpdCBvbmx5IGxvb2tzIGZvciBmaWxlcyB0aGF0IGVuZCBpbiBvbmUgb2YgdGhlIGByZWxhdGl2ZUV4dGVuc2lvbnNgLlxuICAgKiBGb3IgZXhhbXBsZTogYCR7bW9kdWxlTmFtZX0uanNgIG9yIGAke21vZHVsZU5hbWV9L2luZGV4LmpzYC5cbiAgICogSWYgbmVpdGhlciBvZiB0aGVzZSBmaWxlcyBleGlzdCB0aGVuIHRoZSBtZXRob2QgcmV0dXJucyBgbnVsbGAuXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVBc1JlbGF0aXZlUGF0aChtb2R1bGVOYW1lOiBzdHJpbmcsIGZyb21QYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IFJlc29sdmVkTW9kdWxlfG51bGwge1xuICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHJlc29sdmVGaWxlV2l0aFBvc3RmaXhlcyhcbiAgICAgICAgdGhpcy5mcywgdGhpcy5mcy5yZXNvbHZlKHRoaXMuZnMuZGlybmFtZShmcm9tUGF0aCksIG1vZHVsZU5hbWUpLCB0aGlzLnJlbGF0aXZlRXh0ZW5zaW9ucyk7XG4gICAgcmV0dXJuIHJlc29sdmVkUGF0aCAmJiBuZXcgUmVzb2x2ZWRSZWxhdGl2ZU1vZHVsZShyZXNvbHZlZFBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyeSB0byByZXNvbHZlIHRoZSBgbW9kdWxlTmFtZWAsIGJ5IGFwcGx5aW5nIHRoZSBjb21wdXRlZCBgcGF0aE1hcHBpbmdzYCBhbmRcbiAgICogdGhlbiB0cnlpbmcgdG8gcmVzb2x2ZSB0aGUgbWFwcGVkIHBhdGggYXMgYSByZWxhdGl2ZSBvciBleHRlcm5hbCBpbXBvcnQuXG4gICAqXG4gICAqIFdoZXRoZXIgdGhlIG1hcHBlZCBwYXRoIGlzIHJlbGF0aXZlIGlzIGRlZmluZWQgYXMgaXQgYmVpbmcgXCJiZWxvdyB0aGUgYGZyb21QYXRoYFwiIGFuZCBub3RcbiAgICogY29udGFpbmluZyBgbm9kZV9tb2R1bGVzYC5cbiAgICpcbiAgICogSWYgdGhlIG1hcHBlZCBwYXRoIGlzIG5vdCByZWxhdGl2ZSBidXQgZG9lcyBub3QgcmVzb2x2ZSB0byBhbiBleHRlcm5hbCBlbnRyeS1wb2ludCwgdGhlbiB3ZVxuICAgKiBjaGVjayB3aGV0aGVyIGl0IHdvdWxkIGhhdmUgcmVzb2x2ZWQgdG8gYSByZWxhdGl2ZSBwYXRoLCBpbiB3aGljaCBjYXNlIGl0IGlzIG1hcmtlZCBhcyBhXG4gICAqIFwiZGVlcC1pbXBvcnRcIi5cbiAgICovXG4gIHByaXZhdGUgcmVzb2x2ZUJ5UGF0aE1hcHBpbmdzKG1vZHVsZU5hbWU6IHN0cmluZywgZnJvbVBhdGg6IEFic29sdXRlRnNQYXRoKTogUmVzb2x2ZWRNb2R1bGV8bnVsbCB7XG4gICAgY29uc3QgbWFwcGVkUGF0aHMgPSB0aGlzLmZpbmRNYXBwZWRQYXRocyhtb2R1bGVOYW1lKTtcbiAgICBpZiAobWFwcGVkUGF0aHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcGFja2FnZVBhdGggPSB0aGlzLmZpbmRQYWNrYWdlUGF0aChmcm9tUGF0aCk7XG4gICAgICBpZiAocGFja2FnZVBhdGggIT09IG51bGwpIHtcbiAgICAgICAgZm9yIChjb25zdCBtYXBwZWRQYXRoIG9mIG1hcHBlZFBhdGhzKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNFbnRyeVBvaW50KG1hcHBlZFBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlc29sdmVkRXh0ZXJuYWxNb2R1bGUobWFwcGVkUGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG5vbkVudHJ5UG9pbnRJbXBvcnQgPSB0aGlzLnJlc29sdmVBc1JlbGF0aXZlUGF0aChtYXBwZWRQYXRoLCBmcm9tUGF0aCk7XG4gICAgICAgICAgaWYgKG5vbkVudHJ5UG9pbnRJbXBvcnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBpc1JlbGF0aXZlSW1wb3J0KHBhY2thZ2VQYXRoLCBtYXBwZWRQYXRoKSA/IG5vbkVudHJ5UG9pbnRJbXBvcnQgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFJlc29sdmVkRGVlcEltcG9ydChtYXBwZWRQYXRoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogVHJ5IHRvIHJlc29sdmUgdGhlIGBtb2R1bGVOYW1lYCBhcyBhbiBleHRlcm5hbCBlbnRyeS1wb2ludCBieSBzZWFyY2hpbmcgdGhlIGBub2RlX21vZHVsZXNgXG4gICAqIGZvbGRlcnMgdXAgdGhlIHRyZWUgZm9yIGEgbWF0Y2hpbmcgYC4uLi9ub2RlX21vZHVsZXMvJHttb2R1bGVOYW1lfWAuXG4gICAqXG4gICAqIElmIGEgZm9sZGVyIGlzIGZvdW5kIGJ1dCB0aGUgcGF0aCBkb2VzIG5vdCBjb250YWluIGEgYHBhY2thZ2UuanNvbmAgdGhlbiBpdCBpcyBtYXJrZWQgYXMgYVxuICAgKiBcImRlZXAtaW1wb3J0XCIuXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVBc0VudHJ5UG9pbnQobW9kdWxlTmFtZTogc3RyaW5nLCBmcm9tUGF0aDogQWJzb2x1dGVGc1BhdGgpOiBSZXNvbHZlZE1vZHVsZXxudWxsIHtcbiAgICBsZXQgZm9sZGVyID0gZnJvbVBhdGg7XG4gICAgd2hpbGUgKCF0aGlzLmZzLmlzUm9vdChmb2xkZXIpKSB7XG4gICAgICBmb2xkZXIgPSB0aGlzLmZzLmRpcm5hbWUoZm9sZGVyKTtcbiAgICAgIGlmIChmb2xkZXIuZW5kc1dpdGgoJ25vZGVfbW9kdWxlcycpKSB7XG4gICAgICAgIC8vIFNraXAgdXAgaWYgdGhlIGZvbGRlciBhbHJlYWR5IGVuZHMgaW4gbm9kZV9tb2R1bGVzXG4gICAgICAgIGZvbGRlciA9IHRoaXMuZnMuZGlybmFtZShmb2xkZXIpO1xuICAgICAgfVxuICAgICAgY29uc3QgbW9kdWxlUGF0aCA9IHRoaXMuZnMucmVzb2x2ZShmb2xkZXIsICdub2RlX21vZHVsZXMnLCBtb2R1bGVOYW1lKTtcbiAgICAgIGlmICh0aGlzLmlzRW50cnlQb2ludChtb2R1bGVQYXRoKSkge1xuICAgICAgICByZXR1cm4gbmV3IFJlc29sdmVkRXh0ZXJuYWxNb2R1bGUobW9kdWxlUGF0aCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb2x2ZUFzUmVsYXRpdmVQYXRoKG1vZHVsZVBhdGgsIGZyb21QYXRoKSkge1xuICAgICAgICByZXR1cm4gbmV3IFJlc29sdmVkRGVlcEltcG9ydChtb2R1bGVQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBDYW4gd2UgY29uc2lkZXIgdGhlIGdpdmVuIHBhdGggYXMgYW4gZW50cnktcG9pbnQgdG8gYSBwYWNrYWdlP1xuICAgKlxuICAgKiBUaGlzIGlzIGFjaGlldmVkIGJ5IGNoZWNraW5nIGZvciB0aGUgZXhpc3RlbmNlIG9mIGAke21vZHVsZVBhdGh9L3BhY2thZ2UuanNvbmAuXG4gICAqL1xuICBwcml2YXRlIGlzRW50cnlQb2ludChtb2R1bGVQYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZzLmV4aXN0cyh0aGlzLmZzLmpvaW4obW9kdWxlUGF0aCwgJ3BhY2thZ2UuanNvbicpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSB0aGUgYHBhdGhNYXBwZXJzYCB0byB0aGUgYG1vZHVsZU5hbWVgIGFuZCByZXR1cm4gYWxsIHRoZSBwb3NzaWJsZVxuICAgKiBwYXRocyB0aGF0IG1hdGNoLlxuICAgKlxuICAgKiBUaGUgbWFwcGVkIHBhdGggaXMgY29tcHV0ZWQgZm9yIGVhY2ggdGVtcGxhdGUgaW4gYG1hcHBpbmcudGVtcGxhdGVzYCBieVxuICAgKiByZXBsYWNpbmcgdGhlIGBtYXRjaGVyLnByZWZpeGAgYW5kIGBtYXRjaGVyLnBvc3RmaXhgIHN0cmluZ3MgaW4gYHBhdGggd2l0aCB0aGVcbiAgICogYHRlbXBsYXRlLnByZWZpeGAgYW5kIGB0ZW1wbGF0ZS5wb3N0Zml4YCBzdHJpbmdzLlxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kTWFwcGVkUGF0aHMobW9kdWxlTmFtZTogc3RyaW5nKTogQWJzb2x1dGVGc1BhdGhbXSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IHRoaXMucGF0aE1hcHBpbmdzLm1hcChtYXBwaW5nID0+IHRoaXMubWF0Y2hNYXBwaW5nKG1vZHVsZU5hbWUsIG1hcHBpbmcpKTtcblxuICAgIGxldCBiZXN0TWFwcGluZzogUHJvY2Vzc2VkUGF0aE1hcHBpbmd8dW5kZWZpbmVkO1xuICAgIGxldCBiZXN0TWF0Y2g6IHN0cmluZ3x1bmRlZmluZWQ7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5wYXRoTWFwcGluZ3MubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBtYXBwaW5nID0gdGhpcy5wYXRoTWFwcGluZ3NbaW5kZXhdO1xuICAgICAgY29uc3QgbWF0Y2ggPSBtYXRjaGVzW2luZGV4XTtcbiAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICAvLyBJZiB0aGlzIG1hcHBpbmcgaGFkIG5vIHdpbGRjYXJkIHRoZW4gdGhpcyBtdXN0IGJlIGEgY29tcGxldGUgbWF0Y2guXG4gICAgICAgIGlmICghbWFwcGluZy5tYXRjaGVyLmhhc1dpbGRjYXJkKSB7XG4gICAgICAgICAgYmVzdE1hdGNoID0gbWF0Y2g7XG4gICAgICAgICAgYmVzdE1hcHBpbmcgPSBtYXBwaW5nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSBiZXN0IG1hdGNoZWQgbWFwcGluZyBpcyB0aGUgb25lIHdpdGggdGhlIGxvbmdlc3QgcHJlZml4LlxuICAgICAgICBpZiAoIWJlc3RNYXBwaW5nIHx8IG1hcHBpbmcubWF0Y2hlci5wcmVmaXggPiBiZXN0TWFwcGluZy5tYXRjaGVyLnByZWZpeCkge1xuICAgICAgICAgIGJlc3RNYXRjaCA9IG1hdGNoO1xuICAgICAgICAgIGJlc3RNYXBwaW5nID0gbWFwcGluZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoYmVzdE1hcHBpbmcgIT09IHVuZGVmaW5lZCAmJiBiZXN0TWF0Y2ggIT09IHVuZGVmaW5lZCkgP1xuICAgICAgICB0aGlzLmNvbXB1dGVNYXBwZWRUZW1wbGF0ZXMoYmVzdE1hcHBpbmcsIGJlc3RNYXRjaCkgOlxuICAgICAgICBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRlbXB0IHRvIGZpbmQgYSBtYXBwZWQgcGF0aCBmb3IgdGhlIGdpdmVuIGBwYXRoYCBhbmQgYSBgbWFwcGluZ2AuXG4gICAqXG4gICAqIFRoZSBgcGF0aGAgbWF0Y2hlcyB0aGUgYG1hcHBpbmdgIGlmIGlmIGl0IHN0YXJ0cyB3aXRoIGBtYXRjaGVyLnByZWZpeGAgYW5kIGVuZHMgd2l0aFxuICAgKiBgbWF0Y2hlci5wb3N0Zml4YC5cbiAgICpcbiAgICogQHJldHVybnMgdGhlIHdpbGRjYXJkIHNlZ21lbnQgb2YgYSBtYXRjaGVkIGBwYXRoYCwgb3IgYG51bGxgIGlmIG5vIG1hdGNoLlxuICAgKi9cbiAgcHJpdmF0ZSBtYXRjaE1hcHBpbmcocGF0aDogc3RyaW5nLCBtYXBwaW5nOiBQcm9jZXNzZWRQYXRoTWFwcGluZyk6IHN0cmluZ3xudWxsIHtcbiAgICBjb25zdCB7cHJlZml4LCBwb3N0Zml4LCBoYXNXaWxkY2FyZH0gPSBtYXBwaW5nLm1hdGNoZXI7XG4gICAgaWYgKGhhc1dpbGRjYXJkKSB7XG4gICAgICByZXR1cm4gKHBhdGguc3RhcnRzV2l0aChwcmVmaXgpICYmIHBhdGguZW5kc1dpdGgocG9zdGZpeCkpID9cbiAgICAgICAgICBwYXRoLnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoLCBwYXRoLmxlbmd0aCAtIHBvc3RmaXgubGVuZ3RoKSA6XG4gICAgICAgICAgbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIChwYXRoID09PSBwcmVmaXgpID8gJycgOiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBjYW5kaWRhdGUgcGF0aHMgZnJvbSB0aGUgZ2l2ZW4gbWFwcGluZydzIHRlbXBsYXRlcyB1c2luZyB0aGUgbWF0Y2hlZFxuICAgKiBzdHJpbmcuXG4gICAqL1xuICBwcml2YXRlIGNvbXB1dGVNYXBwZWRUZW1wbGF0ZXMobWFwcGluZzogUHJvY2Vzc2VkUGF0aE1hcHBpbmcsIG1hdGNoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbWFwcGluZy50ZW1wbGF0ZXMubWFwKFxuICAgICAgICB0ZW1wbGF0ZSA9PiB0aGlzLmZzLnJlc29sdmUobWFwcGluZy5iYXNlVXJsLCB0ZW1wbGF0ZS5wcmVmaXggKyBtYXRjaCArIHRlbXBsYXRlLnBvc3RmaXgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggdXAgdGhlIGZvbGRlciB0cmVlIGZvciB0aGUgZmlyc3QgZm9sZGVyIHRoYXQgY29udGFpbnMgYHBhY2thZ2UuanNvbmBcbiAgICogb3IgYG51bGxgIGlmIG5vbmUgaXMgZm91bmQuXG4gICAqL1xuICBwcml2YXRlIGZpbmRQYWNrYWdlUGF0aChwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IEFic29sdXRlRnNQYXRofG51bGwge1xuICAgIGxldCBmb2xkZXIgPSBwYXRoO1xuICAgIHdoaWxlICghdGhpcy5mcy5pc1Jvb3QoZm9sZGVyKSkge1xuICAgICAgZm9sZGVyID0gdGhpcy5mcy5kaXJuYW1lKGZvbGRlcik7XG4gICAgICBpZiAodGhpcy5mcy5leGlzdHModGhpcy5mcy5qb2luKGZvbGRlciwgJ3BhY2thZ2UuanNvbicpKSkge1xuICAgICAgICByZXR1cm4gZm9sZGVyO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKiogVGhlIHJlc3VsdCBvZiByZXNvbHZpbmcgYW4gaW1wb3J0IHRvIGEgbW9kdWxlLiAqL1xuZXhwb3J0IHR5cGUgUmVzb2x2ZWRNb2R1bGUgPSBSZXNvbHZlZEV4dGVybmFsTW9kdWxlfFJlc29sdmVkUmVsYXRpdmVNb2R1bGV8UmVzb2x2ZWREZWVwSW1wb3J0O1xuXG4vKipcbiAqIEEgbW9kdWxlIHRoYXQgaXMgZXh0ZXJuYWwgdG8gdGhlIHBhY2thZ2UgZG9pbmcgdGhlIGltcG9ydGluZy5cbiAqIEluIHRoaXMgY2FzZSB3ZSBjYXB0dXJlIHRoZSBmb2xkZXIgY29udGFpbmluZyB0aGUgZW50cnktcG9pbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXNvbHZlZEV4dGVybmFsTW9kdWxlIHtcbiAgY29uc3RydWN0b3IocHVibGljIGVudHJ5UG9pbnRQYXRoOiBBYnNvbHV0ZUZzUGF0aCkge31cbn1cblxuLyoqXG4gKiBBIG1vZHVsZSB0aGF0IGlzIHJlbGF0aXZlIHRvIHRoZSBtb2R1bGUgZG9pbmcgdGhlIGltcG9ydGluZywgYW5kIHNvIGludGVybmFsIHRvIHRoZVxuICogc291cmNlIG1vZHVsZSdzIHBhY2thZ2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXNvbHZlZFJlbGF0aXZlTW9kdWxlIHtcbiAgY29uc3RydWN0b3IocHVibGljIG1vZHVsZVBhdGg6IEFic29sdXRlRnNQYXRoKSB7fVxufVxuXG4vKipcbiAqIEEgbW9kdWxlIHRoYXQgaXMgZXh0ZXJuYWwgdG8gdGhlIHBhY2thZ2UgZG9pbmcgdGhlIGltcG9ydGluZyBidXQgcG9pbnRpbmcgdG8gYVxuICogbW9kdWxlIHRoYXQgaXMgZGVlcCBpbnNpZGUgYSBwYWNrYWdlLCByYXRoZXIgdGhhbiB0byBhbiBlbnRyeS1wb2ludCBvZiB0aGUgcGFja2FnZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlc29sdmVkRGVlcEltcG9ydCB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBpbXBvcnRQYXRoOiBBYnNvbHV0ZUZzUGF0aCkge31cbn1cblxuZnVuY3Rpb24gc3BsaXRPblN0YXIoc3RyOiBzdHJpbmcpOiBQYXRoTWFwcGluZ1BhdHRlcm4ge1xuICBjb25zdCBbcHJlZml4LCBwb3N0Zml4XSA9IHN0ci5zcGxpdCgnKicsIDIpO1xuICByZXR1cm4ge3ByZWZpeCwgcG9zdGZpeDogcG9zdGZpeCB8fCAnJywgaGFzV2lsZGNhcmQ6IHBvc3RmaXggIT09IHVuZGVmaW5lZH07XG59XG5cbmludGVyZmFjZSBQcm9jZXNzZWRQYXRoTWFwcGluZyB7XG4gIGJhc2VVcmw6IEFic29sdXRlRnNQYXRoO1xuICBtYXRjaGVyOiBQYXRoTWFwcGluZ1BhdHRlcm47XG4gIHRlbXBsYXRlczogUGF0aE1hcHBpbmdQYXR0ZXJuW107XG59XG5cbmludGVyZmFjZSBQYXRoTWFwcGluZ1BhdHRlcm4ge1xuICBwcmVmaXg6IHN0cmluZztcbiAgcG9zdGZpeDogc3RyaW5nO1xuICBoYXNXaWxkY2FyZDogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gaXNSZWxhdGl2ZUltcG9ydChmcm9tOiBBYnNvbHV0ZUZzUGF0aCwgdG86IEFic29sdXRlRnNQYXRoKSB7XG4gIHJldHVybiB0by5zdGFydHNXaXRoKGZyb20pICYmICF0by5pbmNsdWRlcygnbm9kZV9tb2R1bGVzJyk7XG59XG4iXX0=
@@ -1,33 +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
- import { getImportsOfUmdModule, parseStatementForUmdModule } from '../host/umd_host';
10
- import { hasRequireCalls } from './commonjs_dependency_host';
11
- import { DependencyHostBase } from './dependency_host';
12
- /**
13
- * Helper functions for computing dependencies.
14
- */
15
- export class UmdDependencyHost extends DependencyHostBase {
16
- canSkipFile(fileContents) {
17
- return !hasRequireCalls(fileContents);
18
- }
19
- extractImports(file, fileContents) {
20
- // Parse the source into a TypeScript AST and then walk it looking for imports and re-exports.
21
- const sf = ts.createSourceFile(file, fileContents, ts.ScriptTarget.ES2015, false, ts.ScriptKind.JS);
22
- if (sf.statements.length !== 1) {
23
- return new Set();
24
- }
25
- const umdModule = parseStatementForUmdModule(sf.statements[0]);
26
- const umdImports = umdModule && getImportsOfUmdModule(umdModule);
27
- if (umdImports === null) {
28
- return new Set();
29
- }
30
- return new Set(umdImports.map(i => i.path));
31
- }
32
- }
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW1kX2RlcGVuZGVuY3lfaG9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9uZ2NjL3NyYy9kZXBlbmRlbmNpZXMvdW1kX2RlcGVuZGVuY3lfaG9zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFDSCxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUdqQyxPQUFPLEVBQUMscUJBQXFCLEVBQUUsMEJBQTBCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFckQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsa0JBQWtCO0lBQzdDLFdBQVcsQ0FBQyxZQUFvQjtRQUN4QyxPQUFPLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFUyxjQUFjLENBQUMsSUFBb0IsRUFBRSxZQUFvQjtRQUNqRSw4RkFBOEY7UUFDOUYsTUFBTSxFQUFFLEdBQ0osRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFN0YsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDOUIsT0FBTyxJQUFJLEdBQUcsRUFBRSxDQUFDO1NBQ2xCO1FBRUQsTUFBTSxTQUFTLEdBQUcsMEJBQTBCLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sVUFBVSxHQUFHLFNBQVMsSUFBSSxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqRSxJQUFJLFVBQVUsS0FBSyxJQUFJLEVBQUU7WUFDdkIsT0FBTyxJQUFJLEdBQUcsRUFBRSxDQUFDO1NBQ2xCO1FBRUQsT0FBTyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtBYnNvbHV0ZUZzUGF0aH0gZnJvbSAnLi4vLi4vLi4vc3JjL25ndHNjL2ZpbGVfc3lzdGVtJztcbmltcG9ydCB7Z2V0SW1wb3J0c09mVW1kTW9kdWxlLCBwYXJzZVN0YXRlbWVudEZvclVtZE1vZHVsZX0gZnJvbSAnLi4vaG9zdC91bWRfaG9zdCc7XG5cbmltcG9ydCB7aGFzUmVxdWlyZUNhbGxzfSBmcm9tICcuL2NvbW1vbmpzX2RlcGVuZGVuY3lfaG9zdCc7XG5pbXBvcnQge0RlcGVuZGVuY3lIb3N0QmFzZX0gZnJvbSAnLi9kZXBlbmRlbmN5X2hvc3QnO1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIGNvbXB1dGluZyBkZXBlbmRlbmNpZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBVbWREZXBlbmRlbmN5SG9zdCBleHRlbmRzIERlcGVuZGVuY3lIb3N0QmFzZSB7XG4gIHByb3RlY3RlZCBjYW5Ta2lwRmlsZShmaWxlQ29udGVudHM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhaGFzUmVxdWlyZUNhbGxzKGZpbGVDb250ZW50cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZXh0cmFjdEltcG9ydHMoZmlsZTogQWJzb2x1dGVGc1BhdGgsIGZpbGVDb250ZW50czogc3RyaW5nKTogU2V0PHN0cmluZz4ge1xuICAgIC8vIFBhcnNlIHRoZSBzb3VyY2UgaW50byBhIFR5cGVTY3JpcHQgQVNUIGFuZCB0aGVuIHdhbGsgaXQgbG9va2luZyBmb3IgaW1wb3J0cyBhbmQgcmUtZXhwb3J0cy5cbiAgICBjb25zdCBzZiA9XG4gICAgICAgIHRzLmNyZWF0ZVNvdXJjZUZpbGUoZmlsZSwgZmlsZUNvbnRlbnRzLCB0cy5TY3JpcHRUYXJnZXQuRVMyMDE1LCBmYWxzZSwgdHMuU2NyaXB0S2luZC5KUyk7XG5cbiAgICBpZiAoc2Yuc3RhdGVtZW50cy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHJldHVybiBuZXcgU2V0KCk7XG4gICAgfVxuXG4gICAgY29uc3QgdW1kTW9kdWxlID0gcGFyc2VTdGF0ZW1lbnRGb3JVbWRNb2R1bGUoc2Yuc3RhdGVtZW50c1swXSk7XG4gICAgY29uc3QgdW1kSW1wb3J0cyA9IHVtZE1vZHVsZSAmJiBnZXRJbXBvcnRzT2ZVbWRNb2R1bGUodW1kTW9kdWxlKTtcbiAgICBpZiAodW1kSW1wb3J0cyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5ldyBTZXQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNldCh1bWRJbXBvcnRzLm1hcChpID0+IGkucGF0aCkpO1xuICB9XG59XG4iXX0=
@@ -1,42 +0,0 @@
1
- import { getBasePaths, trackDuration } from './utils';
2
- /**
3
- * An EntryPointFinder that searches for all entry-points that can be found given a `basePath` and
4
- * `pathMappings`.
5
- */
6
- export class DirectoryWalkerEntryPointFinder {
7
- constructor(logger, resolver, entryPointCollector, entryPointManifest, sourceDirectory, pathMappings) {
8
- this.logger = logger;
9
- this.resolver = resolver;
10
- this.entryPointCollector = entryPointCollector;
11
- this.entryPointManifest = entryPointManifest;
12
- this.sourceDirectory = sourceDirectory;
13
- this.pathMappings = pathMappings;
14
- this.basePaths = getBasePaths(this.logger, this.sourceDirectory, this.pathMappings);
15
- }
16
- /**
17
- * Search the `sourceDirectory`, and sub-directories, using `pathMappings` as necessary, to find
18
- * all package entry-points.
19
- */
20
- findEntryPoints() {
21
- const unsortedEntryPoints = [];
22
- for (const basePath of this.basePaths) {
23
- const entryPoints = this.entryPointManifest.readEntryPointsUsingManifest(basePath) ||
24
- this.walkBasePathForPackages(basePath);
25
- entryPoints.forEach(e => unsortedEntryPoints.push(e));
26
- }
27
- return this.resolver.sortEntryPointsByDependency(unsortedEntryPoints);
28
- }
29
- /**
30
- * Search the `basePath` for possible Angular packages and entry-points.
31
- *
32
- * @param basePath The path at which to start the search.
33
- * @returns an array of `EntryPoint`s that were found within `basePath`.
34
- */
35
- walkBasePathForPackages(basePath) {
36
- this.logger.debug(`No manifest found for ${basePath} so walking the directories for entry-points.`);
37
- const entryPoints = trackDuration(() => this.entryPointCollector.walkDirectoryForPackages(basePath), duration => this.logger.debug(`Walking ${basePath} for entry-points took ${duration}s.`));
38
- this.entryPointManifest.writeEntryPointManifest(basePath, entryPoints);
39
- return entryPoints;
40
- }
41
- }
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0b3J5X3dhbGtlcl9lbnRyeV9wb2ludF9maW5kZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvbmdjYy9zcmMvZW50cnlfcG9pbnRfZmluZGVyL2RpcmVjdG9yeV93YWxrZXJfZW50cnlfcG9pbnRfZmluZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWdCQSxPQUFPLEVBQUMsWUFBWSxFQUFFLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVwRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sK0JBQStCO0lBRTFDLFlBQ1ksTUFBYyxFQUFVLFFBQTRCLEVBQ3BELG1CQUF3QyxFQUN4QyxrQkFBc0MsRUFBVSxlQUErQixFQUMvRSxZQUFvQztRQUhwQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBb0I7UUFDcEQsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQVUsb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQy9FLGlCQUFZLEdBQVosWUFBWSxDQUF3QjtRQUx4QyxjQUFTLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFLcEMsQ0FBQztJQUVwRDs7O09BR0c7SUFDSCxlQUFlO1FBQ2IsTUFBTSxtQkFBbUIsR0FBaUMsRUFBRSxDQUFDO1FBQzdELEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNyQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsNEJBQTRCLENBQUMsUUFBUSxDQUFDO2dCQUM5RSxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0MsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZEO1FBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLDJCQUEyQixDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsdUJBQXVCLENBQUMsUUFBd0I7UUFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2IseUJBQXlCLFFBQVEsK0NBQStDLENBQUMsQ0FBQztRQUN0RixNQUFNLFdBQVcsR0FBRyxhQUFhLENBQzdCLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsRUFDakUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLFFBQVEsMEJBQTBCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM5RixJQUFJLENBQUMsa0JBQWtCLENBQUMsdUJBQXVCLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZFLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHtBYnNvbHV0ZUZzUGF0aH0gZnJvbSAnLi4vLi4vLi4vc3JjL25ndHNjL2ZpbGVfc3lzdGVtJztcbmltcG9ydCB7TG9nZ2VyfSBmcm9tICcuLi8uLi8uLi9zcmMvbmd0c2MvbG9nZ2luZyc7XG5pbXBvcnQge0VudHJ5UG9pbnRXaXRoRGVwZW5kZW5jaWVzfSBmcm9tICcuLi9kZXBlbmRlbmNpZXMvZGVwZW5kZW5jeV9ob3N0JztcbmltcG9ydCB7RGVwZW5kZW5jeVJlc29sdmVyLCBTb3J0ZWRFbnRyeVBvaW50c0luZm99IGZyb20gJy4uL2RlcGVuZGVuY2llcy9kZXBlbmRlbmN5X3Jlc29sdmVyJztcbmltcG9ydCB7RW50cnlQb2ludE1hbmlmZXN0fSBmcm9tICcuLi9wYWNrYWdlcy9lbnRyeV9wb2ludF9tYW5pZmVzdCc7XG5pbXBvcnQge1BhdGhNYXBwaW5nc30gZnJvbSAnLi4vcGF0aF9tYXBwaW5ncyc7XG5cbmltcG9ydCB7RW50cnlQb2ludENvbGxlY3Rvcn0gZnJvbSAnLi9lbnRyeV9wb2ludF9jb2xsZWN0b3InO1xuaW1wb3J0IHtFbnRyeVBvaW50RmluZGVyfSBmcm9tICcuL2ludGVyZmFjZSc7XG5pbXBvcnQge2dldEJhc2VQYXRocywgdHJhY2tEdXJhdGlvbn0gZnJvbSAnLi91dGlscyc7XG5cbi8qKlxuICogQW4gRW50cnlQb2ludEZpbmRlciB0aGF0IHNlYXJjaGVzIGZvciBhbGwgZW50cnktcG9pbnRzIHRoYXQgY2FuIGJlIGZvdW5kIGdpdmVuIGEgYGJhc2VQYXRoYCBhbmRcbiAqIGBwYXRoTWFwcGluZ3NgLlxuICovXG5leHBvcnQgY2xhc3MgRGlyZWN0b3J5V2Fsa2VyRW50cnlQb2ludEZpbmRlciBpbXBsZW1lbnRzIEVudHJ5UG9pbnRGaW5kZXIge1xuICBwcml2YXRlIGJhc2VQYXRocyA9IGdldEJhc2VQYXRocyh0aGlzLmxvZ2dlciwgdGhpcy5zb3VyY2VEaXJlY3RvcnksIHRoaXMucGF0aE1hcHBpbmdzKTtcbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIGxvZ2dlcjogTG9nZ2VyLCBwcml2YXRlIHJlc29sdmVyOiBEZXBlbmRlbmN5UmVzb2x2ZXIsXG4gICAgICBwcml2YXRlIGVudHJ5UG9pbnRDb2xsZWN0b3I6IEVudHJ5UG9pbnRDb2xsZWN0b3IsXG4gICAgICBwcml2YXRlIGVudHJ5UG9pbnRNYW5pZmVzdDogRW50cnlQb2ludE1hbmlmZXN0LCBwcml2YXRlIHNvdXJjZURpcmVjdG9yeTogQWJzb2x1dGVGc1BhdGgsXG4gICAgICBwcml2YXRlIHBhdGhNYXBwaW5nczogUGF0aE1hcHBpbmdzfHVuZGVmaW5lZCkge31cblxuICAvKipcbiAgICogU2VhcmNoIHRoZSBgc291cmNlRGlyZWN0b3J5YCwgYW5kIHN1Yi1kaXJlY3RvcmllcywgdXNpbmcgYHBhdGhNYXBwaW5nc2AgYXMgbmVjZXNzYXJ5LCB0byBmaW5kXG4gICAqIGFsbCBwYWNrYWdlIGVudHJ5LXBvaW50cy5cbiAgICovXG4gIGZpbmRFbnRyeVBvaW50cygpOiBTb3J0ZWRFbnRyeVBvaW50c0luZm8ge1xuICAgIGNvbnN0IHVuc29ydGVkRW50cnlQb2ludHM6IEVudHJ5UG9pbnRXaXRoRGVwZW5kZW5jaWVzW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGJhc2VQYXRoIG9mIHRoaXMuYmFzZVBhdGhzKSB7XG4gICAgICBjb25zdCBlbnRyeVBvaW50cyA9IHRoaXMuZW50cnlQb2ludE1hbmlmZXN0LnJlYWRFbnRyeVBvaW50c1VzaW5nTWFuaWZlc3QoYmFzZVBhdGgpIHx8XG4gICAgICAgICAgdGhpcy53YWxrQmFzZVBhdGhGb3JQYWNrYWdlcyhiYXNlUGF0aCk7XG4gICAgICBlbnRyeVBvaW50cy5mb3JFYWNoKGUgPT4gdW5zb3J0ZWRFbnRyeVBvaW50cy5wdXNoKGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZXIuc29ydEVudHJ5UG9pbnRzQnlEZXBlbmRlbmN5KHVuc29ydGVkRW50cnlQb2ludHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCB0aGUgYGJhc2VQYXRoYCBmb3IgcG9zc2libGUgQW5ndWxhciBwYWNrYWdlcyBhbmQgZW50cnktcG9pbnRzLlxuICAgKlxuICAgKiBAcGFyYW0gYmFzZVBhdGggVGhlIHBhdGggYXQgd2hpY2ggdG8gc3RhcnQgdGhlIHNlYXJjaC5cbiAgICogQHJldHVybnMgYW4gYXJyYXkgb2YgYEVudHJ5UG9pbnRgcyB0aGF0IHdlcmUgZm91bmQgd2l0aGluIGBiYXNlUGF0aGAuXG4gICAqL1xuICB3YWxrQmFzZVBhdGhGb3JQYWNrYWdlcyhiYXNlUGF0aDogQWJzb2x1dGVGc1BhdGgpOiBFbnRyeVBvaW50V2l0aERlcGVuZGVuY2llc1tdIHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYE5vIG1hbmlmZXN0IGZvdW5kIGZvciAke2Jhc2VQYXRofSBzbyB3YWxraW5nIHRoZSBkaXJlY3RvcmllcyBmb3IgZW50cnktcG9pbnRzLmApO1xuICAgIGNvbnN0IGVudHJ5UG9pbnRzID0gdHJhY2tEdXJhdGlvbihcbiAgICAgICAgKCkgPT4gdGhpcy5lbnRyeVBvaW50Q29sbGVjdG9yLndhbGtEaXJlY3RvcnlGb3JQYWNrYWdlcyhiYXNlUGF0aCksXG4gICAgICAgIGR1cmF0aW9uID0+IHRoaXMubG9nZ2VyLmRlYnVnKGBXYWxraW5nICR7YmFzZVBhdGh9IGZvciBlbnRyeS1wb2ludHMgdG9vayAke2R1cmF0aW9ufXMuYCkpO1xuICAgIHRoaXMuZW50cnlQb2ludE1hbmlmZXN0LndyaXRlRW50cnlQb2ludE1hbmlmZXN0KGJhc2VQYXRoLCBlbnRyeVBvaW50cyk7XG4gICAgcmV0dXJuIGVudHJ5UG9pbnRzO1xuICB9XG59XG4iXX0=
@@ -1,120 +0,0 @@
1
- import { getEntryPointInfo, IGNORED_ENTRY_POINT, INCOMPATIBLE_ENTRY_POINT, isEntryPoint, NO_ENTRY_POINT } from '../packages/entry_point';
2
- import { NGCC_DIRECTORY } from '../writing/new_entry_point_file_writer';
3
- /**
4
- * A class that traverses a file-tree, starting at a given path, looking for all entry-points,
5
- * also capturing the dependencies of each entry-point that is found.
6
- */
7
- export class EntryPointCollector {
8
- constructor(fs, config, logger, resolver) {
9
- this.fs = fs;
10
- this.config = config;
11
- this.logger = logger;
12
- this.resolver = resolver;
13
- }
14
- /**
15
- * Look for Angular packages that need to be compiled, starting at the source directory.
16
- * The function will recurse into directories that start with `@...`, e.g. `@angular/...`.
17
- *
18
- * @param sourceDirectory An absolute path to the root directory where searching begins.
19
- * @returns an array of `EntryPoint`s that were found within `sourceDirectory`.
20
- */
21
- walkDirectoryForPackages(sourceDirectory) {
22
- // Try to get a primary entry point from this directory
23
- const primaryEntryPoint = getEntryPointInfo(this.fs, this.config, this.logger, sourceDirectory, sourceDirectory);
24
- // If there is an entry-point but it is not compatible with ngcc (it has a bad package.json or
25
- // invalid typings) then exit. It is unlikely that such an entry point has a dependency on an
26
- // Angular library.
27
- if (primaryEntryPoint === INCOMPATIBLE_ENTRY_POINT) {
28
- return [];
29
- }
30
- const entryPoints = [];
31
- if (primaryEntryPoint !== NO_ENTRY_POINT) {
32
- if (primaryEntryPoint !== IGNORED_ENTRY_POINT) {
33
- entryPoints.push(this.resolver.getEntryPointWithDependencies(primaryEntryPoint));
34
- }
35
- this.collectSecondaryEntryPoints(entryPoints, sourceDirectory, sourceDirectory, this.fs.readdir(sourceDirectory));
36
- // Also check for any nested node_modules in this package but only if at least one of the
37
- // entry-points was compiled by Angular.
38
- if (entryPoints.some(e => e.entryPoint.compiledByAngular)) {
39
- const nestedNodeModulesPath = this.fs.join(sourceDirectory, 'node_modules');
40
- if (this.fs.exists(nestedNodeModulesPath)) {
41
- entryPoints.push(...this.walkDirectoryForPackages(nestedNodeModulesPath));
42
- }
43
- }
44
- return entryPoints;
45
- }
46
- // The `sourceDirectory` was not a package (i.e. there was no package.json)
47
- // So search its sub-directories for Angular packages and entry-points
48
- for (const path of this.fs.readdir(sourceDirectory)) {
49
- if (isIgnorablePath(path)) {
50
- // Ignore hidden files, node_modules and ngcc directory
51
- continue;
52
- }
53
- const absolutePath = this.fs.resolve(sourceDirectory, path);
54
- const stat = this.fs.lstat(absolutePath);
55
- if (stat.isSymbolicLink() || !stat.isDirectory()) {
56
- // Ignore symbolic links and non-directories
57
- continue;
58
- }
59
- entryPoints.push(...this.walkDirectoryForPackages(this.fs.join(sourceDirectory, path)));
60
- }
61
- return entryPoints;
62
- }
63
- /**
64
- * Search the `directory` looking for any secondary entry-points for a package, adding any that
65
- * are found to the `entryPoints` array.
66
- *
67
- * @param entryPoints An array where we will add any entry-points found in this directory.
68
- * @param packagePath The absolute path to the package that may contain entry-points.
69
- * @param directory The current directory being searched.
70
- * @param paths The paths contained in the current `directory`.
71
- */
72
- collectSecondaryEntryPoints(entryPoints, packagePath, directory, paths) {
73
- for (const path of paths) {
74
- if (isIgnorablePath(path)) {
75
- // Ignore hidden files, node_modules and ngcc directory
76
- continue;
77
- }
78
- const absolutePath = this.fs.resolve(directory, path);
79
- const stat = this.fs.lstat(absolutePath);
80
- if (stat.isSymbolicLink()) {
81
- // Ignore symbolic links
82
- continue;
83
- }
84
- const isDirectory = stat.isDirectory();
85
- if (!path.endsWith('.js') && !isDirectory) {
86
- // Ignore files that do not end in `.js`
87
- continue;
88
- }
89
- // If the path is a JS file then strip its extension and see if we can match an
90
- // entry-point (even if it is an ignored one).
91
- const possibleEntryPointPath = isDirectory ? absolutePath : stripJsExtension(absolutePath);
92
- const subEntryPoint = getEntryPointInfo(this.fs, this.config, this.logger, packagePath, possibleEntryPointPath);
93
- if (isEntryPoint(subEntryPoint)) {
94
- entryPoints.push(this.resolver.getEntryPointWithDependencies(subEntryPoint));
95
- }
96
- if (!isDirectory) {
97
- // This path is not a directory so we are done.
98
- continue;
99
- }
100
- // If not an entry-point itself, this directory may contain entry-points of its own.
101
- const canContainEntryPoints = subEntryPoint === NO_ENTRY_POINT || subEntryPoint === INCOMPATIBLE_ENTRY_POINT;
102
- const childPaths = this.fs.readdir(absolutePath);
103
- if (canContainEntryPoints &&
104
- childPaths.some(childPath => childPath.endsWith('.js') &&
105
- this.fs.stat(this.fs.resolve(absolutePath, childPath)).isFile())) {
106
- // We do not consider non-entry-point directories that contain JS files as they are very
107
- // unlikely to be containers for sub-entry-points.
108
- continue;
109
- }
110
- this.collectSecondaryEntryPoints(entryPoints, packagePath, absolutePath, childPaths);
111
- }
112
- }
113
- }
114
- function stripJsExtension(filePath) {
115
- return filePath.replace(/\.js$/, '');
116
- }
117
- function isIgnorablePath(path) {
118
- return path.startsWith('.') || path === 'node_modules' || path === NGCC_DIRECTORY;
119
- }
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnlfcG9pbnRfY29sbGVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL25nY2Mvc3JjL2VudHJ5X3BvaW50X2ZpbmRlci9lbnRyeV9wb2ludF9jb2xsZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBWUEsT0FBTyxFQUFDLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLHdCQUF3QixFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN2SSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFFdEU7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLG1CQUFtQjtJQUM5QixZQUNZLEVBQXNCLEVBQVUsTUFBeUIsRUFBVSxNQUFjLEVBQ2pGLFFBQTRCO1FBRDVCLE9BQUUsR0FBRixFQUFFLENBQW9CO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2pGLGFBQVEsR0FBUixRQUFRLENBQW9CO0lBQUcsQ0FBQztJQUU1Qzs7Ozs7O09BTUc7SUFDSCx3QkFBd0IsQ0FBQyxlQUErQjtRQUN0RCx1REFBdUQ7UUFDdkQsTUFBTSxpQkFBaUIsR0FDbkIsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBRTNGLDhGQUE4RjtRQUM5Riw2RkFBNkY7UUFDN0YsbUJBQW1CO1FBQ25CLElBQUksaUJBQWlCLEtBQUssd0JBQXdCLEVBQUU7WUFDbEQsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELE1BQU0sV0FBVyxHQUFpQyxFQUFFLENBQUM7UUFDckQsSUFBSSxpQkFBaUIsS0FBSyxjQUFjLEVBQUU7WUFDeEMsSUFBSSxpQkFBaUIsS0FBSyxtQkFBbUIsRUFB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QUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksS0FBSyxjQUFjLElBQUksSUFBSSxLQUFLLGNBQWMsQ0FBQztBQUNwRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQge0Fic29sdXRlRnNQYXRoLCBQYXRoU2VnbWVudCwgUmVhZG9ubHlGaWxlU3lzdGVtfSBmcm9tICcuLi8uLi8uLi9zcmMvbmd0c2MvZmlsZV9zeXN0ZW0nO1xuaW1wb3J0IHtMb2dnZXJ9IGZyb20gJy4uLy4uLy4uL3NyYy9uZ3RzYy9sb2dnaW5nJztcbmltcG9ydCB7RW50cnlQb2ludFdpdGhEZXBlbmRlbmNpZXN9IGZyb20gJy4uL2RlcGVuZGVuY2llcy9kZXBlbmRlbmN5X2hvc3QnO1xuaW1wb3J0IHtEZXBlbmRlbmN5UmVzb2x2ZXJ9IGZyb20gJy4uL2RlcGVuZGVuY2llcy9kZXBlbmRlbmN5X3Jlc29sdmVyJztcbmltcG9ydCB7TmdjY0NvbmZpZ3VyYXRpb259IGZyb20gJy4uL3BhY2thZ2VzL2NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtnZXRFbnRyeVBvaW50SW5mbywgSUdOT1JFRF9FTlRSWV9QT0lOVCwgSU5DT01QQVRJQkxFX0VOVFJZX1BPSU5ULCBpc0VudHJ5UG9pbnQsIE5PX0VOVFJZX1BPSU5UfSBmcm9tICcuLi9wYWNrYWdlcy9lbnRyeV9wb2ludCc7XG5pbXBvcnQge05HQ0NfRElSRUNUT1JZfSBmcm9tICcuLi93cml0aW5nL25ld19lbnRyeV9wb2ludF9maWxlX3dyaXRlcic7XG5cbi8qKlxuICogQSBjbGFzcyB0aGF0IHRyYXZlcnNlcyBhIGZpbGUtdHJlZSwgc3RhcnRpbmcgYXQgYSBnaXZlbiBwYXRoLCBsb29raW5nIGZvciBhbGwgZW50cnktcG9pbnRzLFxuICogYWxzbyBjYXB0dXJpbmcgdGhlIGRlcGVuZGVuY2llcyBvZiBlYWNoIGVudHJ5LXBvaW50IHRoYXQgaXMgZm91bmQuXG4gKi9cbmV4cG9ydCBjbGFzcyBFbnRyeVBvaW50Q29sbGVjdG9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIGZzOiBSZWFkb25seUZpbGVTeXN0ZW0sIHByaXZhdGUgY29uZmlnOiBOZ2NjQ29uZmlndXJhdGlvbiwgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlcixcbiAgICAgIHByaXZhdGUgcmVzb2x2ZXI6IERlcGVuZGVuY3lSZXNvbHZlcikge31cblxuICAvKipcbiAgICogTG9vayBmb3IgQW5ndWxhciBwYWNrYWdlcyB0aGF0IG5lZWQgdG8gYmUgY29tcGlsZWQsIHN0YXJ0aW5nIGF0IHRoZSBzb3VyY2UgZGlyZWN0b3J5LlxuICAgKiBUaGUgZnVuY3Rpb24gd2lsbCByZWN1cnNlIGludG8gZGlyZWN0b3JpZXMgdGhhdCBzdGFydCB3aXRoIGBALi4uYCwgZS5nLiBgQGFuZ3VsYXIvLi4uYC5cbiAgICpcbiAgICogQHBhcmFtIHNvdXJjZURpcmVjdG9yeSBBbiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSByb290IGRpcmVjdG9yeSB3aGVyZSBzZWFyY2hpbmcgYmVnaW5zLlxuICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiBgRW50cnlQb2ludGBzIHRoYXQgd2VyZSBmb3VuZCB3aXRoaW4gYHNvdXJjZURpcmVjdG9yeWAuXG4gICAqL1xuICB3YWxrRGlyZWN0b3J5Rm9yUGFja2FnZXMoc291cmNlRGlyZWN0b3J5OiBBYnNvbHV0ZUZzUGF0aCk6IEVudHJ5UG9pbnRXaXRoRGVwZW5kZW5jaWVzW10ge1xuICAgIC8vIFRyeSB0byBnZXQgYSBwcmltYXJ5IGVudHJ5IHBvaW50IGZyb20gdGhpcyBkaXJlY3RvcnlcbiAgICBjb25zdCBwcmltYXJ5RW50cnlQb2ludCA9XG4gICAgICAgIGdldEVudHJ5UG9pbnRJbmZvKHRoaXMuZnMsIHRoaXMuY29uZmlnLCB0aGlzLmxvZ2dlciwgc291cmNlRGlyZWN0b3J5LCBzb3VyY2VEaXJlY3RvcnkpO1xuXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gZW50cnktcG9pbnQgYnV0IGl0IGlzIG5vdCBjb21wYXRpYmxlIHdpdGggbmdjYyAoaXQgaGFzIGEgYmFkIHBhY2thZ2UuanNvbiBvclxuICAgIC8vIGludmFsaWQgdHlwaW5ncykgdGhlbiBleGl0LiBJdCBpcyB1bmxpa2VseSB0aGF0IHN1Y2ggYW4gZW50cnkgcG9pbnQgaGFzIGEgZGVwZW5kZW5jeSBvbiBhblxuICAgIC8vIEFuZ3VsYXIgbGlicmFyeS5cbiAgICBpZiAocHJpbWFyeUVudHJ5UG9pbnQgPT09IElOQ09NUEFUSUJMRV9FTlRSWV9QT0lOVCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGVudHJ5UG9pbnRzOiBFbnRyeVBvaW50V2l0aERlcGVuZGVuY2llc1tdID0gW107XG4gICAgaWYgKHByaW1hcnlFbnRyeVBvaW50ICE9PSBOT19FTlRSWV9QT0lOVCkge1xuICAgICAgaWYgKHByaW1hcnlFbnRyeVBvaW50ICE9PSBJR05PUkVEX0VOVFJZX1BPSU5UKSB7XG4gICAgICAgIGVudHJ5UG9pbnRzLnB1c2godGhpcy5yZXNvbHZlci5nZXRFbnRyeVBvaW50V2l0aERlcGVuZGVuY2llcyhwcmltYXJ5RW50cnlQb2ludCkpO1xuICAgICAgfVxuICAgICAgdGhpcy5jb2xsZWN0U2Vjb25kYXJ5RW50cnlQb2ludHMoXG4gICAgICAgICAgZW50cnlQb2ludHMsIHNvdXJjZURpcmVjdG9yeSwgc291cmNlRGlyZWN0b3J5LCB0aGlzLmZzLnJlYWRkaXIoc291cmNlRGlyZWN0b3J5KSk7XG5cbiAgICAgIC8vIEFsc28gY2hlY2sgZm9yIGFueSBuZXN0ZWQgbm9kZV9tb2R1bGVzIGluIHRoaXMgcGFja2FnZSBidXQgb25seSBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlXG4gICAgICAvLyBlbnRyeS1wb2ludHMgd2FzIGNvbXBpbGVkIGJ5IEFuZ3VsYXIuXG4gICAgICBpZiAoZW50cnlQb2ludHMuc29tZShlID0+IGUuZW50cnlQb2ludC5jb21waWxlZEJ5QW5ndWxhcikpIHtcbiAgICAgICAgY29uc3QgbmVzdGVkTm9kZU1vZHVsZXNQYXRoID0gdGhpcy5mcy5qb2luKHNvdXJjZURpcmVjdG9yeSwgJ25vZGVfbW9kdWxlcycpO1xuICAgICAgICBpZiAodGhpcy5mcy5leGlzdHMobmVzdGVkTm9kZU1vZHVsZXNQYXRoKSkge1xuICAgICAgICAgIGVudHJ5UG9pbnRzLnB1c2goLi4udGhpcy53YWxrRGlyZWN0b3J5Rm9yUGFja2FnZXMobmVzdGVkTm9kZU1vZHVsZXNQYXRoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVudHJ5UG9pbnRzO1xuICAgIH1cblxuICAgIC8vIFRoZSBgc291cmNlRGlyZWN0b3J5YCB3YXMgbm90IGEgcGFja2FnZSAoaS5lLiB0aGVyZSB3YXMgbm8gcGFja2FnZS5qc29uKVxuICAgIC8vIFNvIHNlYXJjaCBpdHMgc3ViLWRpcmVjdG9yaWVzIGZvciBBbmd1bGFyIHBhY2thZ2VzIGFuZCBlbnRyeS1wb2ludHNcbiAgICBmb3IgKGNvbnN0IHBhdGggb2YgdGhpcy5mcy5yZWFkZGlyKHNvdXJjZURpcmVjdG9yeSkpIHtcbiAgICAgIGlmIChpc0lnbm9yYWJsZVBhdGgocGF0aCkpIHtcbiAgICAgICAgLy8gSWdub3JlIGhpZGRlbiBmaWxlcywgbm9kZV9tb2R1bGVzIGFuZCBuZ2NjIGRpcmVjdG9yeVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWJzb2x1dGVQYXRoID0gdGhpcy5mcy5yZXNvbHZlKHNvdXJjZURpcmVjdG9yeSwgcGF0aCk7XG4gICAgICBjb25zdCBzdGF0ID0gdGhpcy5mcy5sc3RhdChhYnNvbHV0ZVBhdGgpO1xuICAgICAgaWYgKHN0YXQuaXNTeW1ib2xpY0xpbmsoKSB8fCAhc3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIC8vIElnbm9yZSBzeW1ib2xpYyBsaW5rcyBhbmQgbm9uLWRpcmVjdG9yaWVzXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBlbnRyeVBvaW50cy5wdXNoKC4uLnRoaXMud2Fsa0RpcmVjdG9yeUZvclBhY2thZ2VzKHRoaXMuZnMuam9pbihzb3VyY2VEaXJlY3RvcnksIHBhdGgpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudHJ5UG9pbnRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCB0aGUgYGRpcmVjdG9yeWAgbG9va2luZyBmb3IgYW55IHNlY29uZGFyeSBlbnRyeS1wb2ludHMgZm9yIGEgcGFja2FnZSwgYWRkaW5nIGFueSB0aGF0XG4gICAqIGFyZSBmb3VuZCB0byB0aGUgYGVudHJ5UG9pbnRzYCBhcnJheS5cbiAgICpcbiAgICogQHBhcmFtIGVudHJ5UG9pbnRzIEFuIGFycmF5IHdoZXJlIHdlIHdpbGwgYWRkIGFueSBlbnRyeS1wb2ludHMgZm91bmQgaW4gdGhpcyBkaXJlY3RvcnkuXG4gICAqIEBwYXJhbSBwYWNrYWdlUGF0aCBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgcGFja2FnZSB0aGF0IG1heSBjb250YWluIGVudHJ5LXBvaW50cy5cbiAgICogQHBhcmFtIGRpcmVjdG9yeSBUaGUgY3VycmVudCBkaXJlY3RvcnkgYmVpbmcgc2VhcmNoZWQuXG4gICAqIEBwYXJhbSBwYXRocyBUaGUgcGF0aHMgY29udGFpbmVkIGluIHRoZSBjdXJyZW50IGBkaXJlY3RvcnlgLlxuICAgKi9cbiAgcHJpdmF0ZSBjb2xsZWN0U2Vjb25kYXJ5RW50cnlQb2ludHMoXG4gICAgICBlbnRyeVBvaW50czogRW50cnlQb2ludFdpdGhEZXBlbmRlbmNpZXNbXSwgcGFja2FnZVBhdGg6IEFic29sdXRlRnNQYXRoLFxuICAgICAgZGlyZWN0b3J5OiBBYnNvbHV0ZUZzUGF0aCwgcGF0aHM6IFBhdGhTZWdtZW50W10pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcbiAgICAgIGlmIChpc0lnbm9yYWJsZVBhdGgocGF0aCkpIHtcbiAgICAgICAgLy8gSWdub3JlIGhpZGRlbiBmaWxlcywgbm9kZV9tb2R1bGVzIGFuZCBuZ2NjIGRpcmVjdG9yeVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWJzb2x1dGVQYXRoID0gdGhpcy5mcy5yZXNvbHZlKGRpcmVjdG9yeSwgcGF0aCk7XG4gICAgICBjb25zdCBzdGF0ID0gdGhpcy5mcy5sc3RhdChhYnNvbHV0ZVBhdGgpO1xuICAgICAgaWYgKHN0YXQuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAvLyBJZ25vcmUgc3ltYm9saWMgbGlua3NcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzRGlyZWN0b3J5ID0gc3RhdC5pc0RpcmVjdG9yeSgpO1xuICAgICAgaWYgKCFwYXRoLmVuZHNXaXRoKCcuanMnKSAmJiAhaXNEaXJlY3RvcnkpIHtcbiAgICAgICAgLy8gSWdub3JlIGZpbGVzIHRoYXQgZG8gbm90IGVuZCBpbiBgLmpzYFxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIHBhdGggaXMgYSBKUyBmaWxlIHRoZW4gc3RyaXAgaXRzIGV4dGVuc2lvbiBhbmQgc2VlIGlmIHdlIGNhbiBtYXRjaCBhblxuICAgICAgLy8gZW50cnktcG9pbnQgKGV2ZW4gaWYgaXQgaXMgYW4gaWdub3JlZCBvbmUpLlxuICAgICAgY29uc3QgcG9zc2libGVFbnRyeVBvaW50UGF0aCA9IGlzRGlyZWN0b3J5ID8gYWJzb2x1dGVQYXRoIDogc3RyaXBKc0V4dGVuc2lvbihhYnNvbHV0ZVBhdGgpO1xuICAgICAgY29uc3Qgc3ViRW50cnlQb2ludCA9XG4gICAgICAgICAgZ2V0RW50cnlQb2ludEluZm8odGhpcy5mcywgdGhpcy5jb25maWcsIHRoaXMubG9nZ2VyLCBwYWNrYWdlUGF0aCwgcG9zc2libGVFbnRyeVBvaW50UGF0aCk7XG4gICAgICBpZiAoaXNFbnRyeVBvaW50KHN1YkVudHJ5UG9pbnQpKSB7XG4gICAgICAgIGVudHJ5UG9pbnRzLnB1c2godGhpcy5yZXNvbHZlci5nZXRFbnRyeVBvaW50V2l0aERlcGVuZGVuY2llcyhzdWJFbnRyeVBvaW50KSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNEaXJlY3RvcnkpIHtcbiAgICAgICAgLy8gVGhpcyBwYXRoIGlzIG5vdCBhIGRpcmVjdG9yeSBzbyB3ZSBhcmUgZG9uZS5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIG5vdCBhbiBlbnRyeS1wb2ludCBpdHNlbGYsIHRoaXMgZGlyZWN0b3J5IG1heSBjb250YWluIGVudHJ5LXBvaW50cyBvZiBpdHMgb3duLlxuICAgICAgY29uc3QgY2FuQ29udGFpbkVudHJ5UG9pbnRzID1cbiAgICAgICAgICBzdWJFbnRyeVBvaW50ID09PSBOT19FTlRSWV9QT0lOVCB8fCBzdWJFbnRyeVBvaW50ID09PSBJTkNPTVBBVElCTEVfRU5UUllfUE9JTlQ7XG4gICAgICBjb25zdCBjaGlsZFBhdGhzID0gdGhpcy5mcy5yZWFkZGlyKGFic29sdXRlUGF0aCk7XG4gICAgICBpZiAoY2FuQ29udGFpbkVudHJ5UG9pbnRzICYmXG4gICAgICAgICAgY2hpbGRQYXRocy5zb21lKFxuICAgICAgICAgICAgICBjaGlsZFBhdGggPT4gY2hpbGRQYXRoLmVuZHNXaXRoKCcuanMnKSAmJlxuICAgICAgICAgICAgICAgICAgdGhpcy5mcy5zdGF0KHRoaXMuZnMucmVzb2x2ZShhYnNvbHV0ZVBhdGgsIGNoaWxkUGF0aCkpLmlzRmlsZSgpKSkge1xuICAgICAgICAvLyBXZSBkbyBub3QgY29uc2lkZXIgbm9uLWVudHJ5LXBvaW50IGRpcmVjdG9yaWVzIHRoYXQgY29udGFpbiBKUyBmaWxlcyBhcyB0aGV5IGFyZSB2ZXJ5XG4gICAgICAgIC8vIHVubGlrZWx5IHRvIGJlIGNvbnRhaW5lcnMgZm9yIHN1Yi1lbnRyeS1wb2ludHMuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5jb2xsZWN0U2Vjb25kYXJ5RW50cnlQb2ludHMoZW50cnlQb2ludHMsIHBhY2thZ2VQYXRoLCBhYnNvbHV0ZVBhdGgsIGNoaWxkUGF0aHMpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJpcEpzRXh0ZW5zaW9uPFQgZXh0ZW5kcyBzdHJpbmc+KGZpbGVQYXRoOiBUKTogVCB7XG4gIHJldHVybiBmaWxlUGF0aC5yZXBsYWNlKC9cXC5qcyQvLCAnJykgYXMgVDtcbn1cblxuZnVuY3Rpb24gaXNJZ25vcmFibGVQYXRoKHBhdGg6IFBhdGhTZWdtZW50KTogYm9vbGVhbiB7XG4gIHJldHVybiBwYXRoLnN0YXJ0c1dpdGgoJy4nKSB8fCBwYXRoID09PSAnbm9kZV9tb2R1bGVzJyB8fCBwYXRoID09PSBOR0NDX0RJUkVDVE9SWTtcbn1cbiJdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL25nY2Mvc3JjL2VudHJ5X3BvaW50X2ZpbmRlci9pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHtTb3J0ZWRFbnRyeVBvaW50c0luZm99IGZyb20gJy4uL2RlcGVuZGVuY2llcy9kZXBlbmRlbmN5X3Jlc29sdmVyJztcblxuZXhwb3J0IGludGVyZmFjZSBFbnRyeVBvaW50RmluZGVyIHtcbiAgLyoqXG4gICAqIFNlYXJjaCBmb3IgQW5ndWxhciBwYWNrYWdlIGVudHJ5LXBvaW50cy5cbiAgICovXG4gIGZpbmRFbnRyeVBvaW50cygpOiBTb3J0ZWRFbnRyeVBvaW50c0luZm87XG59XG4iXX0=
@@ -1,91 +0,0 @@
1
- import { createDependencyInfo } from '../dependencies/dependency_host';
2
- import { EsmDependencyHost } from '../dependencies/esm_dependency_host';
3
- import { ModuleResolver } from '../dependencies/module_resolver';
4
- import { getPathMappingsFromTsConfig } from '../path_mappings';
5
- import { TracingEntryPointFinder } from './tracing_entry_point_finder';
6
- import { trackDuration } from './utils';
7
- /**
8
- * An EntryPointFinder that starts from the files in the program defined by the given tsconfig.json
9
- * and only returns entry-points that are dependencies of these files.
10
- *
11
- * This is faster than searching the entire file-system for all the entry-points,
12
- * and is used primarily by the CLI integration.
13
- */
14
- export class ProgramBasedEntryPointFinder extends TracingEntryPointFinder {
15
- constructor(fs, config, logger, resolver, entryPointCollector, entryPointManifest, basePath, tsConfig, projectPath) {
16
- super(fs, config, logger, resolver, basePath, getPathMappingsFromTsConfig(fs, tsConfig, projectPath));
17
- this.entryPointCollector = entryPointCollector;
18
- this.entryPointManifest = entryPointManifest;
19
- this.tsConfig = tsConfig;
20
- this.entryPointsWithDependencies = null;
21
- }
22
- /**
23
- * Return an array containing the external import paths that were extracted from the source-files
24
- * of the program defined by the tsconfig.json.
25
- */
26
- getInitialEntryPointPaths() {
27
- const moduleResolver = new ModuleResolver(this.fs, this.pathMappings, ['', '.ts', '/index.ts']);
28
- const host = new EsmDependencyHost(this.fs, moduleResolver);
29
- const dependencies = createDependencyInfo();
30
- const rootFiles = this.tsConfig.rootNames.map(rootName => this.fs.resolve(rootName));
31
- this.logger.debug(`Using the program from ${this.tsConfig.project} to seed the entry-point finding.`);
32
- this.logger.debug(`Collecting dependencies from the following files:` + rootFiles.map(file => `\n- ${file}`));
33
- host.collectDependenciesInFiles(rootFiles, dependencies);
34
- return Array.from(dependencies.dependencies);
35
- }
36
- /**
37
- * For the given `entryPointPath`, compute, or retrieve, the entry-point information, including
38
- * paths to other entry-points that this entry-point depends upon.
39
- *
40
- * In this entry-point finder, we use the `EntryPointManifest` to avoid computing each
41
- * entry-point's dependencies in the case that this had been done previously.
42
- *
43
- * @param entryPointPath the path to the entry-point whose information and dependencies are to be
44
- * retrieved or computed.
45
- *
46
- * @returns the entry-point and its dependencies or `null` if the entry-point is not compiled by
47
- * Angular or cannot be determined.
48
- */
49
- getEntryPointWithDeps(entryPointPath) {
50
- const entryPoints = this.findOrLoadEntryPoints();
51
- if (!entryPoints.has(entryPointPath)) {
52
- return null;
53
- }
54
- const entryPointWithDeps = entryPoints.get(entryPointPath);
55
- if (!entryPointWithDeps.entryPoint.compiledByAngular) {
56
- return null;
57
- }
58
- return entryPointWithDeps;
59
- }
60
- /**
61
- * Walk the base paths looking for entry-points or load this information from an entry-point
62
- * manifest, if available.
63
- */
64
- findOrLoadEntryPoints() {
65
- if (this.entryPointsWithDependencies === null) {
66
- const entryPointsWithDependencies = this.entryPointsWithDependencies =
67
- new Map();
68
- for (const basePath of this.getBasePaths()) {
69
- const entryPoints = this.entryPointManifest.readEntryPointsUsingManifest(basePath) ||
70
- this.walkBasePathForPackages(basePath);
71
- for (const e of entryPoints) {
72
- entryPointsWithDependencies.set(e.entryPoint.path, e);
73
- }
74
- }
75
- }
76
- return this.entryPointsWithDependencies;
77
- }
78
- /**
79
- * Search the `basePath` for possible Angular packages and entry-points.
80
- *
81
- * @param basePath The path at which to start the search.
82
- * @returns an array of `EntryPoint`s that were found within `basePath`.
83
- */
84
- walkBasePathForPackages(basePath) {
85
- this.logger.debug(`No manifest found for ${basePath} so walking the directories for entry-points.`);
86
- const entryPoints = trackDuration(() => this.entryPointCollector.walkDirectoryForPackages(basePath), duration => this.logger.debug(`Walking ${basePath} for entry-points took ${duration}s.`));
87
- this.entryPointManifest.writeEntryPointManifest(basePath, entryPoints);
88
- return entryPoints;
89
- }
90
- }
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbV9iYXNlZF9lbnRyeV9wb2ludF9maW5kZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvbmdjYy9zcmMvZW50cnlfcG9pbnRfZmluZGVyL3Byb2dyYW1fYmFzZWRfZW50cnlfcG9pbnRfZmluZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdBLE9BQU8sRUFBQyxvQkFBb0IsRUFBNkIsTUFBTSxpQ0FBaUMsQ0FBQztBQUVqRyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFHL0QsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFHN0QsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUV0Qzs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsdUJBQXVCO0lBR3ZFLFlBQ0ksRUFBc0IsRUFBRSxNQUF5QixFQUFFLE1BQWMsRUFDakUsUUFBNEIsRUFBVSxtQkFBd0MsRUFDdEUsa0JBQXNDLEVBQUUsUUFBd0IsRUFDaEUsUUFBNkIsRUFBRSxXQUEyQjtRQUNwRSxLQUFLLENBQ0QsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFDdEMsMkJBQTJCLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBTHBCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDdEUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxhQUFRLEdBQVIsUUFBUSxDQUFxQjtRQU5qQyxnQ0FBMkIsR0FBeUQsSUFBSSxDQUFDO0lBVWpHLENBQUM7SUFFRDs7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OUYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN2RSxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7QWJzb2x1dGVGc1BhdGgsIFJlYWRvbmx5RmlsZVN5c3RlbX0gZnJvbSAnLi4vLi4vLi4vc3JjL25ndHNjL2ZpbGVfc3lzdGVtJztcbmltcG9ydCB7TG9nZ2VyfSBmcm9tICcuLi8uLi8uLi9zcmMvbmd0c2MvbG9nZ2luZyc7XG5pbXBvcnQge1BhcnNlZENvbmZpZ3VyYXRpb259IGZyb20gJy4uLy4uLy4uL3NyYy9wZXJmb3JtX2NvbXBpbGUnO1xuXG5pbXBvcnQge2NyZWF0ZURlcGVuZGVuY3lJbmZvLCBFbnRyeVBvaW50V2l0aERlcGVuZGVuY2llc30gZnJvbSAnLi4vZGVwZW5kZW5jaWVzL2RlcGVuZGVuY3lfaG9zdCc7XG5pbXBvcnQge0RlcGVuZGVuY3lSZXNvbHZlcn0gZnJvbSAnLi4vZGVwZW5kZW5jaWVzL2RlcGVuZGVuY3lfcmVzb2x2ZXInO1xuaW1wb3J0IHtFc21EZXBlbmRlbmN5SG9zdH0gZnJvbSAnLi4vZGVwZW5kZW5jaWVzL2VzbV9kZXBlbmRlbmN5X2hvc3QnO1xuaW1wb3J0IHtNb2R1bGVSZXNvbHZlcn0gZnJvbSAnLi4vZGVwZW5kZW5jaWVzL21vZHVsZV9yZXNvbHZlcic7XG5pbXBvcnQge05nY2NDb25maWd1cmF0aW9ufSBmcm9tICcuLi9wYWNrYWdlcy9jb25maWd1cmF0aW9uJztcbmltcG9ydCB7RW50cnlQb2ludE1hbmlmZXN0fSBmcm9tICcuLi9wYWNrYWdlcy9lbnRyeV9wb2ludF9tYW5pZmVzdCc7XG5pbXBvcnQge2dldFBhdGhNYXBwaW5nc0Zyb21Uc0NvbmZpZ30gZnJvbSAnLi4vcGF0aF9tYXBwaW5ncyc7XG5cbmltcG9ydCB7RW50cnlQb2ludENvbGxlY3Rvcn0gZnJvbSAnLi9lbnRyeV9wb2ludF9jb2xsZWN0b3InO1xuaW1wb3J0IHtUcmFjaW5nRW50cnlQb2ludEZpbmRlcn0gZnJvbSAnLi90cmFjaW5nX2VudHJ5X3BvaW50X2ZpbmRlcic7XG5pbXBvcnQge3RyYWNrRHVyYXRpb259IGZyb20gJy4vdXRpbHMnO1xuXG4vKipcbiAqIEFuIEVudHJ5UG9pbnRGaW5kZXIgdGhhdCBzdGFydHMgZnJvbSB0aGUgZmlsZXMgaW4gdGhlIHByb2dyYW0gZGVmaW5lZCBieSB0aGUgZ2l2ZW4gdHNjb25maWcuanNvblxuICogYW5kIG9ubHkgcmV0dXJucyBlbnRyeS1wb2ludHMgdGhhdCBhcmUgZGVwZW5kZW5jaWVzIG9mIHRoZXNlIGZpbGVzLlxuICpcbiAqIFRoaXMgaXMgZmFzdGVyIHRoYW4gc2VhcmNoaW5nIHRoZSBlbnRpcmUgZmlsZS1zeXN0ZW0gZm9yIGFsbCB0aGUgZW50cnktcG9pbnRzLFxuICogYW5kIGlzIHVzZWQgcHJpbWFyaWx5IGJ5IHRoZSBDTEkgaW50ZWdyYXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBQcm9ncmFtQmFzZWRFbnRyeVBvaW50RmluZGVyIGV4dGVuZHMgVHJhY2luZ0VudHJ5UG9pbnRGaW5kZXIge1xuICBwcml2YXRlIGVudHJ5UG9pbnRzV2l0aERlcGVuZGVuY2llczogTWFwPEFic29sdXRlRnNQYXRoLCBFbnRyeVBvaW50V2l0aERlcGVuZGVuY2llcz58bnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBmczogUmVhZG9ubHlGaWxlU3lzdGVtLCBjb25maWc6IE5nY2NDb25maWd1cmF0aW9uLCBsb2dnZXI6IExvZ2dlcixcbiAgICAgIHJlc29sdmVyOiBEZXBlbmRlbmN5UmVzb2x2ZXIsIHByaXZhdGUgZW50cnlQb2ludENvbGxlY3RvcjogRW50cnlQb2ludENvbGxlY3RvcixcbiAgICAgIHByaXZhdGUgZW50cnlQb2ludE1hbmlmZXN0OiBFbnRyeVBvaW50TWFuaWZlc3QsIGJhc2VQYXRoOiBBYnNvbHV0ZUZzUGF0aCxcbiAgICAgIHByaXZhdGUgdHNDb25maWc6IFBhcnNlZENvbmZpZ3VyYXRpb24sIHByb2plY3RQYXRoOiBBYnNvbHV0ZUZzUGF0aCkge1xuICAgIHN1cGVyKFxuICAgICAgICBmcywgY29uZmlnLCBsb2dnZXIsIHJlc29sdmVyLCBiYXNlUGF0aCxcbiAgICAgICAgZ2V0UGF0aE1hcHBpbmdzRnJvbVRzQ29uZmlnKGZzLCB0c0NvbmZpZywgcHJvamVjdFBhdGgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyB0aGUgZXh0ZXJuYWwgaW1wb3J0IHBhdGhzIHRoYXQgd2VyZSBleHRyYWN0ZWQgZnJvbSB0aGUgc291cmNlLWZpbGVzXG4gICAqIG9mIHRoZSBwcm9ncmFtIGRlZmluZWQgYnkgdGhlIHRzY29uZmlnLmpzb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0SW5pdGlhbEVudHJ5UG9pbnRQYXRocygpOiBBYnNvbHV0ZUZzUGF0aFtdIHtcbiAgICBjb25zdCBtb2R1bGVSZXNvbHZlciA9IG5ldyBNb2R1bGVSZXNvbHZlcih0aGlzLmZzLCB0aGlzLnBhdGhNYXBwaW5ncywgWycnLCAnLnRzJywgJy9pbmRleC50cyddKTtcbiAgICBjb25zdCBob3N0ID0gbmV3IEVzbURlcGVuZGVuY3lIb3N0KHRoaXMuZnMsIG1vZHVsZVJlc29sdmVyKTtcbiAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBjcmVhdGVEZXBlbmRlbmN5SW5mbygpO1xuICAgIGNvbnN0IHJvb3RGaWxlcyA9IHRoaXMudHNDb25maWcucm9vdE5hbWVzLm1hcChyb290TmFtZSA9PiB0aGlzLmZzLnJlc29sdmUocm9vdE5hbWUpKTtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYFVzaW5nIHRoZSBwcm9ncmFtIGZyb20gJHt0aGlzLnRzQ29uZmlnLnByb2plY3R9IHRvIHNlZWQgdGhlIGVudHJ5LXBvaW50IGZpbmRpbmcuYCk7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgIGBDb2xsZWN0aW5nIGRlcGVuZGVuY2llcyBmcm9tIHRoZSBmb2xsb3dpbmcgZmlsZXM6YCArIHJvb3RGaWxlcy5tYXAoZmlsZSA9PiBgXFxuLSAke2ZpbGV9YCkpO1xuICAgIGhvc3QuY29sbGVjdERlcGVuZGVuY2llc0luRmlsZXMocm9vdEZpbGVzLCBkZXBlbmRlbmNpZXMpO1xuICAgIHJldHVybiBBcnJheS5mcm9tKGRlcGVuZGVuY2llcy5kZXBlbmRlbmNpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvciB0aGUgZ2l2ZW4gYGVudHJ5UG9pbnRQYXRoYCwgY29tcHV0ZSwgb3IgcmV0cmlldmUsIHRoZSBlbnRyeS1wb2ludCBpbmZvcm1hdGlvbiwgaW5jbHVkaW5nXG4gICAqIHBhdGhzIHRvIG90aGVyIGVudHJ5LXBvaW50cyB0aGF0IHRoaXMgZW50cnktcG9pbnQgZGVwZW5kcyB1cG9uLlxuICAgKlxuICAgKiBJbiB0aGlzIGVudHJ5LXBvaW50IGZpbmRlciwgd2UgdXNlIHRoZSBgRW50cnlQb2ludE1hbmlmZXN0YCB0byBhdm9pZCBjb21wdXRpbmcgZWFjaFxuICAgKiBlbnRyeS1wb2ludCdzIGRlcGVuZGVuY2llcyBpbiB0aGUgY2FzZSB0aGF0IHRoaXMgaGFkIGJlZW4gZG9uZSBwcmV2aW91c2x5LlxuICAgKlxuICAgKiBAcGFyYW0gZW50cnlQb2ludFBhdGggdGhlIHBhdGggdG8gdGhlIGVudHJ5LXBvaW50IHdob3NlIGluZm9ybWF0aW9uIGFuZCBkZXBlbmRlbmNpZXMgYXJlIHRvIGJlXG4gICAqICAgICByZXRyaWV2ZWQgb3IgY29tcHV0ZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHRoZSBlbnRyeS1wb2ludCBhbmQgaXRzIGRlcGVuZGVuY2llcyBvciBgbnVsbGAgaWYgdGhlIGVudHJ5LXBvaW50IGlzIG5vdCBjb21waWxlZCBieVxuICAgKiAgICAgQW5ndWxhciBvciBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRFbnRyeVBvaW50V2l0aERlcHMoZW50cnlQb2ludFBhdGg6IEFic29sdXRlRnNQYXRoKTogRW50cnlQb2ludFdpdGhEZXBlbmRlbmNpZXN8bnVsbCB7XG4gICAgY29uc3QgZW50cnlQb2ludHMgPSB0aGlzLmZpbmRPckxvYWRFbnRyeVBvaW50cygpO1xuICAgIGlmICghZW50cnlQb2ludHMuaGFzKGVudHJ5UG9pbnRQYXRoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGVudHJ5UG9pbnRXaXRoRGVwcyA9IGVudHJ5UG9pbnRzLmdldChlbnRyeVBvaW50UGF0aCkhO1xuICAgIGlmICghZW50cnlQb2ludFdpdGhEZXBzLmVudHJ5UG9pbnQuY29tcGlsZWRCeUFuZ3VsYXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZW50cnlQb2ludFdpdGhEZXBzO1xuICB9XG5cbiAgLyoqXG4gICAqIFdhbGsgdGhlIGJhc2UgcGF0aHMgbG9va2luZyBmb3IgZW50cnktcG9pbnRzIG9yIGxvYWQgdGhpcyBpbmZvcm1hdGlvbiBmcm9tIGFuIGVudHJ5LXBvaW50XG4gICAqIG1hbmlmZXN0LCBpZiBhdmFpbGFibGUuXG4gICAqL1xuICBwcml2YXRlIGZpbmRPckxvYWRFbnRyeVBvaW50cygpOiBNYXA8QWJzb2x1dGVGc1BhdGgsIEVudHJ5UG9pbnRXaXRoRGVwZW5kZW5jaWVzPiB7XG4gICAgaWYgKHRoaXMuZW50cnlQb2ludHNXaXRoRGVwZW5kZW5jaWVzID09PSBudWxsKSB7XG4gICAgICBjb25zdCBlbnRyeVBvaW50c1dpdGhEZXBlbmRlbmNpZXMgPSB0aGlzLmVudHJ5UG9pbnRzV2l0aERlcGVuZGVuY2llcyA9XG4gICAgICAgICAgbmV3IE1hcDxBYnNvbHV0ZUZzUGF0aCwgRW50cnlQb2ludFdpdGhEZXBlbmRlbmNpZXM+KCk7XG4gICAgICBmb3IgKGNvbnN0IGJhc2VQYXRoIG9mIHRoaXMuZ2V0QmFzZVBhdGhzKCkpIHtcbiAgICAgICAgY29uc3QgZW50cnlQb2ludHMgPSB0aGlzLmVudHJ5UG9pbnRNYW5pZmVzdC5yZWFkRW50cnlQb2ludHNVc2luZ01hbmlmZXN0KGJhc2VQYXRoKSB8fFxuICAgICAgICAgICAgdGhpcy53YWxrQmFzZVBhdGhGb3JQYWNrYWdlcyhiYXNlUGF0aCk7XG4gICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyeVBvaW50cykge1xuICAgICAgICAgIGVudHJ5UG9pbnRzV2l0aERlcGVuZGVuY2llcy5zZXQoZS5lbnRyeVBvaW50LnBhdGgsIGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmVudHJ5UG9pbnRzV2l0aERlcGVuZGVuY2llcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggdGhlIGBiYXNlUGF0aGAgZm9yIHBvc3NpYmxlIEFuZ3VsYXIgcGFja2FnZXMgYW5kIGVudHJ5LXBvaW50cy5cbiAgICpcbiAgICogQHBhcmFtIGJhc2VQYXRoIFRoZSBwYXRoIGF0IHdoaWNoIHRvIHN0YXJ0IHRoZSBzZWFyY2guXG4gICAqIEByZXR1cm5zIGFuIGFycmF5IG9mIGBFbnRyeVBvaW50YHMgdGhhdCB3ZXJlIGZvdW5kIHdpdGhpbiBgYmFzZVBhdGhgLlxuICAgKi9cbiAgd2Fsa0Jhc2VQYXRoRm9yUGFja2FnZXMoYmFzZVBhdGg6IEFic29sdXRlRnNQYXRoKTogRW50cnlQb2ludFdpdGhEZXBlbmRlbmNpZXNbXSB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgIGBObyBtYW5pZmVzdCBmb3VuZCBmb3IgJHtiYXNlUGF0aH0gc28gd2Fsa2luZyB0aGUgZGlyZWN0b3JpZXMgZm9yIGVudHJ5LXBvaW50cy5gKTtcbiAgICBjb25zdCBlbnRyeVBvaW50cyA9IHRyYWNrRHVyYXRpb24oXG4gICAgICAgICgpID0+IHRoaXMuZW50cnlQb2ludENvbGxlY3Rvci53YWxrRGlyZWN0b3J5Rm9yUGFja2FnZXMoYmFzZVBhdGgpLFxuICAgICAgICBkdXJhdGlvbiA9PiB0aGlzLmxvZ2dlci5kZWJ1ZyhgV2Fsa2luZyAke2Jhc2VQYXRofSBmb3IgZW50cnktcG9pbnRzIHRvb2sgJHtkdXJhdGlvbn1zLmApKTtcbiAgICB0aGlzLmVudHJ5UG9pbnRNYW5pZmVzdC53cml0ZUVudHJ5UG9pbnRNYW5pZmVzdChiYXNlUGF0aCwgZW50cnlQb2ludHMpO1xuICAgIHJldHVybiBlbnRyeVBvaW50cztcbiAgfVxufVxuIl19