@angular/compiler-cli 12.1.0-next.6 → 12.1.3

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 (478) hide show
  1. package/linker/src/file_linker/emit_scopes/iife_emit_scope.js +1 -1
  2. package/linker/src/file_linker/partial_linkers/partial_component_linker_1.js +2 -3
  3. package/linker/src/file_linker/partial_linkers/partial_linker_selector.js +2 -2
  4. package/ngcc/src/dependencies/commonjs_dependency_host.js +1 -1
  5. package/ngcc/src/dependencies/dts_dependency_host.js +1 -1
  6. package/ngcc/src/dependencies/esm_dependency_host.js +1 -1
  7. package/ngcc/src/dependencies/umd_dependency_host.js +1 -1
  8. package/ngcc/src/entry_point_finder/program_based_entry_point_finder.js +1 -1
  9. package/ngcc/src/entry_point_finder/targeted_entry_point_finder.js +1 -1
  10. package/ngcc/src/execution/tasks/queues/parallel_task_queue.js +1 -1
  11. package/ngcc/src/execution/tasks/queues/serial_task_queue.js +1 -1
  12. package/ngcc/src/host/commonjs_host.js +1 -1
  13. package/ngcc/src/host/esm2015_host.js +1 -1
  14. package/ngcc/src/host/esm5_host.js +1 -1
  15. package/ngcc/src/host/umd_host.js +1 -1
  16. package/ngcc/src/packages/build_marker.d.ts +1 -1
  17. package/ngcc/src/packages/build_marker.js +1 -1
  18. package/ngcc/src/packages/configuration.d.ts +7 -0
  19. package/ngcc/src/packages/configuration.js +8 -3
  20. package/ngcc/src/packages/entry_point_manifest.js +2 -2
  21. package/ngcc/src/packages/ngcc_compiler_host.js +1 -1
  22. package/ngcc/src/rendering/commonjs_rendering_formatter.js +1 -1
  23. package/ngcc/src/rendering/esm5_rendering_formatter.js +1 -1
  24. package/ngcc/src/rendering/umd_rendering_formatter.js +1 -1
  25. package/ngcc/src/writing/new_entry_point_file_writer.js +1 -1
  26. package/package.json +2 -2
  27. package/src/ngtsc/annotations/src/component.d.ts +2 -0
  28. package/src/ngtsc/annotations/src/component.js +6 -2
  29. package/src/ngtsc/annotations/src/directive.js +1 -1
  30. package/src/ngtsc/annotations/src/ng_module.js +1 -1
  31. package/src/ngtsc/annotations/src/pipe.js +1 -1
  32. package/src/ngtsc/core/api/src/public_options.d.ts +12 -0
  33. package/src/ngtsc/core/api/src/public_options.js +1 -1
  34. package/src/ngtsc/core/src/compiler.d.ts +5 -0
  35. package/src/ngtsc/core/src/compiler.js +10 -1
  36. package/src/ngtsc/cycles/src/analyzer.d.ts +7 -0
  37. package/src/ngtsc/cycles/src/analyzer.js +89 -4
  38. package/src/ngtsc/cycles/src/imports.d.ts +1 -6
  39. package/src/ngtsc/cycles/src/imports.js +5 -23
  40. package/src/ngtsc/file_system/testing/src/mock_file_system_native.js +1 -1
  41. package/src/ngtsc/file_system/testing/src/mock_file_system_posix.js +1 -1
  42. package/src/ngtsc/file_system/testing/src/mock_file_system_windows.js +1 -1
  43. package/src/ngtsc/incremental/semantic_graph/src/graph.js +1 -1
  44. package/src/ngtsc/incremental/src/incremental.js +30 -4
  45. package/src/ngtsc/indexer/src/template.js +1 -1
  46. package/src/ngtsc/metadata/src/dts.js +2 -3
  47. package/src/ngtsc/metadata/src/inheritance.js +2 -7
  48. package/src/ngtsc/partial_evaluator/src/builtin.js +1 -1
  49. package/src/ngtsc/partial_evaluator/src/diagnostics.js +4 -1
  50. package/src/ngtsc/partial_evaluator/src/dynamic.d.ts +19 -1
  51. package/src/ngtsc/partial_evaluator/src/dynamic.js +12 -4
  52. package/src/ngtsc/partial_evaluator/src/interpreter.d.ts +2 -0
  53. package/src/ngtsc/partial_evaluator/src/interpreter.js +53 -5
  54. package/src/ngtsc/partial_evaluator/src/ts_helpers.js +1 -1
  55. package/src/ngtsc/program.d.ts +1 -0
  56. package/src/ngtsc/program.js +26 -2
  57. package/src/ngtsc/program_driver/src/api.d.ts +20 -1
  58. package/src/ngtsc/program_driver/src/api.js +3 -2
  59. package/src/ngtsc/program_driver/src/ts_create_program_driver.d.ts +2 -2
  60. package/src/ngtsc/program_driver/src/ts_create_program_driver.js +7 -3
  61. package/src/ngtsc/reflection/src/typescript.js +4 -1
  62. package/src/ngtsc/transform/src/api.d.ts +6 -0
  63. package/src/ngtsc/transform/src/api.js +1 -1
  64. package/src/ngtsc/transform/src/compilation.d.ts +2 -0
  65. package/src/ngtsc/transform/src/compilation.js +59 -20
  66. package/src/ngtsc/transform/src/transform.js +1 -1
  67. package/src/ngtsc/typecheck/src/context.d.ts +2 -1
  68. package/src/ngtsc/typecheck/src/context.js +11 -3
  69. package/src/ngtsc/typecheck/src/template_semantics.js +1 -1
  70. package/src/ngtsc/typecheck/src/template_symbol_builder.js +36 -4
  71. package/src/ngtsc/typecheck/src/type_check_block.js +2 -2
  72. package/src/ngtsc/typecheck/src/type_check_file.js +1 -1
  73. package/src/ngtsc/typecheck/src/type_emitter.d.ts +2 -1
  74. package/src/ngtsc/typecheck/src/type_emitter.js +54 -48
  75. package/src/ngtsc/typecheck/src/type_parameter_emitter.d.ts +2 -0
  76. package/src/ngtsc/typecheck/src/type_parameter_emitter.js +21 -7
  77. package/src/ngtsc/util/src/visitor.d.ts +1 -1
  78. package/src/ngtsc/util/src/visitor.js +1 -8
  79. package/src/ngtsc/xi18n/index.d.ts +9 -0
  80. package/src/ngtsc/xi18n/index.js +22 -0
  81. package/src/ngtsc/xi18n/src/context.d.ts +26 -0
  82. package/src/ngtsc/xi18n/src/context.js +20 -0
  83. package/src/transformers/api.d.ts +0 -3
  84. package/src/transformers/api.js +1 -1
  85. package/src/transformers/i18n.d.ts +14 -0
  86. package/src/transformers/i18n.js +76 -0
  87. package/src/transformers/program.d.ts +0 -4
  88. package/src/transformers/program.js +5 -56
  89. package/src/version.js +1 -1
  90. package/compiler-cli.externs.js +0 -0
  91. package/index.mjs +0 -20
  92. package/linker/babel/babel.externs.js +0 -0
  93. package/linker/babel/index.mjs +0 -11
  94. package/linker/babel/src/ast/babel_ast_factory.mjs +0 -137
  95. package/linker/babel/src/ast/babel_ast_host.mjs +0 -154
  96. package/linker/babel/src/babel_declaration_scope.mjs +0 -52
  97. package/linker/babel/src/babel_plugin.mjs +0 -23
  98. package/linker/babel/src/es2015_linker_plugin.mjs +0 -158
  99. package/linker/babel/src/linker_plugin_options.mjs +0 -2
  100. package/linker/index.mjs +0 -7
  101. package/linker/linker.externs.js +0 -0
  102. package/linker/src/ast/ast_host.mjs +0 -9
  103. package/linker/src/ast/ast_value.mjs +0 -256
  104. package/linker/src/ast/typescript/typescript_ast_host.mjs +0 -156
  105. package/linker/src/ast/utils.mjs +0 -17
  106. package/linker/src/fatal_linker_error.mjs +0 -30
  107. package/linker/src/file_linker/declaration_scope.mjs +0 -9
  108. package/linker/src/file_linker/emit_scopes/emit_scope.mjs +0 -41
  109. package/linker/src/file_linker/emit_scopes/iife_emit_scope.mjs +0 -33
  110. package/linker/src/file_linker/file_linker.mjs +0 -70
  111. package/linker/src/file_linker/get_source_file.mjs +0 -28
  112. package/linker/src/file_linker/linker_environment.mjs +0 -23
  113. package/linker/src/file_linker/linker_options.mjs +0 -16
  114. package/linker/src/file_linker/needs_linking.mjs +0 -27
  115. package/linker/src/file_linker/partial_linkers/partial_class_metadata_linker_1.mjs +0 -29
  116. package/linker/src/file_linker/partial_linkers/partial_component_linker_1.mjs +0 -194
  117. package/linker/src/file_linker/partial_linkers/partial_directive_linker_1.mjs +0 -137
  118. package/linker/src/file_linker/partial_linkers/partial_factory_linker_1.mjs +0 -52
  119. package/linker/src/file_linker/partial_linkers/partial_injectable_linker_1.mjs +0 -56
  120. package/linker/src/file_linker/partial_linkers/partial_injector_linker_1.mjs +0 -38
  121. package/linker/src/file_linker/partial_linkers/partial_linker.mjs +0 -2
  122. package/linker/src/file_linker/partial_linkers/partial_linker_selector.mjs +0 -166
  123. package/linker/src/file_linker/partial_linkers/partial_ng_module_linker_1.mjs +0 -110
  124. package/linker/src/file_linker/partial_linkers/partial_pipe_linker_1.mjs +0 -42
  125. package/linker/src/file_linker/partial_linkers/util.mjs +0 -78
  126. package/linker/src/file_linker/translator.mjs +0 -23
  127. package/linker/src/linker_import_generator.mjs +0 -28
  128. package/ngcc/index.mjs +0 -16
  129. package/ngcc/main-ivy-ngcc.mjs +0 -12
  130. package/ngcc/main-ngcc.mjs +0 -32
  131. package/ngcc/ngcc.externs.js +0 -0
  132. package/ngcc/src/analysis/decoration_analyzer.mjs +0 -215
  133. package/ngcc/src/analysis/migration_host.mjs +0 -80
  134. package/ngcc/src/analysis/module_with_providers_analyzer.mjs +0 -178
  135. package/ngcc/src/analysis/ngcc_references_registry.mjs +0 -45
  136. package/ngcc/src/analysis/ngcc_trait_compiler.mjs +0 -70
  137. package/ngcc/src/analysis/private_declarations_analyzer.mjs +0 -47
  138. package/ngcc/src/analysis/switch_marker_analyzer.mjs +0 -34
  139. package/ngcc/src/analysis/types.mjs +0 -2
  140. package/ngcc/src/analysis/util.mjs +0 -19
  141. package/ngcc/src/command_line_options.mjs +0 -142
  142. package/ngcc/src/constants.mjs +0 -10
  143. package/ngcc/src/dependencies/commonjs_dependency_host.mjs +0 -87
  144. package/ngcc/src/dependencies/dependency_host.mjs +0 -102
  145. package/ngcc/src/dependencies/dependency_resolver.mjs +0 -151
  146. package/ngcc/src/dependencies/dts_dependency_host.mjs +0 -18
  147. package/ngcc/src/dependencies/esm_dependency_host.mjs +0 -286
  148. package/ngcc/src/dependencies/module_resolver.mjs +0 -233
  149. package/ngcc/src/dependencies/umd_dependency_host.mjs +0 -33
  150. package/ngcc/src/entry_point_finder/directory_walker_entry_point_finder.mjs +0 -42
  151. package/ngcc/src/entry_point_finder/entry_point_collector.mjs +0 -120
  152. package/ngcc/src/entry_point_finder/interface.mjs +0 -2
  153. package/ngcc/src/entry_point_finder/program_based_entry_point_finder.mjs +0 -91
  154. package/ngcc/src/entry_point_finder/targeted_entry_point_finder.mjs +0 -216
  155. package/ngcc/src/entry_point_finder/tracing_entry_point_finder.mjs +0 -63
  156. package/ngcc/src/entry_point_finder/utils.mjs +0 -176
  157. package/ngcc/src/execution/analyze_entry_points.mjs +0 -130
  158. package/ngcc/src/execution/api.mjs +0 -2
  159. package/ngcc/src/execution/cluster/api.mjs +0 -9
  160. package/ngcc/src/execution/cluster/executor.mjs +0 -27
  161. package/ngcc/src/execution/cluster/master.mjs +0 -261
  162. package/ngcc/src/execution/cluster/package_json_updater.mjs +0 -45
  163. package/ngcc/src/execution/cluster/utils.mjs +0 -59
  164. package/ngcc/src/execution/cluster/worker.mjs +0 -81
  165. package/ngcc/src/execution/create_compile_function.mjs +0 -62
  166. package/ngcc/src/execution/single_process_executor.mjs +0 -57
  167. package/ngcc/src/execution/tasks/api.mjs +0 -22
  168. package/ngcc/src/execution/tasks/completion.mjs +0 -61
  169. package/ngcc/src/execution/tasks/queues/base_task_queue.mjs +0 -78
  170. package/ngcc/src/execution/tasks/queues/parallel_task_queue.mjs +0 -53
  171. package/ngcc/src/execution/tasks/queues/serial_task_queue.mjs +0 -29
  172. package/ngcc/src/execution/tasks/utils.mjs +0 -114
  173. package/ngcc/src/host/commonjs_host.mjs +0 -220
  174. package/ngcc/src/host/commonjs_umd_utils.mjs +0 -186
  175. package/ngcc/src/host/delegating_host.mjs +0 -140
  176. package/ngcc/src/host/esm2015_host.mjs +0 -2293
  177. package/ngcc/src/host/esm5_host.mjs +0 -721
  178. package/ngcc/src/host/ngcc_host.mjs +0 -15
  179. package/ngcc/src/host/umd_host.mjs +0 -486
  180. package/ngcc/src/host/utils.mjs +0 -12
  181. package/ngcc/src/locking/async_locker.mjs +0 -76
  182. package/ngcc/src/locking/lock_file.mjs +0 -4
  183. package/ngcc/src/locking/lock_file_with_child_process/index.mjs +0 -78
  184. package/ngcc/src/locking/lock_file_with_child_process/unlocker.mjs +0 -34
  185. package/ngcc/src/locking/lock_file_with_child_process/util.mjs +0 -29
  186. package/ngcc/src/locking/sync_locker.mjs +0 -52
  187. package/ngcc/src/main.mjs +0 -134
  188. package/ngcc/src/migrations/migration.mjs +0 -2
  189. package/ngcc/src/migrations/missing_injectable_migration.mjs +0 -164
  190. package/ngcc/src/migrations/undecorated_child_migration.mjs +0 -61
  191. package/ngcc/src/migrations/undecorated_parent_migration.mjs +0 -86
  192. package/ngcc/src/migrations/utils.mjs +0 -117
  193. package/ngcc/src/ngcc_options.mjs +0 -119
  194. package/ngcc/src/packages/build_marker.mjs +0 -84
  195. package/ngcc/src/packages/bundle_program.mjs +0 -52
  196. package/ngcc/src/packages/configuration.mjs +0 -250
  197. package/ngcc/src/packages/entry_point.mjs +0 -239
  198. package/ngcc/src/packages/entry_point_bundle.mjs +0 -68
  199. package/ngcc/src/packages/entry_point_manifest.mjs +0 -162
  200. package/ngcc/src/packages/ngcc_compiler_host.mjs +0 -77
  201. package/ngcc/src/packages/patch_ts_expando_initializer.mjs +0 -166
  202. package/ngcc/src/packages/source_file_cache.mjs +0 -187
  203. package/ngcc/src/packages/transformer.mjs +0 -140
  204. package/ngcc/src/path_mappings.mjs +0 -13
  205. package/ngcc/src/rendering/commonjs_rendering_formatter.mjs +0 -65
  206. package/ngcc/src/rendering/dts_renderer.mjs +0 -139
  207. package/ngcc/src/rendering/esm5_rendering_formatter.mjs +0 -50
  208. package/ngcc/src/rendering/esm_rendering_formatter.mjs +0 -251
  209. package/ngcc/src/rendering/ngcc_import_rewriter.mjs +0 -32
  210. package/ngcc/src/rendering/renderer.mjs +0 -170
  211. package/ngcc/src/rendering/rendering_formatter.mjs +0 -2
  212. package/ngcc/src/rendering/source_maps.mjs +0 -54
  213. package/ngcc/src/rendering/umd_rendering_formatter.mjs +0 -292
  214. package/ngcc/src/rendering/utils.mjs +0 -20
  215. package/ngcc/src/utils.mjs +0 -144
  216. package/ngcc/src/writing/cleaning/cleaning_strategies.mjs +0 -61
  217. package/ngcc/src/writing/cleaning/package_cleaner.mjs +0 -67
  218. package/ngcc/src/writing/cleaning/utils.mjs +0 -16
  219. package/ngcc/src/writing/file_writer.mjs +0 -2
  220. package/ngcc/src/writing/in_place_file_writer.mjs +0 -62
  221. package/ngcc/src/writing/new_entry_point_file_writer.mjs +0 -161
  222. package/ngcc/src/writing/package_json_updater.mjs +0 -144
  223. package/src/diagnostics/translate_diagnostics.mjs +0 -47
  224. package/src/diagnostics/typescript_version.mjs +0 -79
  225. package/src/extract_i18n.mjs +0 -46
  226. package/src/language_services.mjs +0 -18
  227. package/src/main.mjs +0 -185
  228. package/src/metadata/bundle_index_host.mjs +0 -107
  229. package/src/metadata/bundler.mjs +0 -556
  230. package/src/metadata/collector.mjs +0 -701
  231. package/src/metadata/evaluator.mjs +0 -643
  232. package/src/metadata/index.mjs +0 -11
  233. package/src/metadata/index_writer.mjs +0 -44
  234. package/src/metadata/schema.mjs +0 -102
  235. package/src/metadata/symbols.mjs +0 -117
  236. package/src/ngtsc/annotations/annotations.externs.js +0 -0
  237. package/src/ngtsc/annotations/index.mjs +0 -15
  238. package/src/ngtsc/annotations/src/api.mjs +0 -9
  239. package/src/ngtsc/annotations/src/component.mjs +0 -1064
  240. package/src/ngtsc/annotations/src/diagnostics.mjs +0 -147
  241. package/src/ngtsc/annotations/src/directive.mjs +0 -692
  242. package/src/ngtsc/annotations/src/factory.mjs +0 -17
  243. package/src/ngtsc/annotations/src/injectable.mjs +0 -260
  244. package/src/ngtsc/annotations/src/metadata.mjs +0 -145
  245. package/src/ngtsc/annotations/src/ng_module.mjs +0 -565
  246. package/src/ngtsc/annotations/src/pipe.mjs +0 -151
  247. package/src/ngtsc/annotations/src/references_registry.mjs +0 -16
  248. package/src/ngtsc/annotations/src/util.mjs +0 -495
  249. package/src/ngtsc/core/api/index.mjs +0 -12
  250. package/src/ngtsc/core/api/src/adapter.mjs +0 -9
  251. package/src/ngtsc/core/api/src/interfaces.mjs +0 -9
  252. package/src/ngtsc/core/api/src/options.mjs +0 -9
  253. package/src/ngtsc/core/api/src/public_options.mjs +0 -9
  254. package/src/ngtsc/core/api.externs.js +0 -0
  255. package/src/ngtsc/core/core.externs.js +0 -0
  256. package/src/ngtsc/core/index.mjs +0 -10
  257. package/src/ngtsc/core/src/compiler.mjs +0 -908
  258. package/src/ngtsc/core/src/config.mjs +0 -15
  259. package/src/ngtsc/core/src/host.mjs +0 -229
  260. package/src/ngtsc/cycles/cycles.externs.js +0 -0
  261. package/src/ngtsc/cycles/index.mjs +0 -10
  262. package/src/ngtsc/cycles/src/analyzer.mjs +0 -60
  263. package/src/ngtsc/cycles/src/imports.mjs +0 -152
  264. package/src/ngtsc/diagnostics/diagnostics.externs.js +0 -0
  265. package/src/ngtsc/diagnostics/index.mjs +0 -11
  266. package/src/ngtsc/diagnostics/src/error.mjs +0 -51
  267. package/src/ngtsc/diagnostics/src/error_code.mjs +0 -198
  268. package/src/ngtsc/diagnostics/src/util.mjs +0 -21
  269. package/src/ngtsc/entry_point/entry_point.externs.js +0 -0
  270. package/src/ngtsc/entry_point/index.mjs +0 -12
  271. package/src/ngtsc/entry_point/src/generator.mjs +0 -35
  272. package/src/ngtsc/entry_point/src/logic.mjs +0 -35
  273. package/src/ngtsc/entry_point/src/private_export_checker.mjs +0 -122
  274. package/src/ngtsc/entry_point/src/reference_graph.mjs +0 -73
  275. package/src/ngtsc/file_system/file_system.externs.js +0 -0
  276. package/src/ngtsc/file_system/index.mjs +0 -13
  277. package/src/ngtsc/file_system/src/compiler_host.mjs +0 -64
  278. package/src/ngtsc/file_system/src/helpers.mjs +0 -99
  279. package/src/ngtsc/file_system/src/invalid_file_system.mjs +0 -95
  280. package/src/ngtsc/file_system/src/logical.mjs +0 -84
  281. package/src/ngtsc/file_system/src/node_js_file_system.mjs +0 -142
  282. package/src/ngtsc/file_system/src/types.mjs +0 -9
  283. package/src/ngtsc/file_system/src/util.mjs +0 -22
  284. package/src/ngtsc/file_system/testing/index.mjs +0 -13
  285. package/src/ngtsc/file_system/testing/src/mock_file_system.mjs +0 -293
  286. package/src/ngtsc/file_system/testing/src/mock_file_system_native.mjs +0 -57
  287. package/src/ngtsc/file_system/testing/src/mock_file_system_posix.mjs +0 -38
  288. package/src/ngtsc/file_system/testing/src/mock_file_system_windows.mjs +0 -38
  289. package/src/ngtsc/file_system/testing/src/test_helper.mjs +0 -108
  290. package/src/ngtsc/file_system/testing/testing.externs.js +0 -0
  291. package/src/ngtsc/imports/imports.externs.js +0 -0
  292. package/src/ngtsc/imports/index.mjs +0 -14
  293. package/src/ngtsc/imports/src/alias.mjs +0 -137
  294. package/src/ngtsc/imports/src/core.mjs +0 -78
  295. package/src/ngtsc/imports/src/default.mjs +0 -135
  296. package/src/ngtsc/imports/src/emitter.mjs +0 -266
  297. package/src/ngtsc/imports/src/find_export.mjs +0 -56
  298. package/src/ngtsc/imports/src/reexport.mjs +0 -9
  299. package/src/ngtsc/imports/src/references.mjs +0 -137
  300. package/src/ngtsc/imports/src/resolver.mjs +0 -24
  301. package/src/ngtsc/incremental/api.externs.js +0 -0
  302. package/src/ngtsc/incremental/api.mjs +0 -9
  303. package/src/ngtsc/incremental/incremental.externs.js +0 -0
  304. package/src/ngtsc/incremental/index.mjs +0 -12
  305. package/src/ngtsc/incremental/semantic_graph/index.mjs +0 -12
  306. package/src/ngtsc/incremental/semantic_graph/semantic_graph.externs.js +0 -0
  307. package/src/ngtsc/incremental/semantic_graph/src/api.mjs +0 -36
  308. package/src/ngtsc/incremental/semantic_graph/src/graph.mjs +0 -237
  309. package/src/ngtsc/incremental/semantic_graph/src/type_parameters.mjs +0 -40
  310. package/src/ngtsc/incremental/semantic_graph/src/util.mjs +0 -69
  311. package/src/ngtsc/incremental/src/dependency_tracking.mjs +0 -117
  312. package/src/ngtsc/incremental/src/incremental.mjs +0 -271
  313. package/src/ngtsc/incremental/src/noop.mjs +0 -13
  314. package/src/ngtsc/incremental/src/state.mjs +0 -17
  315. package/src/ngtsc/incremental/src/strategy.mjs +0 -76
  316. package/src/ngtsc/indexer/index.mjs +0 -11
  317. package/src/ngtsc/indexer/indexer.externs.js +0 -0
  318. package/src/ngtsc/indexer/src/api.mjs +0 -30
  319. package/src/ngtsc/indexer/src/context.mjs +0 -25
  320. package/src/ngtsc/indexer/src/template.mjs +0 -303
  321. package/src/ngtsc/indexer/src/transform.mjs +0 -51
  322. package/src/ngtsc/logging/index.mjs +0 -10
  323. package/src/ngtsc/logging/logging.externs.js +0 -0
  324. package/src/ngtsc/logging/src/console_logger.mjs +0 -43
  325. package/src/ngtsc/logging/src/logger.mjs +0 -15
  326. package/src/ngtsc/logging/testing/index.mjs +0 -9
  327. package/src/ngtsc/logging/testing/src/mock_logger.mjs +0 -32
  328. package/src/ngtsc/logging/testing/testing.externs.js +0 -0
  329. package/src/ngtsc/metadata/index.mjs +0 -15
  330. package/src/ngtsc/metadata/metadata.externs.js +0 -0
  331. package/src/ngtsc/metadata/src/api.mjs +0 -13
  332. package/src/ngtsc/metadata/src/dts.mjs +0 -143
  333. package/src/ngtsc/metadata/src/inheritance.mjs +0 -71
  334. package/src/ngtsc/metadata/src/property_mapping.mjs +0 -136
  335. package/src/ngtsc/metadata/src/registry.mjs +0 -80
  336. package/src/ngtsc/metadata/src/resource_registry.mjs +0 -81
  337. package/src/ngtsc/metadata/src/util.mjs +0 -200
  338. package/src/ngtsc/partial_evaluator/index.mjs +0 -12
  339. package/src/ngtsc/partial_evaluator/partial_evaluator.externs.js +0 -0
  340. package/src/ngtsc/partial_evaluator/src/builtin.mjs +0 -65
  341. package/src/ngtsc/partial_evaluator/src/diagnostics.mjs +0 -171
  342. package/src/ngtsc/partial_evaluator/src/dynamic.mjs +0 -86
  343. package/src/ngtsc/partial_evaluator/src/interface.mjs +0 -27
  344. package/src/ngtsc/partial_evaluator/src/interpreter.mjs +0 -683
  345. package/src/ngtsc/partial_evaluator/src/known_declaration.mjs +0 -43
  346. package/src/ngtsc/partial_evaluator/src/result.mjs +0 -50
  347. package/src/ngtsc/partial_evaluator/src/ts_helpers.mjs +0 -72
  348. package/src/ngtsc/perf/index.mjs +0 -11
  349. package/src/ngtsc/perf/perf.externs.js +0 -0
  350. package/src/ngtsc/perf/src/api.mjs +0 -278
  351. package/src/ngtsc/perf/src/clock.mjs +0 -15
  352. package/src/ngtsc/perf/src/noop.mjs +0 -21
  353. package/src/ngtsc/perf/src/recorder.mjs +0 -125
  354. package/src/ngtsc/program.mjs +0 -247
  355. package/src/ngtsc/program_driver/index.mjs +0 -10
  356. package/src/ngtsc/program_driver/program_driver.externs.js +0 -0
  357. package/src/ngtsc/program_driver/src/api.mjs +0 -22
  358. package/src/ngtsc/program_driver/src/ts_create_program_driver.mjs +0 -164
  359. package/src/ngtsc/reflection/index.mjs +0 -12
  360. package/src/ngtsc/reflection/reflection.externs.js +0 -0
  361. package/src/ngtsc/reflection/src/host.mjs +0 -73
  362. package/src/ngtsc/reflection/src/type_to_value.mjs +0 -243
  363. package/src/ngtsc/reflection/src/typescript.mjs +0 -608
  364. package/src/ngtsc/reflection/src/util.mjs +0 -21
  365. package/src/ngtsc/resource/index.mjs +0 -9
  366. package/src/ngtsc/resource/resource.externs.js +0 -0
  367. package/src/ngtsc/resource/src/loader.mjs +0 -242
  368. package/src/ngtsc/routing/index.mjs +0 -11
  369. package/src/ngtsc/routing/routing.externs.js +0 -0
  370. package/src/ngtsc/routing/src/analyzer.mjs +0 -69
  371. package/src/ngtsc/routing/src/lazy.mjs +0 -168
  372. package/src/ngtsc/routing/src/route.mjs +0 -51
  373. package/src/ngtsc/scope/index.mjs +0 -12
  374. package/src/ngtsc/scope/scope.externs.js +0 -0
  375. package/src/ngtsc/scope/src/api.mjs +0 -9
  376. package/src/ngtsc/scope/src/component_scope.mjs +0 -31
  377. package/src/ngtsc/scope/src/dependency.mjs +0 -134
  378. package/src/ngtsc/scope/src/local.mjs +0 -531
  379. package/src/ngtsc/scope/src/typecheck.mjs +0 -83
  380. package/src/ngtsc/shims/api.externs.js +0 -0
  381. package/src/ngtsc/shims/api.mjs +0 -2
  382. package/src/ngtsc/shims/index.mjs +0 -14
  383. package/src/ngtsc/shims/shims.externs.js +0 -0
  384. package/src/ngtsc/shims/src/adapter.mjs +0 -188
  385. package/src/ngtsc/shims/src/expando.mjs +0 -102
  386. package/src/ngtsc/shims/src/factory_generator.mjs +0 -265
  387. package/src/ngtsc/shims/src/reference_tagger.mjs +0 -67
  388. package/src/ngtsc/shims/src/summary_generator.mjs +0 -64
  389. package/src/ngtsc/shims/src/util.mjs +0 -26
  390. package/src/ngtsc/sourcemaps/index.mjs +0 -11
  391. package/src/ngtsc/sourcemaps/sourcemaps.externs.js +0 -0
  392. package/src/ngtsc/sourcemaps/src/content_origin.mjs +0 -35
  393. package/src/ngtsc/sourcemaps/src/raw_source_map.mjs +0 -2
  394. package/src/ngtsc/sourcemaps/src/segment_marker.mjs +0 -40
  395. package/src/ngtsc/sourcemaps/src/source_file.mjs +0 -459
  396. package/src/ngtsc/sourcemaps/src/source_file_loader.mjs +0 -213
  397. package/src/ngtsc/switch/index.mjs +0 -9
  398. package/src/ngtsc/switch/src/switch.mjs +0 -115
  399. package/src/ngtsc/switch/switch.externs.js +0 -0
  400. package/src/ngtsc/transform/index.mjs +0 -14
  401. package/src/ngtsc/transform/src/alias.mjs +0 -30
  402. package/src/ngtsc/transform/src/api.mjs +0 -63
  403. package/src/ngtsc/transform/src/compilation.mjs +0 -496
  404. package/src/ngtsc/transform/src/declaration.mjs +0 -182
  405. package/src/ngtsc/transform/src/trait.mjs +0 -95
  406. package/src/ngtsc/transform/src/transform.mjs +0 -298
  407. package/src/ngtsc/transform/src/utils.mjs +0 -57
  408. package/src/ngtsc/transform/transform.externs.js +0 -0
  409. package/src/ngtsc/translator/index.mjs +0 -14
  410. package/src/ngtsc/translator/src/api/ast_factory.mjs +0 -9
  411. package/src/ngtsc/translator/src/api/import_generator.mjs +0 -9
  412. package/src/ngtsc/translator/src/context.mjs +0 -24
  413. package/src/ngtsc/translator/src/import_manager.mjs +0 -48
  414. package/src/ngtsc/translator/src/translator.mjs +0 -317
  415. package/src/ngtsc/translator/src/type_translator.mjs +0 -204
  416. package/src/ngtsc/translator/src/typescript_ast_factory.mjs +0 -211
  417. package/src/ngtsc/translator/src/typescript_translator.mjs +0 -17
  418. package/src/ngtsc/translator/translator.externs.js +0 -0
  419. package/src/ngtsc/tsc_plugin.mjs +0 -98
  420. package/src/ngtsc/typecheck/api/api.externs.js +0 -0
  421. package/src/ngtsc/typecheck/api/api.mjs +0 -9
  422. package/src/ngtsc/typecheck/api/checker.mjs +0 -31
  423. package/src/ngtsc/typecheck/api/completion.mjs +0 -16
  424. package/src/ngtsc/typecheck/api/context.mjs +0 -9
  425. package/src/ngtsc/typecheck/api/index.mjs +0 -14
  426. package/src/ngtsc/typecheck/api/scope.mjs +0 -9
  427. package/src/ngtsc/typecheck/api/symbols.mjs +0 -22
  428. package/src/ngtsc/typecheck/diagnostics/diagnostics.externs.js +0 -0
  429. package/src/ngtsc/typecheck/diagnostics/index.mjs +0 -10
  430. package/src/ngtsc/typecheck/diagnostics/src/diagnostic.mjs +0 -99
  431. package/src/ngtsc/typecheck/diagnostics/src/id.mjs +0 -23
  432. package/src/ngtsc/typecheck/index.mjs +0 -12
  433. package/src/ngtsc/typecheck/src/checker.mjs +0 -591
  434. package/src/ngtsc/typecheck/src/comments.mjs +0 -159
  435. package/src/ngtsc/typecheck/src/completion.mjs +0 -155
  436. package/src/ngtsc/typecheck/src/context.mjs +0 -350
  437. package/src/ngtsc/typecheck/src/diagnostics.mjs +0 -95
  438. package/src/ngtsc/typecheck/src/dom.mjs +0 -68
  439. package/src/ngtsc/typecheck/src/environment.mjs +0 -146
  440. package/src/ngtsc/typecheck/src/expression.mjs +0 -412
  441. package/src/ngtsc/typecheck/src/line_mappings.mjs +0 -60
  442. package/src/ngtsc/typecheck/src/oob.mjs +0 -112
  443. package/src/ngtsc/typecheck/src/shim.mjs +0 -37
  444. package/src/ngtsc/typecheck/src/source.mjs +0 -74
  445. package/src/ngtsc/typecheck/src/tcb_util.mjs +0 -135
  446. package/src/ngtsc/typecheck/src/template_semantics.mjs +0 -34
  447. package/src/ngtsc/typecheck/src/template_symbol_builder.mjs +0 -472
  448. package/src/ngtsc/typecheck/src/ts_util.mjs +0 -157
  449. package/src/ngtsc/typecheck/src/type_check_block.mjs +0 -1770
  450. package/src/ngtsc/typecheck/src/type_check_file.mjs +0 -65
  451. package/src/ngtsc/typecheck/src/type_constructor.mjs +0 -227
  452. package/src/ngtsc/typecheck/src/type_emitter.mjs +0 -140
  453. package/src/ngtsc/typecheck/src/type_parameter_emitter.mjs +0 -80
  454. package/src/ngtsc/typecheck/typecheck.externs.js +0 -0
  455. package/src/ngtsc/util/src/path.mjs +0 -18
  456. package/src/ngtsc/util/src/typescript.mjs +0 -143
  457. package/src/ngtsc/util/src/visitor.mjs +0 -107
  458. package/src/ngtsc/util/util.externs.js +0 -0
  459. package/src/perform_compile.mjs +0 -275
  460. package/src/perform_watch.mjs +0 -247
  461. package/src/tooling.mjs +0 -32
  462. package/src/transformers/api.mjs +0 -27
  463. package/src/transformers/compiler_host.mjs +0 -593
  464. package/src/transformers/downlevel_decorators_transform.mjs +0 -507
  465. package/src/transformers/entry_points.mjs +0 -10
  466. package/src/transformers/inline_resources.mjs +0 -269
  467. package/src/transformers/lower_expressions.mjs +0 -336
  468. package/src/transformers/metadata_cache.mjs +0 -53
  469. package/src/transformers/metadata_reader.mjs +0 -104
  470. package/src/transformers/node_emitter.mjs +0 -606
  471. package/src/transformers/node_emitter_transform.mjs +0 -78
  472. package/src/transformers/patch_alias_reference_resolution.mjs +0 -109
  473. package/src/transformers/program.mjs +0 -935
  474. package/src/transformers/r3_metadata_transform.mjs +0 -46
  475. package/src/transformers/r3_transform.mjs +0 -29
  476. package/src/transformers/util.mjs +0 -89
  477. package/src/typescript_support.mjs +0 -57
  478. package/src/version.mjs +0 -15
@@ -1,147 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- import * as ts from 'typescript';
9
- import { ErrorCode, FatalDiagnosticError, makeDiagnostic, makeRelatedInformation } from '../../diagnostics';
10
- import { Reference } from '../../imports';
11
- import { describeResolvedType, DynamicValue, traceDynamicValue } from '../../partial_evaluator';
12
- import { identifierOfNode } from '../../util/src/typescript';
13
- import { makeDuplicateDeclarationError, readBaseClass } from './util';
14
- /**
15
- * Creates a `FatalDiagnosticError` for a node that did not evaluate to the expected type. The
16
- * diagnostic that is created will include details on why the value is incorrect, i.e. it includes
17
- * a representation of the actual type that was unsupported, or in the case of a dynamic value the
18
- * trace to the node where the dynamic value originated.
19
- *
20
- * @param node The node for which the diagnostic should be produced.
21
- * @param value The evaluated value that has the wrong type.
22
- * @param messageText The message text of the error.
23
- */
24
- export function createValueHasWrongTypeError(node, value, messageText) {
25
- var _a;
26
- let chainedMessage;
27
- let relatedInformation;
28
- if (value instanceof DynamicValue) {
29
- chainedMessage = 'Value could not be determined statically.';
30
- relatedInformation = traceDynamicValue(node, value);
31
- }
32
- else if (value instanceof Reference) {
33
- const target = value.debugName !== null ? `'${value.debugName}'` : 'an anonymous declaration';
34
- chainedMessage = `Value is a reference to ${target}.`;
35
- const referenceNode = (_a = identifierOfNode(value.node)) !== null && _a !== void 0 ? _a : value.node;
36
- relatedInformation = [makeRelatedInformation(referenceNode, 'Reference is declared here.')];
37
- }
38
- else {
39
- chainedMessage = `Value is of type '${describeResolvedType(value)}'.`;
40
- }
41
- const chain = {
42
- messageText,
43
- category: ts.DiagnosticCategory.Error,
44
- code: 0,
45
- next: [{
46
- messageText: chainedMessage,
47
- category: ts.DiagnosticCategory.Message,
48
- code: 0,
49
- }]
50
- };
51
- return new FatalDiagnosticError(ErrorCode.VALUE_HAS_WRONG_TYPE, node, chain, relatedInformation);
52
- }
53
- /**
54
- * Gets the diagnostics for a set of provider classes.
55
- * @param providerClasses Classes that should be checked.
56
- * @param providersDeclaration Node that declares the providers array.
57
- * @param registry Registry that keeps track of the registered injectable classes.
58
- */
59
- export function getProviderDiagnostics(providerClasses, providersDeclaration, registry) {
60
- const diagnostics = [];
61
- for (const provider of providerClasses) {
62
- if (registry.isInjectable(provider.node)) {
63
- continue;
64
- }
65
- const contextNode = provider.getOriginForDiagnostics(providersDeclaration);
66
- diagnostics.push(makeDiagnostic(ErrorCode.UNDECORATED_PROVIDER, contextNode, `The class '${provider.node.name
67
- .text}' cannot be created via dependency injection, as it does not have an Angular decorator. This will result in an error at runtime.
68
-
69
- Either add the @Injectable() decorator to '${provider.node.name
70
- .text}', or configure a different provider (such as a provider with 'useFactory').
71
- `, [makeRelatedInformation(provider.node, `'${provider.node.name.text}' is declared here.`)]));
72
- }
73
- return diagnostics;
74
- }
75
- export function getDirectiveDiagnostics(node, reader, evaluator, reflector, scopeRegistry, kind) {
76
- let diagnostics = [];
77
- const addDiagnostics = (more) => {
78
- if (more === null) {
79
- return;
80
- }
81
- else if (diagnostics === null) {
82
- diagnostics = Array.isArray(more) ? more : [more];
83
- }
84
- else if (Array.isArray(more)) {
85
- diagnostics.push(...more);
86
- }
87
- else {
88
- diagnostics.push(more);
89
- }
90
- };
91
- const duplicateDeclarations = scopeRegistry.getDuplicateDeclarations(node);
92
- if (duplicateDeclarations !== null) {
93
- addDiagnostics(makeDuplicateDeclarationError(node, duplicateDeclarations, kind));
94
- }
95
- addDiagnostics(checkInheritanceOfDirective(node, reader, reflector, evaluator));
96
- return diagnostics;
97
- }
98
- export function getUndecoratedClassWithAngularFeaturesDiagnostic(node) {
99
- return makeDiagnostic(ErrorCode.UNDECORATED_CLASS_USING_ANGULAR_FEATURES, node.name, `Class is using Angular features but is not decorated. Please add an explicit ` +
100
- `Angular decorator.`);
101
- }
102
- export function checkInheritanceOfDirective(node, reader, reflector, evaluator) {
103
- if (!reflector.isClass(node) || reflector.getConstructorParameters(node) !== null) {
104
- // We should skip nodes that aren't classes. If a constructor exists, then no base class
105
- // definition is required on the runtime side - it's legal to inherit from any class.
106
- return null;
107
- }
108
- // The extends clause is an expression which can be as dynamic as the user wants. Try to
109
- // evaluate it, but fall back on ignoring the clause if it can't be understood. This is a View
110
- // Engine compatibility hack: View Engine ignores 'extends' expressions that it cannot understand.
111
- let baseClass = readBaseClass(node, reflector, evaluator);
112
- while (baseClass !== null) {
113
- if (baseClass === 'dynamic') {
114
- return null;
115
- }
116
- // We can skip the base class if it has metadata.
117
- const baseClassMeta = reader.getDirectiveMetadata(baseClass);
118
- if (baseClassMeta !== null) {
119
- return null;
120
- }
121
- // If the base class has a blank constructor we can skip it since it can't be using DI.
122
- const baseClassConstructorParams = reflector.getConstructorParameters(baseClass.node);
123
- const newParentClass = readBaseClass(baseClass.node, reflector, evaluator);
124
- if (baseClassConstructorParams !== null && baseClassConstructorParams.length > 0) {
125
- // This class has a non-trivial constructor, that's an error!
126
- return getInheritedUndecoratedCtorDiagnostic(node, baseClass, reader);
127
- }
128
- else if (baseClassConstructorParams !== null || newParentClass === null) {
129
- // This class has a trivial constructor, or no constructor + is the
130
- // top of the inheritance chain, so it's okay.
131
- return null;
132
- }
133
- // Go up the chain and continue
134
- baseClass = newParentClass;
135
- }
136
- return null;
137
- }
138
- function getInheritedUndecoratedCtorDiagnostic(node, baseClass, reader) {
139
- const subclassMeta = reader.getDirectiveMetadata(new Reference(node));
140
- const dirOrComp = subclassMeta.isComponent ? 'Component' : 'Directive';
141
- const baseClassName = baseClass.debugName;
142
- return makeDiagnostic(ErrorCode.DIRECTIVE_INHERITS_UNDECORATED_CTOR, node.name, `The ${dirOrComp.toLowerCase()} ${node.name.text} inherits its constructor from ${baseClassName}, ` +
143
- `but the latter does not have an Angular decorator of its own. Dependency injection will not be able to ` +
144
- `resolve the parameters of ${baseClassName}'s constructor. Either add a @Directive decorator ` +
145
- `to ${baseClassName}, or add an explicit constructor to ${node.name.text}.`);
146
- }
147
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ25vc3RpY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL2Fubm90YXRpb25zL3NyYy9kaWFnbm9zdGljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVqQyxPQUFPLEVBQUMsU0FBUyxFQUFFLG9CQUFvQixFQUFFLGNBQWMsRUFBRSxzQkFBc0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzFHLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFeEMsT0FBTyxFQUFDLG9CQUFvQixFQUFFLFlBQVksRUFBbUMsaUJBQWlCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUcvSCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUUzRCxPQUFPLEVBQUMsNkJBQTZCLEVBQUUsYUFBYSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRXBFOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSw0QkFBNEIsQ0FDeEMsSUFBYSxFQUFFLEtBQW9CLEVBQUUsV0FBbUI7O0lBQzFELElBQUksY0FBc0IsQ0FBQztJQUMzQixJQUFJLGtCQUErRCxDQUFDO0lBQ3BFLElBQUksS0FBSyxZQUFZLFlBQVksRUFBRTtRQUNqQyxjQUFjLEdBQUcsMkNBQTJDLENBQUM7UUFDN0Qsa0JBQWtCLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ3JEO1NBQU0sSUFBSSxLQUFLLFlBQVksU0FBUyxFQUFFO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUM7UUFD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dXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtFcnJvckNvZGUsIEZhdGFsRGlhZ25vc3RpY0Vycm9yLCBtYWtlRGlhZ25vc3RpYywgbWFrZVJlbGF0ZWRJbmZvcm1hdGlvbn0gZnJvbSAnLi4vLi4vZGlhZ25vc3RpY3MnO1xuaW1wb3J0IHtSZWZlcmVuY2V9IGZyb20gJy4uLy4uL2ltcG9ydHMnO1xuaW1wb3J0IHtJbmplY3RhYmxlQ2xhc3NSZWdpc3RyeSwgTWV0YWRhdGFSZWFkZXJ9IGZyb20gJy4uLy4uL21ldGFkYXRhJztcbmltcG9ydCB7ZGVzY3JpYmVSZXNvbHZlZFR5cGUsIER5bmFtaWNWYWx1ZSwgUGFydGlhbEV2YWx1YXRvciwgUmVzb2x2ZWRWYWx1ZSwgdHJhY2VEeW5hbWljVmFsdWV9IGZyb20gJy4uLy4uL3BhcnRpYWxfZXZhbHVhdG9yJztcbmltcG9ydCB7Q2xhc3NEZWNsYXJhdGlvbiwgUmVmbGVjdGlvbkhvc3R9IGZyb20gJy4uLy4uL3JlZmxlY3Rpb24nO1xuaW1wb3J0IHtMb2NhbE1vZHVsZVNjb3BlUmVnaXN0cnl9IGZyb20gJy4uLy4uL3Njb3BlJztcbmltcG9ydCB7aWRlbnRpZmllck9mTm9kZX0gZnJvbSAnLi4vLi4vdXRpbC9zcmMvdHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7bWFrZUR1cGxpY2F0ZURlY2xhcmF0aW9uRXJyb3IsIHJlYWRCYXNlQ2xhc3N9IGZyb20gJy4vdXRpbCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGBGYXRhbERpYWdub3N0aWNFcnJvcmAgZm9yIGEgbm9kZSB0aGF0IGRpZCBub3QgZXZhbHVhdGUgdG8gdGhlIGV4cGVjdGVkIHR5cGUuIFRoZVxuICogZGlhZ25vc3RpYyB0aGF0IGlzIGNyZWF0ZWQgd2lsbCBpbmNsdWRlIGRldGFpbHMgb24gd2h5IHRoZSB2YWx1ZSBpcyBpbmNvcnJlY3QsIGkuZS4gaXQgaW5jbHVkZXNcbiAqIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFjdHVhbCB0eXBlIHRoYXQgd2FzIHVuc3VwcG9ydGVkLCBvciBpbiB0aGUgY2FzZSBvZiBhIGR5bmFtaWMgdmFsdWUgdGhlXG4gKiB0cmFjZSB0byB0aGUgbm9kZSB3aGVyZSB0aGUgZHluYW1pYyB2YWx1ZSBvcmlnaW5hdGVkLlxuICpcbiAqIEBwYXJhbSBub2RlIFRoZSBub2RlIGZvciB3aGljaCB0aGUgZGlhZ25vc3RpYyBzaG91bGQgYmUgcHJvZHVjZWQuXG4gKiBAcGFyYW0gdmFsdWUgVGhlIGV2YWx1YXRlZCB2YWx1ZSB0aGF0IGhhcyB0aGUgd3JvbmcgdHlwZS5cbiAqIEBwYXJhbSBtZXNzYWdlVGV4dCBUaGUgbWVzc2FnZSB0ZXh0IG9mIHRoZSBlcnJvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVZhbHVlSGFzV3JvbmdUeXBlRXJyb3IoXG4gICAgbm9kZTogdHMuTm9kZSwgdmFsdWU6IFJlc29sdmVkVmFsdWUsIG1lc3NhZ2VUZXh0OiBzdHJpbmcpOiBGYXRhbERpYWdub3N0aWNFcnJvciB7XG4gIGxldCBjaGFpbmVkTWVzc2FnZTogc3RyaW5nO1xuICBsZXQgcmVsYXRlZEluZm9ybWF0aW9uOiB0cy5EaWFnbm9zdGljUmVsYXRlZEluZm9ybWF0aW9uW118dW5kZWZpbmVkO1xuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEeW5hbWljVmFsdWUpIHtcbiAgICBjaGFpbmVkTWVzc2FnZSA9ICdWYWx1ZSBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZCBzdGF0aWNhbGx5Lic7XG4gICAgcmVsYXRlZEluZm9ybWF0aW9uID0gdHJhY2VEeW5hbWljVmFsdWUobm9kZSwgdmFsdWUpO1xuICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmVmZXJlbmNlKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gdmFsdWUuZGVidWdOYW1lICE9PSBudWxsID8gYCcke3ZhbHVlLmRlYnVnTmFtZX0nYCA6ICdhbiBhbm9ueW1vdXMgZGVjbGFyYXRpb24nO1xuICAgIGNoYWluZWRNZXNzYWdlID0gYFZhbHVlIGlzIGEgcmVmZXJlbmNlIHRvICR7dGFyZ2V0fS5gO1xuXG4gICAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IGlkZW50aWZpZXJPZk5vZGUodmFsdWUubm9kZSkgPz8gdmFsdWUubm9kZTtcbiAgICByZWxhdGVkSW5mb3JtYXRpb24gPSBbbWFrZVJlbGF0ZWRJbmZvcm1hdGlvbihyZWZlcmVuY2VOb2RlLCAnUmVmZXJlbmNlIGlzIGRlY2xhcmVkIGhlcmUuJyldO1xuICB9IGVsc2Uge1xuICAgIGNoYWluZWRNZXNzYWdlID0gYFZhbHVlIGlzIG9mIHR5cGUgJyR7ZGVzY3JpYmVSZXNvbHZlZFR5cGUodmFsdWUpfScuYDtcbiAgfVxuXG4gIGNvbnN0IGNoYWluOiB0cy5EaWFnbm9zdGljTWVzc2FnZUNoYWluID0ge1xuICAgIG1lc3NhZ2VUZXh0LFxuICAgIGNhdGVnb3J5OiB0cy5EaWFnbm9zdGljQ2F0ZWdvcnkuRXJyb3IsXG4gICAgY29kZTogMCxcbiAgICBuZXh0OiBbe1xuICAgICAgbWVzc2FnZVRleHQ6IGNoYWluZWRNZXNzYWdlLFxuICAgICAgY2F0ZWdvcnk6IHRzLkRpYWdub3N0aWNDYXRlZ29yeS5NZXNzYWdlLFxuICAgICAgY29kZTogMCxcbiAgICB9XVxuICB9O1xuXG4gIHJldHVybiBuZXcgRmF0YWxEaWFnbm9zdGljRXJyb3IoRXJyb3JDb2RlLlZBTFVFX0hBU19XUk9OR19UWVBFLCBub2RlLCBjaGFpbiwgcmVsYXRlZEluZm9ybWF0aW9uKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBkaWFnbm9zdGljcyBmb3IgYSBzZXQgb2YgcHJvdmlkZXIgY2xhc3Nlcy5cbiAqIEBwYXJhbSBwcm92aWRlckNsYXNzZXMgQ2xhc3NlcyB0aGF0IHNob3VsZCBiZSBjaGVja2VkLlxuICogQHBhcmFtIHByb3ZpZGVyc0RlY2xhcmF0aW9uIE5vZGUgdGhhdCBkZWNsYXJlcyB0aGUgcHJvdmlkZXJzIGFycmF5LlxuICogQHBhcmFtIHJlZ2lzdHJ5IFJlZ2lzdHJ5IHRoYXQga2VlcHMgdHJhY2sgb2YgdGhlIHJlZ2lzdGVyZWQgaW5qZWN0YWJsZSBjbGFzc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvdmlkZXJEaWFnbm9zdGljcyhcbiAgICBwcm92aWRlckNsYXNzZXM6IFNldDxSZWZlcmVuY2U8Q2xhc3NEZWNsYXJhdGlvbj4+LCBwcm92aWRlcnNEZWNsYXJhdGlvbjogdHMuRXhwcmVzc2lvbixcbiAgICByZWdpc3RyeTogSW5qZWN0YWJsZUNsYXNzUmVnaXN0cnkpOiB0cy5EaWFnbm9zdGljW10ge1xuICBjb25zdCBkaWFnbm9zdGljczogdHMuRGlhZ25vc3RpY1tdID0gW107XG5cbiAgZm9yIChjb25zdCBwcm92aWRlciBvZiBwcm92aWRlckNsYXNzZXMpIHtcbiAgICBpZiAocmVnaXN0cnkuaXNJbmplY3RhYmxlKHByb3ZpZGVyLm5vZGUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZXh0Tm9kZSA9IHByb3ZpZGVyLmdldE9yaWdpbkZvckRpYWdub3N0aWNzKHByb3ZpZGVyc0RlY2xhcmF0aW9uKTtcbiAgICBkaWFnbm9zdGljcy5wdXNoKG1ha2VEaWFnbm9zdGljKFxuICAgICAgICBFcnJvckNvZGUuVU5ERUNPUkFURURfUFJPVklERVIsIGNvbnRleHROb2RlLFxuICAgICAgICBgVGhlIGNsYXNzICcke1xuICAgICAgICAgICAgcHJvdmlkZXIubm9kZS5uYW1lXG4gICAgICAgICAgICAgICAgLnRleHR9JyBjYW5ub3QgYmUgY3JlYXRlZCB2aWEgZGVwZW5kZW5jeSBpbmplY3Rpb24sIGFzIGl0IGRvZXMgbm90IGhhdmUgYW4gQW5ndWxhciBkZWNvcmF0b3IuIFRoaXMgd2lsbCByZXN1bHQgaW4gYW4gZXJyb3IgYXQgcnVudGltZS5cblxuRWl0aGVyIGFkZCB0aGUgQEluamVjdGFibGUoKSBkZWNvcmF0b3IgdG8gJyR7XG4gICAgICAgICAgICBwcm92aWRlci5ub2RlLm5hbWVcbiAgICAgICAgICAgICAgICAudGV4dH0nLCBvciBjb25maWd1cmUgYSBkaWZmZXJlbnQgcHJvdmlkZXIgKHN1Y2ggYXMgYSBwcm92aWRlciB3aXRoICd1c2VGYWN0b3J5JykuXG5gLFxuICAgICAgICBbbWFrZVJlbGF0ZWRJbmZvcm1hdGlvbihwcm92aWRlci5ub2RlLCBgJyR7cHJvdmlkZXIubm9kZS5uYW1lLnRleHR9JyBpcyBkZWNsYXJlZCBoZXJlLmApXSkpO1xuICB9XG5cbiAgcmV0dXJuIGRpYWdub3N0aWNzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlyZWN0aXZlRGlhZ25vc3RpY3MoXG4gICAgbm9kZTogQ2xhc3NEZWNsYXJhdGlvbiwgcmVhZGVyOiBNZXRhZGF0YVJlYWRlciwgZXZhbHVhdG9yOiBQYXJ0aWFsRXZhbHVhdG9yLFxuICAgIHJlZmxlY3RvcjogUmVmbGVjdGlvbkhvc3QsIHNjb3BlUmVnaXN0cnk6IExvY2FsTW9kdWxlU2NvcGVSZWdpc3RyeSxcbiAgICBraW5kOiBzdHJpbmcpOiB0cy5EaWFnbm9zdGljW118bnVsbCB7XG4gIGxldCBkaWFnbm9zdGljczogdHMuRGlhZ25vc3RpY1tdfG51bGwgPSBbXTtcblxuICBjb25zdCBhZGREaWFnbm9zdGljcyA9IChtb3JlOiB0cy5EaWFnbm9zdGljfHRzLkRpYWdub3N0aWNbXXxudWxsKSA9PiB7XG4gICAgaWYgKG1vcmUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGRpYWdub3N0aWNzID09PSBudWxsKSB7XG4gICAgICBkaWFnbm9zdGljcyA9IEFycmF5LmlzQXJyYXkobW9yZSkgPyBtb3JlIDogW21vcmVdO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShtb3JlKSkge1xuICAgICAgZGlhZ25vc3RpY3MucHVzaCguLi5tb3JlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlhZ25vc3RpY3MucHVzaChtb3JlKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZHVwbGljYXRlRGVjbGFyYXRpb25zID0gc2NvcGVSZWdpc3RyeS5nZXREdXBsaWNhdGVEZWNsYXJhdGlvbnMobm9kZSk7XG5cbiAgaWYgKGR1cGxpY2F0ZURlY2xhcmF0aW9ucyAhPT0gbnVsbCkge1xuICAgIGFkZERpYWdub3N0aWNzKG1ha2VEdXBsaWNhdGVEZWNsYXJhdGlvbkVycm9yKG5vZGUsIGR1cGxpY2F0ZURlY2xhcmF0aW9ucywga2luZCkpO1xuICB9XG5cbiAgYWRkRGlhZ25vc3RpY3MoY2hlY2tJbmhlcml0YW5jZU9mRGlyZWN0aXZlKG5vZGUsIHJlYWRlciwgcmVmbGVjdG9yLCBldmFsdWF0b3IpKTtcbiAgcmV0dXJuIGRpYWdub3N0aWNzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5kZWNvcmF0ZWRDbGFzc1dpdGhBbmd1bGFyRmVhdHVyZXNEaWFnbm9zdGljKG5vZGU6IENsYXNzRGVjbGFyYXRpb24pOlxuICAgIHRzLkRpYWdub3N0aWMge1xuICByZXR1cm4gbWFrZURpYWdub3N0aWMoXG4gICAgICBFcnJvckNvZGUuVU5ERUNPUkFURURfQ0xBU1NfVVNJTkdfQU5HVUxBUl9GRUFUVVJFUywgbm9kZS5uYW1lLFxuICAgICAgYENsYXNzIGlzIHVzaW5nIEFuZ3VsYXIgZmVhdHVyZXMgYnV0IGlzIG5vdCBkZWNvcmF0ZWQuIFBsZWFzZSBhZGQgYW4gZXhwbGljaXQgYCArXG4gICAgICAgICAgYEFuZ3VsYXIgZGVjb3JhdG9yLmApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJbmhlcml0YW5jZU9mRGlyZWN0aXZlKFxuICAgIG5vZGU6IENsYXNzRGVjbGFyYXRpb24sIHJlYWRlcjogTWV0YWRhdGFSZWFkZXIsIHJlZmxlY3RvcjogUmVmbGVjdGlvbkhvc3QsXG4gICAgZXZhbHVhdG9yOiBQYXJ0aWFsRXZhbHVhdG9yKTogdHMuRGlhZ25vc3RpY3xudWxsIHtcbiAgaWYgKCFyZWZsZWN0b3IuaXNDbGFzcyhub2RlKSB8fCByZWZsZWN0b3IuZ2V0Q29uc3RydWN0b3JQYXJhbWV0ZXJzKG5vZGUpICE9PSBudWxsKSB7XG4gICAgLy8gV2Ugc2hvdWxkIHNraXAgbm9kZXMgdGhhdCBhcmVuJ3QgY2xhc3Nlcy4gSWYgYSBjb25zdHJ1Y3RvciBleGlzdHMsIHRoZW4gbm8gYmFzZSBjbGFzc1xuICAgIC8vIGRlZmluaXRpb24gaXMgcmVxdWlyZWQgb24gdGhlIHJ1bnRpbWUgc2lkZSAtIGl0J3MgbGVnYWwgdG8gaW5oZXJpdCBmcm9tIGFueSBjbGFzcy5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIFRoZSBleHRlbmRzIGNsYXVzZSBpcyBhbiBleHByZXNzaW9uIHdoaWNoIGNhbiBiZSBhcyBkeW5hbWljIGFzIHRoZSB1c2VyIHdhbnRzLiBUcnkgdG9cbiAgLy8gZXZhbHVhdGUgaXQsIGJ1dCBmYWxsIGJhY2sgb24gaWdub3JpbmcgdGhlIGNsYXVzZSBpZiBpdCBjYW4ndCBiZSB1bmRlcnN0b29kLiBUaGlzIGlzIGEgVmlld1xuICAvLyBFbmdpbmUgY29tcGF0aWJpbGl0eSBoYWNrOiBWaWV3IEVuZ2luZSBpZ25vcmVzICdleHRlbmRzJyBleHByZXNzaW9ucyB0aGF0IGl0IGNhbm5vdCB1bmRlcnN0YW5kLlxuICBsZXQgYmFzZUNsYXNzID0gcmVhZEJhc2VDbGFzcyhub2RlLCByZWZsZWN0b3IsIGV2YWx1YXRvcik7XG5cbiAgd2hpbGUgKGJhc2VDbGFzcyAhPT0gbnVsbCkge1xuICAgIGlmIChiYXNlQ2xhc3MgPT09ICdkeW5hbWljJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gV2UgY2FuIHNraXAgdGhlIGJhc2UgY2xhc3MgaWYgaXQgaGFzIG1ldGFkYXRhLlxuICAgIGNvbnN0IGJhc2VDbGFzc01ldGEgPSByZWFkZXIuZ2V0RGlyZWN0aXZlTWV0YWRhdGEoYmFzZUNsYXNzKTtcbiAgICBpZiAoYmFzZUNsYXNzTWV0YSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGJhc2UgY2xhc3MgaGFzIGEgYmxhbmsgY29uc3RydWN0b3Igd2UgY2FuIHNraXAgaXQgc2luY2UgaXQgY2FuJ3QgYmUgdXNpbmcgREkuXG4gICAgY29uc3QgYmFzZUNsYXNzQ29uc3RydWN0b3JQYXJhbXMgPSByZWZsZWN0b3IuZ2V0Q29uc3RydWN0b3JQYXJhbWV0ZXJzKGJhc2VDbGFzcy5ub2RlKTtcbiAgICBjb25zdCBuZXdQYXJlbnRDbGFzcyA9IHJlYWRCYXNlQ2xhc3MoYmFzZUNsYXNzLm5vZGUsIHJlZmxlY3RvciwgZXZhbHVhdG9yKTtcblxuICAgIGlmIChiYXNlQ2xhc3NDb25zdHJ1Y3RvclBhcmFtcyAhPT0gbnVsbCAmJiBiYXNlQ2xhc3NDb25zdHJ1Y3RvclBhcmFtcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBUaGlzIGNsYXNzIGhhcyBhIG5vbi10cml2aWFsIGNvbnN0cnVjdG9yLCB0aGF0J3MgYW4gZXJyb3IhXG4gICAgICByZXR1cm4gZ2V0SW5oZXJpdGVkVW5kZWNvcmF0ZWRDdG9yRGlhZ25vc3RpYyhub2RlLCBiYXNlQ2xhc3MsIHJlYWRlcik7XG4gICAgfSBlbHNlIGlmIChiYXNlQ2xhc3NDb25zdHJ1Y3RvclBhcmFtcyAhPT0gbnVsbCB8fCBuZXdQYXJlbnRDbGFzcyA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBjbGFzcyBoYXMgYSB0cml2aWFsIGNvbnN0cnVjdG9yLCBvciBubyBjb25zdHJ1Y3RvciArIGlzIHRoZVxuICAgICAgLy8gdG9wIG9mIHRoZSBpbmhlcml0YW5jZSBjaGFpbiwgc28gaXQncyBva2F5LlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gR28gdXAgdGhlIGNoYWluIGFuZCBjb250aW51ZVxuICAgIGJhc2VDbGFzcyA9IG5ld1BhcmVudENsYXNzO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldEluaGVyaXRlZFVuZGVjb3JhdGVkQ3RvckRpYWdub3N0aWMoXG4gICAgbm9kZTogQ2xhc3NEZWNsYXJhdGlvbiwgYmFzZUNsYXNzOiBSZWZlcmVuY2UsIHJlYWRlcjogTWV0YWRhdGFSZWFkZXIpIHtcbiAgY29uc3Qgc3ViY2xhc3NNZXRhID0gcmVhZGVyLmdldERpcmVjdGl2ZU1ldGFkYXRhKG5ldyBSZWZlcmVuY2Uobm9kZSkpITtcbiAgY29uc3QgZGlyT3JDb21wID0gc3ViY2xhc3NNZXRhLmlzQ29tcG9uZW50ID8gJ0NvbXBvbmVudCcgOiAnRGlyZWN0aXZlJztcbiAgY29uc3QgYmFzZUNsYXNzTmFtZSA9IGJhc2VDbGFzcy5kZWJ1Z05hbWU7XG5cbiAgcmV0dXJuIG1ha2VEaWFnbm9zdGljKFxuICAgICAgRXJyb3JDb2RlLkRJUkVDVElWRV9JTkhFUklUU19VTkRFQ09SQVRFRF9DVE9SLCBub2RlLm5hbWUsXG4gICAgICBgVGhlICR7ZGlyT3JDb21wLnRvTG93ZXJDYXNlKCl9ICR7bm9kZS5uYW1lLnRleHR9IGluaGVyaXRzIGl0cyBjb25zdHJ1Y3RvciBmcm9tICR7XG4gICAgICAgICAgYmFzZUNsYXNzTmFtZX0sIGAgK1xuICAgICAgICAgIGBidXQgdGhlIGxhdHRlciBkb2VzIG5vdCBoYXZlIGFuIEFuZ3VsYXIgZGVjb3JhdG9yIG9mIGl0cyBvd24uIERlcGVuZGVuY3kgaW5qZWN0aW9uIHdpbGwgbm90IGJlIGFibGUgdG8gYCArXG4gICAgICAgICAgYHJlc29sdmUgdGhlIHBhcmFtZXRlcnMgb2YgJHtcbiAgICAgICAgICAgICAgYmFzZUNsYXNzTmFtZX0ncyBjb25zdHJ1Y3Rvci4gRWl0aGVyIGFkZCBhIEBEaXJlY3RpdmUgZGVjb3JhdG9yIGAgK1xuICAgICAgICAgIGB0byAke2Jhc2VDbGFzc05hbWV9LCBvciBhZGQgYW4gZXhwbGljaXQgY29uc3RydWN0b3IgdG8gJHtub2RlLm5hbWUudGV4dH0uYCk7XG59XG4iXX0=