@angular/compiler-cli 13.0.0-next.7 → 13.0.0-rc.1

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 (600) hide show
  1. package/bundles/index.js +20418 -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 +16054 -0
  8. package/bundles/ngcc/index.js.map +6 -0
  9. package/bundles/ngcc/main-ngcc.js +16142 -0
  10. package/bundles/ngcc/main-ngcc.js.map +6 -0
  11. package/bundles/ngcc/src/execution/cluster/ngcc_cluster_worker.js +13866 -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 +20468 -0
  24. package/bundles/src/bin/ng_xi18n.js.map +6 -0
  25. package/bundles/src/bin/ngc.js +20470 -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 +53 -14
  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 +9 -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 +1 -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/ng_module.d.ts +2 -4
  114. package/src/ngtsc/annotations/src/pipe.d.ts +1 -1
  115. package/src/ngtsc/annotations/src/util.d.ts +2 -4
  116. package/src/ngtsc/core/api/src/adapter.d.ts +1 -1
  117. package/src/ngtsc/core/api/src/interfaces.d.ts +1 -12
  118. package/src/ngtsc/core/api/src/options.d.ts +1 -1
  119. package/src/ngtsc/core/api/src/public_options.d.ts +5 -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/metadata/src/api.d.ts +1 -1
  142. package/src/ngtsc/metadata/src/dts.d.ts +1 -1
  143. package/src/ngtsc/metadata/src/resource_registry.d.ts +1 -1
  144. package/src/ngtsc/metadata/src/util.d.ts +1 -1
  145. package/src/ngtsc/partial_evaluator/index.d.ts +1 -0
  146. package/src/ngtsc/partial_evaluator/src/builtin.d.ts +1 -1
  147. package/src/ngtsc/partial_evaluator/src/diagnostics.d.ts +1 -1
  148. package/src/ngtsc/partial_evaluator/src/dynamic.d.ts +1 -1
  149. package/src/ngtsc/partial_evaluator/src/interface.d.ts +1 -1
  150. package/src/ngtsc/partial_evaluator/src/interpreter.d.ts +1 -1
  151. package/src/ngtsc/partial_evaluator/src/result.d.ts +1 -1
  152. package/src/ngtsc/partial_evaluator/src/ts_helpers.d.ts +1 -1
  153. package/src/ngtsc/program.d.ts +1 -1
  154. package/src/ngtsc/program_driver/src/api.d.ts +1 -1
  155. package/src/ngtsc/program_driver/src/ts_create_program_driver.d.ts +1 -1
  156. package/src/ngtsc/reflection/src/host.d.ts +1 -1
  157. package/src/ngtsc/reflection/src/type_to_value.d.ts +1 -1
  158. package/src/ngtsc/reflection/src/typescript.d.ts +1 -1
  159. package/src/ngtsc/reflection/src/util.d.ts +1 -1
  160. package/src/ngtsc/resource/src/loader.d.ts +1 -1
  161. package/src/ngtsc/scope/src/local.d.ts +1 -1
  162. package/src/ngtsc/scope/src/typecheck.d.ts +1 -1
  163. package/src/ngtsc/shims/api.d.ts +1 -1
  164. package/src/ngtsc/shims/src/adapter.d.ts +1 -1
  165. package/src/ngtsc/shims/src/expando.d.ts +1 -1
  166. package/src/ngtsc/shims/src/factory_generator.d.ts +1 -1
  167. package/src/ngtsc/shims/src/reference_tagger.d.ts +1 -1
  168. package/src/ngtsc/shims/src/summary_generator.d.ts +1 -1
  169. package/src/ngtsc/switch/src/switch.d.ts +1 -1
  170. package/src/ngtsc/transform/src/alias.d.ts +1 -1
  171. package/src/ngtsc/transform/src/api.d.ts +1 -1
  172. package/src/ngtsc/transform/src/compilation.d.ts +1 -1
  173. package/src/ngtsc/transform/src/declaration.d.ts +1 -1
  174. package/src/ngtsc/transform/src/trait.d.ts +1 -1
  175. package/src/ngtsc/transform/src/transform.d.ts +1 -1
  176. package/src/ngtsc/transform/src/utils.d.ts +1 -1
  177. package/src/ngtsc/translator/src/import_manager.d.ts +1 -1
  178. package/src/ngtsc/translator/src/type_translator.d.ts +1 -1
  179. package/src/ngtsc/translator/src/typescript_ast_factory.d.ts +1 -1
  180. package/src/ngtsc/translator/src/typescript_translator.d.ts +1 -1
  181. package/src/ngtsc/tsc_plugin.d.ts +1 -1
  182. package/src/ngtsc/typecheck/api/api.d.ts +1 -1
  183. package/src/ngtsc/typecheck/api/checker.d.ts +7 -4
  184. package/src/ngtsc/typecheck/api/context.d.ts +1 -1
  185. package/src/ngtsc/typecheck/api/scope.d.ts +1 -1
  186. package/src/ngtsc/typecheck/api/symbols.d.ts +1 -1
  187. package/src/ngtsc/typecheck/diagnostics/src/diagnostic.d.ts +1 -1
  188. package/src/ngtsc/typecheck/extended/api/api.d.ts +1 -1
  189. package/src/ngtsc/typecheck/extended/api/extended_template_checker.d.ts +1 -1
  190. package/src/ngtsc/typecheck/extended/checks/invalid_banana_in_box/index.d.ts +1 -1
  191. package/src/ngtsc/typecheck/extended/checks/nullish_coalescing_not_nullable/index.d.ts +1 -1
  192. package/src/ngtsc/typecheck/extended/src/extended_template_checker.d.ts +1 -1
  193. package/src/ngtsc/typecheck/src/checker.d.ts +4 -4
  194. package/src/ngtsc/typecheck/src/comments.d.ts +1 -1
  195. package/src/ngtsc/typecheck/src/completion.d.ts +3 -5
  196. package/src/ngtsc/typecheck/src/context.d.ts +1 -1
  197. package/src/ngtsc/typecheck/src/diagnostics.d.ts +1 -1
  198. package/src/ngtsc/typecheck/src/environment.d.ts +1 -1
  199. package/src/ngtsc/typecheck/src/expression.d.ts +1 -1
  200. package/src/ngtsc/typecheck/src/oob.d.ts +3 -4
  201. package/src/ngtsc/typecheck/src/shim.d.ts +1 -1
  202. package/src/ngtsc/typecheck/src/source.d.ts +1 -1
  203. package/src/ngtsc/typecheck/src/tcb_util.d.ts +1 -1
  204. package/src/ngtsc/typecheck/src/template_symbol_builder.d.ts +1 -1
  205. package/src/ngtsc/typecheck/src/ts_util.d.ts +1 -1
  206. package/src/ngtsc/typecheck/src/type_check_block.d.ts +1 -1
  207. package/src/ngtsc/typecheck/src/type_check_file.d.ts +1 -1
  208. package/src/ngtsc/typecheck/src/type_constructor.d.ts +1 -1
  209. package/src/ngtsc/typecheck/src/type_emitter.d.ts +1 -1
  210. package/src/ngtsc/typecheck/src/type_parameter_emitter.d.ts +1 -1
  211. package/src/ngtsc/util/src/typescript.d.ts +1 -1
  212. package/src/ngtsc/util/src/visitor.d.ts +1 -1
  213. package/src/perform_compile.d.ts +1 -2
  214. package/src/perform_watch.d.ts +1 -1
  215. package/src/transformers/api.d.ts +2 -5
  216. package/src/transformers/compiler_host.d.ts +1 -1
  217. package/src/transformers/{downlevel_decorators_transform.d.ts → downlevel_decorators_transform/downlevel_decorators_transform.d.ts} +3 -3
  218. package/src/{ngtsc/routing → transformers/downlevel_decorators_transform}/index.d.ts +2 -3
  219. package/src/transformers/{patch_alias_reference_resolution.d.ts → downlevel_decorators_transform/patch_alias_reference_resolution.d.ts} +2 -2
  220. package/src/transformers/i18n.d.ts +1 -1
  221. package/src/transformers/inline_resources.d.ts +1 -1
  222. package/src/transformers/lower_expressions.d.ts +1 -1
  223. package/src/transformers/metadata_cache.d.ts +1 -1
  224. package/src/transformers/node_emitter.d.ts +1 -1
  225. package/src/transformers/node_emitter_transform.d.ts +1 -1
  226. package/src/transformers/program.d.ts +1 -1
  227. package/src/transformers/r3_metadata_transform.d.ts +1 -1
  228. package/src/transformers/r3_transform.d.ts +1 -1
  229. package/src/transformers/util.d.ts +1 -1
  230. package/index.js +0 -40
  231. package/linker/babel/index.js +0 -25
  232. package/linker/babel/src/ast/babel_ast_factory.js +0 -153
  233. package/linker/babel/src/ast/babel_ast_host.js +0 -181
  234. package/linker/babel/src/babel_declaration_scope.js +0 -67
  235. package/linker/babel/src/babel_plugin.js +0 -38
  236. package/linker/babel/src/es2015_linker_plugin.js +0 -183
  237. package/linker/babel/src/linker_plugin_options.js +0 -13
  238. package/linker/index.js +0 -27
  239. package/linker/src/ast/ast_host.js +0 -20
  240. package/linker/src/ast/ast_value.js +0 -299
  241. package/linker/src/ast/typescript/typescript_ast_host.js +0 -183
  242. package/linker/src/ast/utils.js +0 -31
  243. package/linker/src/fatal_linker_error.js +0 -49
  244. package/linker/src/file_linker/declaration_scope.js +0 -20
  245. package/linker/src/file_linker/emit_scopes/emit_scope.js +0 -57
  246. package/linker/src/file_linker/emit_scopes/iife_emit_scope.js +0 -51
  247. package/linker/src/file_linker/file_linker.js +0 -97
  248. package/linker/src/file_linker/get_source_file.js +0 -42
  249. package/linker/src/file_linker/linker_environment.js +0 -38
  250. package/linker/src/file_linker/linker_options.js +0 -29
  251. package/linker/src/file_linker/needs_linking.js +0 -41
  252. package/linker/src/file_linker/partial_linkers/partial_class_metadata_linker_1.js +0 -47
  253. package/linker/src/file_linker/partial_linkers/partial_component_linker_1.js +0 -210
  254. package/linker/src/file_linker/partial_linkers/partial_directive_linker_1.js +0 -154
  255. package/linker/src/file_linker/partial_linkers/partial_factory_linker_1.js +0 -70
  256. package/linker/src/file_linker/partial_linkers/partial_injectable_linker_1.js +0 -74
  257. package/linker/src/file_linker/partial_linkers/partial_injector_linker_1.js +0 -56
  258. package/linker/src/file_linker/partial_linkers/partial_linker.js +0 -13
  259. package/linker/src/file_linker/partial_linkers/partial_linker_selector.js +0 -194
  260. package/linker/src/file_linker/partial_linkers/partial_ng_module_linker_1.js +0 -126
  261. package/linker/src/file_linker/partial_linkers/partial_pipe_linker_1.js +0 -59
  262. package/linker/src/file_linker/partial_linkers/util.js +0 -95
  263. package/linker/src/file_linker/translator.js +0 -40
  264. package/linker/src/linker_import_generator.js +0 -43
  265. package/ngcc/index.js +0 -33
  266. package/ngcc/main-ivy-ngcc.js +0 -12
  267. package/ngcc/main-ngcc.js +0 -54
  268. package/ngcc/src/analysis/decoration_analyzer.js +0 -268
  269. package/ngcc/src/analysis/migration_host.js +0 -108
  270. package/ngcc/src/analysis/module_with_providers_analyzer.js +0 -197
  271. package/ngcc/src/analysis/ngcc_references_registry.js +0 -65
  272. package/ngcc/src/analysis/ngcc_trait_compiler.js +0 -117
  273. package/ngcc/src/analysis/private_declarations_analyzer.js +0 -63
  274. package/ngcc/src/analysis/switch_marker_analyzer.js +0 -50
  275. package/ngcc/src/analysis/types.js +0 -15
  276. package/ngcc/src/analysis/util.js +0 -36
  277. package/ngcc/src/command_line_options.js +0 -156
  278. package/ngcc/src/constants.js +0 -23
  279. package/ngcc/src/dependencies/commonjs_dependency_host.js +0 -129
  280. package/ngcc/src/dependencies/dependency_host.js +0 -143
  281. package/ngcc/src/dependencies/dependency_resolver.js +0 -180
  282. package/ngcc/src/dependencies/dts_dependency_host.js +0 -35
  283. package/ngcc/src/dependencies/esm_dependency_host.js +0 -307
  284. package/ngcc/src/dependencies/module_resolver.js +0 -269
  285. package/ngcc/src/dependencies/umd_dependency_host.js +0 -53
  286. package/ngcc/src/entry_point_finder/directory_walker_entry_point_finder.js +0 -70
  287. package/ngcc/src/entry_point_finder/entry_point_collector.js +0 -157
  288. package/ngcc/src/entry_point_finder/interface.js +0 -13
  289. package/ngcc/src/entry_point_finder/program_based_entry_point_finder.js +0 -132
  290. package/ngcc/src/entry_point_finder/targeted_entry_point_finder.js +0 -268
  291. package/ngcc/src/entry_point_finder/tracing_entry_point_finder.js +0 -78
  292. package/ngcc/src/entry_point_finder/utils.js +0 -234
  293. package/ngcc/src/execution/analyze_entry_points.js +0 -197
  294. package/ngcc/src/execution/api.js +0 -13
  295. package/ngcc/src/execution/cluster/api.js +0 -20
  296. package/ngcc/src/execution/cluster/executor.js +0 -52
  297. package/ngcc/src/execution/cluster/master.js +0 -311
  298. package/ngcc/src/execution/cluster/package_json_updater.js +0 -79
  299. package/ngcc/src/execution/cluster/utils.js +0 -77
  300. package/ngcc/src/execution/cluster/worker.js +0 -123
  301. package/ngcc/src/execution/create_compile_function.js +0 -76
  302. package/ngcc/src/execution/single_process_executor.js +0 -91
  303. package/ngcc/src/execution/tasks/api.js +0 -35
  304. package/ngcc/src/execution/tasks/completion.js +0 -79
  305. package/ngcc/src/execution/tasks/queues/base_task_queue.js +0 -120
  306. package/ngcc/src/execution/tasks/queues/parallel_task_queue.js +0 -87
  307. package/ngcc/src/execution/tasks/queues/serial_task_queue.js +0 -49
  308. package/ngcc/src/execution/tasks/utils.js +0 -167
  309. package/ngcc/src/host/commonjs_host.js +0 -261
  310. package/ngcc/src/host/commonjs_umd_utils.js +0 -210
  311. package/ngcc/src/host/delegating_host.js +0 -156
  312. package/ngcc/src/host/esm2015_host.js +0 -2441
  313. package/ngcc/src/host/esm5_host.js +0 -744
  314. package/ngcc/src/host/ngcc_host.js +0 -29
  315. package/ngcc/src/host/umd_host.js +0 -539
  316. package/ngcc/src/host/utils.js +0 -26
  317. package/ngcc/src/locking/async_locker.js +0 -121
  318. package/ngcc/src/locking/lock_file.js +0 -18
  319. package/ngcc/src/locking/lock_file_with_child_process/index.js +0 -93
  320. package/ngcc/src/locking/lock_file_with_child_process/unlocker.js +0 -46
  321. package/ngcc/src/locking/lock_file_with_child_process/util.js +0 -43
  322. package/ngcc/src/locking/sync_locker.js +0 -67
  323. package/ngcc/src/main.js +0 -163
  324. package/ngcc/src/migrations/migration.js +0 -13
  325. package/ngcc/src/migrations/missing_injectable_migration.js +0 -227
  326. package/ngcc/src/migrations/undecorated_child_migration.js +0 -90
  327. package/ngcc/src/migrations/undecorated_parent_migration.js +0 -103
  328. package/ngcc/src/migrations/utils.js +0 -137
  329. package/ngcc/src/ngcc_options.js +0 -135
  330. package/ngcc/src/packages/build_marker.js +0 -124
  331. package/ngcc/src/packages/bundle_program.js +0 -80
  332. package/ngcc/src/packages/configuration.js +0 -277
  333. package/ngcc/src/packages/entry_point.js +0 -267
  334. package/ngcc/src/packages/entry_point_bundle.js +0 -96
  335. package/ngcc/src/packages/entry_point_manifest.js +0 -207
  336. package/ngcc/src/packages/ngcc_compiler_host.js +0 -101
  337. package/ngcc/src/packages/patch_ts_expando_initializer.js +0 -174
  338. package/ngcc/src/packages/source_file_cache.js +0 -207
  339. package/ngcc/src/packages/transformer.js +0 -157
  340. package/ngcc/src/path_mappings.js +0 -27
  341. package/ngcc/src/rendering/commonjs_rendering_formatter.js +0 -106
  342. package/ngcc/src/rendering/dts_renderer.js +0 -170
  343. package/ngcc/src/rendering/esm5_rendering_formatter.js +0 -70
  344. package/ngcc/src/rendering/esm_rendering_formatter.js +0 -291
  345. package/ngcc/src/rendering/ngcc_import_rewriter.js +0 -49
  346. package/ngcc/src/rendering/renderer.js +0 -204
  347. package/ngcc/src/rendering/rendering_formatter.js +0 -15
  348. package/ngcc/src/rendering/source_maps.js +0 -68
  349. package/ngcc/src/rendering/umd_rendering_formatter.js +0 -326
  350. package/ngcc/src/rendering/utils.js +0 -35
  351. package/ngcc/src/utils.js +0 -182
  352. package/ngcc/src/writing/cleaning/cleaning_strategies.js +0 -80
  353. package/ngcc/src/writing/cleaning/package_cleaner.js +0 -126
  354. package/ngcc/src/writing/cleaning/utils.js +0 -30
  355. package/ngcc/src/writing/file_writer.js +0 -13
  356. package/ngcc/src/writing/in_place_file_writer.js +0 -90
  357. package/ngcc/src/writing/new_entry_point_file_writer.js +0 -214
  358. package/ngcc/src/writing/package_json_updater.js +0 -182
  359. package/src/diagnostics/translate_diagnostics.js +0 -61
  360. package/src/diagnostics/typescript_version.js +0 -96
  361. package/src/extract_i18n.js +0 -62
  362. package/src/language_services.js +0 -34
  363. package/src/main.js +0 -210
  364. package/src/metadata/bundle_index_host.js +0 -133
  365. package/src/metadata/bundler.js +0 -624
  366. package/src/metadata/collector.js +0 -799
  367. package/src/metadata/evaluator.js +0 -677
  368. package/src/metadata/index.js +0 -24
  369. package/src/metadata/index_writer.js +0 -80
  370. package/src/metadata/schema.js +0 -136
  371. package/src/metadata/symbols.js +0 -149
  372. package/src/ngtsc/annotations/index.js +0 -35
  373. package/src/ngtsc/annotations/src/api.js +0 -20
  374. package/src/ngtsc/annotations/src/component.js +0 -1338
  375. package/src/ngtsc/annotations/src/diagnostics.js +0 -174
  376. package/src/ngtsc/annotations/src/directive.js +0 -724
  377. package/src/ngtsc/annotations/src/factory.js +0 -32
  378. package/src/ngtsc/annotations/src/injectable.js +0 -277
  379. package/src/ngtsc/annotations/src/metadata.js +0 -160
  380. package/src/ngtsc/annotations/src/ng_module.js +0 -677
  381. package/src/ngtsc/annotations/src/pipe.js +0 -171
  382. package/src/ngtsc/annotations/src/references_registry.js +0 -38
  383. package/src/ngtsc/annotations/src/util.js +0 -566
  384. package/src/ngtsc/core/api/index.js +0 -25
  385. package/src/ngtsc/core/api/src/adapter.js +0 -20
  386. package/src/ngtsc/core/api/src/interfaces.js +0 -20
  387. package/src/ngtsc/core/api/src/options.js +0 -20
  388. package/src/ngtsc/core/api/src/public_options.js +0 -20
  389. package/src/ngtsc/core/index.js +0 -25
  390. package/src/ngtsc/core/src/compiler.js +0 -1142
  391. package/src/ngtsc/core/src/host.js +0 -273
  392. package/src/ngtsc/cycles/index.js +0 -26
  393. package/src/ngtsc/cycles/src/analyzer.js +0 -163
  394. package/src/ngtsc/cycles/src/imports.js +0 -175
  395. package/src/ngtsc/diagnostics/index.js +0 -33
  396. package/src/ngtsc/diagnostics/src/error.js +0 -69
  397. package/src/ngtsc/diagnostics/src/error_code.js +0 -235
  398. package/src/ngtsc/diagnostics/src/util.js +0 -35
  399. package/src/ngtsc/entry_point/index.js +0 -29
  400. package/src/ngtsc/entry_point/src/generator.js +0 -45
  401. package/src/ngtsc/entry_point/src/logic.js +0 -61
  402. package/src/ngtsc/entry_point/src/private_export_checker.js +0 -137
  403. package/src/ngtsc/entry_point/src/reference_graph.js +0 -91
  404. package/src/ngtsc/file_system/index.js +0 -45
  405. package/src/ngtsc/file_system/src/compiler_host.js +0 -80
  406. package/src/ngtsc/file_system/src/helpers.js +0 -135
  407. package/src/ngtsc/file_system/src/invalid_file_system.js +0 -120
  408. package/src/ngtsc/file_system/src/logical.js +0 -100
  409. package/src/ngtsc/file_system/src/node_js_file_system.js +0 -179
  410. package/src/ngtsc/file_system/src/types.js +0 -20
  411. package/src/ngtsc/file_system/src/util.js +0 -38
  412. package/src/ngtsc/file_system/testing/index.d.ts +0 -13
  413. package/src/ngtsc/file_system/testing/index.js +0 -32
  414. package/src/ngtsc/file_system/testing/src/mock_file_system.d.ts +0 -72
  415. package/src/ngtsc/file_system/testing/src/mock_file_system.js +0 -333
  416. package/src/ngtsc/file_system/testing/src/mock_file_system_native.d.ts +0 -16
  417. package/src/ngtsc/file_system/testing/src/mock_file_system_native.js +0 -85
  418. package/src/ngtsc/file_system/testing/src/mock_file_system_posix.d.ts +0 -13
  419. package/src/ngtsc/file_system/testing/src/mock_file_system_posix.js +0 -68
  420. package/src/ngtsc/file_system/testing/src/mock_file_system_windows.d.ts +0 -13
  421. package/src/ngtsc/file_system/testing/src/mock_file_system_windows.js +0 -68
  422. package/src/ngtsc/file_system/testing/src/test_helper.d.ts +0 -17
  423. package/src/ngtsc/file_system/testing/src/test_helper.js +0 -142
  424. package/src/ngtsc/imports/index.js +0 -43
  425. package/src/ngtsc/imports/src/alias.js +0 -158
  426. package/src/ngtsc/imports/src/core.js +0 -98
  427. package/src/ngtsc/imports/src/default.js +0 -153
  428. package/src/ngtsc/imports/src/emitter.js +0 -317
  429. package/src/ngtsc/imports/src/find_export.js +0 -82
  430. package/src/ngtsc/imports/src/reexport.js +0 -20
  431. package/src/ngtsc/imports/src/references.js +0 -171
  432. package/src/ngtsc/imports/src/resolver.js +0 -39
  433. package/src/ngtsc/incremental/api.js +0 -20
  434. package/src/ngtsc/incremental/index.js +0 -29
  435. package/src/ngtsc/incremental/semantic_graph/index.js +0 -34
  436. package/src/ngtsc/incremental/semantic_graph/src/api.js +0 -51
  437. package/src/ngtsc/incremental/semantic_graph/src/graph.js +0 -302
  438. package/src/ngtsc/incremental/semantic_graph/src/type_parameters.js +0 -55
  439. package/src/ngtsc/incremental/semantic_graph/src/util.js +0 -111
  440. package/src/ngtsc/incremental/src/dependency_tracking.js +0 -165
  441. package/src/ngtsc/incremental/src/incremental.js +0 -393
  442. package/src/ngtsc/incremental/src/noop.js +0 -26
  443. package/src/ngtsc/incremental/src/state.js +0 -30
  444. package/src/ngtsc/incremental/src/strategy.js +0 -99
  445. package/src/ngtsc/indexer/index.js +0 -27
  446. package/src/ngtsc/indexer/src/api.js +0 -45
  447. package/src/ngtsc/indexer/src/context.js +0 -40
  448. package/src/ngtsc/indexer/src/template.js +0 -324
  449. package/src/ngtsc/indexer/src/transform.js +0 -66
  450. package/src/ngtsc/logging/index.js +0 -25
  451. package/src/ngtsc/logging/src/console_logger.js +0 -75
  452. package/src/ngtsc/logging/src/logger.js +0 -28
  453. package/src/ngtsc/logging/testing/index.js +0 -23
  454. package/src/ngtsc/logging/testing/src/mock_logger.d.ts +0 -20
  455. package/src/ngtsc/logging/testing/src/mock_logger.js +0 -64
  456. package/src/ngtsc/metadata/index.js +0 -39
  457. package/src/ngtsc/metadata/src/api.js +0 -26
  458. package/src/ngtsc/metadata/src/dts.js +0 -168
  459. package/src/ngtsc/metadata/src/inheritance.js +0 -122
  460. package/src/ngtsc/metadata/src/property_mapping.js +0 -244
  461. package/src/ngtsc/metadata/src/registry.js +0 -133
  462. package/src/ngtsc/metadata/src/resource_registry.js +0 -109
  463. package/src/ngtsc/metadata/src/util.js +0 -275
  464. package/src/ngtsc/partial_evaluator/index.js +0 -31
  465. package/src/ngtsc/partial_evaluator/src/builtin.js +0 -125
  466. package/src/ngtsc/partial_evaluator/src/diagnostics.js +0 -193
  467. package/src/ngtsc/partial_evaluator/src/dynamic.js +0 -109
  468. package/src/ngtsc/partial_evaluator/src/interface.js +0 -42
  469. package/src/ngtsc/partial_evaluator/src/interpreter.js +0 -780
  470. package/src/ngtsc/partial_evaluator/src/known_declaration.js +0 -57
  471. package/src/ngtsc/partial_evaluator/src/result.js +0 -72
  472. package/src/ngtsc/partial_evaluator/src/ts_helpers.js +0 -121
  473. package/src/ngtsc/perf/index.js +0 -28
  474. package/src/ngtsc/perf/src/api.js +0 -291
  475. package/src/ngtsc/perf/src/clock.js +0 -30
  476. package/src/ngtsc/perf/src/noop.js +0 -37
  477. package/src/ngtsc/perf/src/recorder.js +0 -143
  478. package/src/ngtsc/program.js +0 -360
  479. package/src/ngtsc/program_driver/index.js +0 -25
  480. package/src/ngtsc/program_driver/src/api.js +0 -36
  481. package/src/ngtsc/program_driver/src/ts_create_program_driver.js +0 -200
  482. package/src/ngtsc/reflection/index.js +0 -36
  483. package/src/ngtsc/reflection/src/host.js +0 -88
  484. package/src/ngtsc/reflection/src/type_to_value.js +0 -259
  485. package/src/ngtsc/reflection/src/typescript.js +0 -640
  486. package/src/ngtsc/reflection/src/util.js +0 -37
  487. package/src/ngtsc/resource/index.js +0 -23
  488. package/src/ngtsc/resource/src/loader.js +0 -285
  489. package/src/ngtsc/routing/index.js +0 -26
  490. package/src/ngtsc/routing/src/analyzer.d.ts +0 -37
  491. package/src/ngtsc/routing/src/analyzer.js +0 -82
  492. package/src/ngtsc/routing/src/lazy.d.ts +0 -19
  493. package/src/ngtsc/routing/src/lazy.js +0 -239
  494. package/src/ngtsc/routing/src/route.d.ts +0 -23
  495. package/src/ngtsc/routing/src/route.js +0 -77
  496. package/src/ngtsc/scope/index.js +0 -29
  497. package/src/ngtsc/scope/src/api.js +0 -20
  498. package/src/ngtsc/scope/src/component_scope.js +0 -69
  499. package/src/ngtsc/scope/src/dependency.js +0 -201
  500. package/src/ngtsc/scope/src/local.js +0 -665
  501. package/src/ngtsc/scope/src/typecheck.js +0 -120
  502. package/src/ngtsc/shims/api.js +0 -13
  503. package/src/ngtsc/shims/index.js +0 -39
  504. package/src/ngtsc/shims/src/adapter.js +0 -266
  505. package/src/ngtsc/shims/src/expando.js +0 -147
  506. package/src/ngtsc/shims/src/factory_generator.js +0 -292
  507. package/src/ngtsc/shims/src/reference_tagger.js +0 -94
  508. package/src/ngtsc/shims/src/summary_generator.js +0 -101
  509. package/src/ngtsc/shims/src/util.js +0 -41
  510. package/src/ngtsc/sourcemaps/index.js +0 -27
  511. package/src/ngtsc/sourcemaps/src/content_origin.js +0 -48
  512. package/src/ngtsc/sourcemaps/src/raw_source_map.js +0 -13
  513. package/src/ngtsc/sourcemaps/src/segment_marker.js +0 -55
  514. package/src/ngtsc/sourcemaps/src/source_file.js +0 -519
  515. package/src/ngtsc/sourcemaps/src/source_file_loader.js +0 -234
  516. package/src/ngtsc/switch/index.js +0 -23
  517. package/src/ngtsc/switch/src/switch.js +0 -141
  518. package/src/ngtsc/transform/index.js +0 -36
  519. package/src/ngtsc/transform/src/alias.js +0 -46
  520. package/src/ngtsc/transform/src/api.js +0 -76
  521. package/src/ngtsc/transform/src/compilation.js +0 -862
  522. package/src/ngtsc/transform/src/declaration.js +0 -234
  523. package/src/ngtsc/transform/src/trait.js +0 -111
  524. package/src/ngtsc/transform/src/transform.js +0 -333
  525. package/src/ngtsc/transform/src/utils.js +0 -73
  526. package/src/ngtsc/translator/index.js +0 -37
  527. package/src/ngtsc/translator/src/api/ast_factory.js +0 -20
  528. package/src/ngtsc/translator/src/api/import_generator.js +0 -20
  529. package/src/ngtsc/translator/src/context.js +0 -47
  530. package/src/ngtsc/translator/src/import_manager.js +0 -77
  531. package/src/ngtsc/translator/src/translator.js +0 -347
  532. package/src/ngtsc/translator/src/type_translator.js +0 -220
  533. package/src/ngtsc/translator/src/typescript_ast_factory.js +0 -251
  534. package/src/ngtsc/translator/src/typescript_translator.js +0 -34
  535. package/src/ngtsc/tsc_plugin.js +0 -129
  536. package/src/ngtsc/typecheck/api/api.js +0 -20
  537. package/src/ngtsc/typecheck/api/checker.js +0 -44
  538. package/src/ngtsc/typecheck/api/completion.js +0 -29
  539. package/src/ngtsc/typecheck/api/context.js +0 -20
  540. package/src/ngtsc/typecheck/api/index.js +0 -27
  541. package/src/ngtsc/typecheck/api/scope.js +0 -20
  542. package/src/ngtsc/typecheck/api/symbols.js +0 -35
  543. package/src/ngtsc/typecheck/diagnostics/index.js +0 -23
  544. package/src/ngtsc/typecheck/diagnostics/src/diagnostic.js +0 -141
  545. package/src/ngtsc/typecheck/diagnostics/src/id.js +0 -37
  546. package/src/ngtsc/typecheck/extended/api/api.js +0 -124
  547. package/src/ngtsc/typecheck/extended/api/extended_template_checker.js +0 -20
  548. package/src/ngtsc/typecheck/extended/api/index.js +0 -23
  549. package/src/ngtsc/typecheck/extended/checks/invalid_banana_in_box/index.js +0 -52
  550. package/src/ngtsc/typecheck/extended/checks/nullish_coalescing_not_nullable/index.js +0 -64
  551. package/src/ngtsc/typecheck/extended/index.js +0 -23
  552. package/src/ngtsc/typecheck/extended/src/extended_template_checker.js +0 -55
  553. package/src/ngtsc/typecheck/index.js +0 -29
  554. package/src/ngtsc/typecheck/src/checker.js +0 -764
  555. package/src/ngtsc/typecheck/src/comments.js +0 -181
  556. package/src/ngtsc/typecheck/src/completion.js +0 -230
  557. package/src/ngtsc/typecheck/src/context.js +0 -424
  558. package/src/ngtsc/typecheck/src/diagnostics.js +0 -114
  559. package/src/ngtsc/typecheck/src/dom.js +0 -87
  560. package/src/ngtsc/typecheck/src/environment.js +0 -160
  561. package/src/ngtsc/typecheck/src/expression.js +0 -417
  562. package/src/ngtsc/typecheck/src/line_mappings.js +0 -77
  563. package/src/ngtsc/typecheck/src/oob.js +0 -181
  564. package/src/ngtsc/typecheck/src/shim.js +0 -52
  565. package/src/ngtsc/typecheck/src/source.js +0 -91
  566. package/src/ngtsc/typecheck/src/tcb_util.js +0 -165
  567. package/src/ngtsc/typecheck/src/template_semantics.js +0 -52
  568. package/src/ngtsc/typecheck/src/template_symbol_builder.js +0 -551
  569. package/src/ngtsc/typecheck/src/ts_util.js +0 -202
  570. package/src/ngtsc/typecheck/src/type_check_block.js +0 -2212
  571. package/src/ngtsc/typecheck/src/type_check_file.js +0 -115
  572. package/src/ngtsc/typecheck/src/type_constructor.js +0 -255
  573. package/src/ngtsc/typecheck/src/type_emitter.js +0 -164
  574. package/src/ngtsc/typecheck/src/type_parameter_emitter.js +0 -115
  575. package/src/ngtsc/util/src/path.js +0 -33
  576. package/src/ngtsc/util/src/typescript.js +0 -176
  577. package/src/ngtsc/util/src/visitor.js +0 -119
  578. package/src/ngtsc/xi18n/index.js +0 -22
  579. package/src/ngtsc/xi18n/src/context.js +0 -20
  580. package/src/perform_compile.js +0 -322
  581. package/src/perform_watch.js +0 -263
  582. package/src/tooling.js +0 -47
  583. package/src/transformers/api.js +0 -42
  584. package/src/transformers/compiler_host.js +0 -623
  585. package/src/transformers/downlevel_decorators_transform.js +0 -612
  586. package/src/transformers/entry_points.js +0 -25
  587. package/src/transformers/i18n.js +0 -76
  588. package/src/transformers/inline_resources.js +0 -287
  589. package/src/transformers/lower_expressions.js +0 -365
  590. package/src/transformers/metadata_cache.js +0 -96
  591. package/src/transformers/metadata_reader.js +0 -120
  592. package/src/transformers/node_emitter.js +0 -637
  593. package/src/transformers/node_emitter_transform.js +0 -88
  594. package/src/transformers/patch_alias_reference_resolution.js +0 -129
  595. package/src/transformers/program.js +0 -1000
  596. package/src/transformers/r3_metadata_transform.js +0 -73
  597. package/src/transformers/r3_transform.js +0 -44
  598. package/src/transformers/util.js +0 -122
  599. package/src/typescript_support.js +0 -74
  600. package/src/version.js +0 -28
@@ -1,677 +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/annotations/src/ng_module", ["require", "exports", "tslib", "@angular/compiler", "typescript", "@angular/compiler-cli/src/ngtsc/diagnostics", "@angular/compiler-cli/src/ngtsc/imports", "@angular/compiler-cli/src/ngtsc/incremental/semantic_graph", "@angular/compiler-cli/src/ngtsc/perf", "@angular/compiler-cli/src/ngtsc/reflection", "@angular/compiler-cli/src/ngtsc/transform", "@angular/compiler-cli/src/ngtsc/util/src/typescript", "@angular/compiler-cli/src/ngtsc/annotations/src/diagnostics", "@angular/compiler-cli/src/ngtsc/annotations/src/factory", "@angular/compiler-cli/src/ngtsc/annotations/src/metadata", "@angular/compiler-cli/src/ngtsc/annotations/src/util"], factory);
15
- }
16
- })(function (require, exports) {
17
- "use strict";
18
- Object.defineProperty(exports, "__esModule", { value: true });
19
- exports.NgModuleDecoratorHandler = exports.NgModuleSymbol = void 0;
20
- var tslib_1 = require("tslib");
21
- var compiler_1 = require("@angular/compiler");
22
- var ts = require("typescript");
23
- var diagnostics_1 = require("@angular/compiler-cli/src/ngtsc/diagnostics");
24
- var imports_1 = require("@angular/compiler-cli/src/ngtsc/imports");
25
- var semantic_graph_1 = require("@angular/compiler-cli/src/ngtsc/incremental/semantic_graph");
26
- var perf_1 = require("@angular/compiler-cli/src/ngtsc/perf");
27
- var reflection_1 = require("@angular/compiler-cli/src/ngtsc/reflection");
28
- var transform_1 = require("@angular/compiler-cli/src/ngtsc/transform");
29
- var typescript_1 = require("@angular/compiler-cli/src/ngtsc/util/src/typescript");
30
- var diagnostics_2 = require("@angular/compiler-cli/src/ngtsc/annotations/src/diagnostics");
31
- var factory_1 = require("@angular/compiler-cli/src/ngtsc/annotations/src/factory");
32
- var metadata_1 = require("@angular/compiler-cli/src/ngtsc/annotations/src/metadata");
33
- var util_1 = require("@angular/compiler-cli/src/ngtsc/annotations/src/util");
34
- /**
35
- * Represents an Angular NgModule.
36
- */
37
- var NgModuleSymbol = /** @class */ (function (_super) {
38
- tslib_1.__extends(NgModuleSymbol, _super);
39
- function NgModuleSymbol() {
40
- var _this = _super !== null && _super.apply(this, arguments) || this;
41
- _this.remotelyScopedComponents = [];
42
- return _this;
43
- }
44
- NgModuleSymbol.prototype.isPublicApiAffected = function (previousSymbol) {
45
- if (!(previousSymbol instanceof NgModuleSymbol)) {
46
- return true;
47
- }
48
- // NgModules don't have a public API that could affect emit of Angular decorated classes.
49
- return false;
50
- };
51
- NgModuleSymbol.prototype.isEmitAffected = function (previousSymbol) {
52
- var e_1, _a;
53
- if (!(previousSymbol instanceof NgModuleSymbol)) {
54
- return true;
55
- }
56
- // compare our remotelyScopedComponents to the previous symbol
57
- if (previousSymbol.remotelyScopedComponents.length !== this.remotelyScopedComponents.length) {
58
- return true;
59
- }
60
- var _loop_1 = function (currEntry) {
61
- var prevEntry = previousSymbol.remotelyScopedComponents.find(function (prevEntry) {
62
- return semantic_graph_1.isSymbolEqual(prevEntry.component, currEntry.component);
63
- });
64
- if (prevEntry === undefined) {
65
- return { value: true };
66
- }
67
- if (!semantic_graph_1.isArrayEqual(currEntry.usedDirectives, prevEntry.usedDirectives, semantic_graph_1.isReferenceEqual)) {
68
- return { value: true };
69
- }
70
- if (!semantic_graph_1.isArrayEqual(currEntry.usedPipes, prevEntry.usedPipes, semantic_graph_1.isReferenceEqual)) {
71
- return { value: true };
72
- }
73
- };
74
- try {
75
- for (var _b = tslib_1.__values(this.remotelyScopedComponents), _c = _b.next(); !_c.done; _c = _b.next()) {
76
- var currEntry = _c.value;
77
- var state_1 = _loop_1(currEntry);
78
- if (typeof state_1 === "object")
79
- return state_1.value;
80
- }
81
- }
82
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
83
- finally {
84
- try {
85
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
86
- }
87
- finally { if (e_1) throw e_1.error; }
88
- }
89
- return false;
90
- };
91
- NgModuleSymbol.prototype.isTypeCheckApiAffected = function (previousSymbol) {
92
- if (!(previousSymbol instanceof NgModuleSymbol)) {
93
- return true;
94
- }
95
- return false;
96
- };
97
- NgModuleSymbol.prototype.addRemotelyScopedComponent = function (component, usedDirectives, usedPipes) {
98
- this.remotelyScopedComponents.push({ component: component, usedDirectives: usedDirectives, usedPipes: usedPipes });
99
- };
100
- return NgModuleSymbol;
101
- }(semantic_graph_1.SemanticSymbol));
102
- exports.NgModuleSymbol = NgModuleSymbol;
103
- /**
104
- * Compiles @NgModule annotations to ngModuleDef fields.
105
- */
106
- var NgModuleDecoratorHandler = /** @class */ (function () {
107
- function NgModuleDecoratorHandler(reflector, evaluator, metaReader, metaRegistry, scopeRegistry, referencesRegistry, isCore, routeAnalyzer, refEmitter, factoryTracker, annotateForClosureCompiler, injectableRegistry, perf, localeId) {
108
- this.reflector = reflector;
109
- this.evaluator = evaluator;
110
- this.metaReader = metaReader;
111
- this.metaRegistry = metaRegistry;
112
- this.scopeRegistry = scopeRegistry;
113
- this.referencesRegistry = referencesRegistry;
114
- this.isCore = isCore;
115
- this.routeAnalyzer = routeAnalyzer;
116
- this.refEmitter = refEmitter;
117
- this.factoryTracker = factoryTracker;
118
- this.annotateForClosureCompiler = annotateForClosureCompiler;
119
- this.injectableRegistry = injectableRegistry;
120
- this.perf = perf;
121
- this.localeId = localeId;
122
- this.precedence = transform_1.HandlerPrecedence.PRIMARY;
123
- this.name = NgModuleDecoratorHandler.name;
124
- }
125
- NgModuleDecoratorHandler.prototype.detect = function (node, decorators) {
126
- if (!decorators) {
127
- return undefined;
128
- }
129
- var decorator = util_1.findAngularDecorator(decorators, 'NgModule', this.isCore);
130
- if (decorator !== undefined) {
131
- return {
132
- trigger: decorator.node,
133
- decorator: decorator,
134
- metadata: decorator,
135
- };
136
- }
137
- else {
138
- return undefined;
139
- }
140
- };
141
- NgModuleDecoratorHandler.prototype.analyze = function (node, decorator) {
142
- var e_2, _a, _b, e_3, _c;
143
- var _this = this;
144
- this.perf.eventCount(perf_1.PerfEvent.AnalyzeNgModule);
145
- var name = node.name.text;
146
- if (decorator.args === null || decorator.args.length > 1) {
147
- throw new diagnostics_1.FatalDiagnosticError(diagnostics_1.ErrorCode.DECORATOR_ARITY_WRONG, reflection_1.Decorator.nodeForError(decorator), "Incorrect number of arguments to @NgModule decorator");
148
- }
149
- // @NgModule can be invoked without arguments. In case it is, pretend as if a blank object
150
- // literal was specified. This simplifies the code below.
151
- var meta = decorator.args.length === 1 ? util_1.unwrapExpression(decorator.args[0]) :
152
- ts.createObjectLiteral([]);
153
- if (!ts.isObjectLiteralExpression(meta)) {
154
- throw new diagnostics_1.FatalDiagnosticError(diagnostics_1.ErrorCode.DECORATOR_ARG_NOT_LITERAL, meta, '@NgModule argument must be an object literal');
155
- }
156
- var ngModule = reflection_1.reflectObjectLiteral(meta);
157
- if (ngModule.has('jit')) {
158
- // The only allowed value is true, so there's no need to expand further.
159
- return {};
160
- }
161
- var moduleResolvers = util_1.combineResolvers([
162
- function (ref) { return _this._extractModuleFromModuleWithProvidersFn(ref.node); },
163
- util_1.forwardRefResolver,
164
- ]);
165
- var diagnostics = [];
166
- // Extract the module declarations, imports, and exports.
167
- var declarationRefs = [];
168
- var rawDeclarations = null;
169
- if (ngModule.has('declarations')) {
170
- rawDeclarations = ngModule.get('declarations');
171
- var declarationMeta = this.evaluator.evaluate(rawDeclarations, util_1.forwardRefResolver);
172
- declarationRefs =
173
- this.resolveTypeList(rawDeclarations, declarationMeta, name, 'declarations');
174
- try {
175
- // Look through the declarations to make sure they're all a part of the current compilation.
176
- for (var declarationRefs_1 = tslib_1.__values(declarationRefs), declarationRefs_1_1 = declarationRefs_1.next(); !declarationRefs_1_1.done; declarationRefs_1_1 = declarationRefs_1.next()) {
177
- var ref = declarationRefs_1_1.value;
178
- if (ref.node.getSourceFile().isDeclarationFile) {
179
- var errorNode = ref.getOriginForDiagnostics(rawDeclarations);
180
- diagnostics.push(diagnostics_1.makeDiagnostic(diagnostics_1.ErrorCode.NGMODULE_INVALID_DECLARATION, errorNode, "Cannot declare '" + ref.node.name
181
- .text + "' in an NgModule as it's not a part of the current compilation.", [diagnostics_1.makeRelatedInformation(ref.node.name, "'" + ref.node.name.text + "' is declared here.")]));
182
- }
183
- }
184
- }
185
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
186
- finally {
187
- try {
188
- if (declarationRefs_1_1 && !declarationRefs_1_1.done && (_a = declarationRefs_1.return)) _a.call(declarationRefs_1);
189
- }
190
- finally { if (e_2) throw e_2.error; }
191
- }
192
- }
193
- if (diagnostics.length > 0) {
194
- return { diagnostics: diagnostics };
195
- }
196
- var importRefs = [];
197
- var rawImports = null;
198
- if (ngModule.has('imports')) {
199
- rawImports = ngModule.get('imports');
200
- var importsMeta = this.evaluator.evaluate(rawImports, moduleResolvers);
201
- importRefs = this.resolveTypeList(rawImports, importsMeta, name, 'imports');
202
- }
203
- var exportRefs = [];
204
- var rawExports = null;
205
- if (ngModule.has('exports')) {
206
- rawExports = ngModule.get('exports');
207
- var exportsMeta = this.evaluator.evaluate(rawExports, moduleResolvers);
208
- exportRefs = this.resolveTypeList(rawExports, exportsMeta, name, 'exports');
209
- (_b = this.referencesRegistry).add.apply(_b, tslib_1.__spreadArray([node], tslib_1.__read(exportRefs)));
210
- }
211
- var bootstrapRefs = [];
212
- if (ngModule.has('bootstrap')) {
213
- var expr = ngModule.get('bootstrap');
214
- var bootstrapMeta = this.evaluator.evaluate(expr, util_1.forwardRefResolver);
215
- bootstrapRefs = this.resolveTypeList(expr, bootstrapMeta, name, 'bootstrap');
216
- }
217
- var schemas = [];
218
- if (ngModule.has('schemas')) {
219
- var rawExpr = ngModule.get('schemas');
220
- var result = this.evaluator.evaluate(rawExpr);
221
- if (!Array.isArray(result)) {
222
- throw diagnostics_2.createValueHasWrongTypeError(rawExpr, result, "NgModule.schemas must be an array");
223
- }
224
- try {
225
- for (var result_1 = tslib_1.__values(result), result_1_1 = result_1.next(); !result_1_1.done; result_1_1 = result_1.next()) {
226
- var schemaRef = result_1_1.value;
227
- if (!(schemaRef instanceof imports_1.Reference)) {
228
- throw diagnostics_2.createValueHasWrongTypeError(rawExpr, result, 'NgModule.schemas must be an array of schemas');
229
- }
230
- var id_1 = schemaRef.getIdentityIn(schemaRef.node.getSourceFile());
231
- if (id_1 === null || schemaRef.ownedByModuleGuess !== '@angular/core') {
232
- throw diagnostics_2.createValueHasWrongTypeError(rawExpr, result, 'NgModule.schemas must be an array of schemas');
233
- }
234
- // Since `id` is the `ts.Identifer` within the schema ref's declaration file, it's safe to
235
- // use `id.text` here to figure out which schema is in use. Even if the actual reference was
236
- // renamed when the user imported it, these names will match.
237
- switch (id_1.text) {
238
- case 'CUSTOM_ELEMENTS_SCHEMA':
239
- schemas.push(compiler_1.CUSTOM_ELEMENTS_SCHEMA);
240
- break;
241
- case 'NO_ERRORS_SCHEMA':
242
- schemas.push(compiler_1.NO_ERRORS_SCHEMA);
243
- break;
244
- default:
245
- throw diagnostics_2.createValueHasWrongTypeError(rawExpr, schemaRef, "'" + schemaRef.debugName + "' is not a valid NgModule schema");
246
- }
247
- }
248
- }
249
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
250
- finally {
251
- try {
252
- if (result_1_1 && !result_1_1.done && (_c = result_1.return)) _c.call(result_1);
253
- }
254
- finally { if (e_3) throw e_3.error; }
255
- }
256
- }
257
- var id = ngModule.has('id') ? new compiler_1.WrappedNodeExpr(ngModule.get('id')) : null;
258
- var valueContext = node.getSourceFile();
259
- var typeContext = valueContext;
260
- var typeNode = this.reflector.getDtsDeclaration(node);
261
- if (typeNode !== null) {
262
- typeContext = typeNode.getSourceFile();
263
- }
264
- var bootstrap = bootstrapRefs.map(function (bootstrap) { return _this._toR3Reference(bootstrap, valueContext, typeContext); });
265
- var declarations = declarationRefs.map(function (decl) { return _this._toR3Reference(decl, valueContext, typeContext); });
266
- var imports = importRefs.map(function (imp) { return _this._toR3Reference(imp, valueContext, typeContext); });
267
- var exports = exportRefs.map(function (exp) { return _this._toR3Reference(exp, valueContext, typeContext); });
268
- var isForwardReference = function (ref) {
269
- return util_1.isExpressionForwardReference(ref.value, node.name, valueContext);
270
- };
271
- var containsForwardDecls = bootstrap.some(isForwardReference) ||
272
- declarations.some(isForwardReference) || imports.some(isForwardReference) ||
273
- exports.some(isForwardReference);
274
- var type = util_1.wrapTypeReference(this.reflector, node);
275
- var internalType = new compiler_1.WrappedNodeExpr(this.reflector.getInternalNameOfClass(node));
276
- var adjacentType = new compiler_1.WrappedNodeExpr(this.reflector.getAdjacentNameOfClass(node));
277
- var ngModuleMetadata = {
278
- type: type,
279
- internalType: internalType,
280
- adjacentType: adjacentType,
281
- bootstrap: bootstrap,
282
- declarations: declarations,
283
- exports: exports,
284
- imports: imports,
285
- containsForwardDecls: containsForwardDecls,
286
- id: id,
287
- emitInline: false,
288
- // TODO: to be implemented as a part of FW-1004.
289
- schemas: [],
290
- };
291
- var rawProviders = ngModule.has('providers') ? ngModule.get('providers') : null;
292
- var wrapperProviders = rawProviders !== null ?
293
- new compiler_1.WrappedNodeExpr(this.annotateForClosureCompiler ? util_1.wrapFunctionExpressionsInParens(rawProviders) :
294
- rawProviders) :
295
- null;
296
- // At this point, only add the module's imports as the injectors' imports. Any exported modules
297
- // are added during `resolve`, as we need scope information to be able to filter out directives
298
- // and pipes from the module exports.
299
- var injectorImports = [];
300
- if (ngModule.has('imports')) {
301
- injectorImports.push(new compiler_1.WrappedNodeExpr(ngModule.get('imports')));
302
- }
303
- if (this.routeAnalyzer !== null) {
304
- this.routeAnalyzer.add(node.getSourceFile(), name, rawImports, rawExports, rawProviders);
305
- }
306
- var injectorMetadata = {
307
- name: name,
308
- type: type,
309
- internalType: internalType,
310
- providers: wrapperProviders,
311
- imports: injectorImports,
312
- };
313
- var factoryMetadata = {
314
- name: name,
315
- type: type,
316
- internalType: internalType,
317
- typeArgumentCount: 0,
318
- deps: util_1.getValidConstructorDependencies(node, this.reflector, this.isCore),
319
- target: compiler_1.FactoryTarget.NgModule,
320
- };
321
- return {
322
- analysis: {
323
- id: id,
324
- schemas: schemas,
325
- mod: ngModuleMetadata,
326
- inj: injectorMetadata,
327
- fac: factoryMetadata,
328
- declarations: declarationRefs,
329
- rawDeclarations: rawDeclarations,
330
- imports: importRefs,
331
- exports: exportRefs,
332
- providers: rawProviders,
333
- providersRequiringFactory: rawProviders ?
334
- util_1.resolveProvidersRequiringFactory(rawProviders, this.reflector, this.evaluator) :
335
- null,
336
- classMetadata: metadata_1.extractClassMetadata(node, this.reflector, this.isCore, this.annotateForClosureCompiler),
337
- factorySymbolName: node.name.text,
338
- },
339
- };
340
- };
341
- NgModuleDecoratorHandler.prototype.symbol = function (node) {
342
- return new NgModuleSymbol(node);
343
- };
344
- NgModuleDecoratorHandler.prototype.register = function (node, analysis) {
345
- // Register this module's information with the LocalModuleScopeRegistry. This ensures that
346
- // during the compile() phase, the module's metadata is available for selector scope
347
- // computation.
348
- this.metaRegistry.registerNgModuleMetadata({
349
- ref: new imports_1.Reference(node),
350
- schemas: analysis.schemas,
351
- declarations: analysis.declarations,
352
- imports: analysis.imports,
353
- exports: analysis.exports,
354
- rawDeclarations: analysis.rawDeclarations,
355
- });
356
- if (this.factoryTracker !== null) {
357
- this.factoryTracker.track(node.getSourceFile(), {
358
- name: analysis.factorySymbolName,
359
- hasId: analysis.id !== null,
360
- });
361
- }
362
- this.injectableRegistry.registerInjectable(node);
363
- };
364
- NgModuleDecoratorHandler.prototype.resolve = function (node, analysis) {
365
- var e_4, _a, e_5, _b;
366
- var scope = this.scopeRegistry.getScopeOfModule(node);
367
- var diagnostics = [];
368
- var scopeDiagnostics = this.scopeRegistry.getDiagnosticsOfModule(node);
369
- if (scopeDiagnostics !== null) {
370
- diagnostics.push.apply(diagnostics, tslib_1.__spreadArray([], tslib_1.__read(scopeDiagnostics)));
371
- }
372
- if (analysis.providersRequiringFactory !== null) {
373
- var providerDiagnostics = diagnostics_2.getProviderDiagnostics(analysis.providersRequiringFactory, analysis.providers, this.injectableRegistry);
374
- diagnostics.push.apply(diagnostics, tslib_1.__spreadArray([], tslib_1.__read(providerDiagnostics)));
375
- }
376
- var data = {
377
- injectorImports: [],
378
- };
379
- if (scope !== null && !scope.compilation.isPoisoned) {
380
- // Using the scope information, extend the injector's imports using the modules that are
381
- // specified as module exports.
382
- var context = typescript_1.getSourceFile(node);
383
- try {
384
- for (var _c = tslib_1.__values(analysis.exports), _d = _c.next(); !_d.done; _d = _c.next()) {
385
- var exportRef = _d.value;
386
- if (isNgModule(exportRef.node, scope.compilation)) {
387
- data.injectorImports.push(this.refEmitter.emit(exportRef, context).expression);
388
- }
389
- }
390
- }
391
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
392
- finally {
393
- try {
394
- if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
395
- }
396
- finally { if (e_4) throw e_4.error; }
397
- }
398
- try {
399
- for (var _e = tslib_1.__values(analysis.declarations), _f = _e.next(); !_f.done; _f = _e.next()) {
400
- var decl = _f.value;
401
- var metadata = this.metaReader.getDirectiveMetadata(decl);
402
- if (metadata !== null && metadata.selector === null) {
403
- throw new diagnostics_1.FatalDiagnosticError(diagnostics_1.ErrorCode.DIRECTIVE_MISSING_SELECTOR, decl.node, "Directive " + decl.node.name.text + " has no selector, please add it!");
404
- }
405
- }
406
- }
407
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
408
- finally {
409
- try {
410
- if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
411
- }
412
- finally { if (e_5) throw e_5.error; }
413
- }
414
- }
415
- if (diagnostics.length > 0) {
416
- return { diagnostics: diagnostics };
417
- }
418
- if (scope === null || scope.compilation.isPoisoned || scope.exported.isPoisoned ||
419
- scope.reexports === null) {
420
- return { data: data };
421
- }
422
- else {
423
- return {
424
- data: data,
425
- reexports: scope.reexports,
426
- };
427
- }
428
- };
429
- NgModuleDecoratorHandler.prototype.compileFull = function (node, _a, _b) {
430
- var inj = _a.inj, mod = _a.mod, fac = _a.fac, classMetadata = _a.classMetadata, declarations = _a.declarations;
431
- var injectorImports = _b.injectorImports;
432
- var factoryFn = factory_1.compileNgFactoryDefField(fac);
433
- var ngInjectorDef = compiler_1.compileInjector(this.mergeInjectorImports(inj, injectorImports));
434
- var ngModuleDef = compiler_1.compileNgModule(mod);
435
- var statements = ngModuleDef.statements;
436
- var metadata = classMetadata !== null ? compiler_1.compileClassMetadata(classMetadata) : null;
437
- this.insertMetadataStatement(statements, metadata);
438
- this.appendRemoteScopingStatements(statements, node, declarations);
439
- return this.compileNgModule(factoryFn, ngInjectorDef, ngModuleDef);
440
- };
441
- NgModuleDecoratorHandler.prototype.compilePartial = function (node, _a, _b) {
442
- var inj = _a.inj, fac = _a.fac, mod = _a.mod, classMetadata = _a.classMetadata;
443
- var injectorImports = _b.injectorImports;
444
- var factoryFn = factory_1.compileDeclareFactory(fac);
445
- var injectorDef = compiler_1.compileDeclareInjectorFromMetadata(this.mergeInjectorImports(inj, injectorImports));
446
- var ngModuleDef = compiler_1.compileDeclareNgModuleFromMetadata(mod);
447
- var metadata = classMetadata !== null ? compiler_1.compileDeclareClassMetadata(classMetadata) : null;
448
- this.insertMetadataStatement(ngModuleDef.statements, metadata);
449
- // NOTE: no remote scoping required as this is banned in partial compilation.
450
- return this.compileNgModule(factoryFn, injectorDef, ngModuleDef);
451
- };
452
- /**
453
- * Merge the injector imports (which are 'exports' that were later found to be NgModules)
454
- * computed during resolution with the ones from analysis.
455
- */
456
- NgModuleDecoratorHandler.prototype.mergeInjectorImports = function (inj, injectorImports) {
457
- return tslib_1.__assign(tslib_1.__assign({}, inj), { imports: tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(inj.imports)), tslib_1.__read(injectorImports)) });
458
- };
459
- /**
460
- * Add class metadata statements, if provided, to the `ngModuleStatements`.
461
- */
462
- NgModuleDecoratorHandler.prototype.insertMetadataStatement = function (ngModuleStatements, metadata) {
463
- if (metadata !== null) {
464
- ngModuleStatements.unshift(metadata.toStmt());
465
- }
466
- };
467
- /**
468
- * Add remote scoping statements, as needed, to the `ngModuleStatements`.
469
- */
470
- NgModuleDecoratorHandler.prototype.appendRemoteScopingStatements = function (ngModuleStatements, node, declarations) {
471
- var e_6, _a;
472
- var _this = this;
473
- var context = typescript_1.getSourceFile(node);
474
- try {
475
- for (var declarations_1 = tslib_1.__values(declarations), declarations_1_1 = declarations_1.next(); !declarations_1_1.done; declarations_1_1 = declarations_1.next()) {
476
- var decl = declarations_1_1.value;
477
- var remoteScope = this.scopeRegistry.getRemoteScope(decl.node);
478
- if (remoteScope !== null) {
479
- var directives = remoteScope.directives.map(function (directive) { return _this.refEmitter.emit(directive, context).expression; });
480
- var pipes = remoteScope.pipes.map(function (pipe) { return _this.refEmitter.emit(pipe, context).expression; });
481
- var directiveArray = new compiler_1.LiteralArrayExpr(directives);
482
- var pipesArray = new compiler_1.LiteralArrayExpr(pipes);
483
- var declExpr = this.refEmitter.emit(decl, context).expression;
484
- var setComponentScope = new compiler_1.ExternalExpr(compiler_1.R3Identifiers.setComponentScope);
485
- var callExpr = new compiler_1.InvokeFunctionExpr(setComponentScope, [declExpr, directiveArray, pipesArray]);
486
- ngModuleStatements.push(callExpr.toStmt());
487
- }
488
- }
489
- }
490
- catch (e_6_1) { e_6 = { error: e_6_1 }; }
491
- finally {
492
- try {
493
- if (declarations_1_1 && !declarations_1_1.done && (_a = declarations_1.return)) _a.call(declarations_1);
494
- }
495
- finally { if (e_6) throw e_6.error; }
496
- }
497
- };
498
- NgModuleDecoratorHandler.prototype.compileNgModule = function (factoryFn, injectorDef, ngModuleDef) {
499
- var res = [
500
- factoryFn,
501
- {
502
- name: 'ɵmod',
503
- initializer: ngModuleDef.expression,
504
- statements: ngModuleDef.statements,
505
- type: ngModuleDef.type,
506
- },
507
- {
508
- name: 'ɵinj',
509
- initializer: injectorDef.expression,
510
- statements: injectorDef.statements,
511
- type: injectorDef.type,
512
- },
513
- ];
514
- if (this.localeId) {
515
- // QUESTION: can this stuff be removed?
516
- res.push({
517
- name: 'ɵloc',
518
- initializer: new compiler_1.LiteralExpr(this.localeId),
519
- statements: [],
520
- type: compiler_1.STRING_TYPE
521
- });
522
- }
523
- return res;
524
- };
525
- NgModuleDecoratorHandler.prototype._toR3Reference = function (valueRef, valueContext, typeContext) {
526
- if (valueRef.hasOwningModuleGuess) {
527
- return util_1.toR3Reference(valueRef, valueRef, valueContext, valueContext, this.refEmitter);
528
- }
529
- else {
530
- var typeRef = valueRef;
531
- var typeNode = this.reflector.getDtsDeclaration(typeRef.node);
532
- if (typeNode !== null && reflection_1.isNamedClassDeclaration(typeNode)) {
533
- typeRef = new imports_1.Reference(typeNode);
534
- }
535
- return util_1.toR3Reference(valueRef, typeRef, valueContext, typeContext, this.refEmitter);
536
- }
537
- };
538
- /**
539
- * Given a `FunctionDeclaration`, `MethodDeclaration` or `FunctionExpression`, check if it is
540
- * typed as a `ModuleWithProviders` and return an expression referencing the module if available.
541
- */
542
- NgModuleDecoratorHandler.prototype._extractModuleFromModuleWithProvidersFn = function (node) {
543
- var type = node.type || null;
544
- return type &&
545
- (this._reflectModuleFromTypeParam(type, node) || this._reflectModuleFromLiteralType(type));
546
- };
547
- /**
548
- * Retrieve an `NgModule` identifier (T) from the specified `type`, if it is of the form:
549
- * `ModuleWithProviders<T>`
550
- * @param type The type to reflect on.
551
- * @returns the identifier of the NgModule type if found, or null otherwise.
552
- */
553
- NgModuleDecoratorHandler.prototype._reflectModuleFromTypeParam = function (type, node) {
554
- // Examine the type of the function to see if it's a ModuleWithProviders reference.
555
- if (!ts.isTypeReferenceNode(type)) {
556
- return null;
557
- }
558
- var typeName = type &&
559
- (ts.isIdentifier(type.typeName) && type.typeName ||
560
- ts.isQualifiedName(type.typeName) && type.typeName.right) ||
561
- null;
562
- if (typeName === null) {
563
- return null;
564
- }
565
- // Look at the type itself to see where it comes from.
566
- var id = this.reflector.getImportOfIdentifier(typeName);
567
- // If it's not named ModuleWithProviders, bail.
568
- if (id === null || id.name !== 'ModuleWithProviders') {
569
- return null;
570
- }
571
- // If it's not from @angular/core, bail.
572
- if (!this.isCore && id.from !== '@angular/core') {
573
- return null;
574
- }
575
- // If there's no type parameter specified, bail.
576
- if (type.typeArguments === undefined || type.typeArguments.length !== 1) {
577
- var parent_1 = ts.isMethodDeclaration(node) && ts.isClassDeclaration(node.parent) ? node.parent : null;
578
- var symbolName = (parent_1 && parent_1.name ? parent_1.name.getText() + '.' : '') +
579
- (node.name ? node.name.getText() : 'anonymous');
580
- throw new diagnostics_1.FatalDiagnosticError(diagnostics_1.ErrorCode.NGMODULE_MODULE_WITH_PROVIDERS_MISSING_GENERIC, type, symbolName + " returns a ModuleWithProviders type without a generic type argument. " +
581
- "Please add a generic type argument to the ModuleWithProviders type. If this " +
582
- "occurrence is in library code you don't control, please contact the library authors.");
583
- }
584
- var arg = type.typeArguments[0];
585
- return reflection_1.typeNodeToValueExpr(arg);
586
- };
587
- /**
588
- * Retrieve an `NgModule` identifier (T) from the specified `type`, if it is of the form:
589
- * `A|B|{ngModule: T}|C`.
590
- * @param type The type to reflect on.
591
- * @returns the identifier of the NgModule type if found, or null otherwise.
592
- */
593
- NgModuleDecoratorHandler.prototype._reflectModuleFromLiteralType = function (type) {
594
- var e_7, _a, e_8, _b;
595
- if (!ts.isIntersectionTypeNode(type)) {
596
- return null;
597
- }
598
- try {
599
- for (var _c = tslib_1.__values(type.types), _d = _c.next(); !_d.done; _d = _c.next()) {
600
- var t = _d.value;
601
- if (ts.isTypeLiteralNode(t)) {
602
- try {
603
- for (var _e = (e_8 = void 0, tslib_1.__values(t.members)), _f = _e.next(); !_f.done; _f = _e.next()) {
604
- var m = _f.value;
605
- var ngModuleType = ts.isPropertySignature(m) && ts.isIdentifier(m.name) &&
606
- m.name.text === 'ngModule' && m.type ||
607
- null;
608
- var ngModuleExpression = ngModuleType && reflection_1.typeNodeToValueExpr(ngModuleType);
609
- if (ngModuleExpression) {
610
- return ngModuleExpression;
611
- }
612
- }
613
- }
614
- catch (e_8_1) { e_8 = { error: e_8_1 }; }
615
- finally {
616
- try {
617
- if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
618
- }
619
- finally { if (e_8) throw e_8.error; }
620
- }
621
- }
622
- }
623
- }
624
- catch (e_7_1) { e_7 = { error: e_7_1 }; }
625
- finally {
626
- try {
627
- if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
628
- }
629
- finally { if (e_7) throw e_7.error; }
630
- }
631
- return null;
632
- };
633
- // Verify that a "Declaration" reference is a `ClassDeclaration` reference.
634
- NgModuleDecoratorHandler.prototype.isClassDeclarationReference = function (ref) {
635
- return this.reflector.isClass(ref.node);
636
- };
637
- /**
638
- * Compute a list of `Reference`s from a resolved metadata value.
639
- */
640
- NgModuleDecoratorHandler.prototype.resolveTypeList = function (expr, resolvedList, className, arrayName) {
641
- var _this = this;
642
- var refList = [];
643
- if (!Array.isArray(resolvedList)) {
644
- throw diagnostics_2.createValueHasWrongTypeError(expr, resolvedList, "Expected array when reading the NgModule." + arrayName + " of " + className);
645
- }
646
- resolvedList.forEach(function (entry, idx) {
647
- // Unwrap ModuleWithProviders for modules that are locally declared (and thus static
648
- // resolution was able to descend into the function and return an object literal, a Map).
649
- if (entry instanceof Map && entry.has('ngModule')) {
650
- entry = entry.get('ngModule');
651
- }
652
- if (Array.isArray(entry)) {
653
- // Recurse into nested arrays.
654
- refList.push.apply(refList, tslib_1.__spreadArray([], tslib_1.__read(_this.resolveTypeList(expr, entry, className, arrayName))));
655
- }
656
- else if (entry instanceof imports_1.Reference) {
657
- if (!_this.isClassDeclarationReference(entry)) {
658
- throw diagnostics_2.createValueHasWrongTypeError(entry.node, entry, "Value at position " + idx + " in the NgModule." + arrayName + " of " + className + " is not a class");
659
- }
660
- refList.push(entry);
661
- }
662
- else {
663
- // TODO(alxhub): Produce a better diagnostic here - the array index may be an inner array.
664
- throw diagnostics_2.createValueHasWrongTypeError(expr, entry, "Value at position " + idx + " in the NgModule." + arrayName + " of " + className + " is not a reference");
665
- }
666
- });
667
- return refList;
668
- };
669
- return NgModuleDecoratorHandler;
670
- }());
671
- exports.NgModuleDecoratorHandler = NgModuleDecoratorHandler;
672
- function isNgModule(node, compilation) {
673
- return !compilation.directives.some(function (directive) { return directive.ref.node === node; }) &&
674
- !compilation.pipes.some(function (pipe) { return pipe.ref.node === node; });
675
- }
676
- });
677
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdfbW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9hbm5vdGF0aW9ucy9zcmMvbmdfbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7SUFFSCw4Q0FBOGdCO0lBQzlnQiwrQkFBaUM7SUFFakMsMkVBQTBHO0lBQzFHLG1FQUEwRDtJQUMxRCw2RkFBa0k7SUFHbEksNkRBQW1EO0lBQ25ELHlFQUFpSjtJQUlqSix1RUFBZ0k7SUFDaEksa0ZBQXdEO0lBRXhELDJGQUFtRjtJQUNuRixtRkFBMEU7SUFDMUUscUZBQWdEO0lBRWhELDZFQUF3UTtJQXNCeFE7O09BRUc7SUFDSDtRQUFvQywwQ0FBYztRQUFsRDtZQUFBLHFFQWtFQztZQWpFUyw4QkFBd0IsR0FJMUIsRUFBRSxDQUFDOztRQTZEWCxDQUFDO1FBM0RVLDRDQUFtQixHQUE1QixVQUE2QixjQUE4QjtZQUN6RCxJQUFJLENBQUMsQ0FBQyxjQUFjLFlBQVksY0FBYyxDQUFDLEVBQUU7Z0JBQy9DLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFFRCx5RkFBeUY7WUFDekYsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRVEsdUNBQWMsR0FBdkIsVUFBd0IsY0FBOEI7O1lBQ3BELElBQUksQ0FBQyxDQUFDLGNBQWMsWUFBWSxjQUFjLENBQUMsRUFBRTtnQkFDL0MsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUVELDhEQUE4RDtZQUM5RCxJQUFJLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRTtnQkFDM0YsT0FBTyxJQUFJLENBQUM7YUFDYjtvQ0FFVSxTQUFTO2dCQUNsQixJQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFVBQUEsU0FB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QUM7SUFDOUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge2NvbXBpbGVDbGFzc01ldGFkYXRhLCBjb21waWxlRGVjbGFyZUNsYXNzTWV0YWRhdGEsIGNvbXBpbGVEZWNsYXJlSW5qZWN0b3JGcm9tTWV0YWRhdGEsIGNvbXBpbGVEZWNsYXJlTmdNb2R1bGVGcm9tTWV0YWRhdGEsIGNvbXBpbGVJbmplY3RvciwgY29tcGlsZU5nTW9kdWxlLCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBFeHByZXNzaW9uLCBFeHRlcm5hbEV4cHIsIEZhY3RvcnlUYXJnZXQsIElkZW50aWZpZXJzIGFzIFIzLCBJbnZva2VGdW5jdGlvbkV4cHIsIExpdGVyYWxBcnJheUV4cHIsIExpdGVyYWxFeHByLCBOT19FUlJPUlNfU0NIRU1BLCBSM0NsYXNzTWV0YWRhdGEsIFIzQ29tcGlsZWRFeHByZXNzaW9uLCBSM0ZhY3RvcnlNZXRhZGF0YSwgUjNJZGVudGlmaWVycywgUjNJbmplY3Rvck1ldGFkYXRhLCBSM05nTW9kdWxlTWV0YWRhdGEsIFIzUmVmZXJlbmNlLCBTY2hlbWFNZXRhZGF0YSwgU3RhdGVtZW50LCBTVFJJTkdfVFlQRSwgV3JhcHBlZE5vZGVFeHByfSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtFcnJvckNvZGUsIEZhdGFsRGlhZ25vc3RpY0Vycm9yLCBtYWtlRGlhZ25vc3RpYywgbWFrZVJlbGF0ZWRJbmZvcm1hdGlvbn0gZnJvbSAnLi4vLi4vZGlhZ25vc3RpY3MnO1xuaW1wb3J0IHtSZWZlcmVuY2UsIFJlZmVyZW5jZUVtaXR0ZXJ9IGZyb20gJy4uLy4uL2ltcG9ydHMnO1xuaW1wb3J0IHtpc0FycmF5RXF1YWwsIGlzUmVmZXJlbmNlRXF1YWwsIGlzU3ltYm9sRXF1YWwsIFNlbWFudGljUmVmZXJlbmNlLCBTZW1hbnRpY1N5bWJvbH0gZnJvbSAnLi4vLi4vaW5jcmVtZW50YWwvc2VtYW50aWNfZ3JhcGgnO1xuaW1wb3J0IHtJbmplY3RhYmxlQ2xhc3NSZWdpc3RyeSwgTWV0YWRhdGFSZWFkZXIsIE1ldGFkYXRhUmVnaXN0cnl9IGZyb20gJy4uLy4uL21ldGFkYXRhJztcbmltcG9ydCB7UGFydGlhbEV2YWx1YXRvciwgUmVzb2x2ZWRWYWx1ZX0gZnJvbSAnLi4vLi4vcGFydGlhbF9ldmFsdWF0b3InO1xuaW1wb3J0IHtQZXJmRXZlbnQsIFBlcmZSZWNvcmRlcn0gZnJvbSAnLi4vLi4vcGVyZic7XG5pbXBvcnQge0NsYXNzRGVjbGFyYXRpb24sIERlY29yYXRvciwgaXNOYW1lZENsYXNzRGVjbGFyYXRpb24sIFJlZmxlY3Rpb25Ib3N0LCByZWZsZWN0T2JqZWN0TGl0ZXJhbCwgdHlwZU5vZGVUb1ZhbHVlRXhwcn0gZnJvbSAnLi4vLi4vcmVmbGVjdGlvbic7XG5pbXBvcnQge05nTW9kdWxlUm91dGVBbmFseXplcn0gZnJvbSAnLi4vLi4vcm91dGluZyc7XG5pbXBvcnQge0xvY2FsTW9kdWxlU2NvcGVSZWdpc3RyeSwgU2NvcGVEYXRhfSBmcm9tICcuLi8uLi9zY29wZSc7XG5pbXBvcnQge0ZhY3RvcnlUcmFja2VyfSBmcm9tICcuLi8uLi9zaGltcy9hcGknO1xuaW1wb3J0IHtBbmFseXNpc091dHB1dCwgQ29tcGlsZVJlc3VsdCwgRGVjb3JhdG9ySGFuZGxlciwgRGV0ZWN0UmVzdWx0LCBIYW5kbGVyUHJlY2VkZW5jZSwgUmVzb2x2ZVJlc3VsdH0gZnJvbSAnLi4vLi4vdHJhbnNmb3JtJztcbmltcG9ydCB7Z2V0U291cmNlRmlsZX0gZnJvbSAnLi4vLi4vdXRpbC9zcmMvdHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7Y3JlYXRlVmFsdWVIYXNXcm9uZ1R5cGVFcnJvciwgZ2V0UHJvdmlkZXJEaWFnbm9zdGljc30gZnJvbSAnLi9kaWFnbm9zdGljcyc7XG5pbXBvcnQge2NvbXBpbGVEZWNsYXJlRmFjdG9yeSwgY29tcGlsZU5nRmFjdG9yeURlZkZpZWxkfSBmcm9tICcuL2ZhY3RvcnknO1xuaW1wb3J0IHtleHRyYWN0Q2xhc3NNZXRhZGF0YX0gZnJvbSAnLi9tZXRhZGF0YSc7XG5pbXBvcnQge1JlZmVyZW5jZXNSZWdpc3RyeX0gZnJvbSAnLi9yZWZlcmVuY2VzX3JlZ2lzdHJ5JztcbmltcG9ydCB7Y29tYmluZVJlc29sdmVycywgZmluZEFuZ3VsYXJEZWNvcmF0b3IsIGZvcndhcmRSZWZSZXNvbHZlciwgZ2V0VmFsaWRDb25zdHJ1Y3RvckRlcGVuZGVuY2llcywgaXNFeHByZXNzaW9uRm9yd2FyZFJlZmVyZW5jZSwgcmVzb2x2ZVByb3ZpZGVyc1JlcXVpcmluZ0ZhY3RvcnksIHRvUjNSZWZlcmVuY2UsIHVud3JhcEV4cHJlc3Npb24sIHdyYXBGdW5jdGlvbkV4cHJlc3Npb25zSW5QYXJlbnMsIHdyYXBUeXBlUmVmZXJlbmNlfSBmcm9tICcuL3V0aWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5nTW9kdWxlQW5hbHlzaXMge1xuICBtb2Q6IFIzTmdNb2R1bGVNZXRhZGF0YTtcbiAgaW5qOiBSM0luamVjdG9yTWV0YWRhdGE7XG4gIGZhYzogUjNGYWN0b3J5TWV0YWRhdGE7XG4gIGNsYXNzTWV0YWRhdGE6IFIzQ2xhc3NNZXRhZGF0YXxudWxsO1xuICBkZWNsYXJhdGlvbnM6IFJlZmVyZW5jZTxDbGFzc0RlY2xhcmF0aW9uPltdO1xuICByYXdEZWNsYXJhdGlvbnM6IHRzLkV4cHJlc3Npb258bnVsbDtcbiAgc2NoZW1hczogU2NoZW1hTWV0YWRhdGFbXTtcbiAgaW1wb3J0czogUmVmZXJlbmNlPENsYXNzRGVjbGFyYXRpb24+W107XG4gIGV4cG9ydHM6IFJlZmVyZW5jZTxDbGFzc0RlY2xhcmF0aW9uPltdO1xuICBpZDogRXhwcmVzc2lvbnxudWxsO1xuICBmYWN0b3J5U3ltYm9sTmFtZTogc3RyaW5nO1xuICBwcm92aWRlcnNSZXF1aXJpbmdGYWN0b3J5OiBTZXQ8UmVmZXJlbmNlPENsYXNzRGVjbGFyYXRpb24+PnxudWxsO1xuICBwcm92aWRlcnM6IHRzLkV4cHJlc3Npb258bnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ01vZHVsZVJlc29sdXRpb24ge1xuICBpbmplY3RvckltcG9ydHM6IEV4cHJlc3Npb25bXTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIEFuZ3VsYXIgTmdNb2R1bGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBOZ01vZHVsZVN5bWJvbCBleHRlbmRzIFNlbWFudGljU3ltYm9sIHtcbiAgcHJpdmF0ZSByZW1vdGVseVNjb3BlZENvbXBvbmVudHM6IHtcbiAgICBjb21wb25lbnQ6IFNlbWFudGljU3ltYm9sLFxuICAgIHVzZWREaXJlY3RpdmVzOiBTZW1hbnRpY1JlZmVyZW5jZVtdLFxuICAgIHVzZWRQaXBlczogU2VtYW50aWNSZWZlcmVuY2VbXVxuICB9W10gPSBbXTtcblxuICBvdmVycmlkZSBpc1B1YmxpY0FwaUFmZmVjdGVkKHByZXZpb3VzU3ltYm9sOiBTZW1hbnRpY1N5bWJvbCk6IGJvb2xlYW4ge1xuICAgIGlmICghKHByZXZpb3VzU3ltYm9sIGluc3RhbmNlb2YgTmdNb2R1bGVTeW1ib2wpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBOZ01vZHVsZXMgZG9uJ3QgaGF2ZSBhIHB1YmxpYyBBUEkgdGhhdCBjb3VsZCBhZmZlY3QgZW1pdCBvZiBBbmd1bGFyIGRlY29yYXRlZCBjbGFzc2VzLlxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIG92ZXJyaWRlIGlzRW1pdEFmZmVjdGVkKHByZXZpb3VzU3ltYm9sOiBTZW1hbnRpY1N5bWJvbCk6IGJvb2xlYW4ge1xuICAgIGlmICghKHByZXZpb3VzU3ltYm9sIGluc3RhbmNlb2YgTmdNb2R1bGVTeW1ib2wpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBjb21wYXJlIG91ciByZW1vdGVseVNjb3BlZENvbXBvbmVudHMgdG8gdGhlIHByZXZpb3VzIHN5bWJvbFxuICAgIGlmIChwcmV2aW91c1N5bWJvbC5yZW1vdGVseVNjb3BlZENvbXBvbmVudHMubGVuZ3RoICE9PSB0aGlzLnJlbW90ZWx5U2NvcGVkQ29tcG9uZW50cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY3VyckVudHJ5IG9mIHRoaXMucmVtb3RlbHlTY29wZWRDb21wb25lbnRzKSB7XG4gICAgICBjb25zdCBwcmV2RW50cnkgPSBwcmV2aW91c1N5bWJvbC5yZW1vdGVseVNjb3BlZENvbXBvbmVudHMuZmluZChwcmV2RW50cnkgPT4ge1xuICAgICAgICByZXR1cm4gaXNTeW1ib2xFcXVhbChwcmV2RW50cnkuY29tcG9uZW50LCBjdXJyRW50cnkuY29tcG9uZW50KTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocHJldkVudHJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gTm8gcHJldmlvdXMgZW50cnkgd2FzIGZvdW5kLCB3aGljaCBtZWFucyB0aGF0IHRoaXMgY29tcG9uZW50IGJlY2FtZSByZW1vdGVseSBzY29wZWQgYW5kXG4gICAgICAgIC8vIGhlbmNlIHRoaXMgTmdNb2R1bGUgbmVlZHMgdG8gYmUgcmUtZW1pdHRlZC5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNBcnJheUVxdWFsKGN1cnJFbnRyeS51c2VkRGlyZWN0aXZlcywgcHJldkVudHJ5LnVzZWREaXJlY3RpdmVzLCBpc1JlZmVyZW5jZUVxdWFsKSkge1xuICAgICAgICAvLyBUaGUgbGlzdCBvZiB1c2VkIGRpcmVjdGl2ZXMgb3IgdGhlaXIgb3JkZXIgaGFzIGNoYW5nZWQuIFNpbmNlIHRoaXMgTmdNb2R1bGUgZW1pdHNcbiAgICAgICAgLy8gcmVmZXJlbmNlcyB0byB0aGUgbGlzdCBvZiB1c2VkIGRpcmVjdGl2ZXMsIGl0IHNob3VsZCBiZSByZS1lbWl0dGVkIHRvIHVwZGF0ZSB0aGlzIGxpc3QuXG4gICAgICAgIC8vIE5vdGU6IHRoZSBOZ01vZHVsZSBkb2VzIG5vdCBoYXZlIHRvIGJlIHJlLWVtaXR0ZWQgd2hlbiBhbnkgb2YgdGhlIGRpcmVjdGl2ZXMgaGFzIGhhZFxuICAgICAgICAvLyB0aGVpciBwdWJsaWMgQVBJIGNoYW5nZWQsIGFzIHRoZSBOZ01vZHVsZSBvbmx5IGVtaXRzIGEgcmVmZXJlbmNlIHRvIHRoZSBzeW1ib2wgYnkgaXRzXG4gICAgICAgIC8vIG5hbWUuIFRoZXJlZm9yZSwgdGVzdGluZyBmb3Igc3ltYm9sIGVxdWFsaXR5IGlzIHN1ZmZpY2llbnQuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzQXJyYXlFcXVhbChjdXJyRW50cnkudXNlZFBpcGVzLCBwcmV2RW50cnkudXNlZFBpcGVzLCBpc1JlZmVyZW5jZUVxdWFsKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgb3ZlcnJpZGUgaXNUeXBlQ2hlY2tBcGlBZmZlY3RlZChwcmV2aW91c1N5bWJvbDogU2VtYW50aWNTeW1ib2wpOiBib29sZWFuIHtcbiAgICBpZiAoIShwcmV2aW91c1N5bWJvbCBpbnN0YW5jZW9mIE5nTW9kdWxlU3ltYm9sKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgYWRkUmVtb3RlbHlTY29wZWRDb21wb25lbnQoXG4gICAgICBjb21wb25lbnQ6IFNlbWFudGljU3ltYm9sLCB1c2VkRGlyZWN0aXZlczogU2VtYW50aWNSZWZlcmVuY2VbXSxcbiAgICAgIHVzZWRQaXBlczogU2VtYW50aWNSZWZlcmVuY2VbXSk6IHZvaWQge1xuICAgIHRoaXMucmVtb3RlbHlTY29wZWRDb21wb25lbnRzLnB1c2goe2NvbXBvbmVudCwgdXNlZERpcmVjdGl2ZXMsIHVzZWRQaXBlc30pO1xuICB9XG59XG5cbi8qKlxuICogQ29tcGlsZXMgQE5nTW9kdWxlIGFubm90YXRpb25zIHRvIG5nTW9kdWxlRGVmIGZpZWxkcy5cbiAqL1xuZXhwb3J0IGNsYXNzIE5nTW9kdWxlRGVjb3JhdG9ySGFuZGxlciBpbXBsZW1lbnRzXG4gICAgRGVjb3JhdG9ySGFuZGxlcjxEZWNvcmF0b3IsIE5nTW9kdWxlQW5hbHlzaXMsIE5nTW9kdWxlU3ltYm9sLCBOZ01vZHVsZVJlc29sdXRpb24+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIHJlZmxlY3RvcjogUmVmbGVjdGlvbkhvc3QsIHByaXZhdGUgZXZhbHVhdG9yOiBQYXJ0aWFsRXZhbHVhdG9yLFxuICAgICAgcHJpdmF0ZSBtZXRhUmVhZGVyOiBNZXRhZGF0YVJlYWRlciwgcHJpdmF0ZSBtZXRhUmVnaXN0cnk6IE1ldGFkYXRhUmVnaXN0cnksXG4gICAgICBwcml2YXRlIHNjb3BlUmVnaXN0cnk6IExvY2FsTW9kdWxlU2NvcGVSZWdpc3RyeSxcbiAgICAgIHByaXZhdGUgcmVmZXJlbmNlc1JlZ2lzdHJ5OiBSZWZlcmVuY2VzUmVnaXN0cnksIHByaXZhdGUgaXNDb3JlOiBib29sZWFuLFxuICAgICAgcHJpdmF0ZSByb3V0ZUFuYWx5emVyOiBOZ01vZHVsZVJvdXRlQW5hbHl6ZXJ8bnVsbCwgcHJpdmF0ZSByZWZFbWl0dGVyOiBSZWZlcmVuY2VFbWl0dGVyLFxuICAgICAgcHJpdmF0ZSBmYWN0b3J5VHJhY2tlcjogRmFjdG9yeVRyYWNrZXJ8bnVsbCwgcHJpdmF0ZSBhbm5vdGF0ZUZvckNsb3N1cmVDb21waWxlcjogYm9vbGVhbixcbiAgICAgIHByaXZhdGUgaW5qZWN0YWJsZVJlZ2lzdHJ5OiBJbmplY3RhYmxlQ2xhc3NSZWdpc3RyeSwgcHJpdmF0ZSBwZXJmOiBQZXJmUmVjb3JkZXIsXG4gICAgICBwcml2YXRlIGxvY2FsZUlkPzogc3RyaW5nKSB7fVxuXG4gIHJlYWRvbmx5IHByZWNlZGVuY2UgPSBIYW5kbGVyUHJlY2VkZW5jZS5QUklNQVJZO1xuICByZWFkb25seSBuYW1lID0gTmdNb2R1bGVEZWNvcmF0b3JIYW5kbGVyLm5hbWU7XG5cbiAgZGV0ZWN0KG5vZGU6IENsYXNzRGVjbGFyYXRpb24sIGRlY29yYXRvcnM6IERlY29yYXRvcltdfG51bGwpOiBEZXRlY3RSZXN1bHQ8RGVjb3JhdG9yPnx1bmRlZmluZWQge1xuICAgIGlmICghZGVjb3JhdG9ycykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZGVjb3JhdG9yID0gZmluZEFuZ3VsYXJEZWNvcmF0b3IoZGVjb3JhdG9ycywgJ05nTW9kdWxlJywgdGhpcy5pc0NvcmUpO1xuICAgIGlmIChkZWNvcmF0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHJpZ2dlcjogZGVjb3JhdG9yLm5vZGUsXG4gICAgICAgIGRlY29yYXRvcjogZGVjb3JhdG9yLFxuICAgICAgICBtZXRhZGF0YTogZGVjb3JhdG9yLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBhbmFseXplKG5vZGU6IENsYXNzRGVjbGFyYXRpb24sIGRlY29yYXRvcjogUmVhZG9ubHk8RGVjb3JhdG9yPik6XG4gICAgICBBbmFseXNpc091dHB1dDxOZ01vZHVsZUFuYWx5c2lzPiB7XG4gICAgdGhpcy5wZXJmLmV2ZW50Q291bnQoUGVyZkV2ZW50LkFuYWx5emVOZ01vZHVsZSk7XG5cbiAgICBjb25zdCBuYW1lID0gbm9kZS5uYW1lLnRleHQ7XG4gICAgaWYgKGRlY29yYXRvci5hcmdzID09PSBudWxsIHx8IGRlY29yYXRvci5hcmdzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBGYXRhbERpYWdub3N0aWNFcnJvcihcbiAgICAgICAgICBFcnJvckNvZGUuREVDT1JBVE9SX0FSSVRZX1dST05HLCBEZWNvcmF0b3Iubm9kZUZvckVycm9yKGRlY29yYXRvciksXG4gICAgICAgICAgYEluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIHRvIEBOZ01vZHVsZSBkZWNvcmF0b3JgKTtcbiAgICB9XG5cbiAgICAvLyBATmdNb2R1bGUgY2FuIGJlIGludm9rZWQgd2l0aG91dCBhcmd1bWVudHMuIEluIGNhc2UgaXQgaXMsIHByZXRlbmQgYXMgaWYgYSBibGFuayBvYmplY3RcbiAgICAvLyBsaXRlcmFsIHdhcyBzcGVjaWZpZWQuIFRoaXMgc2ltcGxpZmllcyB0aGUgY29kZSBiZWxvdy5cbiAgICBjb25zdCBtZXRhID0gZGVjb3JhdG9yLmFyZ3MubGVuZ3RoID09PSAxID8gdW53cmFwRXhwcmVzc2lvbihkZWNvcmF0b3IuYXJnc1swXSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cy5jcmVhdGVPYmplY3RMaXRlcmFsKFtdKTtcblxuICAgIGlmICghdHMuaXNPYmplY3RMaXRlcmFsRXhwcmVzc2lvbihtZXRhKSkge1xuICAgICAgdGhyb3cgbmV3IEZhdGFsRGlhZ25vc3RpY0Vycm9yKFxuICAgICAgICAgIEVycm9yQ29kZS5ERUNPUkFUT1JfQVJHX05PVF9MSVRFUkFMLCBtZXRhLFxuICAgICAgICAgICdATmdNb2R1bGUgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3QgbGl0ZXJhbCcpO1xuICAgIH1cbiAgICBjb25zdCBuZ01vZHVsZSA9IHJlZmxlY3RPYmplY3RMaXRlcmFsKG1ldGEpO1xuXG4gICAgaWYgKG5nTW9kdWxlLmhhcygnaml0JykpIHtcbiAgICAgIC8vIFRoZSBvbmx5IGFsbG93ZWQgdmFsdWUgaXMgdHJ1ZSwgc28gdGhlcmUncyBubyBuZWVkIHRvIGV4cGFuZCBmdXJ0aGVyLlxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGNvbnN0IG1vZHVsZVJlc29sdmVycyA9IGNvbWJpbmVSZXNvbHZlcnMoW1xuICAgICAgcmVmID0+IHRoaXMuX2V4dHJhY3RNb2R1bGVGcm9tTW9kdWxlV2l0aFByb3ZpZGVyc0ZuKHJlZi5ub2RlKSxcbiAgICAgIGZvcndhcmRSZWZSZXNvbHZlcixcbiAgICBdKTtcblxuICAgIGNvbnN0IGRpYWdub3N0aWNzOiB0cy5EaWFnbm9zdGljW10gPSBbXTtcblxuICAgIC8vIEV4dHJhY3QgdGhlIG1vZHVsZSBkZWNsYXJhdGlvbnMsIGltcG9ydHMsIGFuZCBleHBvcnRzLlxuICAgIGxldCBkZWNsYXJhdGlvblJlZnM6IFJlZmVyZW5jZTxDbGFzc0RlY2xhcmF0aW9uPltdID0gW107XG4gICAgbGV0IHJhd0RlY2xhcmF0aW9uczogdHMuRXhwcmVzc2lvbnxudWxsID0gbnVsbDtcbiAgICBpZiAobmdNb2R1bGUuaGFzKCdkZWNsYXJhdGlvbnMnKSkge1xuICAgICAgcmF3RGVjbGFyYXRpb25zID0gbmdNb2R1bGUuZ2V0KCdkZWNsYXJhdGlvbnMnKSE7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvbk1ldGEgPSB0aGlzLmV2YWx1YXRvci5ldmFsdWF0ZShyYXdEZWNsYXJhdGlvbnMsIGZvcndhcmRSZWZSZXNvbHZlcik7XG4gICAgICBkZWNsYXJhdGlvblJlZnMgPVxuICAgICAgICAgIHRoaXMucmVzb2x2ZVR5cGVMaXN0KHJhd0RlY2xhcmF0aW9ucywgZGVjbGFyYXRpb25NZXRhLCBuYW1lLCAnZGVjbGFyYXRpb25zJyk7XG5cbiAgICAgIC8vIExvb2sgdGhyb3VnaCB0aGUgZGVjbGFyYXRpb25zIHRvIG1ha2Ugc3VyZSB0aGV5J3JlIGFsbCBhIHBhcnQgb2YgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24uXG4gICAgICBmb3IgKGNvbnN0IHJlZiBvZiBkZWNsYXJhdGlvblJlZnMpIHtcbiAgICAgICAgaWYgKHJlZi5ub2RlLmdldFNvdXJjZUZpbGUoKS5pc0RlY2xhcmF0aW9uRmlsZSkge1xuICAgICAgICAgIGNvbnN0IGVycm9yTm9kZTogdHMuRXhwcmVzc2lvbiA9IHJlZi5nZXRPcmlnaW5Gb3JEaWFnbm9zdGljcyhyYXdEZWNsYXJhdGlvbnMpO1xuXG4gICAgICAgICAgZGlhZ25vc3RpY3MucHVzaChtYWtlRGlhZ25vc3RpYyhcbiAgICAgICAgICAgICAgRXJyb3JDb2RlLk5HTU9EVUxFX0lOVkFMSURfREVDTEFSQVRJT04sIGVycm9yTm9kZSxcbiAgICAgICAgICAgICAgYENhbm5vdCBkZWNsYXJlICcke1xuICAgICAgICAgICAgICAgICAgcmVmLm5vZGUubmFtZVxuICAgICAgICAgICAgICAgICAgICAgIC50ZXh0fScgaW4gYW4gTmdNb2R1bGUgYXMgaXQncyBub3QgYSBwYXJ0IG9mIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uLmAsXG4gICAgICAgICAgICAgIFttYWtlUmVsYXRlZEluZm9ybWF0aW9uKFxuICAgICAgICAgICAgICAgICAgcmVmLm5vZGUubmFtZSwgYCcke3JlZi5ub2RlLm5hbWUudGV4dH0nIGlzIGRlY2xhcmVkIGhlcmUuYCldKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGlhZ25vc3RpY3MubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHtkaWFnbm9zdGljc307XG4gICAgfVxuXG4gICAgbGV0IGltcG9ydFJlZnM6IFJlZmVyZW5jZTxDbGFzc0RlY2xhcmF0aW9uPltdID0gW107XG4gICAgbGV0IHJhd0ltcG9ydHM6IHRzLkV4cHJlc3Npb258bnVsbCA9IG51bGw7XG4gICAgaWYgKG5nTW9kdWxlLmhhcygnaW1wb3J0cycpKSB7XG4gICAgICByYXdJbXBvcnRzID0gbmdNb2R1bGUuZ2V0KCdpbXBvcnRzJykhO1xuICAgICAgY29uc3QgaW1wb3J0c01ldGEgPSB0aGlzLmV2YWx1YXRvci5ldmFsdWF0ZShyYXdJbXBvcnRzLCBtb2R1bGVSZXNvbHZlcnMpO1xuICAgICAgaW1wb3J0UmVmcyA9IHRoaXMucmVzb2x2ZVR5cGVMaXN0KHJhd0ltcG9ydHMsIGltcG9ydHNNZXRhLCBuYW1lLCAnaW1wb3J0cycpO1xuICAgIH1cbiAgICBsZXQgZXhwb3J0UmVmczogUmVmZXJlbmNlPENsYXNzRGVjbGFyYXRpb24+W10gPSBbXTtcbiAgICBsZXQgcmF3RXhwb3J0czogdHMuRXhwcmVzc2lvbnxudWxsID0gbnVsbDtcbiAgICBpZiAobmdNb2R1bGUuaGFzKCdleHBvcnRzJykpIHtcbiAgICAgIHJhd0V4cG9ydHMgPSBuZ01vZHVsZS5nZXQoJ2V4cG9ydHMnKSE7XG4gICAgICBjb25zdCBleHBvcnRzTWV0YSA9IHRoaXMuZXZhbHVhdG9yLmV2YWx1YXRlKHJhd0V4cG9ydHMsIG1vZHVsZVJlc29sdmVycyk7XG4gICAgICBleHBvcnRSZWZzID0gdGhpcy5yZXNvbHZlVHlwZUxpc3QocmF3RXhwb3J0cywgZXhwb3J0c01ldGEsIG5hbWUsICdleHBvcnRzJyk7XG4gICAgICB0aGlzLnJlZmVyZW5jZXNSZWdpc3RyeS5hZGQobm9kZSwgLi4uZXhwb3J0UmVmcyk7XG4gICAgfVxuICAgIGxldCBib290c3RyYXBSZWZzOiBSZWZlcmVuY2U8Q2xhc3NEZWNsYXJhdGlvbj5bXSA9IFtdO1xuICAgIGlmIChuZ01vZHVsZS5oYXMoJ2Jvb3RzdHJhcCcpKSB7XG4gICAgICBjb25zdCBleHByID0gbmdNb2R1bGUuZ2V0KCdib290c3RyYXAnKSE7XG4gICAgICBjb25zdCBib290c3RyYXBNZXRhID0gdGhpcy5ldmFsdWF0b3IuZXZhbHVhdGUoZXhwciwgZm9yd2FyZFJlZlJlc29sdmVyKTtcbiAgICAgIGJvb3RzdHJhcFJlZnMgPSB0aGlzLnJlc29sdmVUeXBlTGlzdChleHByLCBib290c3RyYXBNZXRhLCBuYW1lLCAnYm9vdHN0cmFwJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2NoZW1hczogU2NoZW1hTWV0YWRhdGFbXSA9IFtdO1xuICAgIGlmIChuZ01vZHVsZS5oYXMoJ3NjaGVtYXMnKSkge1xuICAgICAgY29uc3QgcmF3RXhwciA9IG5nTW9kdWxlLmdldCgnc2NoZW1hcycpITtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZXZhbHVhdG9yLmV2YWx1YXRlKHJhd0V4cHIpO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgICAgdGhyb3cgY3JlYXRlVmFsdWVIYXNXcm9uZ1R5cGVFcnJvcihyYXdFeHByLCByZXN1bHQsIGBOZ01vZHVsZS5zY2hlbWFzIG11c3QgYmUgYW4gYXJyYXlgKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBzY2hlbWFSZWYgb2YgcmVzdWx0KSB7XG4gICAgICAgIGlmICghKHNjaGVtYVJlZiBpbnN0YW5jZW9mIFJlZmVyZW5jZSkpIHtcbiAgICAgICAgICB0aHJvdyBjcmVhdGVWYWx1ZUhhc1dyb25nVHlwZUVycm9yKFxuICAgICAgICAgICAgICByYXdFeHByLCByZXN1bHQsICdOZ01vZHVsZS5zY2hlbWFzIG11c3QgYmUgYW4gYXJyYXkgb2Ygc2NoZW1hcycpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlkID0gc2NoZW1hUmVmLmdldElkZW50aXR5SW4oc2NoZW1hUmVmLm5vZGUuZ2V0U291cmNlRmlsZSgpKTtcbiAgICAgICAgaWYgKGlkID09PSBudWxsIHx8IHNjaGVtYVJlZi5vd25lZEJ5TW9kdWxlR3Vlc3MgIT09ICdAYW5ndWxhci9jb3JlJykge1xuICAgICAgICAgIHRocm93IGNyZWF0ZVZhbHVlSGFzV3JvbmdUeXBlRXJyb3IoXG4gICAgICAgICAgICAgIHJhd0V4cHIsIHJlc3VsdCwgJ05nTW9kdWxlLnNjaGVtYXMgbXVzdCBiZSBhbiBhcnJheSBvZiBzY2hlbWFzJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2luY2UgYGlkYCBpcyB0aGUgYHRzLklkZW50aWZlcmAgd2l0aGluIHRoZSBzY2hlbWEgcmVmJ3MgZGVjbGFyYXRpb24gZmlsZSwgaXQncyBzYWZlIHRvXG4gICAgICAgIC8vIHVzZSBgaWQudGV4dGAgaGVyZSB0byBmaWd1cmUgb3V0IHdoaWNoIHNjaGVtYSBpcyBpbiB1c2UuIEV2ZW4gaWYgdGhlIGFjdHVhbCByZWZlcmVuY2Ugd2FzXG4gICAgICAgIC8vIHJlbmFtZWQgd2hlbiB0aGUgdXNlciBpbXBvcnRlZCBpdCwgdGhlc2UgbmFtZXMgd2lsbCBtYXRjaC5cbiAgICAgICAgc3dpdGNoIChpZC50ZXh0KSB7XG4gICAgICAgICAgY2FzZSAnQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSc6XG4gICAgICAgICAgICBzY2hlbWFzLnB1c2goQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdOT19FUlJPUlNfU0NIRU1BJzpcbiAgICAgICAgICAgIHNjaGVtYXMucHVzaChOT19FUlJPUlNfU0NIRU1BKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVWYWx1ZUhhc1dyb25nVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgIHJhd0V4cHIsIHNjaGVtYVJlZiwgYCcke3NjaGVtYVJlZi5kZWJ1Z05hbWV9JyBpcyBub3QgYSB2YWxpZCBOZ01vZHVsZSBzY2hlbWFgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGlkOiBFeHByZXNzaW9ufG51bGwgPVxuICAgICAgICBuZ01vZHVsZS5oYXMoJ2lkJykgPyBuZXcgV3JhcHBlZE5vZGVFeHByKG5nTW9kdWxlLmdldCgnaWQnKSEpIDogbnVsbDtcbiAgICBjb25zdCB2YWx1ZUNvbnRleHQgPSBub2RlLmdldFNvdXJjZUZpbGUoKTtcblxuICAgIGxldCB0eXBlQ29udGV4dCA9IHZhbHVlQ29udGV4dDtcbiAgICBjb25zdCB0eXBlTm9kZSA9IHRoaXMucmVmbGVjdG9yLmdldER0c0RlY2xhcmF0aW9uKG5vZGUpO1xuICAgIGlmICh0eXBlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgdHlwZUNvbnRleHQgPSB0eXBlTm9kZS5nZXRTb3VyY2VGaWxlKCk7XG4gICAgfVxuXG4gICAgY29uc3QgYm9vdHN0cmFwID1cbiAgICAgICAgYm9vdHN0cmFwUmVmcy5tYXAoYm9vdHN0cmFwID0+IHRoaXMuX3RvUjNSZWZlcmVuY2UoYm9vdHN0cmFwLCB2YWx1ZUNvbnRleHQsIHR5cGVDb250ZXh0KSk7XG4gICAgY29uc3QgZGVjbGFyYXRpb25zID1cbiAgICAgICAgZGVjbGFyYXRpb25SZWZzLm1hcChkZWNsID0+IHRoaXMuX3RvUjNSZWZlcmVuY2UoZGVjbCwgdmFsdWVDb250ZXh0LCB0eXBlQ29udGV4dCkpO1xuICAgIGNvbnN0IGltcG9ydHMgPSBpbXBvcnRSZWZzLm1hcChpbXAgPT4gdGhpcy5fdG9SM1JlZmVyZW5jZShpbXAsIHZhbHVlQ29udGV4dCwgdHlwZUNvbnRleHQpKTtcbiAgICBjb25zdCBleHBvcnRzID0gZXhwb3J0UmVmcy5tYXAoZXhwID0+IHRoaXMuX3RvUjNSZWZlcmVuY2UoZXhwLCB2YWx1ZUNvbnRleHQsIHR5cGVDb250ZXh0KSk7XG5cbiAgICBjb25zdCBpc0ZvcndhcmRSZWZlcmVuY2UgPSAocmVmOiBSM1JlZmVyZW5jZSkgPT5cbiAgICAgICAgaXNFeHByZXNzaW9uRm9yd2FyZFJlZmVyZW5jZShyZWYudmFsdWUsIG5vZGUubmFtZSEsIHZhbHVlQ29udGV4dCk7XG4gICAgY29uc3QgY29udGFpbnNGb3J3YXJkRGVjbHMgPSBib290c3RyYXAuc29tZShpc0ZvcndhcmRSZWZlcmVuY2UpIHx8XG4gICAgICAgIGRlY2xhcmF0aW9ucy5zb21lKGlzRm9yd2FyZFJlZmVyZW5jZSkgfHwgaW1wb3J0cy5zb21lKGlzRm9yd2FyZFJlZmVyZW5jZSkgfHxcbiAgICAgICAgZXhwb3J0cy5zb21lKGlzRm9yd2FyZFJlZmVyZW5jZSk7XG5cbiAgICBjb25zdCB0eXBlID0gd3JhcFR5cGVSZWZlcmVuY2UodGhpcy5yZWZsZWN0b3IsIG5vZGUpO1xuICAgIGNvbnN0IGludGVybmFsVHlwZSA9IG5ldyBXcmFwcGVkTm9kZUV4cHIodGhpcy5yZWZsZWN0b3IuZ2V0SW50ZXJuYWxOYW1lT2ZDbGFzcyhub2RlKSk7XG4gICAgY29uc3QgYWRqYWNlbnRUeXBlID0gbmV3IFdyYXBwZWROb2RlRXhwcih0aGlzLnJlZmxlY3Rvci5nZXRBZGphY2VudE5hbWVPZkNsYXNzKG5vZGUpKTtcblxuICAgIGNvbnN0IG5nTW9kdWxlTWV0YWRhdGE6IFIzTmdNb2R1bGVNZXRhZGF0YSA9IHtcbiAgICAgIHR5cGUsXG4gICAgICBpbnRlcm5hbFR5cGUsXG4gICAgICBhZGphY2VudFR5cGUsXG4gICAgICBib290c3RyYXAsXG4gICAgICBkZWNsYXJhdGlvbnMsXG4gICAgICBleHBvcnRzLFxuICAgICAgaW1wb3J0cyxcbiAgICAgIGNvbnRhaW5zRm9yd2FyZERlY2xzLFxuICAgICAgaWQsXG4gICAgICBlbWl0SW5saW5lOiBmYWxzZSxcbiAgICAgIC8vIFRPRE86IHRvIGJlIGltcGxlbWVudGVkIGFzIGEgcGFydCBvZiBGVy0xMDA0LlxuICAgICAgc2NoZW1hczogW10sXG4gICAgfTtcblxuICAgIGNvbnN0IHJhd1Byb3ZpZGVycyA9IG5nTW9kdWxlLmhhcygncHJvdmlkZXJzJykgPyBuZ01vZHVsZS5nZXQoJ3Byb3ZpZGVycycpISA6IG51bGw7XG4gICAgY29uc3Qgd3JhcHBlclByb3ZpZGVycyA9IHJhd1Byb3ZpZGVycyAhPT0gbnVsbCA/XG4gICAgICAgIG5ldyBXcmFwcGVkTm9kZUV4cHIoXG4gICAgICAgICAgICB0aGlzLmFubm90YXRlRm9yQ2xvc3VyZUNvbXBpbGVyID8gd3JhcEZ1bmN0aW9uRXhwcmVzc2lvbnNJblBhcmVucyhyYXdQcm92aWRlcnMpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdQcm92aWRlcnMpIDpcbiAgICAgICAgbnVsbDtcblxuICAgIC8vIEF0IHRoaXMgcG9pbnQsIG9ubHkgYWRkIHRoZSBtb2R1bGUncyBpbXBvcnRzIGFzIHRoZSBpbmplY3RvcnMnIGltcG9ydHMuIEFueSBleHBvcnRlZCBtb2R1bGVzXG4gICAgLy8gYXJlIGFkZGVkIGR1cmluZyBgcmVzb2x2ZWAsIGFzIHdlIG5lZWQgc2NvcGUgaW5mb3JtYXRpb24gdG8gYmUgYWJsZSB0byBmaWx0ZXIgb3V0IGRpcmVjdGl2ZXNcbiAgICAvLyBhbmQgcGlwZXMgZnJvbSB0aGUgbW9kdWxlIGV4cG9ydHMuXG4gICAgY29uc3QgaW5qZWN0b3JJbXBvcnRzOiBXcmFwcGVkTm9kZUV4cHI8dHMuRXhwcmVzc2lvbj5bXSA9IFtdO1xuICAgIGlmIChuZ01vZHVsZS5oYXMoJ2ltcG9ydHMnKSkge1xuICAgICAgaW5qZWN0b3JJbXBvcnRzLnB1c2gobmV3IFdyYXBwZWROb2RlRXhwcihuZ01vZHVsZS5nZXQoJ2ltcG9ydHMnKSEpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yb3V0ZUFuYWx5emVyICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnJvdXRlQW5hbHl6ZXIuYWRkKG5vZGUuZ2V0U291cmNlRmlsZSgpLCBuYW1lLCByYXdJbXBvcnRzLCByYXdFeHBvcnRzLCByYXdQcm92aWRlcnMpO1xuICAgIH1cblxuICAgIGNvbnN0IGluamVjdG9yTWV0YWRhdGE6IFIzSW5qZWN0b3JNZXRhZGF0YSA9IHtcbiAgICAgIG5hbWUsXG4gICAgICB0eXBlLFxuICAgICAgaW50ZXJuYWxUeXBlLFxuICAgICAgcHJvdmlkZXJzOiB3cmFwcGVyUHJvdmlkZXJzLFxuICAgICAgaW1wb3J0czogaW5qZWN0b3JJbXBvcnRzLFxuICAgIH07XG5cbiAgICBjb25zdCBmYWN0b3J5TWV0YWRhdGE6IFIzRmFjdG9yeU1ldGFkYXRhID0ge1xuICAgICAgbmFtZSxcbiAgICAgIHR5cGUsXG4gICAgICBpbnRlcm5hbFR5cGUsXG4gICAgICB0eXBlQXJndW1lbnRDb3VudDogMCxcbiAgICAgIGRlcHM6IGdldFZhbGlkQ29uc3RydWN0b3JEZXBlbmRlbmNpZXMobm9kZSwgdGhpcy5yZWZsZWN0b3IsIHRoaXMuaXNDb3JlKSxcbiAgICAgIHRhcmdldDogRmFjdG9yeVRhcmdldC5OZ01vZHVsZSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFuYWx5c2lzOiB7XG4gICAgICAgIGlkLFxuICAgICAgICBzY2hlbWFzLFxuICAgICAgICBtb2Q6IG5nTW9kdWxlTWV0YWRhdGEsXG4gICAgICAgIGluajogaW5qZWN0b3JNZXRhZGF0YSxcbiAgICAgICAgZmFjOiBmYWN0b3J5TWV0YWRhdGEsXG4gICAgICAgIGRlY2xhcmF0aW9uczogZGVjbGFyYXRpb25SZWZzLFxuICAgICAgICByYXdEZWNsYXJhdGlvbnMsXG4gICAgICAgIGltcG9ydHM6IGltcG9ydFJlZnMsXG4gICAgICAgIGV4cG9ydHM6IGV4cG9ydFJlZnMsXG4gICAgICAgIHByb3ZpZGVyczogcmF3UHJvdmlkZXJzLFxuICAgICAgICBwcm92aWRlcnNSZXF1aXJpbmdGYWN0b3J5OiByYXdQcm92aWRlcnMgP1xuICAgICAgICAgICAgcmVzb2x2ZVByb3ZpZGVyc1JlcXVpcmluZ0ZhY3RvcnkocmF3UHJvdmlkZXJzLCB0aGlzLnJlZmxlY3RvciwgdGhpcy5ldmFsdWF0b3IpIDpcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgIGNsYXNzTWV0YWRhdGE6IGV4dHJhY3RDbGFzc01ldGFkYXRhKFxuICAgICAgICAgICAgbm9kZSwgdGhpcy5yZWZsZWN0b3IsIHRoaXMuaXNDb3JlLCB0aGlzLmFubm90YXRlRm9yQ2xvc3VyZUNvbXBpbGVyKSxcbiAgICAgICAgZmFjdG9yeVN5bWJvbE5hbWU6IG5vZGUubmFtZS50ZXh0LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgc3ltYm9sKG5vZGU6IENsYXNzRGVjbGFyYXRpb24pOiBOZ01vZHVsZVN5bWJvbCB7XG4gICAgcmV0dXJuIG5ldyBOZ01vZHVsZVN5bWJvbChub2RlKTtcbiAgfVxuXG4gIHJlZ2lzdGVyKG5vZGU6IENsYXNzRGVjbGFyYXRpb24sIGFuYWx5c2lzOiBOZ01vZHVsZUFuYWx5c2lzKTogdm9pZCB7XG4gICAgLy8gUmVnaXN0ZXIgdGhpcyBtb2R1bGUncyBpbmZvcm1hdGlvbiB3aXRoIHRoZSBMb2NhbE1vZHVsZVNjb3BlUmVnaXN0cnkuIFRoaXMgZW5zdXJlcyB0aGF0XG4gICAgLy8gZHVyaW5nIHRoZSBjb21waWxlKCkgcGhhc2UsIHRoZSBtb2R1bGUncyBtZXRhZGF0YSBpcyBhdmFpbGFibGUgZm9yIHNlbGVjdG9yIHNjb3BlXG4gICAgLy8gY29tcHV0YXRpb24uXG4gICAgdGhpcy5tZXRhUmVnaXN0cnkucmVnaXN0ZXJOZ01vZHVsZU1ldGFkYXRhKHtcbiAgICAgIHJlZjogbmV3IFJlZmVyZW5jZShub2RlKSxcbiAgICAgIHNjaGVtYXM6IGFuYWx5c2lzLnNjaGVtYXMsXG4gICAgICBkZWNsYXJhdGlvbnM6IGFuYWx5c2lzLmRlY2xhcmF0aW9ucyxcbiAgICAgIGltcG9ydHM6IGFuYWx5c2lzLmltcG9ydHMsXG4gICAgICBleHBvcnRzOiBhbmFseXNpcy5leHBvcnRzLFxuICAgICAgcmF3RGVjbGFyYXRpb25zOiBhbmFseXNpcy5yYXdEZWNsYXJhdGlvbnMsXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5mYWN0b3J5VHJhY2tlciAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5mYWN0b3J5VHJhY2tlci50cmFjayhub2RlLmdldFNvdXJjZUZpbGUoKSwge1xuICAgICAgICBuYW1lOiBhbmFseXNpcy5mYWN0b3J5U3ltYm9sTmFtZSxcbiAgICAgICAgaGFzSWQ6IGFuYWx5c2lzLmlkICE9PSBudWxsLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5pbmplY3RhYmxlUmVnaXN0cnkucmVnaXN0ZXJJbmplY3RhYmxlKG5vZGUpO1xuICB9XG5cbiAgcmVzb2x2ZShub2RlOiBDbGFzc0RlY2xhcmF0aW9uLCBhbmFseXNpczogUmVhZG9ubHk8TmdNb2R1bGVBbmFseXNpcz4pOlxuICAgICAgUmVzb2x2ZVJlc3VsdDxOZ01vZHVsZVJlc29sdXRpb24+IHtcbiAgICBjb25zdCBzY29wZSA9IHRoaXMuc2NvcGVSZWdpc3RyeS5nZXRTY29wZU9mTW9kdWxlKG5vZGUpO1xuICAgIGNvbnN0IGRpYWdub3N0aWNzOiB0cy5EaWFnbm9zdGljW10gPSBbXTtcblxuICAgIGNvbnN0IHNjb3BlRGlhZ25vc3RpY3MgPSB0aGlzLnNjb3BlUmVnaXN0cnkuZ2V0RGlhZ25vc3RpY3NPZk1vZHVsZShub2RlKTtcbiAgICBpZiAoc2NvcGVEaWFnbm9zdGljcyAhPT0gbnVsbCkge1xuICAgICAgZGlhZ25vc3RpY3MucHVzaCguLi5zY29wZURpYWdub3N0aWNzKTtcbiAgICB9XG5cbiAgICBpZiAoYW5hbHlzaXMucHJvdmlkZXJzUmVxdWlyaW5nRmFjdG9yeSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcHJvdmlkZXJEaWFnbm9zdGljcyA9IGdldFByb3ZpZGVyRGlhZ25vc3RpY3MoXG4gICAgICAgICAgYW5hbHlzaXMucHJvdmlkZXJzUmVxdWlyaW5nRmFjdG9yeSwgYW5hbHlzaXMucHJvdmlkZXJzISwgdGhpcy5pbmplY3RhYmxlUmVnaXN0cnkpO1xuICAgICAgZGlhZ25vc3RpY3MucHVzaCguLi5wcm92aWRlckRpYWdub3N0aWNzKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhOiBOZ01vZHVsZVJlc29sdXRpb24gPSB7XG4gICAgICBpbmplY3RvckltcG9ydHM6IFtdLFxuICAgIH07XG5cbiAgICBpZiAoc2NvcGUgIT09IG51bGwgJiYgIXNjb3BlLmNvbXBpbGF0aW9uLmlzUG9pc29uZWQpIHtcbiAgICAgIC8vIFVzaW5nIHRoZSBzY29wZSBpbmZvcm1hdGlvbiwgZXh0ZW5kIHRoZSBpbmplY3RvcidzIGltcG9ydHMgdXNpbmcgdGhlIG1vZHVsZXMgdGhhdCBhcmVcbiAgICAgIC8vIHNwZWNpZmllZCBhcyBtb2R1bGUgZXhwb3J0cy5cbiAgICAgIGNvbnN0IGNvbnRleHQgPSBnZXRTb3VyY2VGaWxlKG5vZGUpO1xuICAgICAgZm9yIChjb25zdCBleHBvcnRSZWYgb2YgYW5hbHlzaXMuZXhwb3J0cykge1xuICAgICAgICBpZiAoaXNOZ01vZHVsZShleHBvcnRSZWYubm9kZSwgc2NvcGUuY29tcGlsYXRpb24pKSB7XG4gICAgICAgICAgZGF0YS5pbmplY3RvckltcG9ydHMucHVzaCh0aGlzLnJlZkVtaXR0ZXIuZW1pdChleHBvcnRSZWYsIGNvbnRleHQpLmV4cHJlc3Npb24pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZGVjbCBvZiBhbmFseXNpcy5kZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLm1ldGFSZWFkZXIuZ2V0RGlyZWN0aXZlTWV0YWRhdGEoZGVjbCk7XG5cbiAgICAgICAgaWYgKG1ldGFkYXRhICE9PSBudWxsICYmIG1ldGFkYXRhLnNlbGVjdG9yID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEZhdGFsRGlhZ25vc3RpY0Vycm9yKFxuICAgICAgICAgICAgICBFcnJvckNvZGUuRElSRUNUSVZFX01JU1NJTkdfU0VMRUNUT1IsIGRlY2wubm9kZSxcbiAgICAgICAgICAgICAgYERpcmVjdGl2ZSAke2RlY2wubm9kZS5uYW1lLnRleHR9IGhhcyBubyBzZWxlY3RvciwgcGxlYXNlIGFkZCBpdCFgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkaWFnbm9zdGljcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4ge2RpYWdub3N0aWNzfTtcbiAgICB9XG5cbiAgICBpZiAoc2NvcGUgPT09IG51bGwgfHwgc2NvcGUuY29tcGlsYXRpb24uaXNQb2lzb25lZCB8fCBzY29wZS5leHBvcnRlZC5pc1BvaXNvbmVkIHx8XG4gICAgICAgIHNjb3BlLnJlZXhwb3J0cyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHtkYXRhfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YSxcbiAgICAgICAgcmVleHBvcnRzOiBzY29wZS5yZWV4cG9ydHMsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGNvbXBpbGVGdWxsKFxuICAgICAgbm9kZTogQ2xhc3NEZWNsYXJhdGlvbixcbiAgICAgIHtpbmosIG1vZCwgZmFjLCBjbGFzc01ldGFkYXRhLCBkZWNsYXJhdGlvbnN9OiBSZWFkb25seTxOZ01vZHVsZUFuYWx5c2lzPixcbiAgICAgIHtpbmplY3RvckltcG9ydHN9OiBSZWFkb25seTxOZ01vZHVsZVJlc29sdXRpb24+KTogQ29tcGlsZVJlc3VsdFtdIHtcbiAgICBjb25zdCBmYWN0b3J5Rm4gPSBjb21waWxlTmdGYWN0b3J5RGVmRmllbGQoZmFjKTtcbiAgICBjb25zdCBuZ0luamVjdG9yRGVmID0gY29tcGlsZUluamVjdG9yKHRoaXMubWVyZ2VJbmplY3RvckltcG9ydHMoaW5qLCBpbmplY3RvckltcG9ydHMpKTtcbiAgICBjb25zdCBuZ01vZHVsZURlZiA9IGNvbXBpbGVOZ01vZHVsZShtb2QpO1xuICAgIGNvbnN0IHN0YXRlbWVudHMgPSBuZ01vZHVsZURlZi5zdGF0ZW1lbnRzO1xuICAgIGNvbnN0IG1ldGFkYXRhID0gY2xhc3NNZXRhZGF0YSAhPT0gbnVsbCA/IGNvbXBpbGVDbGFzc01ldGFkYXRhKGNsYXNzTWV0YWRhdGEpIDogbnVsbDtcbiAgICB0aGlzLmluc2VydE1ldGFkYXRhU3RhdGVtZW50KHN0YXRlbWVudHMsIG1ldGFkYXRhKTtcbiAgICB0aGlzLmFwcGVuZFJlbW90ZVNjb3BpbmdTdGF0ZW1lbnRzKHN0YXRlbWVudHMsIG5vZGUsIGRlY2xhcmF0aW9ucyk7XG5cbiAgICByZXR1cm4gdGhpcy5jb21waWxlTmdNb2R1bGUoZmFjdG9yeUZuLCBuZ0luamVjdG9yRGVmLCBuZ01vZHVsZURlZik7XG4gIH1cblxuICBjb21waWxlUGFydGlhbChcbiAgICAgIG5vZGU6IENsYXNzRGVjbGFyYXRpb24sIHtpbmosIGZhYywgbW9kLCBjbGFzc01ldGFkYXRhfTogUmVhZG9ubHk8TmdNb2R1bGVBbmFseXNpcz4sXG4gICAgICB7aW5qZWN0b3JJbXBvcnRzfTogUmVhZG9ubHk8TmdNb2R1bGVSZXNvbHV0aW9uPik6IENvbXBpbGVSZXN1bHRbXSB7XG4gICAgY29uc3QgZmFjdG9yeUZuID0gY29tcGlsZURlY2xhcmVGYWN0b3J5KGZhYyk7XG4gICAgY29uc3QgaW5qZWN0b3JEZWYgPVxuICAgICAgICBjb21waWxlRGVjbGFyZUluamVjdG9yRnJvbU1ldGFkYXRhKHRoaXMubWVyZ2VJbmplY3RvckltcG9ydHMoaW5qLCBpbmplY3RvckltcG9ydHMpKTtcbiAgICBjb25zdCBuZ01vZHVsZURlZiA9IGNvbXBpbGVEZWNsYXJlTmdNb2R1bGVGcm9tTWV0YWRhdGEobW9kKTtcbiAgICBjb25zdCBtZXRhZGF0YSA9IGNsYXNzTWV0YWRhdGEgIT09IG51bGwgPyBjb21waWxlRGVjbGFyZUNsYXNzTWV0YWRhdGEoY2xhc3NNZXRhZGF0YSkgOiBudWxsO1xuICAgIHRoaXMuaW5zZXJ0TWV0YWRhdGFTdGF0ZW1lbnQobmdNb2R1bGVEZWYuc3RhdGVtZW50cywgbWV0YWRhdGEpO1xuICAgIC8vIE5PVEU6IG5vIHJlbW90ZSBzY29waW5nIHJlcXVpcmVkIGFzIHRoaXMgaXMgYmFubmVkIGluIHBhcnRpYWwgY29tcGlsYXRpb24uXG4gICAgcmV0dXJuIHRoaXMuY29tcGlsZU5nTW9kdWxlKGZhY3RvcnlGbiwgaW5qZWN0b3JEZWYsIG5nTW9kdWxlRGVmKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgTWVyZ2UgdGhlIGluamVjdG9yIGltcG9ydHMgKHdoaWNoIGFyZSAnZXhwb3J0cycgdGhhdCB3ZXJlIGxhdGVyIGZvdW5kIHRvIGJlIE5nTW9kdWxlcylcbiAgICogIGNvbXB1dGVkIGR1cmluZyByZXNvbHV0aW9uIHdpdGggdGhlIG9uZXMgZnJvbSBhbmFseXNpcy5cbiAgICovXG4gIHByaXZhdGUgbWVyZ2VJbmplY3RvckltcG9ydHMoaW5qOiBSM0luamVjdG9yTWV0YWRhdGEsIGluamVjdG9ySW1wb3J0czogRXhwcmVzc2lvbltdKTpcbiAgICAgIFIzSW5qZWN0b3JNZXRhZGF0YSB7XG4gICAgcmV0dXJuIHsuLi5pbmosIGltcG9ydHM6IFsuLi5pbmouaW1wb3J0cywgLi4uaW5qZWN0b3JJbXBvcnRzXX07XG4gIH1cblxuICAvKipcbiAgICogQWRkIGNsYXNzIG1ldGFkYXRhIHN0YXRlbWVudHMsIGlmIHByb3ZpZGVkLCB0byB0aGUgYG5nTW9kdWxlU3RhdGVtZW50c2AuXG4gICAqL1xuICBwcml2YXRlIGluc2VydE1ldGFkYXRhU3RhdGVtZW50KG5nTW9kdWxlU3RhdGVtZW50czogU3RhdGVtZW50W10sIG1ldGFkYXRhOiBFeHByZXNzaW9ufG51bGwpOlxuICAgICAgdm9pZCB7XG4gICAgaWYgKG1ldGFkYXRhICE9PSBudWxsKSB7XG4gICAgICBuZ01vZHVsZVN0YXRlbWVudHMudW5zaGlmdChtZXRhZGF0YS50b1N0bXQoKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCByZW1vdGUgc2NvcGluZyBzdGF0ZW1lbnRzLCBhcyBuZWVkZWQsIHRvIHRoZSBgbmdNb2R1bGVTdGF0ZW1lbnRzYC5cbiAgICovXG4gIHByaXZhdGUgYXBwZW5kUmVtb3RlU2NvcGluZ1N0YXRlbWVudHMoXG4gICAgICBuZ01vZHVsZVN0YXRlbWVudHM6IFN0YXRlbWVudFtdLCBub2RlOiBDbGFzc0RlY2xhcmF0aW9uLFxuICAgICAgZGVjbGFyYXRpb25zOiBSZWZlcmVuY2U8Q2xhc3NEZWNsYXJhdGlvbj5bXSk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRleHQgPSBnZXRTb3VyY2VGaWxlKG5vZGUpO1xuICAgIGZvciAoY29uc3QgZGVjbCBvZiBkZWNsYXJhdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlbW90ZVNjb3BlID0gdGhpcy5zY29wZVJlZ2lzdHJ5LmdldFJlbW90ZVNjb3BlKGRlY2wubm9kZSk7XG4gICAgICBpZiAocmVtb3RlU2NvcGUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgZGlyZWN0aXZlcyA9IHJlbW90ZVNjb3BlLmRpcmVjdGl2ZXMubWFwKFxuICAgICAgICAgICAgZGlyZWN0aXZlID0+IHRoaXMucmVmRW1pdHRlci5lbWl0KGRpcmVjdGl2ZSwgY29udGV4dCkuZXhwcmVzc2lvbik7XG4gICAgICAgIGNvbnN0IHBpcGVzID0gcmVtb3RlU2NvcGUucGlwZXMubWFwKHBpcGUgPT4gdGhpcy5yZWZFbWl0dGVyLmVtaXQocGlwZSwgY29udGV4dCkuZXhwcmVzc2lvbik7XG4gICAgICAgIGNvbnN0IGRpcmVjdGl2ZUFycmF5ID0gbmV3IExpdGVyYWxBcnJheUV4cHIoZGlyZWN0aXZlcyk7XG4gICAgICAgIGNvbnN0IHBpcGVzQXJyYXkgPSBuZXcgTGl0ZXJhbEFycmF5RXhwcihwaXBlcyk7XG4gICAgICAgIGNvbnN0IGRlY2xFeHByID0gdGhpcy5yZWZFbWl0dGVyLmVtaXQoZGVjbCwgY29udGV4dCkuZXhwcmVzc2lvbjtcbiAgICAgICAgY29uc3Qgc2V0Q29tcG9uZW50U2NvcGUgPSBuZXcgRXh0ZXJuYWxFeHByKFIzSWRlbnRpZmllcnMuc2V0Q29tcG9uZW50U2NvcGUpO1xuICAgICAgICBjb25zdCBjYWxsRXhwciA9XG4gICAgICAgICAgICBuZXcgSW52b2tlRnVuY3Rpb25FeHByKHNldENvbXBvbmVudFNjb3BlLCBbZGVjbEV4cHIsIGRpcmVjdGl2ZUFycmF5LCBwaXBlc0FycmF5XSk7XG5cbiAgICAgICAgbmdNb2R1bGVTdGF0ZW1lbnRzLnB1c2goY2FsbEV4cHIudG9TdG10KCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29tcGlsZU5nTW9kdWxlKFxuICAgICAgZmFjdG9yeUZuOiBDb21waWxlUmVzdWx0LCBpbmplY3RvckRlZjogUjNDb21waWxlZEV4cHJlc3Npb24sXG4gICAgICBuZ01vZHVsZURlZjogUjNDb21waWxlZEV4cHJlc3Npb24pOiBDb21waWxlUmVzdWx0W10ge1xuICAgIGNvbnN0IHJlczogQ29tcGlsZVJlc3VsdFtdID0gW1xuICAgICAgZmFjdG9yeUZuLFxuICAgICAge1xuICAgICAgICBuYW1lOiAnybVtb2QnLFxuICAgICAgICBpbml0aWFsaXplcjogbmdNb2R1bGVEZWYuZXhwcmVzc2lvbixcbiAgICAgICAgc3RhdGVtZW50czogbmdNb2R1bGVEZWYuc3RhdGVtZW50cyxcbiAgICAgICAgdHlwZTogbmdNb2R1bGVEZWYudHlwZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICfJtWluaicsXG4gICAgICAgIGluaXRpYWxpemVyOiBpbmplY3RvckRlZi5leHByZXNzaW9uLFxuICAgICAgICBzdGF0ZW1lbnRzOiBpbmplY3RvckRlZi5zdGF0ZW1lbnRzLFxuICAgICAgICB0eXBlOiBpbmplY3RvckRlZi50eXBlLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgaWYgKHRoaXMubG9jYWxlSWQpIHtcbiAgICAgIC8vIFFVRVNUSU9OOiBjYW4gdGhpcyBzdHVmZiBiZSByZW1vdmVkP1xuICAgICAgcmVzLnB1c2goe1xuICAgICAgICBuYW1lOiAnybVsb2MnLFxuICAgICAgICBpbml0aWFsaXplcjogbmV3IExpdGVyYWxFeHByKHRoaXMubG9jYWxlSWQpLFxuICAgICAgICBzdGF0ZW1lbnRzOiBbXSxcbiAgICAgICAgdHlwZTogU1RSSU5HX1RZUEVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwcml2YXRlIF90b1IzUmVmZXJlbmNlKFxuICAgICAgdmFsdWVSZWY6IFJlZmVyZW5jZTxDbGFzc0RlY2xhcmF0aW9uPiwgdmFsdWVDb250ZXh0OiB0cy5Tb3VyY2VGaWxlLFxuICAgICAgdHlwZUNvbnRleHQ6IHRzLlNvdXJjZUZpbGUpOiBSM1JlZmVyZW5jZSB7XG4gICAgaWYgKHZhbHVlUmVmLmhhc093bmluZ01vZHVsZUd1ZXNzKSB7XG4gICAgICByZXR1cm4gdG9SM1JlZmVyZW5jZSh2YWx1ZVJlZiwgdmFsdWVSZWYsIHZhbHVlQ29udGV4dCwgdmFsdWVDb250ZXh0LCB0aGlzLnJlZkVtaXR0ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdHlwZVJlZiA9IHZhbHVlUmVmO1xuICAgICAgbGV0IHR5cGVOb2RlID0gdGhpcy5yZWZsZWN0b3IuZ2V0RHRzRGVjbGFyYXRpb24odHlwZVJlZi5ub2RlKTtcbiAgICAgIGlmICh0eXBlTm9kZSAhPT0gbnVsbCAmJiBpc05hbWVkQ2xhc3NEZWNsYXJhdGlvbih0eXBlTm9kZSkpIHtcbiAgICAgICAgdHlwZVJlZiA9IG5ldyBSZWZlcmVuY2UodHlwZU5vZGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRvUjNSZWZlcmVuY2UodmFsdWVSZWYsIHR5cGVSZWYsIHZhbHVlQ29udGV4dCwgdHlwZUNvbnRleHQsIHRoaXMucmVmRW1pdHRlcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGEgYEZ1bmN0aW9uRGVjbGFyYXRpb25gLCBgTWV0aG9kRGVjbGFyYXRpb25gIG9yIGBGdW5jdGlvbkV4cHJlc3Npb25gLCBjaGVjayBpZiBpdCBpc1xuICAgKiB0eXBlZCBhcyBhIGBNb2R1bGVXaXRoUHJvdmlkZXJzYCBhbmQgcmV0dXJuIGFuIGV4cHJlc3Npb24gcmVmZXJlbmNpbmcgdGhlIG1vZHVsZSBpZiBhdmFpbGFibGUuXG4gICAqL1xuICBwcml2YXRlIF9leHRyYWN0TW9kdWxlRnJvbU1vZHVsZVdpdGhQcm92aWRlcnNGbihub2RlOiB0cy5GdW5jdGlvbkRlY2xhcmF0aW9ufFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cy5NZXRob2REZWNsYXJhdGlvbnxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHMuRnVuY3Rpb25FeHByZXNzaW9uKTogdHMuRXhwcmVzc2lvbnxudWxsIHtcbiAgICBjb25zdCB0eXBlID0gbm9kZS50eXBlIHx8IG51bGw7XG4gICAgcmV0dXJuIHR5cGUgJiZcbiAgICAgICAgKHRoaXMuX3JlZmxlY3RNb2R1bGVGcm9tVHlwZVBhcmFtKHR5cGUsIG5vZGUpIHx8IHRoaXMuX3JlZmxlY3RNb2R1bGVGcm9tTGl0ZXJhbFR5cGUodHlwZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGFuIGBOZ01vZHVsZWAgaWRlbnRpZmllciAoVCkgZnJvbSB0aGUgc3BlY2lmaWVkIGB0eXBlYCwgaWYgaXQgaXMgb2YgdGhlIGZvcm06XG4gICAqIGBNb2R1bGVXaXRoUHJvdmlkZXJzPFQ+YFxuICAgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSB0byByZWZsZWN0IG9uLlxuICAgKiBAcmV0dXJucyB0aGUgaWRlbnRpZmllciBvZiB0aGUgTmdNb2R1bGUgdHlwZSBpZiBmb3VuZCwgb3IgbnVsbCBvdGhlcndpc2UuXG4gICAqL1xuICBwcml2YXRlIF9yZWZsZWN0TW9kdWxlRnJvbVR5cGVQYXJhbShcbiAgICAgIHR5cGU6IHRzLlR5cGVOb2RlLFxuICAgICAgbm9kZTogdHMuRnVuY3Rpb25EZWNsYXJhdGlvbnx0cy5NZXRob2REZWNsYXJhdGlvbnx0cy5GdW5jdGlvbkV4cHJlc3Npb24pOiB0cy5FeHByZXNzaW9ufG51bGwge1xuICAgIC8vIEV4YW1pbmUgdGhlIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIHRvIHNlZSBpZiBpdCdzIGEgTW9kdWxlV2l0aFByb3ZpZGVycyByZWZlcmVuY2UuXG4gICAgaWYgKCF0cy5pc1R5cGVSZWZlcmVuY2VOb2RlKHR5cGUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlTmFtZSA9IHR5cGUgJiZcbiAgICAgICAgICAgICh0cy5pc0lkZW50aWZpZXIodHlwZS50eXBlTmFtZSkgJiYgdHlwZS50eXBlTmFtZSB8fFxuICAgICAgICAgICAgIHRzLmlzUXVhbGlmaWVkTmFtZSh0eXBlLnR5cGVOYW1lKSAmJiB0eXBlLnR5cGVOYW1lLnJpZ2h0KSB8fFxuICAgICAgICBudWxsO1xuICAgIGlmICh0eXBlTmFtZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gTG9vayBhdCB0aGUgdHlwZSBpdHNlbGYgdG8gc2VlIHdoZXJlIGl0IGNvbWVzIGZyb20uXG4gICAgY29uc3QgaWQgPSB0aGlzLnJlZmxlY3Rvci5nZXRJbXBvcnRPZklkZW50aWZpZXIodHlwZU5hbWUpO1xuXG4gICAgLy8gSWYgaXQncyBub3QgbmFtZWQgTW9kdWxlV2l0aFByb3ZpZGVycywgYmFpbC5cbiAgICBpZiAoaWQgPT09IG51bGwgfHwgaWQubmFtZSAhPT0gJ01vZHVsZVdpdGhQcm92aWRlcnMnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBJZiBpdCdzIG5vdCBmcm9tIEBhbmd1bGFyL2NvcmUsIGJhaWwuXG4gICAgaWYgKCF0aGlzLmlzQ29yZSAmJiBpZC5mcm9tICE9PSAnQGFuZ3VsYXIvY29yZScpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlJ3Mgbm8gdHlwZSBwYXJhbWV0ZXIgc3BlY2lmaWVkLCBiYWlsLlxuICAgIGlmICh0eXBlLnR5cGVBcmd1bWVudHMgPT09IHVuZGVmaW5lZCB8fCB0eXBlLnR5cGVBcmd1bWVudHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPVxuICAgICAgICAgIHRzLmlzTWV0aG9kRGVjbGFyYXRpb24obm9kZSkgJiYgdHMuaXNDbGFzc0RlY2xhcmF0aW9uKG5vZGUucGFyZW50KSA/IG5vZGUucGFyZW50IDogbnVsbDtcbiAgICAgIGNvbnN0IHN5bWJvbE5hbWUgPSAocGFyZW50ICYmIHBhcmVudC5uYW1lID8gcGFyZW50Lm5hbWUuZ2V0VGV4dCgpICsgJy4nIDogJycpICtcbiAgICAgICAgICAobm9kZS5uYW1lID8gbm9kZS5uYW1lLmdldFRleHQoKSA6ICdhbm9ueW1vdXMnKTtcbiAgICAgIHRocm93IG5ldyBGYXRhbERpYWdub3N0aWNFcnJvcihcbiAgICAgICAgICBFcnJvckNvZGUuTkdNT0RVTEVfTU9EVUxFX1dJVEhfUFJPVklERVJTX01JU1NJTkdfR0VORVJJQywgdHlwZSxcbiAgICAgICAgICBgJHtzeW1ib2xOYW1lfSByZXR1cm5zIGEgTW9kdWxlV2l0aFByb3ZpZGVycyB0eXBlIHdpdGhvdXQgYSBnZW5lcmljIHR5cGUgYXJndW1lbnQuIGAgK1xuICAgICAgICAgICAgICBgUGxlYXNlIGFkZCBhIGdlbmVyaWMgdHlwZSBhcmd1bWVudCB0byB0aGUgTW9kdWxlV2l0aFByb3ZpZGVycyB0eXBlLiBJZiB0aGlzIGAgK1xuICAgICAgICAgICAgICBgb2NjdXJyZW5jZSBpcyBpbiBsaWJyYXJ5IGNvZGUgeW91IGRvbid0IGNvbnRyb2wsIHBsZWFzZSBjb250YWN0IHRoZSBsaWJyYXJ5IGF1dGhvcnMuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXJnID0gdHlwZS50eXBlQXJndW1lbnRzWzBdO1xuXG4gICAgcmV0dXJuIHR5cGVOb2RlVG9WYWx1ZUV4cHIoYXJnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhbiBgTmdNb2R1bGVgIGlkZW50aWZpZXIgKFQpIGZyb20gdGhlIHNwZWNpZmllZCBgdHlwZWAsIGlmIGl0IGlzIG9mIHRoZSBmb3JtOlxuICAgKiBgQXxCfHtuZ01vZHVsZTogVH18Q2AuXG4gICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIHRvIHJlZmxlY3Qgb24uXG4gICAqIEByZXR1cm5zIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBOZ01vZHVsZSB0eXBlIGlmIGZvdW5kLCBvciBudWxsIG90aGVyd2lzZS5cbiAgICovXG4gIHByaXZhdGUgX3JlZmxlY3RNb2R1bGVGcm9tTGl0ZXJhbFR5cGUodHlwZTogdHMuVHlwZU5vZGUpOiB0cy5FeHByZXNzaW9ufG51bGwge1xuICAgIGlmICghdHMuaXNJbnRlcnNlY3Rpb25UeXBlTm9kZSh0eXBlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdCBvZiB0eXBlLnR5cGVzKSB7XG4gICAgICBpZiAodHMuaXNUeXBlTGl0ZXJhbE5vZGUodCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBtIG9mIHQubWVtYmVycykge1xuICAgICAgICAgIGNvbnN0IG5nTW9kdWxlVHlwZSA9IHRzLmlzUHJvcGVydHlTaWduYXR1cmUobSkgJiYgdHMuaXNJZGVudGlmaWVyKG0ubmFtZSkgJiZcbiAgICAgICAgICAgICAgICAgIG0ubmFtZS50ZXh0ID09PSAnbmdNb2R1bGUnICYmIG0udHlwZSB8fFxuICAgICAgICAgICAgICBudWxsO1xuICAgICAgICAgIGNvbnN0IG5nTW9kdWxlRXhwcmVzc2lvbiA9IG5nTW9kdWxlVHlwZSAmJiB0eXBlTm9kZVRvVmFsdWVFeHByKG5nTW9kdWxlVHlwZSk7XG4gICAgICAgICAgaWYgKG5nTW9kdWxlRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuIG5nTW9kdWxlRXhwcmVzc2lvbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBWZXJpZnkgdGhhdCBhIFwiRGVjbGFyYXRpb25cIiByZWZlcmVuY2UgaXMgYSBgQ2xhc3NEZWNsYXJhdGlvbmAgcmVmZXJlbmNlLlxuICBwcml2YXRlIGlzQ2xhc3NEZWNsYXJhdGlvblJlZmVyZW5jZShyZWY6IFJlZmVyZW5jZSk6IHJlZiBpcyBSZWZlcmVuY2U8Q2xhc3NEZWNsYXJhdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLnJlZmxlY3Rvci5pc0NsYXNzKHJlZi5ub2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIGEgbGlzdCBvZiBgUmVmZXJlbmNlYHMgZnJvbSBhIHJlc29sdmVkIG1ldGFkYXRhIHZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSByZXNvbHZlVHlwZUxpc3QoXG4gICAgICBleHByOiB0cy5Ob2RlLCByZXNvbHZlZExpc3Q6IFJlc29sdmVkVmFsdWUsIGNsYXNzTmFtZTogc3RyaW5nLFxuICAgICAgYXJyYXlOYW1lOiBzdHJpbmcpOiBSZWZlcmVuY2U8Q2xhc3NEZWNsYXJhdGlvbj5bXSB7XG4gICAgY29uc3QgcmVmTGlzdDogUmVmZXJlbmNlPENsYXNzRGVjbGFyYXRpb24+W10gPSBbXTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzb2x2ZWRMaXN0KSkge1xuICAgICAgdGhyb3cgY3JlYXRlVmFsdWVIYXNXcm9uZ1R5cGVFcnJvcihcbiAgICAgICAgICBleHByLCByZXNvbHZlZExpc3QsXG4gICAgICAgICAgYEV4cGVjdGVkIGFycmF5IHdoZW4gcmVhZGluZyB0aGUgTmdNb2R1bGUuJHthcnJheU5hbWV9IG9mICR7Y2xhc3NOYW1lfWApO1xuICAgIH1cblxuICAgIHJlc29sdmVkTGlzdC5mb3JFYWNoKChlbnRyeSwgaWR4KSA9PiB7XG4gICAgICAvLyBVbndyYXAgTW9kdWxlV2l0aFByb3ZpZGVycyBmb3IgbW9kdWxlcyB0aGF0IGFyZSBsb2NhbGx5IGRlY2xhcmVkIChhbmQgdGh1cyBzdGF0aWNcbiAgICAgIC8vIHJlc29sdXRpb24gd2FzIGFibGUgdG8gZGVzY2VuZCBpbnRvIHRoZSBmdW5jdGlvbiBhbmQgcmV0dXJuIGFuIG9iamVjdCBsaXRlcmFsLCBhIE1hcCkuXG4gICAgICBpZiAoZW50cnkgaW5zdGFuY2VvZiBNYXAgJiYgZW50cnkuaGFzKCduZ01vZHVsZScpKSB7XG4gICAgICAgIGVudHJ5ID0gZW50cnkuZ2V0KCduZ01vZHVsZScpITtcbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZW50cnkpKSB7XG4gICAgICAgIC8vIFJlY3Vyc2UgaW50byBuZXN0ZWQgYXJyYXlzLlxuICAgICAgICByZWZMaXN0LnB1c2goLi4udGhpcy5yZXNvbHZlVHlwZUxpc3QoZXhwciwgZW50cnksIGNsYXNzTmFtZSwgYXJyYXlOYW1lKSk7XG4gICAgICB9IGVsc2UgaWYgKGVudHJ5IGluc3RhbmNlb2YgUmVmZXJlbmNlKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0NsYXNzRGVjbGFyYXRpb25SZWZlcmVuY2UoZW50cnkpKSB7XG4gICAgICAgICAgdGhyb3cgY3JlYXRlVmFsdWVIYXNXcm9uZ1R5cGVFcnJvcihcbiAgICAgICAgICAgICAgZW50cnkubm9kZSwgZW50cnksXG4gICAgICAgICAgICAgIGBWYWx1ZSBhdCBwb3NpdGlvbiAke2lkeH0gaW4gdGhlIE5nTW9kdWxlLiR7YXJyYXlOYW1lfSBvZiAke1xuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lfSBpcyBub3QgYSBjbGFzc2ApO1xuICAgICAgICB9XG4gICAgICAgIHJlZkxpc3QucHVzaChlbnRyeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUT0RPKGFseGh1Yik6IFByb2R1Y2UgYSBiZXR0ZXIgZGlhZ25vc3RpYyBoZXJlIC0gdGhlIGFycmF5IGluZGV4IG1heSBiZSBhbiBpbm5lciBhcnJheS5cbiAgICAgICAgdGhyb3cgY3JlYXRlVmFsdWVIYXNXcm9uZ1R5cGVFcnJvcihcbiAgICAgICAgICAgIGV4cHIsIGVudHJ5LFxuICAgICAgICAgICAgYFZhbHVlIGF0IHBvc2l0aW9uICR7aWR4fSBpbiB0aGUgTmdNb2R1bGUuJHthcnJheU5hbWV9IG9mICR7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lfSBpcyBub3QgYSByZWZlcmVuY2VgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZWZMaXN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzTmdNb2R1bGUobm9kZTogQ2xhc3NEZWNsYXJhdGlvbiwgY29tcGlsYXRpb246IFNjb3BlRGF0YSk6IGJvb2xlYW4ge1xuICByZXR1cm4gIWNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMuc29tZShkaXJlY3RpdmUgPT4gZGlyZWN0aXZlLnJlZi5ub2RlID09PSBub2RlKSAmJlxuICAgICAgIWNvbXBpbGF0aW9uLnBpcGVzLnNvbWUocGlwZSA9PiBwaXBlLnJlZi5ub2RlID09PSBub2RlKTtcbn1cbiJdfQ==