@angular/compiler-cli 12.2.7 → 13.0.0-next.10

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 (602) hide show
  1. package/bundles/index.js +20414 -0
  2. package/bundles/index.js.map +6 -0
  3. package/bundles/linker/babel/index.js +2384 -0
  4. package/bundles/linker/babel/index.js.map +6 -0
  5. package/bundles/linker/index.js +1849 -0
  6. package/bundles/linker/index.js.map +6 -0
  7. package/bundles/ngcc/index.js +16043 -0
  8. package/bundles/ngcc/index.js.map +6 -0
  9. package/bundles/ngcc/main-ngcc.js +16131 -0
  10. package/bundles/ngcc/main-ngcc.js.map +6 -0
  11. package/bundles/ngcc/src/execution/cluster/ngcc_cluster_worker.js +13855 -0
  12. package/bundles/ngcc/src/execution/cluster/ngcc_cluster_worker.js.map +6 -0
  13. package/bundles/ngcc/src/locking/lock_file_with_child_process/ngcc_lock_unlocker.js +334 -0
  14. package/bundles/ngcc/src/locking/lock_file_with_child_process/ngcc_lock_unlocker.js.map +6 -0
  15. package/bundles/private/bazel.js +97 -0
  16. package/bundles/private/bazel.js.map +6 -0
  17. package/bundles/private/localize.js +911 -0
  18. package/bundles/private/localize.js.map +6 -0
  19. package/bundles/private/migrations.js +2181 -0
  20. package/bundles/private/migrations.js.map +6 -0
  21. package/bundles/private/tooling.js +942 -0
  22. package/bundles/private/tooling.js.map +6 -0
  23. package/bundles/src/bin/ng_xi18n.js +20466 -0
  24. package/bundles/src/bin/ng_xi18n.js.map +6 -0
  25. package/bundles/src/bin/ngc.js +20468 -0
  26. package/bundles/src/bin/ngc.js.map +6 -0
  27. package/bundles_metadata.json +1 -0
  28. package/import_meta_url.d.ts +14 -0
  29. package/index.d.ts +4 -1
  30. package/linker/babel/src/ast/babel_ast_factory.d.ts +1 -8
  31. package/linker/babel/src/ast/babel_ast_host.d.ts +1 -1
  32. package/linker/babel/src/babel_core.d.ts +36 -0
  33. package/linker/babel/src/babel_declaration_scope.d.ts +1 -1
  34. package/linker/babel/src/babel_plugin.d.ts +1 -8
  35. package/linker/babel/src/es2015_linker_plugin.d.ts +2 -2
  36. package/linker/src/ast/typescript/typescript_ast_host.d.ts +1 -1
  37. package/linker/src/file_linker/emit_scopes/emit_scope.d.ts +1 -2
  38. package/linker/src/file_linker/emit_scopes/iife_emit_scope.d.ts +1 -1
  39. package/linker/src/file_linker/partial_linkers/partial_class_metadata_linker_1.d.ts +1 -2
  40. package/linker/src/file_linker/partial_linkers/partial_component_linker_1.d.ts +1 -2
  41. package/linker/src/file_linker/partial_linkers/partial_directive_linker_1.d.ts +1 -2
  42. package/linker/src/file_linker/partial_linkers/partial_factory_linker_1.d.ts +1 -2
  43. package/linker/src/file_linker/partial_linkers/partial_injectable_linker_1.d.ts +1 -2
  44. package/linker/src/file_linker/partial_linkers/partial_injector_linker_1.d.ts +1 -2
  45. package/linker/src/file_linker/partial_linkers/partial_linker.d.ts +1 -2
  46. package/linker/src/file_linker/partial_linkers/partial_linker_selector.d.ts +2 -2
  47. package/linker/src/file_linker/partial_linkers/partial_ng_module_linker_1.d.ts +1 -2
  48. package/linker/src/file_linker/partial_linkers/partial_pipe_linker_1.d.ts +1 -2
  49. package/linker/src/file_linker/partial_linkers/util.d.ts +1 -2
  50. package/ngcc/index.d.ts +15 -0
  51. package/ngcc/src/analysis/decoration_analyzer.d.ts +1 -1
  52. package/ngcc/src/analysis/module_with_providers_analyzer.d.ts +1 -1
  53. package/ngcc/src/analysis/ngcc_references_registry.d.ts +1 -1
  54. package/ngcc/src/analysis/ngcc_trait_compiler.d.ts +1 -1
  55. package/ngcc/src/analysis/private_declarations_analyzer.d.ts +1 -1
  56. package/ngcc/src/analysis/switch_marker_analyzer.d.ts +1 -1
  57. package/ngcc/src/analysis/types.d.ts +1 -1
  58. package/ngcc/src/dependencies/esm_dependency_host.d.ts +1 -1
  59. package/ngcc/src/execution/cluster/api.d.ts +5 -1
  60. package/ngcc/src/execution/cluster/master.d.ts +5 -3
  61. package/{src/ngtsc/logging/testing/index.d.ts → ngcc/src/execution/cluster/ngcc_cluster_worker.d.ts} +2 -2
  62. package/ngcc/src/host/commonjs_host.d.ts +1 -1
  63. package/ngcc/src/host/commonjs_umd_utils.d.ts +1 -1
  64. package/ngcc/src/host/delegating_host.d.ts +1 -1
  65. package/ngcc/src/host/esm2015_host.d.ts +1 -1
  66. package/ngcc/src/host/esm5_host.d.ts +2 -1
  67. package/ngcc/src/host/ngcc_host.d.ts +1 -1
  68. package/ngcc/src/host/umd_host.d.ts +1 -1
  69. package/ngcc/src/host/utils.d.ts +1 -1
  70. package/ngcc/src/locking/lock_file.d.ts +1 -1
  71. package/ngcc/src/locking/lock_file_with_child_process/index.d.ts +2 -0
  72. package/ngcc/src/locking/lock_file_with_child_process/{unlocker.d.ts → ngcc_lock_unlocker.d.ts} +1 -1
  73. package/ngcc/src/migrations/migration.d.ts +1 -1
  74. package/ngcc/src/migrations/missing_injectable_migration.d.ts +1 -1
  75. package/ngcc/src/migrations/undecorated_child_migration.d.ts +1 -1
  76. package/ngcc/src/migrations/undecorated_parent_migration.d.ts +1 -1
  77. package/ngcc/src/migrations/utils.d.ts +1 -1
  78. package/ngcc/src/packages/build_marker.d.ts +1 -1
  79. package/ngcc/src/packages/bundle_program.d.ts +1 -1
  80. package/ngcc/src/packages/configuration.d.ts +41 -4
  81. package/ngcc/src/packages/entry_point_bundle.d.ts +1 -1
  82. package/ngcc/src/packages/ngcc_compiler_host.d.ts +1 -1
  83. package/ngcc/src/packages/source_file_cache.d.ts +1 -1
  84. package/ngcc/src/packages/transformer.d.ts +1 -1
  85. package/ngcc/src/rendering/commonjs_rendering_formatter.d.ts +1 -1
  86. package/ngcc/src/rendering/dts_renderer.d.ts +1 -1
  87. package/ngcc/src/rendering/esm5_rendering_formatter.d.ts +1 -1
  88. package/ngcc/src/rendering/esm_rendering_formatter.d.ts +1 -1
  89. package/ngcc/src/rendering/renderer.d.ts +1 -1
  90. package/ngcc/src/rendering/rendering_formatter.d.ts +1 -1
  91. package/ngcc/src/rendering/source_maps.d.ts +3 -3
  92. package/ngcc/src/rendering/umd_rendering_formatter.d.ts +1 -1
  93. package/ngcc/src/rendering/utils.d.ts +1 -1
  94. package/ngcc/src/utils.d.ts +1 -1
  95. package/package.json +52 -11
  96. package/private/bazel.d.ts +13 -0
  97. package/private/localize.d.ts +15 -0
  98. package/private/migrations.d.ts +16 -0
  99. package/{src → private}/tooling.d.ts +2 -2
  100. package/src/bin/ng_xi18n.d.ts +10 -0
  101. package/{ngcc/main-ivy-ngcc.d.ts → src/bin/ngc.d.ts} +2 -1
  102. package/src/diagnostics/translate_diagnostics.d.ts +1 -1
  103. package/src/extract_i18n.d.ts +0 -5
  104. package/src/main.d.ts +6 -6
  105. package/src/metadata/bundle_index_host.d.ts +1 -1
  106. package/src/metadata/bundler.d.ts +1 -1
  107. package/src/metadata/collector.d.ts +1 -1
  108. package/src/metadata/evaluator.d.ts +1 -1
  109. package/src/metadata/symbols.d.ts +1 -1
  110. package/src/ngtsc/annotations/src/component.d.ts +14 -1
  111. package/src/ngtsc/annotations/src/diagnostics.d.ts +1 -1
  112. package/src/ngtsc/annotations/src/directive.d.ts +1 -1
  113. package/src/ngtsc/annotations/src/metadata.d.ts +2 -2
  114. package/src/ngtsc/annotations/src/ng_module.d.ts +2 -4
  115. package/src/ngtsc/annotations/src/pipe.d.ts +1 -1
  116. package/src/ngtsc/annotations/src/util.d.ts +2 -4
  117. package/src/ngtsc/core/api/src/adapter.d.ts +1 -1
  118. package/src/ngtsc/core/api/src/interfaces.d.ts +1 -12
  119. package/src/ngtsc/core/api/src/options.d.ts +1 -1
  120. package/src/ngtsc/core/src/compiler.d.ts +2 -8
  121. package/src/ngtsc/core/src/host.d.ts +1 -1
  122. package/src/ngtsc/cycles/src/analyzer.d.ts +1 -1
  123. package/src/ngtsc/cycles/src/imports.d.ts +1 -1
  124. package/src/ngtsc/diagnostics/src/error.d.ts +1 -1
  125. package/src/ngtsc/entry_point/src/generator.d.ts +1 -1
  126. package/src/ngtsc/entry_point/src/private_export_checker.d.ts +1 -1
  127. package/src/ngtsc/file_system/src/compiler_host.d.ts +1 -1
  128. package/src/ngtsc/file_system/src/logical.d.ts +1 -1
  129. package/src/ngtsc/file_system/src/util.d.ts +1 -1
  130. package/src/ngtsc/imports/src/alias.d.ts +1 -1
  131. package/src/ngtsc/imports/src/default.d.ts +1 -1
  132. package/src/ngtsc/imports/src/emitter.d.ts +1 -1
  133. package/src/ngtsc/imports/src/find_export.d.ts +1 -1
  134. package/src/ngtsc/imports/src/references.d.ts +1 -1
  135. package/src/ngtsc/imports/src/resolver.d.ts +1 -1
  136. package/src/ngtsc/incremental/api.d.ts +1 -1
  137. package/src/ngtsc/incremental/src/dependency_tracking.d.ts +1 -1
  138. package/src/ngtsc/incremental/src/incremental.d.ts +1 -1
  139. package/src/ngtsc/incremental/src/state.d.ts +1 -1
  140. package/src/ngtsc/incremental/src/strategy.d.ts +1 -1
  141. package/src/ngtsc/indexer/src/api.d.ts +5 -2
  142. package/src/ngtsc/metadata/src/api.d.ts +1 -1
  143. package/src/ngtsc/metadata/src/dts.d.ts +1 -1
  144. package/src/ngtsc/metadata/src/resource_registry.d.ts +1 -1
  145. package/src/ngtsc/metadata/src/util.d.ts +1 -1
  146. package/src/ngtsc/partial_evaluator/index.d.ts +1 -0
  147. package/src/ngtsc/partial_evaluator/src/builtin.d.ts +1 -1
  148. package/src/ngtsc/partial_evaluator/src/diagnostics.d.ts +1 -1
  149. package/src/ngtsc/partial_evaluator/src/dynamic.d.ts +1 -1
  150. package/src/ngtsc/partial_evaluator/src/interface.d.ts +1 -1
  151. package/src/ngtsc/partial_evaluator/src/interpreter.d.ts +1 -1
  152. package/src/ngtsc/partial_evaluator/src/result.d.ts +1 -1
  153. package/src/ngtsc/partial_evaluator/src/ts_helpers.d.ts +1 -1
  154. package/src/ngtsc/program.d.ts +1 -1
  155. package/src/ngtsc/program_driver/src/api.d.ts +1 -1
  156. package/src/ngtsc/program_driver/src/ts_create_program_driver.d.ts +1 -1
  157. package/src/ngtsc/reflection/src/host.d.ts +1 -1
  158. package/src/ngtsc/reflection/src/type_to_value.d.ts +1 -1
  159. package/src/ngtsc/reflection/src/typescript.d.ts +1 -1
  160. package/src/ngtsc/reflection/src/util.d.ts +1 -1
  161. package/src/ngtsc/resource/src/loader.d.ts +1 -1
  162. package/src/ngtsc/scope/src/local.d.ts +1 -1
  163. package/src/ngtsc/scope/src/typecheck.d.ts +1 -1
  164. package/src/ngtsc/shims/api.d.ts +1 -1
  165. package/src/ngtsc/shims/src/adapter.d.ts +1 -1
  166. package/src/ngtsc/shims/src/expando.d.ts +1 -1
  167. package/src/ngtsc/shims/src/factory_generator.d.ts +1 -1
  168. package/src/ngtsc/shims/src/reference_tagger.d.ts +1 -1
  169. package/src/ngtsc/shims/src/summary_generator.d.ts +1 -1
  170. package/src/ngtsc/switch/src/switch.d.ts +1 -1
  171. package/src/ngtsc/transform/src/alias.d.ts +1 -1
  172. package/src/ngtsc/transform/src/api.d.ts +1 -1
  173. package/src/ngtsc/transform/src/compilation.d.ts +1 -1
  174. package/src/ngtsc/transform/src/declaration.d.ts +1 -1
  175. package/src/ngtsc/transform/src/trait.d.ts +1 -1
  176. package/src/ngtsc/transform/src/transform.d.ts +1 -1
  177. package/src/ngtsc/transform/src/utils.d.ts +1 -1
  178. package/src/ngtsc/translator/src/import_manager.d.ts +1 -1
  179. package/src/ngtsc/translator/src/translator.d.ts +0 -1
  180. package/src/ngtsc/translator/src/type_translator.d.ts +1 -2
  181. package/src/ngtsc/translator/src/typescript_ast_factory.d.ts +1 -1
  182. package/src/ngtsc/translator/src/typescript_translator.d.ts +1 -1
  183. package/src/ngtsc/tsc_plugin.d.ts +1 -1
  184. package/src/ngtsc/typecheck/api/api.d.ts +1 -1
  185. package/src/ngtsc/typecheck/api/checker.d.ts +8 -5
  186. package/src/ngtsc/typecheck/api/context.d.ts +1 -1
  187. package/src/ngtsc/typecheck/api/scope.d.ts +1 -1
  188. package/src/ngtsc/typecheck/api/symbols.d.ts +1 -1
  189. package/src/ngtsc/typecheck/diagnostics/src/diagnostic.d.ts +1 -1
  190. package/src/ngtsc/typecheck/extended/api/api.d.ts +1 -1
  191. package/src/ngtsc/typecheck/extended/api/extended_template_checker.d.ts +1 -1
  192. package/src/ngtsc/typecheck/extended/checks/invalid_banana_in_box/index.d.ts +1 -1
  193. package/src/ngtsc/typecheck/extended/checks/nullish_coalescing_not_nullable/index.d.ts +1 -1
  194. package/src/ngtsc/typecheck/extended/src/extended_template_checker.d.ts +1 -1
  195. package/src/ngtsc/typecheck/src/checker.d.ts +5 -5
  196. package/src/ngtsc/typecheck/src/comments.d.ts +1 -1
  197. package/src/ngtsc/typecheck/src/completion.d.ts +4 -6
  198. package/src/ngtsc/typecheck/src/context.d.ts +1 -1
  199. package/src/ngtsc/typecheck/src/diagnostics.d.ts +1 -1
  200. package/src/ngtsc/typecheck/src/environment.d.ts +1 -1
  201. package/src/ngtsc/typecheck/src/expression.d.ts +1 -1
  202. package/src/ngtsc/typecheck/src/oob.d.ts +3 -4
  203. package/src/ngtsc/typecheck/src/shim.d.ts +1 -1
  204. package/src/ngtsc/typecheck/src/source.d.ts +1 -1
  205. package/src/ngtsc/typecheck/src/tcb_util.d.ts +1 -1
  206. package/src/ngtsc/typecheck/src/template_symbol_builder.d.ts +1 -1
  207. package/src/ngtsc/typecheck/src/ts_util.d.ts +1 -1
  208. package/src/ngtsc/typecheck/src/type_check_block.d.ts +1 -1
  209. package/src/ngtsc/typecheck/src/type_check_file.d.ts +1 -1
  210. package/src/ngtsc/typecheck/src/type_constructor.d.ts +1 -1
  211. package/src/ngtsc/typecheck/src/type_emitter.d.ts +1 -1
  212. package/src/ngtsc/typecheck/src/type_parameter_emitter.d.ts +1 -1
  213. package/src/ngtsc/util/src/typescript.d.ts +1 -1
  214. package/src/ngtsc/util/src/visitor.d.ts +1 -1
  215. package/src/perform_compile.d.ts +1 -1
  216. package/src/perform_watch.d.ts +1 -1
  217. package/src/transformers/api.d.ts +2 -5
  218. package/src/transformers/compiler_host.d.ts +1 -1
  219. package/src/transformers/{downlevel_decorators_transform.d.ts → downlevel_decorators_transform/downlevel_decorators_transform.d.ts} +3 -3
  220. package/src/{ngtsc/routing → transformers/downlevel_decorators_transform}/index.d.ts +2 -3
  221. package/src/transformers/{patch_alias_reference_resolution.d.ts → downlevel_decorators_transform/patch_alias_reference_resolution.d.ts} +2 -2
  222. package/src/transformers/i18n.d.ts +1 -1
  223. package/src/transformers/inline_resources.d.ts +1 -1
  224. package/src/transformers/lower_expressions.d.ts +1 -1
  225. package/src/transformers/metadata_cache.d.ts +1 -1
  226. package/src/transformers/node_emitter.d.ts +2 -3
  227. package/src/transformers/node_emitter_transform.d.ts +1 -1
  228. package/src/transformers/program.d.ts +1 -1
  229. package/src/transformers/r3_metadata_transform.d.ts +1 -1
  230. package/src/transformers/r3_transform.d.ts +1 -1
  231. package/src/transformers/util.d.ts +1 -1
  232. package/index.js +0 -40
  233. package/linker/babel/index.js +0 -25
  234. package/linker/babel/src/ast/babel_ast_factory.js +0 -153
  235. package/linker/babel/src/ast/babel_ast_host.js +0 -181
  236. package/linker/babel/src/babel_declaration_scope.js +0 -67
  237. package/linker/babel/src/babel_plugin.js +0 -38
  238. package/linker/babel/src/es2015_linker_plugin.js +0 -183
  239. package/linker/babel/src/linker_plugin_options.js +0 -13
  240. package/linker/index.js +0 -27
  241. package/linker/src/ast/ast_host.js +0 -20
  242. package/linker/src/ast/ast_value.js +0 -299
  243. package/linker/src/ast/typescript/typescript_ast_host.js +0 -183
  244. package/linker/src/ast/utils.js +0 -31
  245. package/linker/src/fatal_linker_error.js +0 -49
  246. package/linker/src/file_linker/declaration_scope.js +0 -20
  247. package/linker/src/file_linker/emit_scopes/emit_scope.js +0 -57
  248. package/linker/src/file_linker/emit_scopes/iife_emit_scope.js +0 -51
  249. package/linker/src/file_linker/file_linker.js +0 -97
  250. package/linker/src/file_linker/get_source_file.js +0 -42
  251. package/linker/src/file_linker/linker_environment.js +0 -38
  252. package/linker/src/file_linker/linker_options.js +0 -29
  253. package/linker/src/file_linker/needs_linking.js +0 -41
  254. package/linker/src/file_linker/partial_linkers/partial_class_metadata_linker_1.js +0 -47
  255. package/linker/src/file_linker/partial_linkers/partial_component_linker_1.js +0 -210
  256. package/linker/src/file_linker/partial_linkers/partial_directive_linker_1.js +0 -154
  257. package/linker/src/file_linker/partial_linkers/partial_factory_linker_1.js +0 -70
  258. package/linker/src/file_linker/partial_linkers/partial_injectable_linker_1.js +0 -74
  259. package/linker/src/file_linker/partial_linkers/partial_injector_linker_1.js +0 -56
  260. package/linker/src/file_linker/partial_linkers/partial_linker.js +0 -13
  261. package/linker/src/file_linker/partial_linkers/partial_linker_selector.js +0 -194
  262. package/linker/src/file_linker/partial_linkers/partial_ng_module_linker_1.js +0 -126
  263. package/linker/src/file_linker/partial_linkers/partial_pipe_linker_1.js +0 -59
  264. package/linker/src/file_linker/partial_linkers/util.js +0 -95
  265. package/linker/src/file_linker/translator.js +0 -40
  266. package/linker/src/linker_import_generator.js +0 -43
  267. package/ngcc/index.js +0 -33
  268. package/ngcc/main-ivy-ngcc.js +0 -12
  269. package/ngcc/main-ngcc.js +0 -54
  270. package/ngcc/src/analysis/decoration_analyzer.js +0 -268
  271. package/ngcc/src/analysis/migration_host.js +0 -108
  272. package/ngcc/src/analysis/module_with_providers_analyzer.js +0 -197
  273. package/ngcc/src/analysis/ngcc_references_registry.js +0 -65
  274. package/ngcc/src/analysis/ngcc_trait_compiler.js +0 -117
  275. package/ngcc/src/analysis/private_declarations_analyzer.js +0 -63
  276. package/ngcc/src/analysis/switch_marker_analyzer.js +0 -50
  277. package/ngcc/src/analysis/types.js +0 -15
  278. package/ngcc/src/analysis/util.js +0 -36
  279. package/ngcc/src/command_line_options.js +0 -156
  280. package/ngcc/src/constants.js +0 -23
  281. package/ngcc/src/dependencies/commonjs_dependency_host.js +0 -129
  282. package/ngcc/src/dependencies/dependency_host.js +0 -143
  283. package/ngcc/src/dependencies/dependency_resolver.js +0 -180
  284. package/ngcc/src/dependencies/dts_dependency_host.js +0 -35
  285. package/ngcc/src/dependencies/esm_dependency_host.js +0 -307
  286. package/ngcc/src/dependencies/module_resolver.js +0 -269
  287. package/ngcc/src/dependencies/umd_dependency_host.js +0 -53
  288. package/ngcc/src/entry_point_finder/directory_walker_entry_point_finder.js +0 -70
  289. package/ngcc/src/entry_point_finder/entry_point_collector.js +0 -157
  290. package/ngcc/src/entry_point_finder/interface.js +0 -13
  291. package/ngcc/src/entry_point_finder/program_based_entry_point_finder.js +0 -132
  292. package/ngcc/src/entry_point_finder/targeted_entry_point_finder.js +0 -268
  293. package/ngcc/src/entry_point_finder/tracing_entry_point_finder.js +0 -78
  294. package/ngcc/src/entry_point_finder/utils.js +0 -234
  295. package/ngcc/src/execution/analyze_entry_points.js +0 -197
  296. package/ngcc/src/execution/api.js +0 -13
  297. package/ngcc/src/execution/cluster/api.js +0 -20
  298. package/ngcc/src/execution/cluster/executor.js +0 -52
  299. package/ngcc/src/execution/cluster/master.js +0 -311
  300. package/ngcc/src/execution/cluster/package_json_updater.js +0 -79
  301. package/ngcc/src/execution/cluster/utils.js +0 -77
  302. package/ngcc/src/execution/cluster/worker.js +0 -123
  303. package/ngcc/src/execution/create_compile_function.js +0 -76
  304. package/ngcc/src/execution/single_process_executor.js +0 -91
  305. package/ngcc/src/execution/tasks/api.js +0 -35
  306. package/ngcc/src/execution/tasks/completion.js +0 -79
  307. package/ngcc/src/execution/tasks/queues/base_task_queue.js +0 -120
  308. package/ngcc/src/execution/tasks/queues/parallel_task_queue.js +0 -87
  309. package/ngcc/src/execution/tasks/queues/serial_task_queue.js +0 -49
  310. package/ngcc/src/execution/tasks/utils.js +0 -167
  311. package/ngcc/src/host/commonjs_host.js +0 -261
  312. package/ngcc/src/host/commonjs_umd_utils.js +0 -210
  313. package/ngcc/src/host/delegating_host.js +0 -156
  314. package/ngcc/src/host/esm2015_host.js +0 -2441
  315. package/ngcc/src/host/esm5_host.js +0 -744
  316. package/ngcc/src/host/ngcc_host.js +0 -29
  317. package/ngcc/src/host/umd_host.js +0 -539
  318. package/ngcc/src/host/utils.js +0 -26
  319. package/ngcc/src/locking/async_locker.js +0 -121
  320. package/ngcc/src/locking/lock_file.js +0 -18
  321. package/ngcc/src/locking/lock_file_with_child_process/index.js +0 -93
  322. package/ngcc/src/locking/lock_file_with_child_process/unlocker.js +0 -46
  323. package/ngcc/src/locking/lock_file_with_child_process/util.js +0 -43
  324. package/ngcc/src/locking/sync_locker.js +0 -67
  325. package/ngcc/src/main.js +0 -163
  326. package/ngcc/src/migrations/migration.js +0 -13
  327. package/ngcc/src/migrations/missing_injectable_migration.js +0 -227
  328. package/ngcc/src/migrations/undecorated_child_migration.js +0 -90
  329. package/ngcc/src/migrations/undecorated_parent_migration.js +0 -103
  330. package/ngcc/src/migrations/utils.js +0 -137
  331. package/ngcc/src/ngcc_options.js +0 -135
  332. package/ngcc/src/packages/build_marker.js +0 -124
  333. package/ngcc/src/packages/bundle_program.js +0 -80
  334. package/ngcc/src/packages/configuration.js +0 -277
  335. package/ngcc/src/packages/entry_point.js +0 -267
  336. package/ngcc/src/packages/entry_point_bundle.js +0 -96
  337. package/ngcc/src/packages/entry_point_manifest.js +0 -207
  338. package/ngcc/src/packages/ngcc_compiler_host.js +0 -101
  339. package/ngcc/src/packages/patch_ts_expando_initializer.js +0 -174
  340. package/ngcc/src/packages/source_file_cache.js +0 -207
  341. package/ngcc/src/packages/transformer.js +0 -157
  342. package/ngcc/src/path_mappings.js +0 -27
  343. package/ngcc/src/rendering/commonjs_rendering_formatter.js +0 -106
  344. package/ngcc/src/rendering/dts_renderer.js +0 -170
  345. package/ngcc/src/rendering/esm5_rendering_formatter.js +0 -70
  346. package/ngcc/src/rendering/esm_rendering_formatter.js +0 -291
  347. package/ngcc/src/rendering/ngcc_import_rewriter.js +0 -49
  348. package/ngcc/src/rendering/renderer.js +0 -204
  349. package/ngcc/src/rendering/rendering_formatter.js +0 -15
  350. package/ngcc/src/rendering/source_maps.js +0 -68
  351. package/ngcc/src/rendering/umd_rendering_formatter.js +0 -326
  352. package/ngcc/src/rendering/utils.js +0 -35
  353. package/ngcc/src/utils.js +0 -182
  354. package/ngcc/src/writing/cleaning/cleaning_strategies.js +0 -80
  355. package/ngcc/src/writing/cleaning/package_cleaner.js +0 -126
  356. package/ngcc/src/writing/cleaning/utils.js +0 -30
  357. package/ngcc/src/writing/file_writer.js +0 -13
  358. package/ngcc/src/writing/in_place_file_writer.js +0 -90
  359. package/ngcc/src/writing/new_entry_point_file_writer.js +0 -214
  360. package/ngcc/src/writing/package_json_updater.js +0 -182
  361. package/src/diagnostics/translate_diagnostics.js +0 -61
  362. package/src/diagnostics/typescript_version.js +0 -96
  363. package/src/extract_i18n.js +0 -62
  364. package/src/language_services.js +0 -34
  365. package/src/main.js +0 -210
  366. package/src/metadata/bundle_index_host.js +0 -133
  367. package/src/metadata/bundler.js +0 -624
  368. package/src/metadata/collector.js +0 -799
  369. package/src/metadata/evaluator.js +0 -677
  370. package/src/metadata/index.js +0 -24
  371. package/src/metadata/index_writer.js +0 -80
  372. package/src/metadata/schema.js +0 -136
  373. package/src/metadata/symbols.js +0 -149
  374. package/src/ngtsc/annotations/index.js +0 -35
  375. package/src/ngtsc/annotations/src/api.js +0 -20
  376. package/src/ngtsc/annotations/src/component.js +0 -1286
  377. package/src/ngtsc/annotations/src/diagnostics.js +0 -174
  378. package/src/ngtsc/annotations/src/directive.js +0 -724
  379. package/src/ngtsc/annotations/src/factory.js +0 -32
  380. package/src/ngtsc/annotations/src/injectable.js +0 -277
  381. package/src/ngtsc/annotations/src/metadata.js +0 -159
  382. package/src/ngtsc/annotations/src/ng_module.js +0 -677
  383. package/src/ngtsc/annotations/src/pipe.js +0 -171
  384. package/src/ngtsc/annotations/src/references_registry.js +0 -38
  385. package/src/ngtsc/annotations/src/util.js +0 -566
  386. package/src/ngtsc/core/api/index.js +0 -25
  387. package/src/ngtsc/core/api/src/adapter.js +0 -20
  388. package/src/ngtsc/core/api/src/interfaces.js +0 -20
  389. package/src/ngtsc/core/api/src/options.js +0 -20
  390. package/src/ngtsc/core/api/src/public_options.js +0 -20
  391. package/src/ngtsc/core/index.js +0 -25
  392. package/src/ngtsc/core/src/compiler.js +0 -1142
  393. package/src/ngtsc/core/src/host.js +0 -273
  394. package/src/ngtsc/cycles/index.js +0 -26
  395. package/src/ngtsc/cycles/src/analyzer.js +0 -163
  396. package/src/ngtsc/cycles/src/imports.js +0 -175
  397. package/src/ngtsc/diagnostics/index.js +0 -33
  398. package/src/ngtsc/diagnostics/src/error.js +0 -69
  399. package/src/ngtsc/diagnostics/src/error_code.js +0 -235
  400. package/src/ngtsc/diagnostics/src/util.js +0 -35
  401. package/src/ngtsc/entry_point/index.js +0 -29
  402. package/src/ngtsc/entry_point/src/generator.js +0 -45
  403. package/src/ngtsc/entry_point/src/logic.js +0 -61
  404. package/src/ngtsc/entry_point/src/private_export_checker.js +0 -137
  405. package/src/ngtsc/entry_point/src/reference_graph.js +0 -91
  406. package/src/ngtsc/file_system/index.js +0 -45
  407. package/src/ngtsc/file_system/src/compiler_host.js +0 -80
  408. package/src/ngtsc/file_system/src/helpers.js +0 -135
  409. package/src/ngtsc/file_system/src/invalid_file_system.js +0 -120
  410. package/src/ngtsc/file_system/src/logical.js +0 -100
  411. package/src/ngtsc/file_system/src/node_js_file_system.js +0 -179
  412. package/src/ngtsc/file_system/src/types.js +0 -20
  413. package/src/ngtsc/file_system/src/util.js +0 -38
  414. package/src/ngtsc/file_system/testing/index.d.ts +0 -13
  415. package/src/ngtsc/file_system/testing/index.js +0 -32
  416. package/src/ngtsc/file_system/testing/src/mock_file_system.d.ts +0 -72
  417. package/src/ngtsc/file_system/testing/src/mock_file_system.js +0 -333
  418. package/src/ngtsc/file_system/testing/src/mock_file_system_native.d.ts +0 -16
  419. package/src/ngtsc/file_system/testing/src/mock_file_system_native.js +0 -85
  420. package/src/ngtsc/file_system/testing/src/mock_file_system_posix.d.ts +0 -13
  421. package/src/ngtsc/file_system/testing/src/mock_file_system_posix.js +0 -68
  422. package/src/ngtsc/file_system/testing/src/mock_file_system_windows.d.ts +0 -13
  423. package/src/ngtsc/file_system/testing/src/mock_file_system_windows.js +0 -68
  424. package/src/ngtsc/file_system/testing/src/test_helper.d.ts +0 -17
  425. package/src/ngtsc/file_system/testing/src/test_helper.js +0 -142
  426. package/src/ngtsc/imports/index.js +0 -43
  427. package/src/ngtsc/imports/src/alias.js +0 -158
  428. package/src/ngtsc/imports/src/core.js +0 -98
  429. package/src/ngtsc/imports/src/default.js +0 -153
  430. package/src/ngtsc/imports/src/emitter.js +0 -317
  431. package/src/ngtsc/imports/src/find_export.js +0 -82
  432. package/src/ngtsc/imports/src/reexport.js +0 -20
  433. package/src/ngtsc/imports/src/references.js +0 -171
  434. package/src/ngtsc/imports/src/resolver.js +0 -39
  435. package/src/ngtsc/incremental/api.js +0 -20
  436. package/src/ngtsc/incremental/index.js +0 -29
  437. package/src/ngtsc/incremental/semantic_graph/index.js +0 -34
  438. package/src/ngtsc/incremental/semantic_graph/src/api.js +0 -51
  439. package/src/ngtsc/incremental/semantic_graph/src/graph.js +0 -302
  440. package/src/ngtsc/incremental/semantic_graph/src/type_parameters.js +0 -55
  441. package/src/ngtsc/incremental/semantic_graph/src/util.js +0 -111
  442. package/src/ngtsc/incremental/src/dependency_tracking.js +0 -165
  443. package/src/ngtsc/incremental/src/incremental.js +0 -393
  444. package/src/ngtsc/incremental/src/noop.js +0 -26
  445. package/src/ngtsc/incremental/src/state.js +0 -30
  446. package/src/ngtsc/incremental/src/strategy.js +0 -99
  447. package/src/ngtsc/indexer/index.js +0 -27
  448. package/src/ngtsc/indexer/src/api.js +0 -45
  449. package/src/ngtsc/indexer/src/context.js +0 -40
  450. package/src/ngtsc/indexer/src/template.js +0 -328
  451. package/src/ngtsc/indexer/src/transform.js +0 -66
  452. package/src/ngtsc/logging/index.js +0 -25
  453. package/src/ngtsc/logging/src/console_logger.js +0 -75
  454. package/src/ngtsc/logging/src/logger.js +0 -28
  455. package/src/ngtsc/logging/testing/index.js +0 -23
  456. package/src/ngtsc/logging/testing/src/mock_logger.d.ts +0 -20
  457. package/src/ngtsc/logging/testing/src/mock_logger.js +0 -64
  458. package/src/ngtsc/metadata/index.js +0 -39
  459. package/src/ngtsc/metadata/src/api.js +0 -26
  460. package/src/ngtsc/metadata/src/dts.js +0 -168
  461. package/src/ngtsc/metadata/src/inheritance.js +0 -122
  462. package/src/ngtsc/metadata/src/property_mapping.js +0 -244
  463. package/src/ngtsc/metadata/src/registry.js +0 -133
  464. package/src/ngtsc/metadata/src/resource_registry.js +0 -109
  465. package/src/ngtsc/metadata/src/util.js +0 -275
  466. package/src/ngtsc/partial_evaluator/index.js +0 -31
  467. package/src/ngtsc/partial_evaluator/src/builtin.js +0 -125
  468. package/src/ngtsc/partial_evaluator/src/diagnostics.js +0 -193
  469. package/src/ngtsc/partial_evaluator/src/dynamic.js +0 -109
  470. package/src/ngtsc/partial_evaluator/src/interface.js +0 -42
  471. package/src/ngtsc/partial_evaluator/src/interpreter.js +0 -780
  472. package/src/ngtsc/partial_evaluator/src/known_declaration.js +0 -57
  473. package/src/ngtsc/partial_evaluator/src/result.js +0 -72
  474. package/src/ngtsc/partial_evaluator/src/ts_helpers.js +0 -121
  475. package/src/ngtsc/perf/index.js +0 -28
  476. package/src/ngtsc/perf/src/api.js +0 -291
  477. package/src/ngtsc/perf/src/clock.js +0 -30
  478. package/src/ngtsc/perf/src/noop.js +0 -37
  479. package/src/ngtsc/perf/src/recorder.js +0 -143
  480. package/src/ngtsc/program.js +0 -360
  481. package/src/ngtsc/program_driver/index.js +0 -25
  482. package/src/ngtsc/program_driver/src/api.js +0 -36
  483. package/src/ngtsc/program_driver/src/ts_create_program_driver.js +0 -200
  484. package/src/ngtsc/reflection/index.js +0 -36
  485. package/src/ngtsc/reflection/src/host.js +0 -88
  486. package/src/ngtsc/reflection/src/type_to_value.js +0 -259
  487. package/src/ngtsc/reflection/src/typescript.js +0 -640
  488. package/src/ngtsc/reflection/src/util.js +0 -37
  489. package/src/ngtsc/resource/index.js +0 -23
  490. package/src/ngtsc/resource/src/loader.js +0 -285
  491. package/src/ngtsc/routing/index.js +0 -26
  492. package/src/ngtsc/routing/src/analyzer.d.ts +0 -37
  493. package/src/ngtsc/routing/src/analyzer.js +0 -82
  494. package/src/ngtsc/routing/src/lazy.d.ts +0 -19
  495. package/src/ngtsc/routing/src/lazy.js +0 -239
  496. package/src/ngtsc/routing/src/route.d.ts +0 -23
  497. package/src/ngtsc/routing/src/route.js +0 -77
  498. package/src/ngtsc/scope/index.js +0 -29
  499. package/src/ngtsc/scope/src/api.js +0 -20
  500. package/src/ngtsc/scope/src/component_scope.js +0 -69
  501. package/src/ngtsc/scope/src/dependency.js +0 -201
  502. package/src/ngtsc/scope/src/local.js +0 -665
  503. package/src/ngtsc/scope/src/typecheck.js +0 -120
  504. package/src/ngtsc/shims/api.js +0 -13
  505. package/src/ngtsc/shims/index.js +0 -39
  506. package/src/ngtsc/shims/src/adapter.js +0 -266
  507. package/src/ngtsc/shims/src/expando.js +0 -147
  508. package/src/ngtsc/shims/src/factory_generator.js +0 -292
  509. package/src/ngtsc/shims/src/reference_tagger.js +0 -94
  510. package/src/ngtsc/shims/src/summary_generator.js +0 -101
  511. package/src/ngtsc/shims/src/util.js +0 -41
  512. package/src/ngtsc/sourcemaps/index.js +0 -27
  513. package/src/ngtsc/sourcemaps/src/content_origin.js +0 -48
  514. package/src/ngtsc/sourcemaps/src/raw_source_map.js +0 -13
  515. package/src/ngtsc/sourcemaps/src/segment_marker.js +0 -55
  516. package/src/ngtsc/sourcemaps/src/source_file.js +0 -519
  517. package/src/ngtsc/sourcemaps/src/source_file_loader.js +0 -234
  518. package/src/ngtsc/switch/index.js +0 -23
  519. package/src/ngtsc/switch/src/switch.js +0 -141
  520. package/src/ngtsc/transform/index.js +0 -36
  521. package/src/ngtsc/transform/src/alias.js +0 -46
  522. package/src/ngtsc/transform/src/api.js +0 -76
  523. package/src/ngtsc/transform/src/compilation.js +0 -862
  524. package/src/ngtsc/transform/src/declaration.js +0 -234
  525. package/src/ngtsc/transform/src/trait.js +0 -111
  526. package/src/ngtsc/transform/src/transform.js +0 -333
  527. package/src/ngtsc/transform/src/utils.js +0 -73
  528. package/src/ngtsc/translator/index.js +0 -37
  529. package/src/ngtsc/translator/src/api/ast_factory.js +0 -20
  530. package/src/ngtsc/translator/src/api/import_generator.js +0 -20
  531. package/src/ngtsc/translator/src/context.js +0 -47
  532. package/src/ngtsc/translator/src/import_manager.js +0 -77
  533. package/src/ngtsc/translator/src/translator.js +0 -353
  534. package/src/ngtsc/translator/src/type_translator.js +0 -223
  535. package/src/ngtsc/translator/src/typescript_ast_factory.js +0 -251
  536. package/src/ngtsc/translator/src/typescript_translator.js +0 -34
  537. package/src/ngtsc/tsc_plugin.js +0 -129
  538. package/src/ngtsc/typecheck/api/api.js +0 -20
  539. package/src/ngtsc/typecheck/api/checker.js +0 -44
  540. package/src/ngtsc/typecheck/api/completion.js +0 -29
  541. package/src/ngtsc/typecheck/api/context.js +0 -20
  542. package/src/ngtsc/typecheck/api/index.js +0 -27
  543. package/src/ngtsc/typecheck/api/scope.js +0 -20
  544. package/src/ngtsc/typecheck/api/symbols.js +0 -35
  545. package/src/ngtsc/typecheck/diagnostics/index.js +0 -23
  546. package/src/ngtsc/typecheck/diagnostics/src/diagnostic.js +0 -141
  547. package/src/ngtsc/typecheck/diagnostics/src/id.js +0 -37
  548. package/src/ngtsc/typecheck/extended/api/api.js +0 -124
  549. package/src/ngtsc/typecheck/extended/api/extended_template_checker.js +0 -20
  550. package/src/ngtsc/typecheck/extended/api/index.js +0 -23
  551. package/src/ngtsc/typecheck/extended/checks/invalid_banana_in_box/index.js +0 -52
  552. package/src/ngtsc/typecheck/extended/checks/nullish_coalescing_not_nullable/index.js +0 -64
  553. package/src/ngtsc/typecheck/extended/index.js +0 -23
  554. package/src/ngtsc/typecheck/extended/src/extended_template_checker.js +0 -55
  555. package/src/ngtsc/typecheck/index.js +0 -29
  556. package/src/ngtsc/typecheck/src/checker.js +0 -764
  557. package/src/ngtsc/typecheck/src/comments.js +0 -181
  558. package/src/ngtsc/typecheck/src/completion.js +0 -232
  559. package/src/ngtsc/typecheck/src/context.js +0 -424
  560. package/src/ngtsc/typecheck/src/diagnostics.js +0 -114
  561. package/src/ngtsc/typecheck/src/dom.js +0 -87
  562. package/src/ngtsc/typecheck/src/environment.js +0 -160
  563. package/src/ngtsc/typecheck/src/expression.js +0 -441
  564. package/src/ngtsc/typecheck/src/line_mappings.js +0 -77
  565. package/src/ngtsc/typecheck/src/oob.js +0 -181
  566. package/src/ngtsc/typecheck/src/shim.js +0 -52
  567. package/src/ngtsc/typecheck/src/source.js +0 -91
  568. package/src/ngtsc/typecheck/src/tcb_util.js +0 -165
  569. package/src/ngtsc/typecheck/src/template_semantics.js +0 -52
  570. package/src/ngtsc/typecheck/src/template_symbol_builder.js +0 -546
  571. package/src/ngtsc/typecheck/src/ts_util.js +0 -202
  572. package/src/ngtsc/typecheck/src/type_check_block.js +0 -2210
  573. package/src/ngtsc/typecheck/src/type_check_file.js +0 -115
  574. package/src/ngtsc/typecheck/src/type_constructor.js +0 -255
  575. package/src/ngtsc/typecheck/src/type_emitter.js +0 -164
  576. package/src/ngtsc/typecheck/src/type_parameter_emitter.js +0 -115
  577. package/src/ngtsc/util/src/path.js +0 -33
  578. package/src/ngtsc/util/src/typescript.js +0 -176
  579. package/src/ngtsc/util/src/visitor.js +0 -119
  580. package/src/ngtsc/xi18n/index.js +0 -22
  581. package/src/ngtsc/xi18n/src/context.js +0 -20
  582. package/src/perform_compile.js +0 -322
  583. package/src/perform_watch.js +0 -263
  584. package/src/tooling.js +0 -47
  585. package/src/transformers/api.js +0 -42
  586. package/src/transformers/compiler_host.js +0 -623
  587. package/src/transformers/downlevel_decorators_transform.js +0 -612
  588. package/src/transformers/entry_points.js +0 -25
  589. package/src/transformers/i18n.js +0 -76
  590. package/src/transformers/inline_resources.js +0 -287
  591. package/src/transformers/lower_expressions.js +0 -365
  592. package/src/transformers/metadata_cache.js +0 -96
  593. package/src/transformers/metadata_reader.js +0 -120
  594. package/src/transformers/node_emitter.js +0 -643
  595. package/src/transformers/node_emitter_transform.js +0 -88
  596. package/src/transformers/patch_alias_reference_resolution.js +0 -129
  597. package/src/transformers/program.js +0 -1000
  598. package/src/transformers/r3_metadata_transform.js +0 -73
  599. package/src/transformers/r3_transform.js +0 -44
  600. package/src/transformers/util.js +0 -122
  601. package/src/typescript_support.js +0 -74
  602. package/src/version.js +0 -28
@@ -1,862 +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
- (function (factory) {
9
- if (typeof module === "object" && typeof module.exports === "object") {
10
- var v = factory(require, exports);
11
- if (v !== undefined) module.exports = v;
12
- }
13
- else if (typeof define === "function" && define.amd) {
14
- define("@angular/compiler-cli/src/ngtsc/transform/src/compilation", ["require", "exports", "tslib", "typescript", "@angular/compiler-cli/src/ngtsc/diagnostics", "@angular/compiler-cli/src/ngtsc/perf", "@angular/compiler-cli/src/ngtsc/reflection", "@angular/compiler-cli/src/ngtsc/util/src/typescript", "@angular/compiler-cli/src/ngtsc/transform/src/api", "@angular/compiler-cli/src/ngtsc/transform/src/trait"], factory);
15
- }
16
- })(function (require, exports) {
17
- "use strict";
18
- Object.defineProperty(exports, "__esModule", { value: true });
19
- exports.TraitCompiler = void 0;
20
- var tslib_1 = require("tslib");
21
- var ts = require("typescript");
22
- var diagnostics_1 = require("@angular/compiler-cli/src/ngtsc/diagnostics");
23
- var perf_1 = require("@angular/compiler-cli/src/ngtsc/perf");
24
- var reflection_1 = require("@angular/compiler-cli/src/ngtsc/reflection");
25
- var typescript_1 = require("@angular/compiler-cli/src/ngtsc/util/src/typescript");
26
- var api_1 = require("@angular/compiler-cli/src/ngtsc/transform/src/api");
27
- var trait_1 = require("@angular/compiler-cli/src/ngtsc/transform/src/trait");
28
- /**
29
- * The heart of Angular compilation.
30
- *
31
- * The `TraitCompiler` is responsible for processing all classes in the program. Any time a
32
- * `DecoratorHandler` matches a class, a "trait" is created to represent that Angular aspect of the
33
- * class (such as the class having a component definition).
34
- *
35
- * The `TraitCompiler` transitions each trait through the various phases of compilation, culminating
36
- * in the production of `CompileResult`s instructing the compiler to apply various mutations to the
37
- * class (like adding fields or type declarations).
38
- */
39
- var TraitCompiler = /** @class */ (function () {
40
- function TraitCompiler(handlers, reflector, perf, incrementalBuild, compileNonExportedClasses, compilationMode, dtsTransforms, semanticDepGraphUpdater) {
41
- var e_1, _a;
42
- this.handlers = handlers;
43
- this.reflector = reflector;
44
- this.perf = perf;
45
- this.incrementalBuild = incrementalBuild;
46
- this.compileNonExportedClasses = compileNonExportedClasses;
47
- this.compilationMode = compilationMode;
48
- this.dtsTransforms = dtsTransforms;
49
- this.semanticDepGraphUpdater = semanticDepGraphUpdater;
50
- /**
51
- * Maps class declarations to their `ClassRecord`, which tracks the Ivy traits being applied to
52
- * those classes.
53
- */
54
- this.classes = new Map();
55
- /**
56
- * Maps source files to any class declaration(s) within them which have been discovered to contain
57
- * Ivy traits.
58
- */
59
- this.fileToClasses = new Map();
60
- /**
61
- * Tracks which source files have been analyzed but did not contain any traits. This set allows
62
- * the compiler to skip analyzing these files in an incremental rebuild.
63
- */
64
- this.filesWithoutTraits = new Set();
65
- this.reexportMap = new Map();
66
- this.handlersByName = new Map();
67
- try {
68
- for (var handlers_1 = tslib_1.__values(handlers), handlers_1_1 = handlers_1.next(); !handlers_1_1.done; handlers_1_1 = handlers_1.next()) {
69
- var handler = handlers_1_1.value;
70
- this.handlersByName.set(handler.name, handler);
71
- }
72
- }
73
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
74
- finally {
75
- try {
76
- if (handlers_1_1 && !handlers_1_1.done && (_a = handlers_1.return)) _a.call(handlers_1);
77
- }
78
- finally { if (e_1) throw e_1.error; }
79
- }
80
- }
81
- TraitCompiler.prototype.analyzeSync = function (sf) {
82
- this.analyze(sf, false);
83
- };
84
- TraitCompiler.prototype.analyzeAsync = function (sf) {
85
- return this.analyze(sf, true);
86
- };
87
- TraitCompiler.prototype.analyze = function (sf, preanalyze) {
88
- var e_2, _a;
89
- var _this = this;
90
- // We shouldn't analyze declaration files.
91
- if (sf.isDeclarationFile) {
92
- return undefined;
93
- }
94
- // analyze() really wants to return `Promise<void>|void`, but TypeScript cannot narrow a return
95
- // type of 'void', so `undefined` is used instead.
96
- var promises = [];
97
- var priorWork = this.incrementalBuild.priorAnalysisFor(sf);
98
- if (priorWork !== null) {
99
- this.perf.eventCount(perf_1.PerfEvent.SourceFileReuseAnalysis);
100
- if (priorWork.length > 0) {
101
- try {
102
- for (var priorWork_1 = tslib_1.__values(priorWork), priorWork_1_1 = priorWork_1.next(); !priorWork_1_1.done; priorWork_1_1 = priorWork_1.next()) {
103
- var priorRecord = priorWork_1_1.value;
104
- this.adopt(priorRecord);
105
- }
106
- }
107
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
108
- finally {
109
- try {
110
- if (priorWork_1_1 && !priorWork_1_1.done && (_a = priorWork_1.return)) _a.call(priorWork_1);
111
- }
112
- finally { if (e_2) throw e_2.error; }
113
- }
114
- this.perf.eventCount(perf_1.PerfEvent.TraitReuseAnalysis, priorWork.length);
115
- }
116
- else {
117
- this.filesWithoutTraits.add(sf);
118
- }
119
- // Skip the rest of analysis, as this file's prior traits are being reused.
120
- return;
121
- }
122
- var visit = function (node) {
123
- if (_this.reflector.isClass(node)) {
124
- _this.analyzeClass(node, preanalyze ? promises : null);
125
- }
126
- ts.forEachChild(node, visit);
127
- };
128
- visit(sf);
129
- if (preanalyze && promises.length > 0) {
130
- return Promise.all(promises).then(function () { return undefined; });
131
- }
132
- else {
133
- return undefined;
134
- }
135
- };
136
- TraitCompiler.prototype.recordFor = function (clazz) {
137
- if (this.classes.has(clazz)) {
138
- return this.classes.get(clazz);
139
- }
140
- else {
141
- return null;
142
- }
143
- };
144
- TraitCompiler.prototype.recordsFor = function (sf) {
145
- var e_3, _a;
146
- if (!this.fileToClasses.has(sf)) {
147
- return null;
148
- }
149
- var records = [];
150
- try {
151
- for (var _b = tslib_1.__values(this.fileToClasses.get(sf)), _c = _b.next(); !_c.done; _c = _b.next()) {
152
- var clazz = _c.value;
153
- records.push(this.classes.get(clazz));
154
- }
155
- }
156
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
157
- finally {
158
- try {
159
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
160
- }
161
- finally { if (e_3) throw e_3.error; }
162
- }
163
- return records;
164
- };
165
- TraitCompiler.prototype.getAnalyzedRecords = function () {
166
- var e_4, _a, e_5, _b, e_6, _c;
167
- var result = new Map();
168
- try {
169
- for (var _d = tslib_1.__values(this.fileToClasses), _e = _d.next(); !_e.done; _e = _d.next()) {
170
- var _f = tslib_1.__read(_e.value, 2), sf = _f[0], classes = _f[1];
171
- var records = [];
172
- try {
173
- for (var classes_1 = (e_5 = void 0, tslib_1.__values(classes)), classes_1_1 = classes_1.next(); !classes_1_1.done; classes_1_1 = classes_1.next()) {
174
- var clazz = classes_1_1.value;
175
- records.push(this.classes.get(clazz));
176
- }
177
- }
178
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
179
- finally {
180
- try {
181
- if (classes_1_1 && !classes_1_1.done && (_b = classes_1.return)) _b.call(classes_1);
182
- }
183
- finally { if (e_5) throw e_5.error; }
184
- }
185
- result.set(sf, records);
186
- }
187
- }
188
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
189
- finally {
190
- try {
191
- if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
192
- }
193
- finally { if (e_4) throw e_4.error; }
194
- }
195
- try {
196
- for (var _g = tslib_1.__values(this.filesWithoutTraits), _h = _g.next(); !_h.done; _h = _g.next()) {
197
- var sf = _h.value;
198
- result.set(sf, []);
199
- }
200
- }
201
- catch (e_6_1) { e_6 = { error: e_6_1 }; }
202
- finally {
203
- try {
204
- if (_h && !_h.done && (_c = _g.return)) _c.call(_g);
205
- }
206
- finally { if (e_6) throw e_6.error; }
207
- }
208
- return result;
209
- };
210
- /**
211
- * Import a `ClassRecord` from a previous compilation.
212
- *
213
- * Traits from the `ClassRecord` have accurate metadata, but the `handler` is from the old program
214
- * and needs to be updated (matching is done by name). A new pending trait is created and then
215
- * transitioned to analyzed using the previous analysis. If the trait is in the errored state,
216
- * instead the errors are copied over.
217
- */
218
- TraitCompiler.prototype.adopt = function (priorRecord) {
219
- var e_7, _a;
220
- var record = {
221
- hasPrimaryHandler: priorRecord.hasPrimaryHandler,
222
- hasWeakHandlers: priorRecord.hasWeakHandlers,
223
- metaDiagnostics: priorRecord.metaDiagnostics,
224
- node: priorRecord.node,
225
- traits: [],
226
- };
227
- try {
228
- for (var _b = tslib_1.__values(priorRecord.traits), _c = _b.next(); !_c.done; _c = _b.next()) {
229
- var priorTrait = _c.value;
230
- var handler = this.handlersByName.get(priorTrait.handler.name);
231
- var trait = trait_1.Trait.pending(handler, priorTrait.detected);
232
- if (priorTrait.state === trait_1.TraitState.Analyzed || priorTrait.state === trait_1.TraitState.Resolved) {
233
- var symbol = this.makeSymbolForTrait(handler, record.node, priorTrait.analysis);
234
- trait = trait.toAnalyzed(priorTrait.analysis, priorTrait.analysisDiagnostics, symbol);
235
- if (trait.analysis !== null && trait.handler.register !== undefined) {
236
- trait.handler.register(record.node, trait.analysis);
237
- }
238
- }
239
- else if (priorTrait.state === trait_1.TraitState.Skipped) {
240
- trait = trait.toSkipped();
241
- }
242
- record.traits.push(trait);
243
- }
244
- }
245
- catch (e_7_1) { e_7 = { error: e_7_1 }; }
246
- finally {
247
- try {
248
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
249
- }
250
- finally { if (e_7) throw e_7.error; }
251
- }
252
- this.classes.set(record.node, record);
253
- var sf = record.node.getSourceFile();
254
- if (!this.fileToClasses.has(sf)) {
255
- this.fileToClasses.set(sf, new Set());
256
- }
257
- this.fileToClasses.get(sf).add(record.node);
258
- };
259
- TraitCompiler.prototype.scanClassForTraits = function (clazz) {
260
- if (!this.compileNonExportedClasses && !this.reflector.isStaticallyExported(clazz)) {
261
- return null;
262
- }
263
- var decorators = this.reflector.getDecoratorsOfDeclaration(clazz);
264
- return this.detectTraits(clazz, decorators);
265
- };
266
- TraitCompiler.prototype.detectTraits = function (clazz, decorators) {
267
- var e_8, _a;
268
- var record = this.recordFor(clazz);
269
- var foundTraits = [];
270
- try {
271
- for (var _b = tslib_1.__values(this.handlers), _c = _b.next(); !_c.done; _c = _b.next()) {
272
- var handler = _c.value;
273
- var result = handler.detect(clazz, decorators);
274
- if (result === undefined) {
275
- continue;
276
- }
277
- var isPrimaryHandler = handler.precedence === api_1.HandlerPrecedence.PRIMARY;
278
- var isWeakHandler = handler.precedence === api_1.HandlerPrecedence.WEAK;
279
- var trait = trait_1.Trait.pending(handler, result);
280
- foundTraits.push(trait);
281
- if (record === null) {
282
- // This is the first handler to match this class. This path is a fast path through which
283
- // most classes will flow.
284
- record = {
285
- node: clazz,
286
- traits: [trait],
287
- metaDiagnostics: null,
288
- hasPrimaryHandler: isPrimaryHandler,
289
- hasWeakHandlers: isWeakHandler,
290
- };
291
- this.classes.set(clazz, record);
292
- var sf = clazz.getSourceFile();
293
- if (!this.fileToClasses.has(sf)) {
294
- this.fileToClasses.set(sf, new Set());
295
- }
296
- this.fileToClasses.get(sf).add(clazz);
297
- }
298
- else {
299
- // This is at least the second handler to match this class. This is a slower path that some
300
- // classes will go through, which validates that the set of decorators applied to the class
301
- // is valid.
302
- // Validate according to rules as follows:
303
- //
304
- // * WEAK handlers are removed if a non-WEAK handler matches.
305
- // * Only one PRIMARY handler can match at a time. Any other PRIMARY handler matching a
306
- // class with an existing PRIMARY handler is an error.
307
- if (!isWeakHandler && record.hasWeakHandlers) {
308
- // The current handler is not a WEAK handler, but the class has other WEAK handlers.
309
- // Remove them.
310
- record.traits =
311
- record.traits.filter(function (field) { return field.handler.precedence !== api_1.HandlerPrecedence.WEAK; });
312
- record.hasWeakHandlers = false;
313
- }
314
- else if (isWeakHandler && !record.hasWeakHandlers) {
315
- // The current handler is a WEAK handler, but the class has non-WEAK handlers already.
316
- // Drop the current one.
317
- continue;
318
- }
319
- if (isPrimaryHandler && record.hasPrimaryHandler) {
320
- // The class already has a PRIMARY handler, and another one just matched.
321
- record.metaDiagnostics = [{
322
- category: ts.DiagnosticCategory.Error,
323
- code: Number('-99' + diagnostics_1.ErrorCode.DECORATOR_COLLISION),
324
- file: typescript_1.getSourceFile(clazz),
325
- start: clazz.getStart(undefined, false),
326
- length: clazz.getWidth(),
327
- messageText: 'Two incompatible decorators on class',
328
- }];
329
- record.traits = foundTraits = [];
330
- break;
331
- }
332
- // Otherwise, it's safe to accept the multiple decorators here. Update some of the metadata
333
- // regarding this class.
334
- record.traits.push(trait);
335
- record.hasPrimaryHandler = record.hasPrimaryHandler || isPrimaryHandler;
336
- }
337
- }
338
- }
339
- catch (e_8_1) { e_8 = { error: e_8_1 }; }
340
- finally {
341
- try {
342
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
343
- }
344
- finally { if (e_8) throw e_8.error; }
345
- }
346
- return foundTraits.length > 0 ? foundTraits : null;
347
- };
348
- TraitCompiler.prototype.makeSymbolForTrait = function (handler, decl, analysis) {
349
- if (analysis === null) {
350
- return null;
351
- }
352
- var symbol = handler.symbol(decl, analysis);
353
- if (symbol !== null && this.semanticDepGraphUpdater !== null) {
354
- var isPrimary = handler.precedence === api_1.HandlerPrecedence.PRIMARY;
355
- if (!isPrimary) {
356
- throw new Error("AssertionError: " + handler.name + " returned a symbol but is not a primary handler.");
357
- }
358
- this.semanticDepGraphUpdater.registerSymbol(symbol);
359
- }
360
- return symbol;
361
- };
362
- TraitCompiler.prototype.analyzeClass = function (clazz, preanalyzeQueue) {
363
- var e_9, _a;
364
- var _this = this;
365
- var traits = this.scanClassForTraits(clazz);
366
- if (traits === null) {
367
- // There are no Ivy traits on the class, so it can safely be skipped.
368
- return;
369
- }
370
- var _loop_1 = function (trait) {
371
- var analyze = function () { return _this.analyzeTrait(clazz, trait); };
372
- var preanalysis = null;
373
- if (preanalyzeQueue !== null && trait.handler.preanalyze !== undefined) {
374
- // Attempt to run preanalysis. This could fail with a `FatalDiagnosticError`; catch it if it
375
- // does.
376
- try {
377
- preanalysis = trait.handler.preanalyze(clazz, trait.detected.metadata) || null;
378
- }
379
- catch (err) {
380
- if (err instanceof diagnostics_1.FatalDiagnosticError) {
381
- trait.toAnalyzed(null, [err.toDiagnostic()], null);
382
- return { value: void 0 };
383
- }
384
- else {
385
- throw err;
386
- }
387
- }
388
- }
389
- if (preanalysis !== null) {
390
- preanalyzeQueue.push(preanalysis.then(analyze));
391
- }
392
- else {
393
- analyze();
394
- }
395
- };
396
- try {
397
- for (var traits_1 = tslib_1.__values(traits), traits_1_1 = traits_1.next(); !traits_1_1.done; traits_1_1 = traits_1.next()) {
398
- var trait = traits_1_1.value;
399
- var state_1 = _loop_1(trait);
400
- if (typeof state_1 === "object")
401
- return state_1.value;
402
- }
403
- }
404
- catch (e_9_1) { e_9 = { error: e_9_1 }; }
405
- finally {
406
- try {
407
- if (traits_1_1 && !traits_1_1.done && (_a = traits_1.return)) _a.call(traits_1);
408
- }
409
- finally { if (e_9) throw e_9.error; }
410
- }
411
- };
412
- TraitCompiler.prototype.analyzeTrait = function (clazz, trait, flags) {
413
- var _a, _b, _c;
414
- if (trait.state !== trait_1.TraitState.Pending) {
415
- throw new Error("Attempt to analyze trait of " + clazz.name.text + " in state " + trait_1.TraitState[trait.state] + " (expected DETECTED)");
416
- }
417
- this.perf.eventCount(perf_1.PerfEvent.TraitAnalyze);
418
- // Attempt analysis. This could fail with a `FatalDiagnosticError`; catch it if it does.
419
- var result;
420
- try {
421
- result = trait.handler.analyze(clazz, trait.detected.metadata, flags);
422
- }
423
- catch (err) {
424
- if (err instanceof diagnostics_1.FatalDiagnosticError) {
425
- trait.toAnalyzed(null, [err.toDiagnostic()], null);
426
- return;
427
- }
428
- else {
429
- throw err;
430
- }
431
- }
432
- var symbol = this.makeSymbolForTrait(trait.handler, clazz, (_a = result.analysis) !== null && _a !== void 0 ? _a : null);
433
- if (result.analysis !== undefined && trait.handler.register !== undefined) {
434
- trait.handler.register(clazz, result.analysis);
435
- }
436
- trait = trait.toAnalyzed((_b = result.analysis) !== null && _b !== void 0 ? _b : null, (_c = result.diagnostics) !== null && _c !== void 0 ? _c : null, symbol);
437
- };
438
- TraitCompiler.prototype.resolve = function () {
439
- var e_10, _a, e_11, _b, e_12, _c;
440
- var _d, _e;
441
- var classes = Array.from(this.classes.keys());
442
- try {
443
- for (var classes_2 = tslib_1.__values(classes), classes_2_1 = classes_2.next(); !classes_2_1.done; classes_2_1 = classes_2.next()) {
444
- var clazz = classes_2_1.value;
445
- var record = this.classes.get(clazz);
446
- try {
447
- for (var _f = (e_11 = void 0, tslib_1.__values(record.traits)), _g = _f.next(); !_g.done; _g = _f.next()) {
448
- var trait = _g.value;
449
- var handler = trait.handler;
450
- switch (trait.state) {
451
- case trait_1.TraitState.Skipped:
452
- continue;
453
- case trait_1.TraitState.Pending:
454
- throw new Error("Resolving a trait that hasn't been analyzed: " + clazz.name.text + " / " + Object.getPrototypeOf(trait.handler).constructor.name);
455
- case trait_1.TraitState.Resolved:
456
- throw new Error("Resolving an already resolved trait");
457
- }
458
- if (trait.analysis === null) {
459
- // No analysis results, cannot further process this trait.
460
- continue;
461
- }
462
- if (handler.resolve === undefined) {
463
- // No resolution of this trait needed - it's considered successful by default.
464
- trait = trait.toResolved(null, null);
465
- continue;
466
- }
467
- var result = void 0;
468
- try {
469
- result = handler.resolve(clazz, trait.analysis, trait.symbol);
470
- }
471
- catch (err) {
472
- if (err instanceof diagnostics_1.FatalDiagnosticError) {
473
- trait = trait.toResolved(null, [err.toDiagnostic()]);
474
- continue;
475
- }
476
- else {
477
- throw err;
478
- }
479
- }
480
- trait = trait.toResolved((_d = result.data) !== null && _d !== void 0 ? _d : null, (_e = result.diagnostics) !== null && _e !== void 0 ? _e : null);
481
- if (result.reexports !== undefined) {
482
- var fileName = clazz.getSourceFile().fileName;
483
- if (!this.reexportMap.has(fileName)) {
484
- this.reexportMap.set(fileName, new Map());
485
- }
486
- var fileReexports = this.reexportMap.get(fileName);
487
- try {
488
- for (var _h = (e_12 = void 0, tslib_1.__values(result.reexports)), _j = _h.next(); !_j.done; _j = _h.next()) {
489
- var reexport = _j.value;
490
- fileReexports.set(reexport.asAlias, [reexport.fromModule, reexport.symbolName]);
491
- }
492
- }
493
- catch (e_12_1) { e_12 = { error: e_12_1 }; }
494
- finally {
495
- try {
496
- if (_j && !_j.done && (_c = _h.return)) _c.call(_h);
497
- }
498
- finally { if (e_12) throw e_12.error; }
499
- }
500
- }
501
- }
502
- }
503
- catch (e_11_1) { e_11 = { error: e_11_1 }; }
504
- finally {
505
- try {
506
- if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
507
- }
508
- finally { if (e_11) throw e_11.error; }
509
- }
510
- }
511
- }
512
- catch (e_10_1) { e_10 = { error: e_10_1 }; }
513
- finally {
514
- try {
515
- if (classes_2_1 && !classes_2_1.done && (_a = classes_2.return)) _a.call(classes_2);
516
- }
517
- finally { if (e_10) throw e_10.error; }
518
- }
519
- };
520
- /**
521
- * Generate type-checking code into the `TypeCheckContext` for any components within the given
522
- * `ts.SourceFile`.
523
- */
524
- TraitCompiler.prototype.typeCheck = function (sf, ctx) {
525
- var e_13, _a, e_14, _b;
526
- if (!this.fileToClasses.has(sf)) {
527
- return;
528
- }
529
- try {
530
- for (var _c = tslib_1.__values(this.fileToClasses.get(sf)), _d = _c.next(); !_d.done; _d = _c.next()) {
531
- var clazz = _d.value;
532
- var record = this.classes.get(clazz);
533
- try {
534
- for (var _e = (e_14 = void 0, tslib_1.__values(record.traits)), _f = _e.next(); !_f.done; _f = _e.next()) {
535
- var trait = _f.value;
536
- if (trait.state !== trait_1.TraitState.Resolved) {
537
- continue;
538
- }
539
- else if (trait.handler.typeCheck === undefined) {
540
- continue;
541
- }
542
- if (trait.resolution !== null) {
543
- trait.handler.typeCheck(ctx, clazz, trait.analysis, trait.resolution);
544
- }
545
- }
546
- }
547
- catch (e_14_1) { e_14 = { error: e_14_1 }; }
548
- finally {
549
- try {
550
- if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
551
- }
552
- finally { if (e_14) throw e_14.error; }
553
- }
554
- }
555
- }
556
- catch (e_13_1) { e_13 = { error: e_13_1 }; }
557
- finally {
558
- try {
559
- if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
560
- }
561
- finally { if (e_13) throw e_13.error; }
562
- }
563
- };
564
- TraitCompiler.prototype.extendedTemplateCheck = function (sf, extendedTemplateChecker) {
565
- var e_15, _a, e_16, _b;
566
- var classes = this.fileToClasses.get(sf);
567
- if (classes === undefined) {
568
- return [];
569
- }
570
- var diagnostics = [];
571
- try {
572
- for (var classes_3 = tslib_1.__values(classes), classes_3_1 = classes_3.next(); !classes_3_1.done; classes_3_1 = classes_3.next()) {
573
- var clazz = classes_3_1.value;
574
- if (!reflection_1.isNamedClassDeclaration(clazz)) {
575
- continue;
576
- }
577
- var record = this.classes.get(clazz);
578
- try {
579
- for (var _c = (e_16 = void 0, tslib_1.__values(record.traits)), _d = _c.next(); !_d.done; _d = _c.next()) {
580
- var trait = _d.value;
581
- if (trait.handler.extendedTemplateCheck === undefined) {
582
- continue;
583
- }
584
- diagnostics.push.apply(diagnostics, tslib_1.__spreadArray([], tslib_1.__read(trait.handler.extendedTemplateCheck(clazz, extendedTemplateChecker))));
585
- }
586
- }
587
- catch (e_16_1) { e_16 = { error: e_16_1 }; }
588
- finally {
589
- try {
590
- if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
591
- }
592
- finally { if (e_16) throw e_16.error; }
593
- }
594
- }
595
- }
596
- catch (e_15_1) { e_15 = { error: e_15_1 }; }
597
- finally {
598
- try {
599
- if (classes_3_1 && !classes_3_1.done && (_a = classes_3.return)) _a.call(classes_3);
600
- }
601
- finally { if (e_15) throw e_15.error; }
602
- }
603
- return diagnostics;
604
- };
605
- TraitCompiler.prototype.index = function (ctx) {
606
- var e_17, _a, e_18, _b;
607
- try {
608
- for (var _c = tslib_1.__values(this.classes.keys()), _d = _c.next(); !_d.done; _d = _c.next()) {
609
- var clazz = _d.value;
610
- var record = this.classes.get(clazz);
611
- try {
612
- for (var _e = (e_18 = void 0, tslib_1.__values(record.traits)), _f = _e.next(); !_f.done; _f = _e.next()) {
613
- var trait = _f.value;
614
- if (trait.state !== trait_1.TraitState.Resolved) {
615
- // Skip traits that haven't been resolved successfully.
616
- continue;
617
- }
618
- else if (trait.handler.index === undefined) {
619
- // Skip traits that don't affect indexing.
620
- continue;
621
- }
622
- if (trait.resolution !== null) {
623
- trait.handler.index(ctx, clazz, trait.analysis, trait.resolution);
624
- }
625
- }
626
- }
627
- catch (e_18_1) { e_18 = { error: e_18_1 }; }
628
- finally {
629
- try {
630
- if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
631
- }
632
- finally { if (e_18) throw e_18.error; }
633
- }
634
- }
635
- }
636
- catch (e_17_1) { e_17 = { error: e_17_1 }; }
637
- finally {
638
- try {
639
- if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
640
- }
641
- finally { if (e_17) throw e_17.error; }
642
- }
643
- };
644
- TraitCompiler.prototype.xi18n = function (bundle) {
645
- var e_19, _a, e_20, _b;
646
- try {
647
- for (var _c = tslib_1.__values(this.classes.keys()), _d = _c.next(); !_d.done; _d = _c.next()) {
648
- var clazz = _d.value;
649
- var record = this.classes.get(clazz);
650
- try {
651
- for (var _e = (e_20 = void 0, tslib_1.__values(record.traits)), _f = _e.next(); !_f.done; _f = _e.next()) {
652
- var trait = _f.value;
653
- if (trait.state !== trait_1.TraitState.Analyzed && trait.state !== trait_1.TraitState.Resolved) {
654
- // Skip traits that haven't been analyzed successfully.
655
- continue;
656
- }
657
- else if (trait.handler.xi18n === undefined) {
658
- // Skip traits that don't support xi18n.
659
- continue;
660
- }
661
- if (trait.analysis !== null) {
662
- trait.handler.xi18n(bundle, clazz, trait.analysis);
663
- }
664
- }
665
- }
666
- catch (e_20_1) { e_20 = { error: e_20_1 }; }
667
- finally {
668
- try {
669
- if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
670
- }
671
- finally { if (e_20) throw e_20.error; }
672
- }
673
- }
674
- }
675
- catch (e_19_1) { e_19 = { error: e_19_1 }; }
676
- finally {
677
- try {
678
- if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
679
- }
680
- finally { if (e_19) throw e_19.error; }
681
- }
682
- };
683
- TraitCompiler.prototype.updateResources = function (clazz) {
684
- var e_21, _a;
685
- if (!this.reflector.isClass(clazz) || !this.classes.has(clazz)) {
686
- return;
687
- }
688
- var record = this.classes.get(clazz);
689
- try {
690
- for (var _b = tslib_1.__values(record.traits), _c = _b.next(); !_c.done; _c = _b.next()) {
691
- var trait = _c.value;
692
- if (trait.state !== trait_1.TraitState.Resolved || trait.handler.updateResources === undefined) {
693
- continue;
694
- }
695
- trait.handler.updateResources(clazz, trait.analysis, trait.resolution);
696
- }
697
- }
698
- catch (e_21_1) { e_21 = { error: e_21_1 }; }
699
- finally {
700
- try {
701
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
702
- }
703
- finally { if (e_21) throw e_21.error; }
704
- }
705
- };
706
- TraitCompiler.prototype.compile = function (clazz, constantPool) {
707
- var e_22, _a;
708
- var original = ts.getOriginalNode(clazz);
709
- if (!this.reflector.isClass(clazz) || !this.reflector.isClass(original) ||
710
- !this.classes.has(original)) {
711
- return null;
712
- }
713
- var record = this.classes.get(original);
714
- var res = [];
715
- var _loop_2 = function (trait) {
716
- var e_23, _d;
717
- if (trait.state !== trait_1.TraitState.Resolved || trait.analysisDiagnostics !== null ||
718
- trait.resolveDiagnostics !== null) {
719
- return "continue";
720
- }
721
- // `trait.resolution` is non-null asserted here because TypeScript does not recognize that
722
- // `Readonly<unknown>` is nullable (as `unknown` itself is nullable) due to the way that
723
- // `Readonly` works.
724
- var compileRes = void 0;
725
- if (this_1.compilationMode === api_1.CompilationMode.PARTIAL &&
726
- trait.handler.compilePartial !== undefined) {
727
- compileRes = trait.handler.compilePartial(clazz, trait.analysis, trait.resolution);
728
- }
729
- else {
730
- compileRes =
731
- trait.handler.compileFull(clazz, trait.analysis, trait.resolution, constantPool);
732
- }
733
- var compileMatchRes = compileRes;
734
- if (Array.isArray(compileMatchRes)) {
735
- var _loop_3 = function (result) {
736
- if (!res.some(function (r) { return r.name === result.name; })) {
737
- res.push(result);
738
- }
739
- };
740
- try {
741
- for (var compileMatchRes_1 = (e_23 = void 0, tslib_1.__values(compileMatchRes)), compileMatchRes_1_1 = compileMatchRes_1.next(); !compileMatchRes_1_1.done; compileMatchRes_1_1 = compileMatchRes_1.next()) {
742
- var result = compileMatchRes_1_1.value;
743
- _loop_3(result);
744
- }
745
- }
746
- catch (e_23_1) { e_23 = { error: e_23_1 }; }
747
- finally {
748
- try {
749
- if (compileMatchRes_1_1 && !compileMatchRes_1_1.done && (_d = compileMatchRes_1.return)) _d.call(compileMatchRes_1);
750
- }
751
- finally { if (e_23) throw e_23.error; }
752
- }
753
- }
754
- else if (!res.some(function (result) { return result.name === compileMatchRes.name; })) {
755
- res.push(compileMatchRes);
756
- }
757
- };
758
- var this_1 = this;
759
- try {
760
- for (var _b = tslib_1.__values(record.traits), _c = _b.next(); !_c.done; _c = _b.next()) {
761
- var trait = _c.value;
762
- _loop_2(trait);
763
- }
764
- }
765
- catch (e_22_1) { e_22 = { error: e_22_1 }; }
766
- finally {
767
- try {
768
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
769
- }
770
- finally { if (e_22) throw e_22.error; }
771
- }
772
- // Look up the .d.ts transformer for the input file and record that at least one field was
773
- // generated, which will allow the .d.ts to be transformed later.
774
- this.dtsTransforms.getIvyDeclarationTransform(original.getSourceFile())
775
- .addFields(original, res);
776
- // Return the instruction to the transformer so the fields will be added.
777
- return res.length > 0 ? res : null;
778
- };
779
- TraitCompiler.prototype.decoratorsFor = function (node) {
780
- var e_24, _a;
781
- var original = ts.getOriginalNode(node);
782
- if (!this.reflector.isClass(original) || !this.classes.has(original)) {
783
- return [];
784
- }
785
- var record = this.classes.get(original);
786
- var decorators = [];
787
- try {
788
- for (var _b = tslib_1.__values(record.traits), _c = _b.next(); !_c.done; _c = _b.next()) {
789
- var trait = _c.value;
790
- if (trait.state !== trait_1.TraitState.Resolved) {
791
- continue;
792
- }
793
- if (trait.detected.trigger !== null && ts.isDecorator(trait.detected.trigger)) {
794
- decorators.push(trait.detected.trigger);
795
- }
796
- }
797
- }
798
- catch (e_24_1) { e_24 = { error: e_24_1 }; }
799
- finally {
800
- try {
801
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
802
- }
803
- finally { if (e_24) throw e_24.error; }
804
- }
805
- return decorators;
806
- };
807
- Object.defineProperty(TraitCompiler.prototype, "diagnostics", {
808
- get: function () {
809
- var e_25, _a, e_26, _b;
810
- var diagnostics = [];
811
- try {
812
- for (var _c = tslib_1.__values(this.classes.keys()), _d = _c.next(); !_d.done; _d = _c.next()) {
813
- var clazz = _d.value;
814
- var record = this.classes.get(clazz);
815
- if (record.metaDiagnostics !== null) {
816
- diagnostics.push.apply(diagnostics, tslib_1.__spreadArray([], tslib_1.__read(record.metaDiagnostics)));
817
- }
818
- try {
819
- for (var _e = (e_26 = void 0, tslib_1.__values(record.traits)), _f = _e.next(); !_f.done; _f = _e.next()) {
820
- var trait = _f.value;
821
- if ((trait.state === trait_1.TraitState.Analyzed || trait.state === trait_1.TraitState.Resolved) &&
822
- trait.analysisDiagnostics !== null) {
823
- diagnostics.push.apply(diagnostics, tslib_1.__spreadArray([], tslib_1.__read(trait.analysisDiagnostics)));
824
- }
825
- if (trait.state === trait_1.TraitState.Resolved && trait.resolveDiagnostics !== null) {
826
- diagnostics.push.apply(diagnostics, tslib_1.__spreadArray([], tslib_1.__read(trait.resolveDiagnostics)));
827
- }
828
- }
829
- }
830
- catch (e_26_1) { e_26 = { error: e_26_1 }; }
831
- finally {
832
- try {
833
- if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
834
- }
835
- finally { if (e_26) throw e_26.error; }
836
- }
837
- }
838
- }
839
- catch (e_25_1) { e_25 = { error: e_25_1 }; }
840
- finally {
841
- try {
842
- if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
843
- }
844
- finally { if (e_25) throw e_25.error; }
845
- }
846
- return diagnostics;
847
- },
848
- enumerable: false,
849
- configurable: true
850
- });
851
- Object.defineProperty(TraitCompiler.prototype, "exportStatements", {
852
- get: function () {
853
- return this.reexportMap;
854
- },
855
- enumerable: false,
856
- configurable: true
857
- });
858
- return TraitCompiler;
859
- }());
860
- exports.TraitCompiler = TraitCompiler;
861
- });
862
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3RyYW5zZm9ybS9zcmMvY29tcGlsYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7OztJQUdILCtCQUFpQztJQUVqQywyRUFBa0U7SUFJbEUsNkRBQW1EO0lBQ25ELHlFQUF1SDtJQUd2SCxrRkFBb0U7SUFHcEUseUVBQXVJO0lBRXZJLDZFQUF3RDtJQXFDeEQ7Ozs7Ozs7Ozs7T0FVRztJQUNIO1FBd0JFLHVCQUNZLFFBQTRFLEVBQzVFLFNBQXlCLEVBQVUsSUFBa0IsRUFDckQsZ0JBQXdELEVBQ3hELHlCQUFrQyxFQUFVLGVBQWdDLEVBQzVFLGFBQW1DLEVBQ25DLHVCQUFxRDs7WUFMckQsYUFBUSxHQUFSLFFBQVEsQ0FBb0U7WUFDNUUsY0FBUyxHQUFULFNBQVMsQ0FBZ0I7WUFBVSxTQUFJLEdBQUosSUFBSSxDQUFjO1lBQ3JELHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBd0M7WUFDeEQsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUFTO1lBQVUsb0JBQWUsR0FBZixlQUFlLENBQWlCO1lBQzVFLGtCQUFhLEdBQWIsYUFBYSxDQUFzQjtZQUNuQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQThCO1lBN0JqRTs7O2VBR0c7WUFDSyxZQUFPLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7WUFFM0Q7OztlQUdHO1lBQ08sa0JBQWEsR0FBRyxJQUFJLEdBQUcsRUFBd0MsQ0FBQztZQUUxRTs7O2VBR0c7WUFDTyx1QkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBaUIsQ0FBQztZQUVoRCxnQkFBVyxHQUFHLElBQUksR0FBRyxFQUF5QyxDQUFDO1lBRS9ELG1CQUFjLEdBQ2xCLElBQUksR0FBRyxFQUE0RSxDQUFDOztnQkFTdEYsS0FBc0IsSUFB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QU0sQ0FBQyxlQUFlLEtBQUssSUFBSSxFQUFFOzRCQUNuQyxXQUFXLENBQUMsSUFBSSxPQUFoQixXQUFXLDJDQUFTLE1BQU0sQ0FBQyxlQUFlLElBQUU7eUJBQzdDOzs0QkFDRCxLQUFvQixJQUFBLHFCQUFBLGlCQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUEsQ0FBQSxnQkFBQSw0QkFBRTtnQ0FBOUIsSUFBTSxLQUFLLFdBQUE7Z0NBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssa0JBQVUsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxrQkFBVSxDQUFDLFFBQVEsQ0FBQztvQ0FDNUUsS0FBSyxDQUFDLG1CQUFtQixLQUFLLElBQUksRUFBRTtvQ0FDdEMsV0FBVyxDQUFDLElBQUksT0FBaEIsV0FBVywyQ0FBUyxLQUFLLENBQUMsbUJBQW1CLElBQUU7aUNBQ2hEO2dDQUNELElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxrQkFBVSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsa0JBQWtCLEtBQUssSUFBSSxFQUFFO29DQUM1RSxXQUFXLENBQUMsSUFBSSxPQUFoQixXQUFXLDJDQUFTLEtBQUssQ0FBQyxrQkFBa0IsSUFBRTtpQ0FDL0M7NkJBQ0Y7Ozs7Ozs7OztxQkFDRjs7Ozs7Ozs7O2dCQUNELE9BQU8sV0FBVyxDQUFDO1lBQ3JCLENBQUM7OztXQUFBO1FBRUQsc0JBQUksMkNBQWdCO2lCQUFwQjtnQkFDRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDMUIsQ0FBQzs7O1dBQUE7UUFDSCxvQkFBQztJQUFELENBQUMsQUFqbEJELElBaWxCQztJQWpsQlksc0NBQWEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtDb25zdGFudFBvb2x9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge0Vycm9yQ29kZSwgRmF0YWxEaWFnbm9zdGljRXJyb3J9IGZyb20gJy4uLy4uL2RpYWdub3N0aWNzJztcbmltcG9ydCB7SW5jcmVtZW50YWxCdWlsZH0gZnJvbSAnLi4vLi4vaW5jcmVtZW50YWwvYXBpJztcbmltcG9ydCB7U2VtYW50aWNEZXBHcmFwaFVwZGF0ZXIsIFNlbWFudGljU3ltYm9sfSBmcm9tICcuLi8uLi9pbmNyZW1lbnRhbC9zZW1hbnRpY19ncmFwaCc7XG5pbXBvcnQge0luZGV4aW5nQ29udGV4dH0gZnJvbSAnLi4vLi4vaW5kZXhlcic7XG5pbXBvcnQge1BlcmZFdmVudCwgUGVyZlJlY29yZGVyfSBmcm9tICcuLi8uLi9wZXJmJztcbmltcG9ydCB7Q2xhc3NEZWNsYXJhdGlvbiwgRGVjbGFyYXRpb25Ob2RlLCBEZWNvcmF0b3IsIGlzTmFtZWRDbGFzc0RlY2xhcmF0aW9uLCBSZWZsZWN0aW9uSG9zdH0gZnJvbSAnLi4vLi4vcmVmbGVjdGlvbic7XG5pbXBvcnQge1Byb2dyYW1UeXBlQ2hlY2tBZGFwdGVyLCBUeXBlQ2hlY2tDb250ZXh0fSBmcm9tICcuLi8uLi90eXBlY2hlY2svYXBpJztcbmltcG9ydCB7RXh0ZW5kZWRUZW1wbGF0ZUNoZWNrZXJ9IGZyb20gJy4uLy4uL3R5cGVjaGVjay9leHRlbmRlZC9hcGknO1xuaW1wb3J0IHtnZXRTb3VyY2VGaWxlLCBpc0V4cG9ydGVkfSBmcm9tICcuLi8uLi91dGlsL3NyYy90eXBlc2NyaXB0JztcbmltcG9ydCB7WGkxOG5Db250ZXh0fSBmcm9tICcuLi8uLi94aTE4bic7XG5cbmltcG9ydCB7QW5hbHlzaXNPdXRwdXQsIENvbXBpbGF0aW9uTW9kZSwgQ29tcGlsZVJlc3VsdCwgRGVjb3JhdG9ySGFuZGxlciwgSGFuZGxlckZsYWdzLCBIYW5kbGVyUHJlY2VkZW5jZSwgUmVzb2x2ZVJlc3VsdH0gZnJvbSAnLi9hcGknO1xuaW1wb3J0IHtEdHNUcmFuc2Zvcm1SZWdpc3RyeX0gZnJvbSAnLi9kZWNsYXJhdGlvbic7XG5pbXBvcnQge1BlbmRpbmdUcmFpdCwgVHJhaXQsIFRyYWl0U3RhdGV9IGZyb20gJy4vdHJhaXQnO1xuXG5cbi8qKlxuICogUmVjb3JkcyBpbmZvcm1hdGlvbiBhYm91dCBhIHNwZWNpZmljIGNsYXNzIHRoYXQgaGFzIG1hdGNoZWQgdHJhaXRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsYXNzUmVjb3JkIHtcbiAgLyoqXG4gICAqIFRoZSBgQ2xhc3NEZWNsYXJhdGlvbmAgb2YgdGhlIGNsYXNzIHdoaWNoIGhhcyBBbmd1bGFyIHRyYWl0cyBhcHBsaWVkLlxuICAgKi9cbiAgbm9kZTogQ2xhc3NEZWNsYXJhdGlvbjtcblxuICAvKipcbiAgICogQWxsIHRyYWl0cyB3aGljaCBtYXRjaGVkIG9uIHRoZSBjbGFzcy5cbiAgICovXG4gIHRyYWl0czogVHJhaXQ8dW5rbm93biwgdW5rbm93biwgU2VtYW50aWNTeW1ib2x8bnVsbCwgdW5rbm93bj5bXTtcblxuICAvKipcbiAgICogTWV0YS1kaWFnbm9zdGljcyBhYm91dCB0aGUgY2xhc3MsIHdoaWNoIGFyZSB1c3VhbGx5IHJlbGF0ZWQgdG8gd2hldGhlciBjZXJ0YWluIGNvbWJpbmF0aW9ucyBvZlxuICAgKiBBbmd1bGFyIGRlY29yYXRvcnMgYXJlIG5vdCBwZXJtaXR0ZWQuXG4gICAqL1xuICBtZXRhRGlhZ25vc3RpY3M6IHRzLkRpYWdub3N0aWNbXXxudWxsO1xuXG4gIC8vIFN1YnNlcXVlbnQgZmllbGRzIGFyZSBcImludGVybmFsXCIgYW5kIHVzZWQgZHVyaW5nIHRoZSBtYXRjaGluZyBvZiBgRGVjb3JhdG9ySGFuZGxlcmBzLiBUaGlzIGlzXG4gIC8vIG11dGFibGUgc3RhdGUgZHVyaW5nIHRoZSBgZGV0ZWN0YC9gYW5hbHl6ZWAgcGhhc2VzIG9mIGNvbXBpbGF0aW9uLlxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGB0cmFpdHNgIGNvbnRhaW5zIHRyYWl0cyBtYXRjaGVkIGZyb20gYERlY29yYXRvckhhbmRsZXJgcyBtYXJrZWQgYXMgYFdFQUtgLlxuICAgKi9cbiAgaGFzV2Vha0hhbmRsZXJzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGB0cmFpdHNgIGNvbnRhaW5zIGEgdHJhaXQgZnJvbSBhIGBEZWNvcmF0b3JIYW5kbGVyYCBtYXRjaGVkIGFzIGBQUklNQVJZYC5cbiAgICovXG4gIGhhc1ByaW1hcnlIYW5kbGVyOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBoZWFydCBvZiBBbmd1bGFyIGNvbXBpbGF0aW9uLlxuICpcbiAqIFRoZSBgVHJhaXRDb21waWxlcmAgaXMgcmVzcG9uc2libGUgZm9yIHByb2Nlc3NpbmcgYWxsIGNsYXNzZXMgaW4gdGhlIHByb2dyYW0uIEFueSB0aW1lIGFcbiAqIGBEZWNvcmF0b3JIYW5kbGVyYCBtYXRjaGVzIGEgY2xhc3MsIGEgXCJ0cmFpdFwiIGlzIGNyZWF0ZWQgdG8gcmVwcmVzZW50IHRoYXQgQW5ndWxhciBhc3BlY3Qgb2YgdGhlXG4gKiBjbGFzcyAoc3VjaCBhcyB0aGUgY2xhc3MgaGF2aW5nIGEgY29tcG9uZW50IGRlZmluaXRpb24pLlxuICpcbiAqIFRoZSBgVHJhaXRDb21waWxlcmAgdHJhbnNpdGlvbnMgZWFjaCB0cmFpdCB0aHJvdWdoIHRoZSB2YXJpb3VzIHBoYXNlcyBvZiBjb21waWxhdGlvbiwgY3VsbWluYXRpbmdcbiAqIGluIHRoZSBwcm9kdWN0aW9uIG9mIGBDb21waWxlUmVzdWx0YHMgaW5zdHJ1Y3RpbmcgdGhlIGNvbXBpbGVyIHRvIGFwcGx5IHZhcmlvdXMgbXV0YXRpb25zIHRvIHRoZVxuICogY2xhc3MgKGxpa2UgYWRkaW5nIGZpZWxkcyBvciB0eXBlIGRlY2xhcmF0aW9ucykuXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmFpdENvbXBpbGVyIGltcGxlbWVudHMgUHJvZ3JhbVR5cGVDaGVja0FkYXB0ZXIge1xuICAvKipcbiAgICogTWFwcyBjbGFzcyBkZWNsYXJhdGlvbnMgdG8gdGhlaXIgYENsYXNzUmVjb3JkYCwgd2hpY2ggdHJhY2tzIHRoZSBJdnkgdHJhaXRzIGJlaW5nIGFwcGxpZWQgdG9cbiAgICogdGhvc2UgY2xhc3Nlcy5cbiAgICovXG4gIHByaXZhdGUgY2xhc3NlcyA9IG5ldyBNYXA8Q2xhc3NEZWNsYXJhdGlvbiwgQ2xhc3NSZWNvcmQ+KCk7XG5cbiAgLyoqXG4gICAqIE1hcHMgc291cmNlIGZpbGVzIHRvIGFueSBjbGFzcyBkZWNsYXJhdGlvbihzKSB3aXRoaW4gdGhlbSB3aGljaCBoYXZlIGJlZW4gZGlzY292ZXJlZCB0byBjb250YWluXG4gICAqIEl2eSB0cmFpdHMuXG4gICAqL1xuICBwcm90ZWN0ZWQgZmlsZVRvQ2xhc3NlcyA9IG5ldyBNYXA8dHMuU291cmNlRmlsZSwgU2V0PENsYXNzRGVjbGFyYXRpb24+PigpO1xuXG4gIC8qKlxuICAgKiBUcmFja3Mgd2hpY2ggc291cmNlIGZpbGVzIGhhdmUgYmVlbiBhbmFseXplZCBidXQgZGlkIG5vdCBjb250YWluIGFueSB0cmFpdHMuIFRoaXMgc2V0IGFsbG93c1xuICAgKiB0aGUgY29tcGlsZXIgdG8gc2tpcCBhbmFseXppbmcgdGhlc2UgZmlsZXMgaW4gYW4gaW5jcmVtZW50YWwgcmVidWlsZC5cbiAgICovXG4gIHByb3RlY3RlZCBmaWxlc1dpdGhvdXRUcmFpdHMgPSBuZXcgU2V0PHRzLlNvdXJjZUZpbGU+KCk7XG5cbiAgcHJpdmF0ZSByZWV4cG9ydE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBbc3RyaW5nLCBzdHJpbmddPj4oKTtcblxuICBwcml2YXRlIGhhbmRsZXJzQnlOYW1lID1cbiAgICAgIG5ldyBNYXA8c3RyaW5nLCBEZWNvcmF0b3JIYW5kbGVyPHVua25vd24sIHVua25vd24sIFNlbWFudGljU3ltYm9sfG51bGwsIHVua25vd24+PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSBoYW5kbGVyczogRGVjb3JhdG9ySGFuZGxlcjx1bmtub3duLCB1bmtub3duLCBTZW1hbnRpY1N5bWJvbHxudWxsLCB1bmtub3duPltdLFxuICAgICAgcHJpdmF0ZSByZWZsZWN0b3I6IFJlZmxlY3Rpb25Ib3N0LCBwcml2YXRlIHBlcmY6IFBlcmZSZWNvcmRlcixcbiAgICAgIHByaXZhdGUgaW5jcmVtZW50YWxCdWlsZDogSW5jcmVtZW50YWxCdWlsZDxDbGFzc1JlY29yZCwgdW5rbm93bj4sXG4gICAgICBwcml2YXRlIGNvbXBpbGVOb25FeHBvcnRlZENsYXNzZXM6IGJvb2xlYW4sIHByaXZhdGUgY29tcGlsYXRpb25Nb2RlOiBDb21waWxhdGlvbk1vZGUsXG4gICAgICBwcml2YXRlIGR0c1RyYW5zZm9ybXM6IER0c1RyYW5zZm9ybVJlZ2lzdHJ5LFxuICAgICAgcHJpdmF0ZSBzZW1hbnRpY0RlcEdyYXBoVXBkYXRlcjogU2VtYW50aWNEZXBHcmFwaFVwZGF0ZXJ8bnVsbCkge1xuICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiBoYW5kbGVycykge1xuICAgICAgdGhpcy5oYW5kbGVyc0J5TmFtZS5zZXQoaGFuZGxlci5uYW1lLCBoYW5kbGVyKTtcbiAgICB9XG4gIH1cblxuICBhbmFseXplU3luYyhzZjogdHMuU291cmNlRmlsZSk6IHZvaWQge1xuICAgIHRoaXMuYW5hbHl6ZShzZiwgZmFsc2UpO1xuICB9XG5cbiAgYW5hbHl6ZUFzeW5jKHNmOiB0cy5Tb3VyY2VGaWxlKTogUHJvbWlzZTx2b2lkPnx1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmFuYWx5emUoc2YsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhbmFseXplKHNmOiB0cy5Tb3VyY2VGaWxlLCBwcmVhbmFseXplOiBmYWxzZSk6IHZvaWQ7XG4gIHByaXZhdGUgYW5hbHl6ZShzZjogdHMuU291cmNlRmlsZSwgcHJlYW5hbHl6ZTogdHJ1ZSk6IFByb21pc2U8dm9pZD58dW5kZWZpbmVkO1xuICBwcml2YXRlIGFuYWx5emUoc2Y6IHRzLlNvdXJjZUZpbGUsIHByZWFuYWx5emU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+fHVuZGVmaW5lZCB7XG4gICAgLy8gV2Ugc2hvdWxkbid0IGFuYWx5emUgZGVjbGFyYXRpb24gZmlsZXMuXG4gICAgaWYgKHNmLmlzRGVjbGFyYXRpb25GaWxlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIGFuYWx5emUoKSByZWFsbHkgd2FudHMgdG8gcmV0dXJuIGBQcm9taXNlPHZvaWQ+fHZvaWRgLCBidXQgVHlwZVNjcmlwdCBjYW5ub3QgbmFycm93IGEgcmV0dXJuXG4gICAgLy8gdHlwZSBvZiAndm9pZCcsIHNvIGB1bmRlZmluZWRgIGlzIHVzZWQgaW5zdGVhZC5cbiAgICBjb25zdCBwcm9taXNlczogUHJvbWlzZTx2b2lkPltdID0gW107XG5cbiAgICBjb25zdCBwcmlvcldvcmsgPSB0aGlzLmluY3JlbWVudGFsQnVpbGQucHJpb3JBbmFseXNpc0ZvcihzZik7XG4gICAgaWYgKHByaW9yV29yayAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5wZXJmLmV2ZW50Q291bnQoUGVyZkV2ZW50LlNvdXJjZUZpbGVSZXVzZUFuYWx5c2lzKTtcblxuICAgICAgaWYgKHByaW9yV29yay5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAoY29uc3QgcHJpb3JSZWNvcmQgb2YgcHJpb3JXb3JrKSB7XG4gICAgICAgICAgdGhpcy5hZG9wdChwcmlvclJlY29yZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBlcmYuZXZlbnRDb3VudChQZXJmRXZlbnQuVHJhaXRSZXVzZUFuYWx5c2lzLCBwcmlvcldvcmsubGVuZ3RoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmlsZXNXaXRob3V0VHJhaXRzLmFkZChzZik7XG4gICAgICB9XG5cbiAgICAgIC8vIFNraXAgdGhlIHJlc3Qgb2YgYW5hbHlzaXMsIGFzIHRoaXMgZmlsZSdzIHByaW9yIHRyYWl0cyBhcmUgYmVpbmcgcmV1c2VkLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZpc2l0ID0gKG5vZGU6IHRzLk5vZGUpOiB2b2lkID0+IHtcbiAgICAgIGlmICh0aGlzLnJlZmxlY3Rvci5pc0NsYXNzKG5vZGUpKSB7XG4gICAgICAgIHRoaXMuYW5hbHl6ZUNsYXNzKG5vZGUsIHByZWFuYWx5emUgPyBwcm9taXNlcyA6IG51bGwpO1xuICAgICAgfVxuICAgICAgdHMuZm9yRWFjaENoaWxkKG5vZGUsIHZpc2l0KTtcbiAgICB9O1xuXG4gICAgdmlzaXQoc2YpO1xuXG4gICAgaWYgKHByZWFuYWx5emUgJiYgcHJvbWlzZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHVuZGVmaW5lZCBhcyB2b2lkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICByZWNvcmRGb3IoY2xheno6IENsYXNzRGVjbGFyYXRpb24pOiBDbGFzc1JlY29yZHxudWxsIHtcbiAgICBpZiAodGhpcy5jbGFzc2VzLmhhcyhjbGF6eikpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsYXNzZXMuZ2V0KGNsYXp6KSE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJlY29yZHNGb3Ioc2Y6IHRzLlNvdXJjZUZpbGUpOiBDbGFzc1JlY29yZFtdfG51bGwge1xuICAgIGlmICghdGhpcy5maWxlVG9DbGFzc2VzLmhhcyhzZikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCByZWNvcmRzOiBDbGFzc1JlY29yZFtdID0gW107XG4gICAgZm9yIChjb25zdCBjbGF6eiBvZiB0aGlzLmZpbGVUb0NsYXNzZXMuZ2V0KHNmKSEpIHtcbiAgICAgIHJlY29yZHMucHVzaCh0aGlzLmNsYXNzZXMuZ2V0KGNsYXp6KSEpO1xuICAgIH1cbiAgICByZXR1cm4gcmVjb3JkcztcbiAgfVxuXG4gIGdldEFuYWx5emVkUmVjb3JkcygpOiBNYXA8dHMuU291cmNlRmlsZSwgQ2xhc3NSZWNvcmRbXT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXA8dHMuU291cmNlRmlsZSwgQ2xhc3NSZWNvcmRbXT4oKTtcbiAgICBmb3IgKGNvbnN0IFtzZiwgY2xhc3Nlc10gb2YgdGhpcy5maWxlVG9DbGFzc2VzKSB7XG4gICAgICBjb25zdCByZWNvcmRzOiBDbGFzc1JlY29yZFtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IGNsYXp6IG9mIGNsYXNzZXMpIHtcbiAgICAgICAgcmVjb3Jkcy5wdXNoKHRoaXMuY2xhc3Nlcy5nZXQoY2xhenopISk7XG4gICAgICB9XG4gICAgICByZXN1bHQuc2V0KHNmLCByZWNvcmRzKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBzZiBvZiB0aGlzLmZpbGVzV2l0aG91dFRyYWl0cykge1xuICAgICAgcmVzdWx0LnNldChzZiwgW10pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhIGBDbGFzc1JlY29yZGAgZnJvbSBhIHByZXZpb3VzIGNvbXBpbGF0aW9uLlxuICAgKlxuICAgKiBUcmFpdHMgZnJvbSB0aGUgYENsYXNzUmVjb3JkYCBoYXZlIGFjY3VyYXRlIG1ldGFkYXRhLCBidXQgdGhlIGBoYW5kbGVyYCBpcyBmcm9tIHRoZSBvbGQgcHJvZ3JhbVxuICAgKiBhbmQgbmVlZHMgdG8gYmUgdXBkYXRlZCAobWF0Y2hpbmcgaXMgZG9uZSBieSBuYW1lKS4gQSBuZXcgcGVuZGluZyB0cmFpdCBpcyBjcmVhdGVkIGFuZCB0aGVuXG4gICAqIHRyYW5zaXRpb25lZCB0byBhbmFseXplZCB1c2luZyB0aGUgcHJldmlvdXMgYW5hbHlzaXMuIElmIHRoZSB0cmFpdCBpcyBpbiB0aGUgZXJyb3JlZCBzdGF0ZSxcbiAgICogaW5zdGVhZCB0aGUgZXJyb3JzIGFyZSBjb3BpZWQgb3Zlci5cbiAgICovXG4gIHByaXZhdGUgYWRvcHQocHJpb3JSZWNvcmQ6IENsYXNzUmVjb3JkKTogdm9pZCB7XG4gICAgY29uc3QgcmVjb3JkOiBDbGFzc1JlY29yZCA9IHtcbiAgICAgIGhhc1ByaW1hcnlIYW5kbGVyOiBwcmlvclJlY29yZC5oYXNQcmltYXJ5SGFuZGxlcixcbiAgICAgIGhhc1dlYWtIYW5kbGVyczogcHJpb3JSZWNvcmQuaGFzV2Vha0hhbmRsZXJzLFxuICAgICAgbWV0YURpYWdub3N0aWNzOiBwcmlvclJlY29yZC5tZXRhRGlhZ25vc3RpY3MsXG4gICAgICBub2RlOiBwcmlvclJlY29yZC5ub2RlLFxuICAgICAgdHJhaXRzOiBbXSxcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBwcmlvclRyYWl0IG9mIHByaW9yUmVjb3JkLnRyYWl0cykge1xuICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuaGFuZGxlcnNCeU5hbWUuZ2V0KHByaW9yVHJhaXQuaGFuZGxlci5uYW1lKSE7XG4gICAgICBsZXQgdHJhaXQ6IFRyYWl0PHVua25vd24sIHVua25vd24sIFNlbWFudGljU3ltYm9sfG51bGwsIHVua25vd24+ID1cbiAgICAgICAgICBUcmFpdC5wZW5kaW5nKGhhbmRsZXIsIHByaW9yVHJhaXQuZGV0ZWN0ZWQpO1xuXG4gICAgICBpZiAocHJpb3JUcmFpdC5zdGF0ZSA9PT0gVHJhaXRTdGF0ZS5BbmFseXplZCB8fCBwcmlvclRyYWl0LnN0YXRlID09PSBUcmFpdFN0YXRlLlJlc29sdmVkKSB7XG4gICAgICAgIGNvbnN0IHN5bWJvbCA9IHRoaXMubWFrZVN5bWJvbEZvclRyYWl0KGhhbmRsZXIsIHJlY29yZC5ub2RlLCBwcmlvclRyYWl0LmFuYWx5c2lzKTtcbiAgICAgICAgdHJhaXQgPSB0cmFpdC50b0FuYWx5emVkKHByaW9yVHJhaXQuYW5hbHlzaXMsIHByaW9yVHJhaXQuYW5hbHlzaXNEaWFnbm9zdGljcywgc3ltYm9sKTtcbiAgICAgICAgaWYgKHRyYWl0LmFuYWx5c2lzICE9PSBudWxsICYmIHRyYWl0LmhhbmRsZXIucmVnaXN0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRyYWl0LmhhbmRsZXIucmVnaXN0ZXIocmVjb3JkLm5vZGUsIHRyYWl0LmFuYWx5c2lzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwcmlvclRyYWl0LnN0YXRlID09PSBUcmFpdFN0YXRlLlNraXBwZWQpIHtcbiAgICAgICAgdHJhaXQgPSB0cmFpdC50b1NraXBwZWQoKTtcbiAgICAgIH1cblxuICAgICAgcmVjb3JkLnRyYWl0cy5wdXNoKHRyYWl0KTtcbiAgICB9XG5cbiAgICB0aGlzLmNsYXNzZXMuc2V0KHJlY29yZC5ub2RlLCByZWNvcmQpO1xuICAgIGNvbnN0IHNmID0gcmVjb3JkLm5vZGUuZ2V0U291cmNlRmlsZSgpO1xuICAgIGlmICghdGhpcy5maWxlVG9DbGFzc2VzLmhhcyhzZikpIHtcbiAgICAgIHRoaXMuZmlsZVRvQ2xhc3Nlcy5zZXQoc2YsIG5ldyBTZXQ8Q2xhc3NEZWNsYXJhdGlvbj4oKSk7XG4gICAgfVxuICAgIHRoaXMuZmlsZVRvQ2xhc3Nlcy5nZXQoc2YpIS5hZGQocmVjb3JkLm5vZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzY2FuQ2xhc3NGb3JUcmFpdHMoY2xheno6IENsYXNzRGVjbGFyYXRpb24pOlxuICAgICAgUGVuZGluZ1RyYWl0PHVua25vd24sIHVua25vd24sIFNlbWFudGljU3ltYm9sfG51bGwsIHVua25vd24+W118bnVsbCB7XG4gICAgaWYgKCF0aGlzLmNvbXBpbGVOb25FeHBvcnRlZENsYXNzZXMgJiYgIXRoaXMucmVmbGVjdG9yLmlzU3RhdGljYWxseUV4cG9ydGVkKGNsYXp6KSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZGVjb3JhdG9ycyA9IHRoaXMucmVmbGVjdG9yLmdldERlY29yYXRvcnNPZkRlY2xhcmF0aW9uKGNsYXp6KTtcblxuICAgIHJldHVybiB0aGlzLmRldGVjdFRyYWl0cyhjbGF6eiwgZGVjb3JhdG9ycyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGV0ZWN0VHJhaXRzKGNsYXp6OiBDbGFzc0RlY2xhcmF0aW9uLCBkZWNvcmF0b3JzOiBEZWNvcmF0b3JbXXxudWxsKTpcbiAgICAgIFBlbmRpbmdUcmFpdDx1bmtub3duLCB1bmtub3duLCBTZW1hbnRpY1N5bWJvbHxudWxsLCB1bmtub3duPltdfG51bGwge1xuICAgIGxldCByZWNvcmQ6IENsYXNzUmVjb3JkfG51bGwgPSB0aGlzLnJlY29yZEZvcihjbGF6eik7XG4gICAgbGV0IGZvdW5kVHJhaXRzOiBQZW5kaW5nVHJhaXQ8dW5rbm93biwgdW5rbm93biwgU2VtYW50aWNTeW1ib2x8bnVsbCwgdW5rbm93bj5bXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHRoaXMuaGFuZGxlcnMpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGhhbmRsZXIuZGV0ZWN0KGNsYXp6LCBkZWNvcmF0b3JzKTtcbiAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNQcmltYXJ5SGFuZGxlciA9IGhhbmRsZXIucHJlY2VkZW5jZSA9PT0gSGFuZGxlclByZWNlZGVuY2UuUFJJTUFSWTtcbiAgICAgIGNvbnN0IGlzV2Vha0hhbmRsZXIgPSBoYW5kbGVyLnByZWNlZGVuY2UgPT09IEhhbmRsZXJQcmVjZWRlbmNlLldFQUs7XG4gICAgICBjb25zdCB0cmFpdCA9IFRyYWl0LnBlbmRpbmcoaGFuZGxlciwgcmVzdWx0KTtcblxuICAgICAgZm91bmRUcmFpdHMucHVzaCh0cmFpdCk7XG5cbiAgICAgIGlmIChyZWNvcmQgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgaGFuZGxlciB0byBtYXRjaCB0aGlzIGNsYXNzLiBUaGlzIHBhdGggaXMgYSBmYXN0IHBhdGggdGhyb3VnaCB3aGljaFxuICAgICAgICAvLyBtb3N0IGNsYXNzZXMgd2lsbCBmbG93LlxuICAgICAgICByZWNvcmQgPSB7XG4gICAgICAgICAgbm9kZTogY2xhenosXG4gICAgICAgICAgdHJhaXRzOiBbdHJhaXRdLFxuICAgICAgICAgIG1ldGFEaWFnbm9zdGljczogbnVsbCxcbiAgICAgICAgICBoYXNQcmltYXJ5SGFuZGxlcjogaXNQcmltYXJ5SGFuZGxlcixcbiAgICAgICAgICBoYXNXZWFrSGFuZGxlcnM6IGlzV2Vha0hhbmRsZXIsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jbGFzc2VzLnNldChjbGF6eiwgcmVjb3JkKTtcbiAgICAgICAgY29uc3Qgc2YgPSBjbGF6ei5nZXRTb3VyY2VGaWxlKCk7XG4gICAgICAgIGlmICghdGhpcy5maWxlVG9DbGFzc2VzLmhhcyhzZikpIHtcbiAgICAgICAgICB0aGlzLmZpbGVUb0NsYXNzZXMuc2V0KHNmLCBuZXcgU2V0PENsYXNzRGVjbGFyYXRpb24+KCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsZVRvQ2xhc3Nlcy5nZXQoc2YpIS5hZGQoY2xhenopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhdCBsZWFzdCB0aGUgc2Vjb25kIGhhbmRsZXIgdG8gbWF0Y2ggdGhpcyBjbGFzcy4gVGhpcyBpcyBhIHNsb3dlciBwYXRoIHRoYXQgc29tZVxuICAgICAgICAvLyBjbGFzc2VzIHdpbGwgZ28gdGhyb3VnaCwgd2hpY2ggdmFsaWRhdGVzIHRoYXQgdGhlIHNldCBvZiBkZWNvcmF0b3JzIGFwcGxpZWQgdG8gdGhlIGNsYXNzXG4gICAgICAgIC8vIGlzIHZhbGlkLlxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGFjY29yZGluZyB0byBydWxlcyBhcyBmb2xsb3dzOlxuICAgICAgICAvL1xuICAgICAgICAvLyAqIFdFQUsgaGFuZGxlcnMgYXJlIHJlbW92ZWQgaWYgYSBub24tV0VBSyBoYW5kbGVyIG1hdGNoZXMuXG4gICAgICAgIC8vICogT25seSBvbmUgUFJJTUFSWSBoYW5kbGVyIGNhbiBtYXRjaCBhdCBhIHRpbWUuIEFueSBvdGhlciBQUklNQVJZIGhhbmRsZXIgbWF0Y2hpbmcgYVxuICAgICAgICAvLyAgIGNsYXNzIHdpdGggYW4gZXhpc3RpbmcgUFJJTUFSWSBoYW5kbGVyIGlzIGFuIGVycm9yLlxuXG4gICAgICAgIGlmICghaXNXZWFrSGFuZGxlciAmJiByZWNvcmQuaGFzV2Vha0hhbmRsZXJzKSB7XG4gICAgICAgICAgLy8gVGhlIGN1cnJlbnQgaGFuZGxlciBpcyBub3QgYSBXRUFLIGhhbmRsZXIsIGJ1dCB0aGUgY2xhc3MgaGFzIG90aGVyIFdFQUsgaGFuZGxlcnMuXG4gICAgICAgICAgLy8gUmVtb3ZlIHRoZW0uXG4gICAgICAgICAgcmVjb3JkLnRyYWl0cyA9XG4gICAgICAgICAgICAgIHJlY29yZC50cmFpdHMuZmlsdGVyKGZpZWxkID0+IGZpZWxkLmhhbmRsZXIucHJlY2VkZW5jZSAhPT0gSGFuZGxlclByZWNlZGVuY2UuV0VBSyk7XG4gICAgICAgICAgcmVjb3JkLmhhc1dlYWtIYW5kbGVycyA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKGlzV2Vha0hhbmRsZXIgJiYgIXJlY29yZC5oYXNXZWFrSGFuZGxlcnMpIHtcbiAgICAgICAgICAvLyBUaGUgY3VycmVudCBoYW5kbGVyIGlzIGEgV0VBSyBoYW5kbGVyLCBidXQgdGhlIGNsYXNzIGhhcyBub24tV0VBSyBoYW5kbGVycyBhbHJlYWR5LlxuICAgICAgICAgIC8vIERyb3AgdGhlIGN1cnJlbnQgb25lLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzUHJpbWFyeUhhbmRsZXIgJiYgcmVjb3JkLmhhc1ByaW1hcnlIYW5kbGVyKSB7XG4gICAgICAgICAgLy8gVGhlIGNsYXNzIGFscmVhZHkgaGFzIGEgUFJJTUFSWSBoYW5kbGVyLCBhbmQgYW5vdGhlciBvbmUganVzdCBtYXRjaGVkLlxuICAgICAgICAgIHJlY29yZC5tZXRhRGlhZ25vc3RpY3MgPSBbe1xuICAgICAgICAgICAgY2F0ZWdvcnk6IHRzLkRpYWdub3N0aWNDYXRlZ29yeS5FcnJvcixcbiAgICAgICAgICAgIGNvZGU6IE51bWJlcignLTk5JyArIEVycm9yQ29kZS5ERUNPUkFUT1JfQ09MTElTSU9OKSxcbiAgICAgICAgICAgIGZpbGU6IGdldFNvdXJjZUZpbGUoY2xhenopLFxuICAgICAgICAgICAgc3RhcnQ6IGNsYXp6LmdldFN0YXJ0KHVuZGVmaW5lZCwgZmFsc2UpLFxuICAgICAgICAgICAgbGVuZ3RoOiBjbGF6ei5nZXRXaWR0aCgpLFxuICAgICAgICAgICAgbWVzc2FnZVRleHQ6ICdUd28gaW5jb21wYXRpYmxlIGRlY29yYXRvcnMgb24gY2xhc3MnLFxuICAgICAgICAgIH1dO1xuICAgICAgICAgIHJlY29yZC50cmFpdHMgPSBmb3VuZFRyYWl0cyA9IFtdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBpdCdzIHNhZmUgdG8gYWNjZXB0IHRoZSBtdWx0aXBsZSBkZWNvcmF0b3JzIGhlcmUuIFVwZGF0ZSBzb21lIG9mIHRoZSBtZXRhZGF0YVxuICAgICAgICAvLyByZWdhcmRpbmcgdGhpcyBjbGFzcy5cbiAgICAgICAgcmVjb3JkLnRyYWl0cy5wdXNoKHRyYWl0KTtcbiAgICAgICAgcmVjb3JkLmhhc1ByaW1hcnlIYW5kbGVyID0gcmVjb3JkLmhhc1ByaW1hcnlIYW5kbGVyIHx8IGlzUHJpbWFyeUhhbmRsZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvdW5kVHJhaXRzLmxlbmd0aCA+IDAgPyBmb3VuZFRyYWl0cyA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIG1ha2VTeW1ib2xGb3JUcmFpdChcbiAgICAgIGhhbmRsZXI6IERlY29yYXRvckhhbmRsZXI8dW5rbm93biwgdW5rbm93biwgU2VtYW50aWNTeW1ib2x8bnVsbCwgdW5rbm93bj4sXG4gICAgICBkZWNsOiBDbGFzc0RlY2xhcmF0aW9uLCBhbmFseXNpczogUmVhZG9ubHk8dW5rbm93bj58bnVsbCk6IFNlbWFudGljU3ltYm9sfG51bGwge1xuICAgIGlmIChhbmFseXNpcyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHN5bWJvbCA9IGhhbmRsZXIuc3ltYm9sKGRlY2wsIGFuYWx5c2lzKTtcbiAgICBpZiAoc3ltYm9sICE9PSBudWxsICYmIHRoaXMuc2VtYW50aWNEZXBHcmFwaFVwZGF0ZXIgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGlzUHJpbWFyeSA9IGhhbmRsZXIucHJlY2VkZW5jZSA9PT0gSGFuZGxlclByZWNlZGVuY2UuUFJJTUFSWTtcbiAgICAgIGlmICghaXNQcmltYXJ5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBBc3NlcnRpb25FcnJvcjogJHtoYW5kbGVyLm5hbWV9IHJldHVybmVkIGEgc3ltYm9sIGJ1dCBpcyBub3QgYSBwcmltYXJ5IGhhbmRsZXIuYCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNlbWFudGljRGVwR3JhcGhVcGRhdGVyLnJlZ2lzdGVyU3ltYm9sKHN5bWJvbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN5bWJvbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhbmFseXplQ2xhc3MoY2xheno6IENsYXNzRGVjbGFyYXRpb24sIHByZWFuYWx5emVRdWV1ZTogUHJvbWlzZTx2b2lkPltdfG51bGwpOiB2b2lkIHtcbiAgICBjb25zdCB0cmFpdHMgPSB0aGlzLnNjYW5DbGFzc0ZvclRyYWl0cyhjbGF6eik7XG5cbiAgICBpZiAodHJhaXRzID09PSBudWxsKSB7XG4gICAgICAvLyBUaGVyZSBhcmUgbm8gSXZ5IHRyYWl0cyBvbiB0aGUgY2xhc3MsIHNvIGl0IGNhbiBzYWZlbHkgYmUgc2tpcHBlZC5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRyYWl0IG9mIHRyYWl0cykge1xuICAgICAgY29uc3QgYW5hbHl6ZSA9ICgpID0+IHRoaXMuYW5hbHl6ZVRyYWl0KGNsYXp6LCB0cmFpdCk7XG5cbiAgICAgIGxldCBwcmVhbmFseXNpczogUHJvbWlzZTx2b2lkPnxudWxsID0gbnVsbDtcbiAgICAgIGlmIChwcmVhbmFseXplUXVldWUgIT09IG51bGwgJiYgdHJhaXQuaGFuZGxlci5wcmVhbmFseXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gQXR0ZW1wdCB0byBydW4gcHJlYW5hbHlzaXMuIFRoaXMgY291bGQgZmFpbCB3aXRoIGEgYEZhdGFsRGlhZ25vc3RpY0Vycm9yYDsgY2F0Y2ggaXQgaWYgaXRcbiAgICAgICAgLy8gZG9lcy5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwcmVhbmFseXNpcyA9IHRyYWl0LmhhbmRsZXIucHJlYW5hbHl6ZShjbGF6eiwgdHJhaXQuZGV0ZWN0ZWQubWV0YWRhdGEpIHx8IG51bGw7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBGYXRhbERpYWdub3N0aWNFcnJvcikge1xuICAgICAgICAgICAgdHJhaXQudG9BbmFseXplZChudWxsLCBbZXJyLnRvRGlhZ25vc3RpYygpXSwgbnVsbCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwcmVhbmFseXNpcyAhPT0gbnVsbCkge1xuICAgICAgICBwcmVhbmFseXplUXVldWUhLnB1c2gocHJlYW5hbHlzaXMudGhlbihhbmFseXplKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbmFseXplKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFuYWx5emVUcmFpdChcbiAgICAgIGNsYXp6OiBDbGFzc0RlY2xhcmF0aW9uLCB0cmFpdDogVHJhaXQ8dW5rbm93biwgdW5rbm93biwgU2VtYW50aWNTeW1ib2x8bnVsbCwgdW5rbm93bj4sXG4gICAgICBmbGFncz86IEhhbmRsZXJGbGFncyk6IHZvaWQge1xuICAgIGlmICh0cmFpdC5zdGF0ZSAhPT0gVHJhaXRTdGF0ZS5QZW5kaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEF0dGVtcHQgdG8gYW5hbHl6ZSB0cmFpdCBvZiAke2NsYXp6Lm5hbWUudGV4dH0gaW4gc3RhdGUgJHtcbiAgICAgICAgICBUcmFpdFN0YXRlW3RyYWl0LnN0YXRlXX0gKGV4cGVjdGVkIERFVEVDVEVEKWApO1xuICAgIH1cblxuICAgIHRoaXMucGVyZi5ldmVudENvdW50KFBlcmZFdmVudC5UcmFpdEFuYWx5emUpO1xuXG4gICAgLy8gQXR0ZW1wdCBhbmFseXNpcy4gVGhpcyBjb3VsZCBmYWlsIHdpdGggYSBgRmF0YWxEaWFnbm9zdGljRXJyb3JgOyBjYXRjaCBpdCBpZiBpdCBkb2VzLlxuICAgIGxldCByZXN1bHQ6IEFuYWx5c2lzT3V0cHV0PHVua25vd24+O1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSB0cmFpdC5oYW5kbGVyLmFuYWx5emUoY2xhenosIHRyYWl0LmRldGVjdGVkLm1ldGFkYXRhLCBmbGFncyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRmF0YWxEaWFnbm9zdGljRXJyb3IpIHtcbiAgICAgICAgdHJhaXQudG9BbmFseXplZChudWxsLCBbZXJyLnRvRGlhZ25vc3RpYygpXSwgbnVsbCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzeW1ib2wgPSB0aGlzLm1ha2VTeW1ib2xGb3JUcmFpdCh0cmFpdC5oYW5kbGVyLCBjbGF6eiwgcmVzdWx0LmFuYWx5c2lzID8/IG51bGwpO1xuICAgIGlmIChyZXN1bHQuYW5hbHlzaXMgIT09IHVuZGVmaW5lZCAmJiB0cmFpdC5oYW5kbGVyLnJlZ2lzdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRyYWl0LmhhbmRsZXIucmVnaXN0ZXIoY2xhenosIHJlc3VsdC5hbmFseXNpcyk7XG4gICAgfVxuICAgIHRyYWl0ID0gdHJhaXQudG9BbmFseXplZChyZXN1bHQuYW5hbHlzaXMgPz8gbnVsbCwgcmVzdWx0LmRpYWdub3N0aWNzID8/IG51bGwsIHN5bWJvbCk7XG4gIH1cblxuICByZXNvbHZlKCk6IHZvaWQge1xuICAgIGNvbnN0IGNsYXNzZXMgPSBBcnJheS5mcm9tKHRoaXMuY2xhc3Nlcy5rZXlzKCkpO1xuICAgIGZvciAoY29uc3QgY2xhenogb2YgY2xhc3Nlcykge1xuICAgICAgY29uc3QgcmVjb3JkID0gdGhpcy5jbGFzc2VzLmdldChjbGF6eikhO1xuICAgICAgZm9yIChsZXQgdHJhaXQgb2YgcmVjb3JkLnRyYWl0cykge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gdHJhaXQuaGFuZGxlcjtcbiAgICAgICAgc3dpdGNoICh0cmFpdC5zdGF0ZSkge1xuICAgICAgICAgIGNhc2UgVHJhaXRTdGF0ZS5Ta2lwcGVkOlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgY2FzZSBUcmFpdFN0YXRlLlBlbmRpbmc6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlc29sdmluZyBhIHRyYWl0IHRoYXQgaGFzbid0IGJlZW4gYW5hbHl6ZWQ6ICR7Y2xhenoubmFtZS50ZXh0fSAvICR7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHRyYWl0LmhhbmRsZXIpLmNvbnN0cnVjdG9yLm5hbWV9YCk7XG4gICAgICAgICAgY2FzZSBUcmFpdFN0YXRlLlJlc29sdmVkOlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXNvbHZpbmcgYW4gYWxyZWFkeSByZXNvbHZlZCB0cmFpdGApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRyYWl0LmFuYWx5c2lzID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gTm8gYW5hbHlzaXMgcmVzdWx0cywgY2Fubm90IGZ1cnRoZXIgcHJvY2VzcyB0aGlzIHRyYWl0LlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhbmRsZXIucmVzb2x2ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gTm8gcmVzb2x1dGlvbiBvZiB0aGlzIHRyYWl0IG5lZWRlZCAtIGl0J3MgY29uc2lkZXJlZCBzdWNjZXNzZnVsIGJ5IGRlZmF1bHQuXG4gICAgICAgICAgdHJhaXQgPSB0cmFpdC50b1Jlc29sdmVkKG51bGwsIG51bGwpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3VsdDogUmVzb2x2ZVJlc3VsdDx1bmtub3duPjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXN1bHQgPSBoYW5kbGVyLnJlc29sdmUoY2xhenosIHRyYWl0LmFuYWx5c2lzIGFzIFJlYWRvbmx5PHVua25vd24+LCB0cmFpdC5zeW1ib2wpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRmF0YWxEaWFnbm9zdGljRXJyb3IpIHtcbiAgICAgICAgICAgIHRyYWl0ID0gdHJhaXQudG9SZXNvbHZlZChudWxsLCBbZXJyLnRvRGlhZ25vc3RpYygpXSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRyYWl0ID0gdHJhaXQudG9SZXNvbHZlZChyZXN1bHQuZGF0YSA/PyBudWxsLCByZXN1bHQuZGlhZ25vc3RpY3MgPz8gbnVsbCk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5yZWV4cG9ydHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gY2xhenouZ2V0U291cmNlRmlsZSgpLmZpbGVOYW1lO1xuICAgICAgICAgIGlmICghdGhpcy5yZWV4cG9ydE1hcC5oYXMoZmlsZU5hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLnJlZXhwb3J0TWFwLnNldChmaWxlTmFtZSwgbmV3IE1hcDxzdHJpbmcsIFtzdHJpbmcsIHN0cmluZ10+KCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBmaWxlUmVleHBvcnRzID0gdGhpcy5yZWV4cG9ydE1hcC5nZXQoZmlsZU5hbWUpITtcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlZXhwb3J0IG9mIHJlc3VsdC5yZWV4cG9ydHMpIHtcbiAgICAgICAgICAgIGZpbGVSZWV4cG9ydHMuc2V0KHJlZXhwb3J0LmFzQWxpYXMsIFtyZWV4cG9ydC5mcm9tTW9kdWxlLCByZWV4cG9ydC5zeW1ib2xOYW1lXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHR5cGUtY2hlY2tpbmcgY29kZSBpbnRvIHRoZSBgVHlwZUNoZWNrQ29udGV4dGAgZm9yIGFueSBjb21wb25lbnRzIHdpdGhpbiB0aGUgZ2l2ZW5cbiAgICogYHRzLlNvdXJjZUZpbGVgLlxuICAgKi9cbiAgdHlwZUNoZWNrKHNmOiB0cy5Tb3VyY2VGaWxlLCBjdHg6IFR5cGVDaGVja0NvbnRleHQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZmlsZVRvQ2xhc3Nlcy5oYXMoc2YpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjbGF6eiBvZiB0aGlzLmZpbGVUb0NsYXNzZXMuZ2V0KHNmKSEpIHtcbiAgICAgIGNvbnN0IHJlY29yZCA9IHRoaXMuY2xhc3Nlcy5nZXQoY2xhenopITtcbiAgICAgIGZvciAoY29uc3QgdHJhaXQgb2YgcmVjb3JkLnRyYWl0cykge1xuICAgICAgICBpZiAodHJhaXQuc3RhdGUgIT09IFRyYWl0U3RhdGUuUmVzb2x2ZWQpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0cmFpdC5oYW5kbGVyLnR5cGVDaGVjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRyYWl0LnJlc29sdXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgICB0cmFpdC5oYW5kbGVyLnR5cGVDaGVjayhjdHgsIGNsYXp6LCB0cmFpdC5hbmFseXNpcywgdHJhaXQucmVzb2x1dGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBleHRlbmRlZFRlbXBsYXRlQ2hlY2soc2Y6IHRzLlNvdXJjZUZpbGUsIGV4dGVuZGVkVGVtcGxhdGVDaGVja2VyOiBFeHRlbmRlZFRlbXBsYXRlQ2hlY2tlcik6XG4gICAgICB0cy5EaWFnbm9zdGljW10ge1xuICAgIGNvbnN0IGNsYXNzZXMgPSB0aGlzLmZpbGVUb0NsYXNzZXMuZ2V0KHNmKTtcbiAgICBpZiAoY2xhc3NlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZGlhZ25vc3RpY3M6IHRzLkRpYWdub3N0aWNbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgY2xhenogb2YgY2xhc3Nlcykge1xuICAgICAgaWYgKCFpc05hbWVkQ2xhc3NEZWNsYXJhdGlvbihjbGF6eikpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZWNvcmQgPSB0aGlzLmNsYXNzZXMuZ2V0KGNsYXp6KSE7XG4gICAgICBmb3IgKGNvbnN0IHRyYWl0IG9mIHJlY29yZC50cmFpdHMpIHtcbiAgICAgICAgaWYgKHRyYWl0LmhhbmRsZXIuZXh0ZW5kZWRUZW1wbGF0ZUNoZWNrID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBkaWFnbm9zdGljcy5wdXNoKC4uLnRyYWl0LmhhbmRsZXIuZXh0ZW5kZWRUZW1wbGF0ZUNoZWNrKGNsYXp6LCBleHRlbmRlZFRlbXBsYXRlQ2hlY2tlcikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGlhZ25vc3RpY3M7XG4gIH1cblxuICBpbmRleChjdHg6IEluZGV4aW5nQ29udGV4dCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgY2xhenogb2YgdGhpcy5jbGFzc2VzLmtleXMoKSkge1xuICAgICAgY29uc3QgcmVjb3JkID0gdGhpcy5jbGFzc2VzLmdldChjbGF6eikhO1xuICAgICAgZm9yIChjb25zdCB0cmFpdCBvZiByZWNvcmQudHJhaXRzKSB7XG4gICAgICAgIGlmICh0cmFpdC5zdGF0ZSAhPT0gVHJhaXRTdGF0ZS5SZXNvbHZlZCkge1xuICAgICAgICAgIC8vIFNraXAgdHJhaXRzIHRoYXQgaGF2ZW4ndCBiZWVuIHJlc29sdmVkIHN1Y2Nlc3NmdWxseS5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0cmFpdC5oYW5kbGVyLmluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBTa2lwIHRyYWl0cyB0aGF0IGRvbid0IGFmZmVjdCBpbmRleGluZy5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0cmFpdC5yZXNvbHV0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgdHJhaXQuaGFuZGxlci5pbmRleChjdHgsIGNsYXp6LCB0cmFpdC5hbmFseXNpcywgdHJhaXQucmVzb2x1dGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB4aTE4bihidW5kbGU6IFhpMThuQ29udGV4dCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgY2xhenogb2YgdGhpcy5jbGFzc2VzLmtleXMoKSkge1xuICAgICAgY29uc3QgcmVjb3JkID0gdGhpcy5jbGFzc2VzLmdldChjbGF6eikhO1xuICAgICAgZm9yIChjb25zdCB0cmFpdCBvZiByZWNvcmQudHJhaXRzKSB7XG4gICAgICAgIGlmICh0cmFpdC5zdGF0ZSAhPT0gVHJhaXRTdGF0ZS5BbmFseXplZCAmJiB0cmFpdC5zdGF0ZSAhPT0gVHJhaXRTdGF0ZS5SZXNvbHZlZCkge1xuICAgICAgICAgIC8vIFNraXAgdHJhaXRzIHRoYXQgaGF2ZW4ndCBiZWVuIGFuYWx5emVkIHN1Y2Nlc3NmdWxseS5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0cmFpdC5oYW5kbGVyLnhpMThuID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBTa2lwIHRyYWl0cyB0aGF0IGRvbid0IHN1cHBvcnQgeGkxOG4uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHJhaXQuYW5hbHlzaXMgIT09IG51bGwpIHtcbiAgICAgICAgICB0cmFpdC5oYW5kbGVyLnhpMThuKGJ1bmRsZSwgY2xhenosIHRyYWl0LmFuYWx5c2lzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVJlc291cmNlcyhjbGF6ejogRGVjbGFyYXRpb25Ob2RlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJlZmxlY3Rvci5pc0NsYXNzKGNsYXp6KSB8fCAhdGhpcy5jbGFzc2VzLmhhcyhjbGF6eikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVjb3JkID0gdGhpcy5jbGFzc2VzLmdldChjbGF6eikhO1xuICAgIGZvciAoY29uc3QgdHJhaXQgb2YgcmVjb3JkLnRyYWl0cykge1xuICAgICAgaWYgKHRyYWl0LnN0YXRlICE9PSBUcmFpdFN0YXRlLlJlc29sdmVkIHx8IHRyYWl0LmhhbmRsZXIudXBkYXRlUmVzb3VyY2VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHRyYWl0LmhhbmRsZXIudXBkYXRlUmVzb3VyY2VzKGNsYXp6LCB0cmFpdC5hbmFseXNpcywgdHJhaXQucmVzb2x1dGlvbik7XG4gICAgfVxuICB9XG5cbiAgY29tcGlsZShjbGF6ejogRGVjbGFyYXRpb25Ob2RlLCBjb25zdGFudFBvb2w6IENvbnN0YW50UG9vbCk6IENvbXBpbGVSZXN1bHRbXXxudWxsIHtcbiAgICBjb25zdCBvcmlnaW5hbCA9IHRzLmdldE9yaWdpbmFsTm9kZShjbGF6eikgYXMgdHlwZW9mIGNsYXp6O1xuICAgIGlmICghdGhpcy5yZWZsZWN0b3IuaXNDbGFzcyhjbGF6eikgfHwgIXRoaXMucmVmbGVjdG9yLmlzQ2xhc3Mob3JpZ2luYWwpIHx8XG4gICAgICAgICF0aGlzLmNsYXNzZXMuaGFzKG9yaWdpbmFsKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVjb3JkID0gdGhpcy5jbGFzc2VzLmdldChvcmlnaW5hbCkhO1xuXG4gICAgbGV0IHJlczogQ29tcGlsZVJlc3VsdFtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHRyYWl0IG9mIHJlY29yZC50cmFpdHMpIHtcbiAgICAgIGlmICh0cmFpdC5zdGF0ZSAhPT0gVHJhaXRTdGF0ZS5SZXNvbHZlZCB8fCB0cmFpdC5hbmFseXNpc0RpYWdub3N0aWNzICE9PSBudWxsIHx8XG4gICAgICAgICAgdHJhaXQucmVzb2x2ZURpYWdub3N0aWNzICE9PSBudWxsKSB7XG4gICAgICAgIC8vIENhbm5vdCBjb21waWxlIGEgdHJhaXQgdGhhdCBpcyBub3QgcmVzb2x2ZWQsIG9yIGhhZCBhbnkgZXJyb3JzIGluIGl0cyBkZWNsYXJhdGlvbi5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGB0cmFpdC5yZXNvbHV0aW9uYCBpcyBub24tbnVsbCBhc3NlcnRlZCBoZXJlIGJlY2F1c2UgVHlwZVNjcmlwdCBkb2VzIG5vdCByZWNvZ25pemUgdGhhdFxuICAgICAgLy8gYFJlYWRvbmx5PHVua25vd24+YCBpcyBudWxsYWJsZSAoYXMgYHVua25vd25gIGl0c2VsZiBpcyBudWxsYWJsZSkgZHVlIHRvIHRoZSB3YXkgdGhhdFxuICAgICAgLy8gYFJlYWRvbmx5YCB3b3Jrcy5cblxuICAgICAgbGV0IGNvbXBpbGVSZXM6IENvbXBpbGVSZXN1bHR8Q29tcGlsZVJlc3VsdFtdO1xuICAgICAgaWYgKHRoaXMuY29tcGlsYXRpb25Nb2RlID09PSBDb21waWxhdGlvbk1vZGUuUEFSVElBTCAmJlxuICAgICAgICAgIHRyYWl0LmhhbmRsZXIuY29tcGlsZVBhcnRpYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb21waWxlUmVzID0gdHJhaXQuaGFuZGxlci5jb21waWxlUGFydGlhbChjbGF6eiwgdHJhaXQuYW5hbHlzaXMsIHRyYWl0LnJlc29sdXRpb24hKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbXBpbGVSZXMgPVxuICAgICAgICAgICAgdHJhaXQuaGFuZGxlci5jb21waWxlRnVsbChjbGF6eiwgdHJhaXQuYW5hbHlzaXMsIHRyYWl0LnJlc29sdXRpb24hLCBjb25zdGFudFBvb2wpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb21waWxlTWF0Y2hSZXMgPSBjb21waWxlUmVzO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29tcGlsZU1hdGNoUmVzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiBjb21waWxlTWF0Y2hSZXMpIHtcbiAgICAgICAgICBpZiAoIXJlcy5zb21lKHIgPT4gci5uYW1lID09PSByZXN1bHQubmFtZSkpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKHJlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFyZXMuc29tZShyZXN1bHQgPT4gcmVzdWx0Lm5hbWUgPT09IGNvbXBpbGVNYXRjaFJlcy5uYW1lKSkge1xuICAgICAgICByZXMucHVzaChjb21waWxlTWF0Y2hSZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIExvb2sgdXAgdGhlIC5kLnRzIHRyYW5zZm9ybWVyIGZvciB0aGUgaW5wdXQgZmlsZSBhbmQgcmVjb3JkIHRoYXQgYXQgbGVhc3Qgb25lIGZpZWxkIHdhc1xuICAgIC8vIGdlbmVyYXRlZCwgd2hpY2ggd2lsbCBhbGxvdyB0aGUgLmQudHMgdG8gYmUgdHJhbnNmb3JtZWQgbGF0ZXIuXG4gICAgdGhpcy5kdHNUcmFuc2Zvcm1zLmdldEl2eURlY2xhcmF0aW9uVHJhbnNmb3JtKG9yaWdpbmFsLmdldFNvdXJjZUZpbGUoKSlcbiAgICAgICAgLmFkZEZpZWxkcyhvcmlnaW5hbCwgcmVzKTtcblxuICAgIC8vIFJldHVybiB0aGUgaW5zdHJ1Y3Rpb24gdG8gdGhlIHRyYW5zZm9ybWVyIHNvIHRoZSBmaWVsZHMgd2lsbCBiZSBhZGRlZC5cbiAgICByZXR1cm4gcmVzLmxlbmd0aCA+IDAgPyByZXMgOiBudWxsO1xuICB9XG5cbiAgZGVjb3JhdG9yc0Zvcihub2RlOiB0cy5EZWNsYXJhdGlvbik6IHRzLkRlY29yYXRvcltdIHtcbiAgICBjb25zdCBvcmlnaW5hbCA9IHRzLmdldE9yaWdpbmFsTm9kZShub2RlKSBhcyB0eXBlb2Ygbm9kZTtcbiAgICBpZiAoIXRoaXMucmVmbGVjdG9yLmlzQ2xhc3Mob3JpZ2luYWwpIHx8ICF0aGlzLmNsYXNzZXMuaGFzKG9yaWdpbmFsKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlY29yZCA9IHRoaXMuY2xhc3Nlcy5nZXQob3JpZ2luYWwpITtcbiAgICBjb25zdCBkZWNvcmF0b3JzOiB0cy5EZWNvcmF0b3JbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCB0cmFpdCBvZiByZWNvcmQudHJhaXRzKSB7XG4gICAgICBpZiAodHJhaXQuc3RhdGUgIT09IFRyYWl0U3RhdGUuUmVzb2x2ZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0cmFpdC5kZXRlY3RlZC50cmlnZ2VyICE9PSBudWxsICYmIHRzLmlzRGVjb3JhdG9yKHRyYWl0LmRldGVjdGVkLnRyaWdnZXIpKSB7XG4gICAgICAgIGRlY29yYXRvcnMucHVzaCh0cmFpdC5kZXRlY3RlZC50cmlnZ2VyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVjb3JhdG9ycztcbiAgfVxuXG4gIGdldCBkaWFnbm9zdGljcygpOiBSZWFkb25seUFycmF5PHRzLkRpYWdub3N0aWM+IHtcbiAgICBjb25zdCBkaWFnbm9zdGljczogdHMuRGlhZ25vc3RpY1tdID0gW107XG4gICAgZm9yIChjb25zdCBjbGF6eiBvZiB0aGlzLmNsYXNzZXMua2V5cygpKSB7XG4gICAgICBjb25zdCByZWNvcmQgPSB0aGlzLmNsYXNzZXMuZ2V0KGNsYXp6KSE7XG4gICAgICBpZiAocmVjb3JkLm1ldGFEaWFnbm9zdGljcyAhPT0gbnVsbCkge1xuICAgICAgICBkaWFnbm9zdGljcy5wdXNoKC4uLnJlY29yZC5tZXRhRGlhZ25vc3RpY3MpO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCB0cmFpdCBvZiByZWNvcmQudHJhaXRzKSB7XG4gICAgICAgIGlmICgodHJhaXQuc3RhdGUgPT09IFRyYWl0U3RhdGUuQW5hbHl6ZWQgfHwgdHJhaXQuc3RhdGUgPT09IFRyYWl0U3RhdGUuUmVzb2x2ZWQpICYmXG4gICAgICAgICAgICB0cmFpdC5hbmFseXNpc0RpYWdub3N0aWNzICE9PSBudWxsKSB7XG4gICAgICAgICAgZGlhZ25vc3RpY3MucHVzaCguLi50cmFpdC5hbmFseXNpc0RpYWdub3N0aWNzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHJhaXQuc3RhdGUgPT09IFRyYWl0U3RhdGUuUmVzb2x2ZWQgJiYgdHJhaXQucmVzb2x2ZURpYWdub3N0aWNzICE9PSBudWxsKSB7XG4gICAgICAgICAgZGlhZ25vc3RpY3MucHVzaCguLi50cmFpdC5yZXNvbHZlRGlhZ25vc3RpY3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkaWFnbm9zdGljcztcbiAgfVxuXG4gIGdldCBleHBvcnRTdGF0ZW1lbnRzKCk6IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIFtzdHJpbmcsIHN0cmluZ10+PiB7XG4gICAgcmV0dXJuIHRoaXMucmVleHBvcnRNYXA7XG4gIH1cbn1cbiJdfQ==