@angular/compiler-cli 12.1.1 → 12.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (455) hide show
  1. package/linker/src/file_linker/emit_scopes/iife_emit_scope.js +1 -1
  2. package/linker/src/file_linker/partial_linkers/partial_linker_selector.js +2 -2
  3. package/ngcc/src/dependencies/commonjs_dependency_host.js +1 -1
  4. package/ngcc/src/dependencies/dts_dependency_host.js +1 -1
  5. package/ngcc/src/dependencies/esm_dependency_host.js +1 -1
  6. package/ngcc/src/dependencies/umd_dependency_host.js +1 -1
  7. package/ngcc/src/entry_point_finder/program_based_entry_point_finder.js +1 -1
  8. package/ngcc/src/entry_point_finder/targeted_entry_point_finder.js +1 -1
  9. package/ngcc/src/execution/tasks/queues/parallel_task_queue.js +1 -1
  10. package/ngcc/src/execution/tasks/queues/serial_task_queue.js +1 -1
  11. package/ngcc/src/host/commonjs_host.js +1 -1
  12. package/ngcc/src/host/esm2015_host.js +1 -1
  13. package/ngcc/src/host/esm5_host.js +1 -1
  14. package/ngcc/src/host/umd_host.js +1 -1
  15. package/ngcc/src/packages/build_marker.d.ts +1 -1
  16. package/ngcc/src/packages/build_marker.js +1 -1
  17. package/ngcc/src/packages/entry_point_manifest.js +1 -1
  18. package/ngcc/src/packages/ngcc_compiler_host.js +1 -1
  19. package/ngcc/src/rendering/commonjs_rendering_formatter.js +1 -1
  20. package/ngcc/src/rendering/esm5_rendering_formatter.js +1 -1
  21. package/ngcc/src/rendering/umd_rendering_formatter.js +1 -1
  22. package/ngcc/src/writing/new_entry_point_file_writer.js +1 -1
  23. package/package.json +2 -2
  24. package/src/ngtsc/annotations/src/component.js +1 -1
  25. package/src/ngtsc/annotations/src/directive.js +1 -1
  26. package/src/ngtsc/annotations/src/ng_module.js +1 -1
  27. package/src/ngtsc/annotations/src/pipe.js +1 -1
  28. package/src/ngtsc/core/src/compiler.js +1 -1
  29. package/src/ngtsc/cycles/src/analyzer.d.ts +7 -0
  30. package/src/ngtsc/cycles/src/analyzer.js +89 -4
  31. package/src/ngtsc/cycles/src/imports.d.ts +1 -6
  32. package/src/ngtsc/cycles/src/imports.js +5 -23
  33. package/src/ngtsc/file_system/testing/src/mock_file_system_native.js +1 -1
  34. package/src/ngtsc/file_system/testing/src/mock_file_system_posix.js +1 -1
  35. package/src/ngtsc/file_system/testing/src/mock_file_system_windows.js +1 -1
  36. package/src/ngtsc/incremental/semantic_graph/src/graph.js +1 -1
  37. package/src/ngtsc/incremental/src/incremental.js +30 -4
  38. package/src/ngtsc/indexer/src/template.js +1 -1
  39. package/src/ngtsc/metadata/src/dts.js +4 -5
  40. package/src/ngtsc/metadata/src/util.d.ts +2 -2
  41. package/src/ngtsc/metadata/src/util.js +9 -6
  42. package/src/ngtsc/partial_evaluator/src/builtin.js +1 -1
  43. package/src/ngtsc/partial_evaluator/src/interpreter.js +6 -5
  44. package/src/ngtsc/partial_evaluator/src/ts_helpers.js +1 -1
  45. package/src/ngtsc/program_driver/src/api.d.ts +20 -1
  46. package/src/ngtsc/program_driver/src/api.js +3 -2
  47. package/src/ngtsc/program_driver/src/ts_create_program_driver.d.ts +2 -2
  48. package/src/ngtsc/program_driver/src/ts_create_program_driver.js +7 -3
  49. package/src/ngtsc/reflection/src/typescript.js +4 -1
  50. package/src/ngtsc/transform/src/compilation.d.ts +5 -0
  51. package/src/ngtsc/transform/src/compilation.js +95 -72
  52. package/src/ngtsc/transform/src/transform.js +1 -1
  53. package/src/ngtsc/typecheck/src/context.d.ts +2 -1
  54. package/src/ngtsc/typecheck/src/context.js +11 -3
  55. package/src/ngtsc/typecheck/src/template_semantics.js +1 -1
  56. package/src/ngtsc/typecheck/src/template_symbol_builder.js +21 -1
  57. package/src/ngtsc/typecheck/src/type_check_block.js +2 -2
  58. package/src/ngtsc/typecheck/src/type_check_file.js +1 -1
  59. package/src/ngtsc/typecheck/src/type_emitter.js +25 -6
  60. package/src/ngtsc/util/src/visitor.d.ts +1 -1
  61. package/src/ngtsc/util/src/visitor.js +1 -8
  62. package/src/version.js +1 -1
  63. package/compiler-cli.externs.js +0 -0
  64. package/index.mjs +0 -20
  65. package/linker/babel/babel.externs.js +0 -0
  66. package/linker/babel/index.mjs +0 -11
  67. package/linker/babel/src/ast/babel_ast_factory.mjs +0 -137
  68. package/linker/babel/src/ast/babel_ast_host.mjs +0 -154
  69. package/linker/babel/src/babel_declaration_scope.mjs +0 -52
  70. package/linker/babel/src/babel_plugin.mjs +0 -23
  71. package/linker/babel/src/es2015_linker_plugin.mjs +0 -158
  72. package/linker/babel/src/linker_plugin_options.mjs +0 -2
  73. package/linker/index.mjs +0 -7
  74. package/linker/linker.externs.js +0 -0
  75. package/linker/src/ast/ast_host.mjs +0 -9
  76. package/linker/src/ast/ast_value.mjs +0 -256
  77. package/linker/src/ast/typescript/typescript_ast_host.mjs +0 -156
  78. package/linker/src/ast/utils.mjs +0 -17
  79. package/linker/src/fatal_linker_error.mjs +0 -30
  80. package/linker/src/file_linker/declaration_scope.mjs +0 -9
  81. package/linker/src/file_linker/emit_scopes/emit_scope.mjs +0 -41
  82. package/linker/src/file_linker/emit_scopes/iife_emit_scope.mjs +0 -33
  83. package/linker/src/file_linker/file_linker.mjs +0 -70
  84. package/linker/src/file_linker/get_source_file.mjs +0 -28
  85. package/linker/src/file_linker/linker_environment.mjs +0 -23
  86. package/linker/src/file_linker/linker_options.mjs +0 -16
  87. package/linker/src/file_linker/needs_linking.mjs +0 -27
  88. package/linker/src/file_linker/partial_linkers/partial_class_metadata_linker_1.mjs +0 -29
  89. package/linker/src/file_linker/partial_linkers/partial_component_linker_1.mjs +0 -194
  90. package/linker/src/file_linker/partial_linkers/partial_directive_linker_1.mjs +0 -137
  91. package/linker/src/file_linker/partial_linkers/partial_factory_linker_1.mjs +0 -52
  92. package/linker/src/file_linker/partial_linkers/partial_injectable_linker_1.mjs +0 -56
  93. package/linker/src/file_linker/partial_linkers/partial_injector_linker_1.mjs +0 -38
  94. package/linker/src/file_linker/partial_linkers/partial_linker.mjs +0 -2
  95. package/linker/src/file_linker/partial_linkers/partial_linker_selector.mjs +0 -166
  96. package/linker/src/file_linker/partial_linkers/partial_ng_module_linker_1.mjs +0 -110
  97. package/linker/src/file_linker/partial_linkers/partial_pipe_linker_1.mjs +0 -42
  98. package/linker/src/file_linker/partial_linkers/util.mjs +0 -78
  99. package/linker/src/file_linker/translator.mjs +0 -23
  100. package/linker/src/linker_import_generator.mjs +0 -28
  101. package/ngcc/index.mjs +0 -16
  102. package/ngcc/main-ivy-ngcc.mjs +0 -12
  103. package/ngcc/main-ngcc.mjs +0 -32
  104. package/ngcc/ngcc.externs.js +0 -0
  105. package/ngcc/src/analysis/decoration_analyzer.mjs +0 -215
  106. package/ngcc/src/analysis/migration_host.mjs +0 -80
  107. package/ngcc/src/analysis/module_with_providers_analyzer.mjs +0 -178
  108. package/ngcc/src/analysis/ngcc_references_registry.mjs +0 -45
  109. package/ngcc/src/analysis/ngcc_trait_compiler.mjs +0 -70
  110. package/ngcc/src/analysis/private_declarations_analyzer.mjs +0 -47
  111. package/ngcc/src/analysis/switch_marker_analyzer.mjs +0 -34
  112. package/ngcc/src/analysis/types.mjs +0 -2
  113. package/ngcc/src/analysis/util.mjs +0 -19
  114. package/ngcc/src/command_line_options.mjs +0 -142
  115. package/ngcc/src/constants.mjs +0 -10
  116. package/ngcc/src/dependencies/commonjs_dependency_host.mjs +0 -87
  117. package/ngcc/src/dependencies/dependency_host.mjs +0 -102
  118. package/ngcc/src/dependencies/dependency_resolver.mjs +0 -151
  119. package/ngcc/src/dependencies/dts_dependency_host.mjs +0 -18
  120. package/ngcc/src/dependencies/esm_dependency_host.mjs +0 -286
  121. package/ngcc/src/dependencies/module_resolver.mjs +0 -233
  122. package/ngcc/src/dependencies/umd_dependency_host.mjs +0 -33
  123. package/ngcc/src/entry_point_finder/directory_walker_entry_point_finder.mjs +0 -42
  124. package/ngcc/src/entry_point_finder/entry_point_collector.mjs +0 -120
  125. package/ngcc/src/entry_point_finder/interface.mjs +0 -2
  126. package/ngcc/src/entry_point_finder/program_based_entry_point_finder.mjs +0 -91
  127. package/ngcc/src/entry_point_finder/targeted_entry_point_finder.mjs +0 -216
  128. package/ngcc/src/entry_point_finder/tracing_entry_point_finder.mjs +0 -63
  129. package/ngcc/src/entry_point_finder/utils.mjs +0 -176
  130. package/ngcc/src/execution/analyze_entry_points.mjs +0 -130
  131. package/ngcc/src/execution/api.mjs +0 -2
  132. package/ngcc/src/execution/cluster/api.mjs +0 -9
  133. package/ngcc/src/execution/cluster/executor.mjs +0 -27
  134. package/ngcc/src/execution/cluster/master.mjs +0 -261
  135. package/ngcc/src/execution/cluster/package_json_updater.mjs +0 -45
  136. package/ngcc/src/execution/cluster/utils.mjs +0 -59
  137. package/ngcc/src/execution/cluster/worker.mjs +0 -81
  138. package/ngcc/src/execution/create_compile_function.mjs +0 -62
  139. package/ngcc/src/execution/single_process_executor.mjs +0 -57
  140. package/ngcc/src/execution/tasks/api.mjs +0 -22
  141. package/ngcc/src/execution/tasks/completion.mjs +0 -61
  142. package/ngcc/src/execution/tasks/queues/base_task_queue.mjs +0 -78
  143. package/ngcc/src/execution/tasks/queues/parallel_task_queue.mjs +0 -53
  144. package/ngcc/src/execution/tasks/queues/serial_task_queue.mjs +0 -29
  145. package/ngcc/src/execution/tasks/utils.mjs +0 -114
  146. package/ngcc/src/host/commonjs_host.mjs +0 -220
  147. package/ngcc/src/host/commonjs_umd_utils.mjs +0 -186
  148. package/ngcc/src/host/delegating_host.mjs +0 -140
  149. package/ngcc/src/host/esm2015_host.mjs +0 -2293
  150. package/ngcc/src/host/esm5_host.mjs +0 -721
  151. package/ngcc/src/host/ngcc_host.mjs +0 -15
  152. package/ngcc/src/host/umd_host.mjs +0 -486
  153. package/ngcc/src/host/utils.mjs +0 -12
  154. package/ngcc/src/locking/async_locker.mjs +0 -76
  155. package/ngcc/src/locking/lock_file.mjs +0 -4
  156. package/ngcc/src/locking/lock_file_with_child_process/index.mjs +0 -78
  157. package/ngcc/src/locking/lock_file_with_child_process/unlocker.mjs +0 -34
  158. package/ngcc/src/locking/lock_file_with_child_process/util.mjs +0 -29
  159. package/ngcc/src/locking/sync_locker.mjs +0 -52
  160. package/ngcc/src/main.mjs +0 -134
  161. package/ngcc/src/migrations/migration.mjs +0 -2
  162. package/ngcc/src/migrations/missing_injectable_migration.mjs +0 -164
  163. package/ngcc/src/migrations/undecorated_child_migration.mjs +0 -61
  164. package/ngcc/src/migrations/undecorated_parent_migration.mjs +0 -86
  165. package/ngcc/src/migrations/utils.mjs +0 -117
  166. package/ngcc/src/ngcc_options.mjs +0 -119
  167. package/ngcc/src/packages/build_marker.mjs +0 -84
  168. package/ngcc/src/packages/bundle_program.mjs +0 -52
  169. package/ngcc/src/packages/configuration.mjs +0 -255
  170. package/ngcc/src/packages/entry_point.mjs +0 -239
  171. package/ngcc/src/packages/entry_point_bundle.mjs +0 -68
  172. package/ngcc/src/packages/entry_point_manifest.mjs +0 -162
  173. package/ngcc/src/packages/ngcc_compiler_host.mjs +0 -77
  174. package/ngcc/src/packages/patch_ts_expando_initializer.mjs +0 -166
  175. package/ngcc/src/packages/source_file_cache.mjs +0 -187
  176. package/ngcc/src/packages/transformer.mjs +0 -140
  177. package/ngcc/src/path_mappings.mjs +0 -13
  178. package/ngcc/src/rendering/commonjs_rendering_formatter.mjs +0 -65
  179. package/ngcc/src/rendering/dts_renderer.mjs +0 -139
  180. package/ngcc/src/rendering/esm5_rendering_formatter.mjs +0 -50
  181. package/ngcc/src/rendering/esm_rendering_formatter.mjs +0 -251
  182. package/ngcc/src/rendering/ngcc_import_rewriter.mjs +0 -32
  183. package/ngcc/src/rendering/renderer.mjs +0 -170
  184. package/ngcc/src/rendering/rendering_formatter.mjs +0 -2
  185. package/ngcc/src/rendering/source_maps.mjs +0 -54
  186. package/ngcc/src/rendering/umd_rendering_formatter.mjs +0 -292
  187. package/ngcc/src/rendering/utils.mjs +0 -20
  188. package/ngcc/src/utils.mjs +0 -144
  189. package/ngcc/src/writing/cleaning/cleaning_strategies.mjs +0 -61
  190. package/ngcc/src/writing/cleaning/package_cleaner.mjs +0 -67
  191. package/ngcc/src/writing/cleaning/utils.mjs +0 -16
  192. package/ngcc/src/writing/file_writer.mjs +0 -2
  193. package/ngcc/src/writing/in_place_file_writer.mjs +0 -62
  194. package/ngcc/src/writing/new_entry_point_file_writer.mjs +0 -161
  195. package/ngcc/src/writing/package_json_updater.mjs +0 -144
  196. package/src/diagnostics/translate_diagnostics.mjs +0 -47
  197. package/src/diagnostics/typescript_version.mjs +0 -79
  198. package/src/extract_i18n.mjs +0 -46
  199. package/src/language_services.mjs +0 -18
  200. package/src/main.mjs +0 -185
  201. package/src/metadata/bundle_index_host.mjs +0 -107
  202. package/src/metadata/bundler.mjs +0 -556
  203. package/src/metadata/collector.mjs +0 -701
  204. package/src/metadata/evaluator.mjs +0 -643
  205. package/src/metadata/index.mjs +0 -11
  206. package/src/metadata/index_writer.mjs +0 -44
  207. package/src/metadata/schema.mjs +0 -102
  208. package/src/metadata/symbols.mjs +0 -117
  209. package/src/ngtsc/annotations/annotations.externs.js +0 -0
  210. package/src/ngtsc/annotations/index.mjs +0 -15
  211. package/src/ngtsc/annotations/src/api.mjs +0 -9
  212. package/src/ngtsc/annotations/src/component.mjs +0 -1068
  213. package/src/ngtsc/annotations/src/diagnostics.mjs +0 -147
  214. package/src/ngtsc/annotations/src/directive.mjs +0 -692
  215. package/src/ngtsc/annotations/src/factory.mjs +0 -17
  216. package/src/ngtsc/annotations/src/injectable.mjs +0 -260
  217. package/src/ngtsc/annotations/src/metadata.mjs +0 -145
  218. package/src/ngtsc/annotations/src/ng_module.mjs +0 -565
  219. package/src/ngtsc/annotations/src/pipe.mjs +0 -151
  220. package/src/ngtsc/annotations/src/references_registry.mjs +0 -16
  221. package/src/ngtsc/annotations/src/util.mjs +0 -495
  222. package/src/ngtsc/core/api/index.mjs +0 -12
  223. package/src/ngtsc/core/api/src/adapter.mjs +0 -9
  224. package/src/ngtsc/core/api/src/interfaces.mjs +0 -9
  225. package/src/ngtsc/core/api/src/options.mjs +0 -9
  226. package/src/ngtsc/core/api/src/public_options.mjs +0 -9
  227. package/src/ngtsc/core/api.externs.js +0 -0
  228. package/src/ngtsc/core/core.externs.js +0 -0
  229. package/src/ngtsc/core/index.mjs +0 -10
  230. package/src/ngtsc/core/src/compiler.mjs +0 -917
  231. package/src/ngtsc/core/src/config.mjs +0 -15
  232. package/src/ngtsc/core/src/host.mjs +0 -229
  233. package/src/ngtsc/cycles/cycles.externs.js +0 -0
  234. package/src/ngtsc/cycles/index.mjs +0 -10
  235. package/src/ngtsc/cycles/src/analyzer.mjs +0 -60
  236. package/src/ngtsc/cycles/src/imports.mjs +0 -152
  237. package/src/ngtsc/diagnostics/diagnostics.externs.js +0 -0
  238. package/src/ngtsc/diagnostics/index.mjs +0 -11
  239. package/src/ngtsc/diagnostics/src/error.mjs +0 -51
  240. package/src/ngtsc/diagnostics/src/error_code.mjs +0 -198
  241. package/src/ngtsc/diagnostics/src/util.mjs +0 -21
  242. package/src/ngtsc/entry_point/entry_point.externs.js +0 -0
  243. package/src/ngtsc/entry_point/index.mjs +0 -12
  244. package/src/ngtsc/entry_point/src/generator.mjs +0 -35
  245. package/src/ngtsc/entry_point/src/logic.mjs +0 -35
  246. package/src/ngtsc/entry_point/src/private_export_checker.mjs +0 -122
  247. package/src/ngtsc/entry_point/src/reference_graph.mjs +0 -73
  248. package/src/ngtsc/file_system/file_system.externs.js +0 -0
  249. package/src/ngtsc/file_system/index.mjs +0 -13
  250. package/src/ngtsc/file_system/src/compiler_host.mjs +0 -64
  251. package/src/ngtsc/file_system/src/helpers.mjs +0 -99
  252. package/src/ngtsc/file_system/src/invalid_file_system.mjs +0 -95
  253. package/src/ngtsc/file_system/src/logical.mjs +0 -84
  254. package/src/ngtsc/file_system/src/node_js_file_system.mjs +0 -142
  255. package/src/ngtsc/file_system/src/types.mjs +0 -9
  256. package/src/ngtsc/file_system/src/util.mjs +0 -22
  257. package/src/ngtsc/file_system/testing/index.mjs +0 -13
  258. package/src/ngtsc/file_system/testing/src/mock_file_system.mjs +0 -293
  259. package/src/ngtsc/file_system/testing/src/mock_file_system_native.mjs +0 -57
  260. package/src/ngtsc/file_system/testing/src/mock_file_system_posix.mjs +0 -38
  261. package/src/ngtsc/file_system/testing/src/mock_file_system_windows.mjs +0 -38
  262. package/src/ngtsc/file_system/testing/src/test_helper.mjs +0 -108
  263. package/src/ngtsc/file_system/testing/testing.externs.js +0 -0
  264. package/src/ngtsc/imports/imports.externs.js +0 -0
  265. package/src/ngtsc/imports/index.mjs +0 -14
  266. package/src/ngtsc/imports/src/alias.mjs +0 -137
  267. package/src/ngtsc/imports/src/core.mjs +0 -78
  268. package/src/ngtsc/imports/src/default.mjs +0 -135
  269. package/src/ngtsc/imports/src/emitter.mjs +0 -266
  270. package/src/ngtsc/imports/src/find_export.mjs +0 -56
  271. package/src/ngtsc/imports/src/reexport.mjs +0 -9
  272. package/src/ngtsc/imports/src/references.mjs +0 -137
  273. package/src/ngtsc/imports/src/resolver.mjs +0 -24
  274. package/src/ngtsc/incremental/api.externs.js +0 -0
  275. package/src/ngtsc/incremental/api.mjs +0 -9
  276. package/src/ngtsc/incremental/incremental.externs.js +0 -0
  277. package/src/ngtsc/incremental/index.mjs +0 -12
  278. package/src/ngtsc/incremental/semantic_graph/index.mjs +0 -12
  279. package/src/ngtsc/incremental/semantic_graph/semantic_graph.externs.js +0 -0
  280. package/src/ngtsc/incremental/semantic_graph/src/api.mjs +0 -36
  281. package/src/ngtsc/incremental/semantic_graph/src/graph.mjs +0 -237
  282. package/src/ngtsc/incremental/semantic_graph/src/type_parameters.mjs +0 -40
  283. package/src/ngtsc/incremental/semantic_graph/src/util.mjs +0 -69
  284. package/src/ngtsc/incremental/src/dependency_tracking.mjs +0 -117
  285. package/src/ngtsc/incremental/src/incremental.mjs +0 -271
  286. package/src/ngtsc/incremental/src/noop.mjs +0 -13
  287. package/src/ngtsc/incremental/src/state.mjs +0 -17
  288. package/src/ngtsc/incremental/src/strategy.mjs +0 -76
  289. package/src/ngtsc/indexer/index.mjs +0 -11
  290. package/src/ngtsc/indexer/indexer.externs.js +0 -0
  291. package/src/ngtsc/indexer/src/api.mjs +0 -30
  292. package/src/ngtsc/indexer/src/context.mjs +0 -25
  293. package/src/ngtsc/indexer/src/template.mjs +0 -303
  294. package/src/ngtsc/indexer/src/transform.mjs +0 -51
  295. package/src/ngtsc/logging/index.mjs +0 -10
  296. package/src/ngtsc/logging/logging.externs.js +0 -0
  297. package/src/ngtsc/logging/src/console_logger.mjs +0 -43
  298. package/src/ngtsc/logging/src/logger.mjs +0 -15
  299. package/src/ngtsc/logging/testing/index.mjs +0 -9
  300. package/src/ngtsc/logging/testing/src/mock_logger.mjs +0 -32
  301. package/src/ngtsc/logging/testing/testing.externs.js +0 -0
  302. package/src/ngtsc/metadata/index.mjs +0 -15
  303. package/src/ngtsc/metadata/metadata.externs.js +0 -0
  304. package/src/ngtsc/metadata/src/api.mjs +0 -13
  305. package/src/ngtsc/metadata/src/dts.mjs +0 -143
  306. package/src/ngtsc/metadata/src/inheritance.mjs +0 -71
  307. package/src/ngtsc/metadata/src/property_mapping.mjs +0 -136
  308. package/src/ngtsc/metadata/src/registry.mjs +0 -80
  309. package/src/ngtsc/metadata/src/resource_registry.mjs +0 -81
  310. package/src/ngtsc/metadata/src/util.mjs +0 -200
  311. package/src/ngtsc/partial_evaluator/index.mjs +0 -12
  312. package/src/ngtsc/partial_evaluator/partial_evaluator.externs.js +0 -0
  313. package/src/ngtsc/partial_evaluator/src/builtin.mjs +0 -65
  314. package/src/ngtsc/partial_evaluator/src/diagnostics.mjs +0 -174
  315. package/src/ngtsc/partial_evaluator/src/dynamic.mjs +0 -94
  316. package/src/ngtsc/partial_evaluator/src/interface.mjs +0 -27
  317. package/src/ngtsc/partial_evaluator/src/interpreter.mjs +0 -719
  318. package/src/ngtsc/partial_evaluator/src/known_declaration.mjs +0 -43
  319. package/src/ngtsc/partial_evaluator/src/result.mjs +0 -50
  320. package/src/ngtsc/partial_evaluator/src/ts_helpers.mjs +0 -72
  321. package/src/ngtsc/perf/index.mjs +0 -11
  322. package/src/ngtsc/perf/perf.externs.js +0 -0
  323. package/src/ngtsc/perf/src/api.mjs +0 -278
  324. package/src/ngtsc/perf/src/clock.mjs +0 -15
  325. package/src/ngtsc/perf/src/noop.mjs +0 -21
  326. package/src/ngtsc/perf/src/recorder.mjs +0 -125
  327. package/src/ngtsc/program.mjs +0 -271
  328. package/src/ngtsc/program_driver/index.mjs +0 -10
  329. package/src/ngtsc/program_driver/program_driver.externs.js +0 -0
  330. package/src/ngtsc/program_driver/src/api.mjs +0 -22
  331. package/src/ngtsc/program_driver/src/ts_create_program_driver.mjs +0 -164
  332. package/src/ngtsc/reflection/index.mjs +0 -12
  333. package/src/ngtsc/reflection/reflection.externs.js +0 -0
  334. package/src/ngtsc/reflection/src/host.mjs +0 -73
  335. package/src/ngtsc/reflection/src/type_to_value.mjs +0 -243
  336. package/src/ngtsc/reflection/src/typescript.mjs +0 -608
  337. package/src/ngtsc/reflection/src/util.mjs +0 -21
  338. package/src/ngtsc/resource/index.mjs +0 -9
  339. package/src/ngtsc/resource/resource.externs.js +0 -0
  340. package/src/ngtsc/resource/src/loader.mjs +0 -242
  341. package/src/ngtsc/routing/index.mjs +0 -11
  342. package/src/ngtsc/routing/routing.externs.js +0 -0
  343. package/src/ngtsc/routing/src/analyzer.mjs +0 -69
  344. package/src/ngtsc/routing/src/lazy.mjs +0 -168
  345. package/src/ngtsc/routing/src/route.mjs +0 -51
  346. package/src/ngtsc/scope/index.mjs +0 -12
  347. package/src/ngtsc/scope/scope.externs.js +0 -0
  348. package/src/ngtsc/scope/src/api.mjs +0 -9
  349. package/src/ngtsc/scope/src/component_scope.mjs +0 -31
  350. package/src/ngtsc/scope/src/dependency.mjs +0 -134
  351. package/src/ngtsc/scope/src/local.mjs +0 -531
  352. package/src/ngtsc/scope/src/typecheck.mjs +0 -83
  353. package/src/ngtsc/shims/api.externs.js +0 -0
  354. package/src/ngtsc/shims/api.mjs +0 -2
  355. package/src/ngtsc/shims/index.mjs +0 -14
  356. package/src/ngtsc/shims/shims.externs.js +0 -0
  357. package/src/ngtsc/shims/src/adapter.mjs +0 -188
  358. package/src/ngtsc/shims/src/expando.mjs +0 -102
  359. package/src/ngtsc/shims/src/factory_generator.mjs +0 -265
  360. package/src/ngtsc/shims/src/reference_tagger.mjs +0 -67
  361. package/src/ngtsc/shims/src/summary_generator.mjs +0 -64
  362. package/src/ngtsc/shims/src/util.mjs +0 -26
  363. package/src/ngtsc/sourcemaps/index.mjs +0 -11
  364. package/src/ngtsc/sourcemaps/sourcemaps.externs.js +0 -0
  365. package/src/ngtsc/sourcemaps/src/content_origin.mjs +0 -35
  366. package/src/ngtsc/sourcemaps/src/raw_source_map.mjs +0 -2
  367. package/src/ngtsc/sourcemaps/src/segment_marker.mjs +0 -40
  368. package/src/ngtsc/sourcemaps/src/source_file.mjs +0 -459
  369. package/src/ngtsc/sourcemaps/src/source_file_loader.mjs +0 -213
  370. package/src/ngtsc/switch/index.mjs +0 -9
  371. package/src/ngtsc/switch/src/switch.mjs +0 -115
  372. package/src/ngtsc/switch/switch.externs.js +0 -0
  373. package/src/ngtsc/transform/index.mjs +0 -14
  374. package/src/ngtsc/transform/src/alias.mjs +0 -30
  375. package/src/ngtsc/transform/src/api.mjs +0 -63
  376. package/src/ngtsc/transform/src/compilation.mjs +0 -514
  377. package/src/ngtsc/transform/src/declaration.mjs +0 -182
  378. package/src/ngtsc/transform/src/trait.mjs +0 -95
  379. package/src/ngtsc/transform/src/transform.mjs +0 -298
  380. package/src/ngtsc/transform/src/utils.mjs +0 -57
  381. package/src/ngtsc/transform/transform.externs.js +0 -0
  382. package/src/ngtsc/translator/index.mjs +0 -14
  383. package/src/ngtsc/translator/src/api/ast_factory.mjs +0 -9
  384. package/src/ngtsc/translator/src/api/import_generator.mjs +0 -9
  385. package/src/ngtsc/translator/src/context.mjs +0 -24
  386. package/src/ngtsc/translator/src/import_manager.mjs +0 -48
  387. package/src/ngtsc/translator/src/translator.mjs +0 -317
  388. package/src/ngtsc/translator/src/type_translator.mjs +0 -204
  389. package/src/ngtsc/translator/src/typescript_ast_factory.mjs +0 -211
  390. package/src/ngtsc/translator/src/typescript_translator.mjs +0 -17
  391. package/src/ngtsc/translator/translator.externs.js +0 -0
  392. package/src/ngtsc/tsc_plugin.mjs +0 -98
  393. package/src/ngtsc/typecheck/api/api.externs.js +0 -0
  394. package/src/ngtsc/typecheck/api/api.mjs +0 -9
  395. package/src/ngtsc/typecheck/api/checker.mjs +0 -31
  396. package/src/ngtsc/typecheck/api/completion.mjs +0 -16
  397. package/src/ngtsc/typecheck/api/context.mjs +0 -9
  398. package/src/ngtsc/typecheck/api/index.mjs +0 -14
  399. package/src/ngtsc/typecheck/api/scope.mjs +0 -9
  400. package/src/ngtsc/typecheck/api/symbols.mjs +0 -22
  401. package/src/ngtsc/typecheck/diagnostics/diagnostics.externs.js +0 -0
  402. package/src/ngtsc/typecheck/diagnostics/index.mjs +0 -10
  403. package/src/ngtsc/typecheck/diagnostics/src/diagnostic.mjs +0 -99
  404. package/src/ngtsc/typecheck/diagnostics/src/id.mjs +0 -23
  405. package/src/ngtsc/typecheck/index.mjs +0 -12
  406. package/src/ngtsc/typecheck/src/checker.mjs +0 -591
  407. package/src/ngtsc/typecheck/src/comments.mjs +0 -159
  408. package/src/ngtsc/typecheck/src/completion.mjs +0 -155
  409. package/src/ngtsc/typecheck/src/context.mjs +0 -350
  410. package/src/ngtsc/typecheck/src/diagnostics.mjs +0 -95
  411. package/src/ngtsc/typecheck/src/dom.mjs +0 -68
  412. package/src/ngtsc/typecheck/src/environment.mjs +0 -146
  413. package/src/ngtsc/typecheck/src/expression.mjs +0 -412
  414. package/src/ngtsc/typecheck/src/line_mappings.mjs +0 -60
  415. package/src/ngtsc/typecheck/src/oob.mjs +0 -112
  416. package/src/ngtsc/typecheck/src/shim.mjs +0 -37
  417. package/src/ngtsc/typecheck/src/source.mjs +0 -74
  418. package/src/ngtsc/typecheck/src/tcb_util.mjs +0 -135
  419. package/src/ngtsc/typecheck/src/template_semantics.mjs +0 -34
  420. package/src/ngtsc/typecheck/src/template_symbol_builder.mjs +0 -485
  421. package/src/ngtsc/typecheck/src/ts_util.mjs +0 -157
  422. package/src/ngtsc/typecheck/src/type_check_block.mjs +0 -1770
  423. package/src/ngtsc/typecheck/src/type_check_file.mjs +0 -65
  424. package/src/ngtsc/typecheck/src/type_constructor.mjs +0 -227
  425. package/src/ngtsc/typecheck/src/type_emitter.mjs +0 -127
  426. package/src/ngtsc/typecheck/src/type_parameter_emitter.mjs +0 -93
  427. package/src/ngtsc/typecheck/typecheck.externs.js +0 -0
  428. package/src/ngtsc/util/src/path.mjs +0 -18
  429. package/src/ngtsc/util/src/typescript.mjs +0 -143
  430. package/src/ngtsc/util/src/visitor.mjs +0 -107
  431. package/src/ngtsc/util/util.externs.js +0 -0
  432. package/src/ngtsc/xi18n/index.mjs +0 -9
  433. package/src/ngtsc/xi18n/src/context.mjs +0 -9
  434. package/src/ngtsc/xi18n/xi18n.externs.js +0 -0
  435. package/src/perform_compile.mjs +0 -275
  436. package/src/perform_watch.mjs +0 -247
  437. package/src/tooling.mjs +0 -32
  438. package/src/transformers/api.mjs +0 -27
  439. package/src/transformers/compiler_host.mjs +0 -593
  440. package/src/transformers/downlevel_decorators_transform.mjs +0 -507
  441. package/src/transformers/entry_points.mjs +0 -10
  442. package/src/transformers/i18n.mjs +0 -59
  443. package/src/transformers/inline_resources.mjs +0 -269
  444. package/src/transformers/lower_expressions.mjs +0 -336
  445. package/src/transformers/metadata_cache.mjs +0 -53
  446. package/src/transformers/metadata_reader.mjs +0 -104
  447. package/src/transformers/node_emitter.mjs +0 -606
  448. package/src/transformers/node_emitter_transform.mjs +0 -78
  449. package/src/transformers/patch_alias_reference_resolution.mjs +0 -109
  450. package/src/transformers/program.mjs +0 -887
  451. package/src/transformers/r3_metadata_transform.mjs +0 -46
  452. package/src/transformers/r3_transform.mjs +0 -29
  453. package/src/transformers/util.mjs +0 -89
  454. package/src/typescript_support.mjs +0 -57
  455. package/src/version.mjs +0 -15
@@ -1,65 +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 { join } from '../../file_system';
10
- import { NoopImportRewriter } from '../../imports';
11
- import { ImportManager } from '../../translator';
12
- import { Environment } from './environment';
13
- import { generateTypeCheckBlock } from './type_check_block';
14
- /**
15
- * An `Environment` representing the single type-checking file into which most (if not all) Type
16
- * Check Blocks (TCBs) will be generated.
17
- *
18
- * The `TypeCheckFile` hosts multiple TCBs and allows the sharing of declarations (e.g. type
19
- * constructors) between them. Rather than return such declarations via `getPreludeStatements()`, it
20
- * hoists them to the top of the generated `ts.SourceFile`.
21
- */
22
- export class TypeCheckFile extends Environment {
23
- constructor(fileName, config, refEmitter, reflector, compilerHost) {
24
- super(config, new ImportManager(new NoopImportRewriter(), 'i'), refEmitter, reflector, ts.createSourceFile(compilerHost.getCanonicalFileName(fileName), '', ts.ScriptTarget.Latest, true));
25
- this.fileName = fileName;
26
- this.nextTcbId = 1;
27
- this.tcbStatements = [];
28
- }
29
- addTypeCheckBlock(ref, meta, domSchemaChecker, oobRecorder, genericContextBehavior) {
30
- const fnId = ts.createIdentifier(`_tcb${this.nextTcbId++}`);
31
- const fn = generateTypeCheckBlock(this, ref, fnId, meta, domSchemaChecker, oobRecorder, genericContextBehavior);
32
- this.tcbStatements.push(fn);
33
- }
34
- render(removeComments) {
35
- let source = this.importManager.getAllImports(this.contextFile.fileName)
36
- .map(i => `import * as ${i.qualifier.text} from '${i.specifier}';`)
37
- .join('\n') +
38
- '\n\n';
39
- const printer = ts.createPrinter({ removeComments });
40
- source += '\n';
41
- for (const stmt of this.pipeInstStatements) {
42
- source += printer.printNode(ts.EmitHint.Unspecified, stmt, this.contextFile) + '\n';
43
- }
44
- for (const stmt of this.typeCtorStatements) {
45
- source += printer.printNode(ts.EmitHint.Unspecified, stmt, this.contextFile) + '\n';
46
- }
47
- source += '\n';
48
- for (const stmt of this.tcbStatements) {
49
- source += printer.printNode(ts.EmitHint.Unspecified, stmt, this.contextFile) + '\n';
50
- }
51
- // Ensure the template type-checking file is an ES module. Otherwise, it's interpreted as some
52
- // kind of global namespace in TS, which forces a full re-typecheck of the user's program that
53
- // is somehow more expensive than the initial parse.
54
- source += '\nexport const IS_A_MODULE = true;\n';
55
- return source;
56
- }
57
- getPreludeStatements() {
58
- return [];
59
- }
60
- }
61
- export function typeCheckFilePath(rootDirs) {
62
- const shortest = rootDirs.concat([]).sort((a, b) => a.length - b.length)[0];
63
- return join(shortest, '__ng_typecheck__.ts');
64
- }
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZV9jaGVja19maWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy90eXBlY2hlY2svc3JjL3R5cGVfY2hlY2tfZmlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFDSCxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVqQyxPQUFPLEVBQWlCLElBQUksRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxrQkFBa0IsRUFBOEIsTUFBTSxlQUFlLENBQUM7QUFFOUUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBSS9DLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFMUMsT0FBTyxFQUFDLHNCQUFzQixFQUE0QixNQUFNLG9CQUFvQixDQUFDO0FBSXJGOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLE9BQU8sYUFBYyxTQUFRLFdBQVc7SUFJNUMsWUFDYSxRQUF3QixFQUFFLE1BQTBCLEVBQUUsVUFBNEIsRUFDM0YsU0FBeUIsRUFBRSxZQUEyRDtRQUN4RixLQUFLLENBQ0QsTUFBTSxFQUFFLElBQUksYUFBYSxDQUFDLElBQUksa0JBQWtCLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUMvRSxFQUFFLENBQUMsZ0JBQWdCLENBQ2YsWUFBWSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBTDdFLGFBQVEsR0FBUixRQUFRLENBQWdCO1FBSjdCLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFDZCxrQkFBYSxHQUFtQixFQUFFLENBQUM7SUFTM0MsQ0FBQztJQUVELGlCQUFpQixDQUNiLEdBQXFELEVBQUUsSUFBNEIsRUFDbkYsZ0JBQWtDLEVBQUUsV0FBd0MsRUFDNUUsc0JBQWlEO1FBQ25ELE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUQsTUFBTSxFQUFFLEdBQUcsc0JBQXNCLENBQzdCLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUNsRixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQXVCO1FBQzVCLElBQUksTUFBTSxHQUFXLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO2FBQ3RELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDO2FBQ2xFLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDaEMsTUFBTSxDQUFDO1FBQ1gsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFDLGNBQWMsRUFBQyxDQUFDLENBQUM7UUFDbkQsTUFBTSxJQUFJLElBQUksQ0FBQztRQUNmLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzFDLE1BQU0sSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQ3JGO1FBQ0QsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDMUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDckY7UUFDRCxNQUFNLElBQUksSUFBSSxDQUFDO1FBQ2YsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3JDLE1BQU0sSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQ3JGO1FBRUQsOEZBQThGO1FBQzlGLDhGQUE4RjtRQUM5RixvREFBb0Q7UUFDcEQsTUFBTSxJQUFJLHNDQUFzQyxDQUFDO1FBRWpELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0NBQ0Y7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBMEI7SUFDMUQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RSxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUscUJBQXFCLENBQUMsQ0FBQztBQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtBYnNvbHV0ZUZzUGF0aCwgam9pbn0gZnJvbSAnLi4vLi4vZmlsZV9zeXN0ZW0nO1xuaW1wb3J0IHtOb29wSW1wb3J0UmV3cml0ZXIsIFJlZmVyZW5jZSwgUmVmZXJlbmNlRW1pdHRlcn0gZnJvbSAnLi4vLi4vaW1wb3J0cyc7XG5pbXBvcnQge0NsYXNzRGVjbGFyYXRpb24sIFJlZmxlY3Rpb25Ib3N0fSBmcm9tICcuLi8uLi9yZWZsZWN0aW9uJztcbmltcG9ydCB7SW1wb3J0TWFuYWdlcn0gZnJvbSAnLi4vLi4vdHJhbnNsYXRvcic7XG5pbXBvcnQge1R5cGVDaGVja0Jsb2NrTWV0YWRhdGEsIFR5cGVDaGVja2luZ0NvbmZpZ30gZnJvbSAnLi4vYXBpJztcblxuaW1wb3J0IHtEb21TY2hlbWFDaGVja2VyfSBmcm9tICcuL2RvbSc7XG5pbXBvcnQge0Vudmlyb25tZW50fSBmcm9tICcuL2Vudmlyb25tZW50JztcbmltcG9ydCB7T3V0T2ZCYW5kRGlhZ25vc3RpY1JlY29yZGVyfSBmcm9tICcuL29vYic7XG5pbXBvcnQge2dlbmVyYXRlVHlwZUNoZWNrQmxvY2ssIFRjYkdlbmVyaWNDb250ZXh0QmVoYXZpb3J9IGZyb20gJy4vdHlwZV9jaGVja19ibG9jayc7XG5cblxuXG4vKipcbiAqIEFuIGBFbnZpcm9ubWVudGAgcmVwcmVzZW50aW5nIHRoZSBzaW5nbGUgdHlwZS1jaGVja2luZyBmaWxlIGludG8gd2hpY2ggbW9zdCAoaWYgbm90IGFsbCkgVHlwZVxuICogQ2hlY2sgQmxvY2tzIChUQ0JzKSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAqXG4gKiBUaGUgYFR5cGVDaGVja0ZpbGVgIGhvc3RzIG11bHRpcGxlIFRDQnMgYW5kIGFsbG93cyB0aGUgc2hhcmluZyBvZiBkZWNsYXJhdGlvbnMgKGUuZy4gdHlwZVxuICogY29uc3RydWN0b3JzKSBiZXR3ZWVuIHRoZW0uIFJhdGhlciB0aGFuIHJldHVybiBzdWNoIGRlY2xhcmF0aW9ucyB2aWEgYGdldFByZWx1ZGVTdGF0ZW1lbnRzKClgLCBpdFxuICogaG9pc3RzIHRoZW0gdG8gdGhlIHRvcCBvZiB0aGUgZ2VuZXJhdGVkIGB0cy5Tb3VyY2VGaWxlYC5cbiAqL1xuZXhwb3J0IGNsYXNzIFR5cGVDaGVja0ZpbGUgZXh0ZW5kcyBFbnZpcm9ubWVudCB7XG4gIHByaXZhdGUgbmV4dFRjYklkID0gMTtcbiAgcHJpdmF0ZSB0Y2JTdGF0ZW1lbnRzOiB0cy5TdGF0ZW1lbnRbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcmVhZG9ubHkgZmlsZU5hbWU6IEFic29sdXRlRnNQYXRoLCBjb25maWc6IFR5cGVDaGVja2luZ0NvbmZpZywgcmVmRW1pdHRlcjogUmVmZXJlbmNlRW1pdHRlcixcbiAgICAgIHJlZmxlY3RvcjogUmVmbGVjdGlvbkhvc3QsIGNvbXBpbGVySG9zdDogUGljazx0cy5Db21waWxlckhvc3QsICdnZXRDYW5vbmljYWxGaWxlTmFtZSc+KSB7XG4gICAgc3VwZXIoXG4gICAgICAgIGNvbmZpZywgbmV3IEltcG9ydE1hbmFnZXIobmV3IE5vb3BJbXBvcnRSZXdyaXRlcigpLCAnaScpLCByZWZFbWl0dGVyLCByZWZsZWN0b3IsXG4gICAgICAgIHRzLmNyZWF0ZVNvdXJjZUZpbGUoXG4gICAgICAgICAgICBjb21waWxlckhvc3QuZ2V0Q2Fub25pY2FsRmlsZU5hbWUoZmlsZU5hbWUpLCAnJywgdHMuU2NyaXB0VGFyZ2V0LkxhdGVzdCwgdHJ1ZSkpO1xuICB9XG5cbiAgYWRkVHlwZUNoZWNrQmxvY2soXG4gICAgICByZWY6IFJlZmVyZW5jZTxDbGFzc0RlY2xhcmF0aW9uPHRzLkNsYXNzRGVjbGFyYXRpb24+PiwgbWV0YTogVHlwZUNoZWNrQmxvY2tNZXRhZGF0YSxcbiAgICAgIGRvbVNjaGVtYUNoZWNrZXI6IERvbVNjaGVtYUNoZWNrZXIsIG9vYlJlY29yZGVyOiBPdXRPZkJhbmREaWFnbm9zdGljUmVjb3JkZXIsXG4gICAgICBnZW5lcmljQ29udGV4dEJlaGF2aW9yOiBUY2JHZW5lcmljQ29udGV4dEJlaGF2aW9yKTogdm9pZCB7XG4gICAgY29uc3QgZm5JZCA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoYF90Y2Ike3RoaXMubmV4dFRjYklkKyt9YCk7XG4gICAgY29uc3QgZm4gPSBnZW5lcmF0ZVR5cGVDaGVja0Jsb2NrKFxuICAgICAgICB0aGlzLCByZWYsIGZuSWQsIG1ldGEsIGRvbVNjaGVtYUNoZWNrZXIsIG9vYlJlY29yZGVyLCBnZW5lcmljQ29udGV4dEJlaGF2aW9yKTtcbiAgICB0aGlzLnRjYlN0YXRlbWVudHMucHVzaChmbik7XG4gIH1cblxuICByZW5kZXIocmVtb3ZlQ29tbWVudHM6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIGxldCBzb3VyY2U6IHN0cmluZyA9IHRoaXMuaW1wb3J0TWFuYWdlci5nZXRBbGxJbXBvcnRzKHRoaXMuY29udGV4dEZpbGUuZmlsZU5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoaSA9PiBgaW1wb3J0ICogYXMgJHtpLnF1YWxpZmllci50ZXh0fSBmcm9tICcke2kuc3BlY2lmaWVyfSc7YClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oJ1xcbicpICtcbiAgICAgICAgJ1xcblxcbic7XG4gICAgY29uc3QgcHJpbnRlciA9IHRzLmNyZWF0ZVByaW50ZXIoe3JlbW92ZUNvbW1lbnRzfSk7XG4gICAgc291cmNlICs9ICdcXG4nO1xuICAgIGZvciAoY29uc3Qgc3RtdCBvZiB0aGlzLnBpcGVJbnN0U3RhdGVtZW50cykge1xuICAgICAgc291cmNlICs9IHByaW50ZXIucHJpbnROb2RlKHRzLkVtaXRIaW50LlVuc3BlY2lmaWVkLCBzdG10LCB0aGlzLmNvbnRleHRGaWxlKSArICdcXG4nO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHN0bXQgb2YgdGhpcy50eXBlQ3RvclN0YXRlbWVudHMpIHtcbiAgICAgIHNvdXJjZSArPSBwcmludGVyLnByaW50Tm9kZSh0cy5FbWl0SGludC5VbnNwZWNpZmllZCwgc3RtdCwgdGhpcy5jb250ZXh0RmlsZSkgKyAnXFxuJztcbiAgICB9XG4gICAgc291cmNlICs9ICdcXG4nO1xuICAgIGZvciAoY29uc3Qgc3RtdCBvZiB0aGlzLnRjYlN0YXRlbWVudHMpIHtcbiAgICAgIHNvdXJjZSArPSBwcmludGVyLnByaW50Tm9kZSh0cy5FbWl0SGludC5VbnNwZWNpZmllZCwgc3RtdCwgdGhpcy5jb250ZXh0RmlsZSkgKyAnXFxuJztcbiAgICB9XG5cbiAgICAvLyBFbnN1cmUgdGhlIHRlbXBsYXRlIHR5cGUtY2hlY2tpbmcgZmlsZSBpcyBhbiBFUyBtb2R1bGUuIE90aGVyd2lzZSwgaXQncyBpbnRlcnByZXRlZCBhcyBzb21lXG4gICAgLy8ga2luZCBvZiBnbG9iYWwgbmFtZXNwYWNlIGluIFRTLCB3aGljaCBmb3JjZXMgYSBmdWxsIHJlLXR5cGVjaGVjayBvZiB0aGUgdXNlcidzIHByb2dyYW0gdGhhdFxuICAgIC8vIGlzIHNvbWVob3cgbW9yZSBleHBlbnNpdmUgdGhhbiB0aGUgaW5pdGlhbCBwYXJzZS5cbiAgICBzb3VyY2UgKz0gJ1xcbmV4cG9ydCBjb25zdCBJU19BX01PRFVMRSA9IHRydWU7XFxuJztcblxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICBnZXRQcmVsdWRlU3RhdGVtZW50cygpOiB0cy5TdGF0ZW1lbnRbXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlQ2hlY2tGaWxlUGF0aChyb290RGlyczogQWJzb2x1dGVGc1BhdGhbXSk6IEFic29sdXRlRnNQYXRoIHtcbiAgY29uc3Qgc2hvcnRlc3QgPSByb290RGlycy5jb25jYXQoW10pLnNvcnQoKGEsIGIpID0+IGEubGVuZ3RoIC0gYi5sZW5ndGgpWzBdO1xuICByZXR1cm4gam9pbihzaG9ydGVzdCwgJ19fbmdfdHlwZWNoZWNrX18udHMnKTtcbn1cbiJdfQ==
@@ -1,227 +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 { checkIfGenericTypeBoundsAreContextFree } from './tcb_util';
10
- import { tsCreateTypeQueryForCoercedInput } from './ts_util';
11
- export function generateTypeCtorDeclarationFn(node, meta, nodeTypeRef, typeParams, reflector) {
12
- if (requiresInlineTypeCtor(node, reflector)) {
13
- throw new Error(`${node.name.text} requires an inline type constructor`);
14
- }
15
- const rawTypeArgs = typeParams !== undefined ? generateGenericArgs(typeParams) : undefined;
16
- const rawType = ts.createTypeReferenceNode(nodeTypeRef, rawTypeArgs);
17
- const initParam = constructTypeCtorParameter(node, meta, rawType);
18
- const typeParameters = typeParametersWithDefaultTypes(typeParams);
19
- if (meta.body) {
20
- const fnType = ts.createFunctionTypeNode(
21
- /* typeParameters */ typeParameters,
22
- /* parameters */ [initParam],
23
- /* type */ rawType);
24
- const decl = ts.createVariableDeclaration(
25
- /* name */ meta.fnName,
26
- /* type */ fnType,
27
- /* body */ ts.createNonNullExpression(ts.createNull()));
28
- const declList = ts.createVariableDeclarationList([decl], ts.NodeFlags.Const);
29
- return ts.createVariableStatement(
30
- /* modifiers */ undefined,
31
- /* declarationList */ declList);
32
- }
33
- else {
34
- return ts.createFunctionDeclaration(
35
- /* decorators */ undefined,
36
- /* modifiers */ [ts.createModifier(ts.SyntaxKind.DeclareKeyword)],
37
- /* asteriskToken */ undefined,
38
- /* name */ meta.fnName,
39
- /* typeParameters */ typeParameters,
40
- /* parameters */ [initParam],
41
- /* type */ rawType,
42
- /* body */ undefined);
43
- }
44
- }
45
- /**
46
- * Generate an inline type constructor for the given class and metadata.
47
- *
48
- * An inline type constructor is a specially shaped TypeScript static method, intended to be placed
49
- * within a directive class itself, that permits type inference of any generic type parameters of
50
- * the class from the types of expressions bound to inputs or outputs, and the types of elements
51
- * that match queries performed by the directive. It also catches any errors in the types of these
52
- * expressions. This method is never called at runtime, but is used in type-check blocks to
53
- * construct directive types.
54
- *
55
- * An inline type constructor for NgFor looks like:
56
- *
57
- * static ngTypeCtor<T>(init: Pick<NgForOf<T>, 'ngForOf'|'ngForTrackBy'|'ngForTemplate'>):
58
- * NgForOf<T>;
59
- *
60
- * A typical constructor would be:
61
- *
62
- * NgForOf.ngTypeCtor(init: {
63
- * ngForOf: ['foo', 'bar'],
64
- * ngForTrackBy: null as any,
65
- * ngForTemplate: null as any,
66
- * }); // Infers a type of NgForOf<string>.
67
- *
68
- * Any inputs declared on the type for which no property binding is present are assigned a value of
69
- * type `any`, to avoid producing any type errors for unset inputs.
70
- *
71
- * Inline type constructors are used when the type being created has bounded generic types which
72
- * make writing a declared type constructor (via `generateTypeCtorDeclarationFn`) difficult or
73
- * impossible.
74
- *
75
- * @param node the `ClassDeclaration<ts.ClassDeclaration>` for which a type constructor will be
76
- * generated.
77
- * @param meta additional metadata required to generate the type constructor.
78
- * @returns a `ts.MethodDeclaration` for the type constructor.
79
- */
80
- export function generateInlineTypeCtor(node, meta) {
81
- // Build rawType, a `ts.TypeNode` of the class with its generic parameters passed through from
82
- // the definition without any type bounds. For example, if the class is
83
- // `FooDirective<T extends Bar>`, its rawType would be `FooDirective<T>`.
84
- const rawTypeArgs = node.typeParameters !== undefined ? generateGenericArgs(node.typeParameters) : undefined;
85
- const rawType = ts.createTypeReferenceNode(node.name, rawTypeArgs);
86
- const initParam = constructTypeCtorParameter(node, meta, rawType);
87
- // If this constructor is being generated into a .ts file, then it needs a fake body. The body
88
- // is set to a return of `null!`. If the type constructor is being generated into a .d.ts file,
89
- // it needs no body.
90
- let body = undefined;
91
- if (meta.body) {
92
- body = ts.createBlock([
93
- ts.createReturn(ts.createNonNullExpression(ts.createNull())),
94
- ]);
95
- }
96
- // Create the type constructor method declaration.
97
- return ts.createMethod(
98
- /* decorators */ undefined,
99
- /* modifiers */ [ts.createModifier(ts.SyntaxKind.StaticKeyword)],
100
- /* asteriskToken */ undefined,
101
- /* name */ meta.fnName,
102
- /* questionToken */ undefined,
103
- /* typeParameters */ typeParametersWithDefaultTypes(node.typeParameters),
104
- /* parameters */ [initParam],
105
- /* type */ rawType,
106
- /* body */ body);
107
- }
108
- function constructTypeCtorParameter(node, meta, rawType) {
109
- // initType is the type of 'init', the single argument to the type constructor method.
110
- // If the Directive has any inputs, its initType will be:
111
- //
112
- // Pick<rawType, 'inputA'|'inputB'>
113
- //
114
- // Pick here is used to select only those fields from which the generic type parameters of the
115
- // directive will be inferred.
116
- //
117
- // In the special case there are no inputs, initType is set to {}.
118
- let initType = null;
119
- const keys = meta.fields.inputs;
120
- const plainKeys = [];
121
- const coercedKeys = [];
122
- for (const key of keys) {
123
- if (!meta.coercedInputFields.has(key)) {
124
- plainKeys.push(ts.createLiteralTypeNode(ts.createStringLiteral(key)));
125
- }
126
- else {
127
- coercedKeys.push(ts.createPropertySignature(
128
- /* modifiers */ undefined,
129
- /* name */ key,
130
- /* questionToken */ undefined,
131
- /* type */ tsCreateTypeQueryForCoercedInput(rawType.typeName, key),
132
- /* initializer */ undefined));
133
- }
134
- }
135
- if (plainKeys.length > 0) {
136
- // Construct a union of all the field names.
137
- const keyTypeUnion = ts.createUnionTypeNode(plainKeys);
138
- // Construct the Pick<rawType, keyTypeUnion>.
139
- initType = ts.createTypeReferenceNode('Pick', [rawType, keyTypeUnion]);
140
- }
141
- if (coercedKeys.length > 0) {
142
- const coercedLiteral = ts.createTypeLiteralNode(coercedKeys);
143
- initType = initType !== null ? ts.createIntersectionTypeNode([initType, coercedLiteral]) :
144
- coercedLiteral;
145
- }
146
- if (initType === null) {
147
- // Special case - no inputs, outputs, or other fields which could influence the result type.
148
- initType = ts.createTypeLiteralNode([]);
149
- }
150
- // Create the 'init' parameter itself.
151
- return ts.createParameter(
152
- /* decorators */ undefined,
153
- /* modifiers */ undefined,
154
- /* dotDotDotToken */ undefined,
155
- /* name */ 'init',
156
- /* questionToken */ undefined,
157
- /* type */ initType,
158
- /* initializer */ undefined);
159
- }
160
- function generateGenericArgs(params) {
161
- return params.map(param => ts.createTypeReferenceNode(param.name, undefined));
162
- }
163
- export function requiresInlineTypeCtor(node, host) {
164
- // The class requires an inline type constructor if it has generic type bounds that can not be
165
- // emitted into a different context.
166
- return !checkIfGenericTypeBoundsAreContextFree(node, host);
167
- }
168
- /**
169
- * Add a default `= any` to type parameters that don't have a default value already.
170
- *
171
- * TypeScript uses the default type of a type parameter whenever inference of that parameter fails.
172
- * This can happen when inferring a complex type from 'any'. For example, if `NgFor`'s inference is
173
- * done with the TCB code:
174
- *
175
- * ```
176
- * class NgFor<T> {
177
- * ngForOf: T[];
178
- * }
179
- *
180
- * declare function ctor<T>(o: Pick<NgFor<T>, 'ngForOf'|'ngForTrackBy'|'ngForTemplate'>): NgFor<T>;
181
- * ```
182
- *
183
- * An invocation looks like:
184
- *
185
- * ```
186
- * var _t1 = ctor({ngForOf: [1, 2], ngForTrackBy: null as any, ngForTemplate: null as any});
187
- * ```
188
- *
189
- * This correctly infers the type `NgFor<number>` for `_t1`, since `T` is inferred from the
190
- * assignment of type `number[]` to `ngForOf`'s type `T[]`. However, if `any` is passed instead:
191
- *
192
- * ```
193
- * var _t2 = ctor({ngForOf: [1, 2] as any, ngForTrackBy: null as any, ngForTemplate: null as any});
194
- * ```
195
- *
196
- * then inference for `T` fails (it cannot be inferred from `T[] = any`). In this case, `T` takes
197
- * the type `{}`, and so `_t2` is inferred as `NgFor<{}>`. This is obviously wrong.
198
- *
199
- * Adding a default type to the generic declaration in the constructor solves this problem, as the
200
- * default type will be used in the event that inference fails.
201
- *
202
- * ```
203
- * declare function ctor<T = any>(o: Pick<NgFor<T>, 'ngForOf'>): NgFor<T>;
204
- *
205
- * var _t3 = ctor({ngForOf: [1, 2] as any});
206
- * ```
207
- *
208
- * This correctly infers `T` as `any`, and therefore `_t3` as `NgFor<any>`.
209
- */
210
- function typeParametersWithDefaultTypes(params) {
211
- if (params === undefined) {
212
- return undefined;
213
- }
214
- return params.map(param => {
215
- if (param.default === undefined) {
216
- return ts.updateTypeParameterDeclaration(
217
- /* node */ param,
218
- /* name */ param.name,
219
- /* constraint */ param.constraint,
220
- /* defaultType */ ts.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword));
221
- }
222
- else {
223
- return param;
224
- }
225
- });
226
- }
227
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZV9jb25zdHJ1Y3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvdHlwZWNoZWNrL3NyYy90eXBlX2NvbnN0cnVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBSWpDLE9BQU8sRUFBQyxzQ0FBc0MsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUVsRSxPQUFPLEVBQUMsZ0NBQWdDLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFM0QsTUFBTSxVQUFVLDZCQUE2QixDQUN6QyxJQUEyQyxFQUFFLElBQXNCLEVBQUUsV0FBMEIsRUFDL0YsVUFBbUQsRUFBRSxTQUF5QjtJQUNoRixJQUFJLHNCQUFzQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsRUFBRTtRQUMzQyxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLHNDQUFzQyxDQUFDLENBQUM7S0FDMUU7SUFFRCxNQUFNLFdBQVcsR0FBRyxVQUFVLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzNGLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFckUsTUFBTSxTQUFTLEdBQUcsMEJBQTBCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUVsRSxNQUFNLGNBQWMsR0FBRyw4QkFBOEIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVsRSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDYixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsc0JBQXNCO1FBQ3BDLG9CQUFvQixDQUFDLGNB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TyxTQUFTLENBQUM7S0FDbEI7SUFFRCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDeEIsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtZQUMvQixPQUFPLEVBQUUsQ0FBQyw4QkFBOEI7WUFDcEMsVUFBVSxDQUFDLEtBQUs7WUFDaEIsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJO1lBQ3JCLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxVQUFVO1lBQ2pDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7U0FDM0U7YUFBTTtZQUNMLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7Q2xhc3NEZWNsYXJhdGlvbiwgUmVmbGVjdGlvbkhvc3R9IGZyb20gJy4uLy4uL3JlZmxlY3Rpb24nO1xuaW1wb3J0IHtUeXBlQ3Rvck1ldGFkYXRhfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHtjaGVja0lmR2VuZXJpY1R5cGVCb3VuZHNBcmVDb250ZXh0RnJlZX0gZnJvbSAnLi90Y2JfdXRpbCc7XG5cbmltcG9ydCB7dHNDcmVhdGVUeXBlUXVlcnlGb3JDb2VyY2VkSW5wdXR9IGZyb20gJy4vdHNfdXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVR5cGVDdG9yRGVjbGFyYXRpb25GbihcbiAgICBub2RlOiBDbGFzc0RlY2xhcmF0aW9uPHRzLkNsYXNzRGVjbGFyYXRpb24+LCBtZXRhOiBUeXBlQ3Rvck1ldGFkYXRhLCBub2RlVHlwZVJlZjogdHMuRW50aXR5TmFtZSxcbiAgICB0eXBlUGFyYW1zOiB0cy5UeXBlUGFyYW1ldGVyRGVjbGFyYXRpb25bXXx1bmRlZmluZWQsIHJlZmxlY3RvcjogUmVmbGVjdGlvbkhvc3QpOiB0cy5TdGF0ZW1lbnQge1xuICBpZiAocmVxdWlyZXNJbmxpbmVUeXBlQ3Rvcihub2RlLCByZWZsZWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke25vZGUubmFtZS50ZXh0fSByZXF1aXJlcyBhbiBpbmxpbmUgdHlwZSBjb25zdHJ1Y3RvcmApO1xuICB9XG5cbiAgY29uc3QgcmF3VHlwZUFyZ3MgPSB0eXBlUGFyYW1zICE9PSB1bmRlZmluZWQgPyBnZW5lcmF0ZUdlbmVyaWNBcmdzKHR5cGVQYXJhbXMpIDogdW5kZWZpbmVkO1xuICBjb25zdCByYXdUeXBlID0gdHMuY3JlYXRlVHlwZVJlZmVyZW5jZU5vZGUobm9kZVR5cGVSZWYsIHJhd1R5cGVBcmdzKTtcblxuICBjb25zdCBpbml0UGFyYW0gPSBjb25zdHJ1Y3RUeXBlQ3RvclBhcmFtZXRlcihub2RlLCBtZXRhLCByYXdUeXBlKTtcblxuICBjb25zdCB0eXBlUGFyYW1ldGVycyA9IHR5cGVQYXJhbWV0ZXJzV2l0aERlZmF1bHRUeXBlcyh0eXBlUGFyYW1zKTtcblxuICBpZiAobWV0YS5ib2R5KSB7XG4gICAgY29uc3QgZm5UeXBlID0gdHMuY3JlYXRlRnVuY3Rpb25UeXBlTm9kZShcbiAgICAgICAgLyogdHlwZVBhcmFtZXRlcnMgKi8gdHlwZVBhcmFtZXRlcnMsXG4gICAgICAgIC8qIHBhcmFtZXRlcnMgKi9baW5pdFBhcmFtXSxcbiAgICAgICAgLyogdHlwZSAqLyByYXdUeXBlLFxuICAgICk7XG5cbiAgICBjb25zdCBkZWNsID0gdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihcbiAgICAgICAgLyogbmFtZSAqLyBtZXRhLmZuTmFtZSxcbiAgICAgICAgLyogdHlwZSAqLyBmblR5cGUsXG4gICAgICAgIC8qIGJvZHkgKi8gdHMuY3JlYXRlTm9uTnVsbEV4cHJlc3Npb24odHMuY3JlYXRlTnVsbCgpKSk7XG4gICAgY29uc3QgZGVjbExpc3QgPSB0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChbZGVjbF0sIHRzLk5vZGVGbGFncy5Db25zdCk7XG4gICAgcmV0dXJuIHRzLmNyZWF0ZVZhcmlhYmxlU3RhdGVtZW50KFxuICAgICAgICAvKiBtb2RpZmllcnMgKi8gdW5kZWZpbmVkLFxuICAgICAgICAvKiBkZWNsYXJhdGlvbkxpc3QgKi8gZGVjbExpc3QpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0cy5jcmVhdGVGdW5jdGlvbkRlY2xhcmF0aW9uKFxuICAgICAgICAvKiBkZWNvcmF0b3JzICovIHVuZGVmaW5lZCxcbiAgICAgICAgLyogbW9kaWZpZXJzICovW3RzLmNyZWF0ZU1vZGlmaWVyKHRzLlN5bnRheEtpbmQuRGVjbGFyZUtleXdvcmQpXSxcbiAgICAgICAgLyogYXN0ZXJpc2tUb2tlbiAqLyB1bmRlZmluZWQsXG4gICAgICAgIC8qIG5hbWUgKi8gbWV0YS5mbk5hbWUsXG4gICAgICAgIC8qIHR5cGVQYXJhbWV0ZXJzICovIHR5cGVQYXJhbWV0ZXJzLFxuICAgICAgICAvKiBwYXJhbWV0ZXJzICovW2luaXRQYXJhbV0sXG4gICAgICAgIC8qIHR5cGUgKi8gcmF3VHlwZSxcbiAgICAgICAgLyogYm9keSAqLyB1bmRlZmluZWQpO1xuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYW4gaW5saW5lIHR5cGUgY29uc3RydWN0b3IgZm9yIHRoZSBnaXZlbiBjbGFzcyBhbmQgbWV0YWRhdGEuXG4gKlxuICogQW4gaW5saW5lIHR5cGUgY29uc3RydWN0b3IgaXMgYSBzcGVjaWFsbHkgc2hhcGVkIFR5cGVTY3JpcHQgc3RhdGljIG1ldGhvZCwgaW50ZW5kZWQgdG8gYmUgcGxhY2VkXG4gKiB3aXRoaW4gYSBkaXJlY3RpdmUgY2xhc3MgaXRzZWxmLCB0aGF0IHBlcm1pdHMgdHlwZSBpbmZlcmVuY2Ugb2YgYW55IGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXJzIG9mXG4gKiB0aGUgY2xhc3MgZnJvbSB0aGUgdHlwZXMgb2YgZXhwcmVzc2lvbnMgYm91bmQgdG8gaW5wdXRzIG9yIG91dHB1dHMsIGFuZCB0aGUgdHlwZXMgb2YgZWxlbWVudHNcbiAqIHRoYXQgbWF0Y2ggcXVlcmllcyBwZXJmb3JtZWQgYnkgdGhlIGRpcmVjdGl2ZS4gSXQgYWxzbyBjYXRjaGVzIGFueSBlcnJvcnMgaW4gdGhlIHR5cGVzIG9mIHRoZXNlXG4gKiBleHByZXNzaW9ucy4gVGhpcyBtZXRob2QgaXMgbmV2ZXIgY2FsbGVkIGF0IHJ1bnRpbWUsIGJ1dCBpcyB1c2VkIGluIHR5cGUtY2hlY2sgYmxvY2tzIHRvXG4gKiBjb25zdHJ1Y3QgZGlyZWN0aXZlIHR5cGVzLlxuICpcbiAqIEFuIGlubGluZSB0eXBlIGNvbnN0cnVjdG9yIGZvciBOZ0ZvciBsb29rcyBsaWtlOlxuICpcbiAqIHN0YXRpYyBuZ1R5cGVDdG9yPFQ+KGluaXQ6IFBpY2s8TmdGb3JPZjxUPiwgJ25nRm9yT2YnfCduZ0ZvclRyYWNrQnknfCduZ0ZvclRlbXBsYXRlJz4pOlxuICogICBOZ0Zvck9mPFQ+O1xuICpcbiAqIEEgdHlwaWNhbCBjb25zdHJ1Y3RvciB3b3VsZCBiZTpcbiAqXG4gKiBOZ0Zvck9mLm5nVHlwZUN0b3IoaW5pdDoge1xuICogICBuZ0Zvck9mOiBbJ2ZvbycsICdiYXInXSxcbiAqICAgbmdGb3JUcmFja0J5OiBudWxsIGFzIGFueSxcbiAqICAgbmdGb3JUZW1wbGF0ZTogbnVsbCBhcyBhbnksXG4gKiB9KTsgLy8gSW5mZXJzIGEgdHlwZSBvZiBOZ0Zvck9mPHN0cmluZz4uXG4gKlxuICogQW55IGlucHV0cyBkZWNsYXJlZCBvbiB0aGUgdHlwZSBmb3Igd2hpY2ggbm8gcHJvcGVydHkgYmluZGluZyBpcyBwcmVzZW50IGFyZSBhc3NpZ25lZCBhIHZhbHVlIG9mXG4gKiB0eXBlIGBhbnlgLCB0byBhdm9pZCBwcm9kdWNpbmcgYW55IHR5cGUgZXJyb3JzIGZvciB1bnNldCBpbnB1dHMuXG4gKlxuICogSW5saW5lIHR5cGUgY29uc3RydWN0b3JzIGFyZSB1c2VkIHdoZW4gdGhlIHR5cGUgYmVpbmcgY3JlYXRlZCBoYXMgYm91bmRlZCBnZW5lcmljIHR5cGVzIHdoaWNoXG4gKiBtYWtlIHdyaXRpbmcgYSBkZWNsYXJlZCB0eXBlIGNvbnN0cnVjdG9yICh2aWEgYGdlbmVyYXRlVHlwZUN0b3JEZWNsYXJhdGlvbkZuYCkgZGlmZmljdWx0IG9yXG4gKiBpbXBvc3NpYmxlLlxuICpcbiAqIEBwYXJhbSBub2RlIHRoZSBgQ2xhc3NEZWNsYXJhdGlvbjx0cy5DbGFzc0RlY2xhcmF0aW9uPmAgZm9yIHdoaWNoIGEgdHlwZSBjb25zdHJ1Y3RvciB3aWxsIGJlXG4gKiBnZW5lcmF0ZWQuXG4gKiBAcGFyYW0gbWV0YSBhZGRpdGlvbmFsIG1ldGFkYXRhIHJlcXVpcmVkIHRvIGdlbmVyYXRlIHRoZSB0eXBlIGNvbnN0cnVjdG9yLlxuICogQHJldHVybnMgYSBgdHMuTWV0aG9kRGVjbGFyYXRpb25gIGZvciB0aGUgdHlwZSBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlSW5saW5lVHlwZUN0b3IoXG4gICAgbm9kZTogQ2xhc3NEZWNsYXJhdGlvbjx0cy5DbGFzc0RlY2xhcmF0aW9uPiwgbWV0YTogVHlwZUN0b3JNZXRhZGF0YSk6IHRzLk1ldGhvZERlY2xhcmF0aW9uIHtcbiAgLy8gQnVpbGQgcmF3VHlwZSwgYSBgdHMuVHlwZU5vZGVgIG9mIHRoZSBjbGFzcyB3aXRoIGl0cyBnZW5lcmljIHBhcmFtZXRlcnMgcGFzc2VkIHRocm91Z2ggZnJvbVxuICAvLyB0aGUgZGVmaW5pdGlvbiB3aXRob3V0IGFueSB0eXBlIGJvdW5kcy4gRm9yIGV4YW1wbGUsIGlmIHRoZSBjbGFzcyBpc1xuICAvLyBgRm9vRGlyZWN0aXZlPFQgZXh0ZW5kcyBCYXI+YCwgaXRzIHJhd1R5cGUgd291bGQgYmUgYEZvb0RpcmVjdGl2ZTxUPmAuXG4gIGNvbnN0IHJhd1R5cGVBcmdzID1cbiAgICAgIG5vZGUudHlwZVBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCA/IGdlbmVyYXRlR2VuZXJpY0FyZ3Mobm9kZS50eXBlUGFyYW1ldGVycykgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHJhd1R5cGUgPSB0cy5jcmVhdGVUeXBlUmVmZXJlbmNlTm9kZShub2RlLm5hbWUsIHJhd1R5cGVBcmdzKTtcblxuICBjb25zdCBpbml0UGFyYW0gPSBjb25zdHJ1Y3RUeXBlQ3RvclBhcmFtZXRlcihub2RlLCBtZXRhLCByYXdUeXBlKTtcblxuICAvLyBJZiB0aGlzIGNvbnN0cnVjdG9yIGlzIGJlaW5nIGdlbmVyYXRlZCBpbnRvIGEgLnRzIGZpbGUsIHRoZW4gaXQgbmVlZHMgYSBmYWtlIGJvZHkuIFRoZSBib2R5XG4gIC8vIGlzIHNldCB0byBhIHJldHVybiBvZiBgbnVsbCFgLiBJZiB0aGUgdHlwZSBjb25zdHJ1Y3RvciBpcyBiZWluZyBnZW5lcmF0ZWQgaW50byBhIC5kLnRzIGZpbGUsXG4gIC8vIGl0IG5lZWRzIG5vIGJvZHkuXG4gIGxldCBib2R5OiB0cy5CbG9ja3x1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGlmIChtZXRhLmJvZHkpIHtcbiAgICBib2R5ID0gdHMuY3JlYXRlQmxvY2soW1xuICAgICAgdHMuY3JlYXRlUmV0dXJuKHRzLmNyZWF0ZU5vbk51bGxFeHByZXNzaW9uKHRzLmNyZWF0ZU51bGwoKSkpLFxuICAgIF0pO1xuICB9XG5cbiAgLy8gQ3JlYXRlIHRoZSB0eXBlIGNvbnN0cnVjdG9yIG1ldGhvZCBkZWNsYXJhdGlvbi5cbiAgcmV0dXJuIHRzLmNyZWF0ZU1ldGhvZChcbiAgICAgIC8qIGRlY29yYXRvcnMgKi8gdW5kZWZpbmVkLFxuICAgICAgLyogbW9kaWZpZXJzICovW3RzLmNyZWF0ZU1vZGlmaWVyKHRzLlN5bnRheEtpbmQuU3RhdGljS2V5d29yZCldLFxuICAgICAgLyogYXN0ZXJpc2tUb2tlbiAqLyB1bmRlZmluZWQsXG4gICAgICAvKiBuYW1lICovIG1ldGEuZm5OYW1lLFxuICAgICAgLyogcXVlc3Rpb25Ub2tlbiAqLyB1bmRlZmluZWQsXG4gICAgICAvKiB0eXBlUGFyYW1ldGVycyAqLyB0eXBlUGFyYW1ldGVyc1dpdGhEZWZhdWx0VHlwZXMobm9kZS50eXBlUGFyYW1ldGVycyksXG4gICAgICAvKiBwYXJhbWV0ZXJzICovW2luaXRQYXJhbV0sXG4gICAgICAvKiB0eXBlICovIHJhd1R5cGUsXG4gICAgICAvKiBib2R5ICovIGJvZHksXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFR5cGVDdG9yUGFyYW1ldGVyKFxuICAgIG5vZGU6IENsYXNzRGVjbGFyYXRpb248dHMuQ2xhc3NEZWNsYXJhdGlvbj4sIG1ldGE6IFR5cGVDdG9yTWV0YWRhdGEsXG4gICAgcmF3VHlwZTogdHMuVHlwZVJlZmVyZW5jZU5vZGUpOiB0cy5QYXJhbWV0ZXJEZWNsYXJhdGlvbiB7XG4gIC8vIGluaXRUeXBlIGlzIHRoZSB0eXBlIG9mICdpbml0JywgdGhlIHNpbmdsZSBhcmd1bWVudCB0byB0aGUgdHlwZSBjb25zdHJ1Y3RvciBtZXRob2QuXG4gIC8vIElmIHRoZSBEaXJlY3RpdmUgaGFzIGFueSBpbnB1dHMsIGl0cyBpbml0VHlwZSB3aWxsIGJlOlxuICAvL1xuICAvLyBQaWNrPHJhd1R5cGUsICdpbnB1dEEnfCdpbnB1dEInPlxuICAvL1xuICAvLyBQaWNrIGhlcmUgaXMgdXNlZCB0byBzZWxlY3Qgb25seSB0aG9zZSBmaWVsZHMgZnJvbSB3aGljaCB0aGUgZ2VuZXJpYyB0eXBlIHBhcmFtZXRlcnMgb2YgdGhlXG4gIC8vIGRpcmVjdGl2ZSB3aWxsIGJlIGluZmVycmVkLlxuICAvL1xuICAvLyBJbiB0aGUgc3BlY2lhbCBjYXNlIHRoZXJlIGFyZSBubyBpbnB1dHMsIGluaXRUeXBlIGlzIHNldCB0byB7fS5cbiAgbGV0IGluaXRUeXBlOiB0cy5UeXBlTm9kZXxudWxsID0gbnVsbDtcblxuICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IG1ldGEuZmllbGRzLmlucHV0cztcbiAgY29uc3QgcGxhaW5LZXlzOiB0cy5MaXRlcmFsVHlwZU5vZGVbXSA9IFtdO1xuICBjb25zdCBjb2VyY2VkS2V5czogdHMuUHJvcGVydHlTaWduYXR1cmVbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgaWYgKCFtZXRhLmNvZXJjZWRJbnB1dEZpZWxkcy5oYXMoa2V5KSkge1xuICAgICAgcGxhaW5LZXlzLnB1c2godHMuY3JlYXRlTGl0ZXJhbFR5cGVOb2RlKHRzLmNyZWF0ZVN0cmluZ0xpdGVyYWwoa2V5KSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2VyY2VkS2V5cy5wdXNoKHRzLmNyZWF0ZVByb3BlcnR5U2lnbmF0dXJlKFxuICAgICAgICAgIC8qIG1vZGlmaWVycyAqLyB1bmRlZmluZWQsXG4gICAgICAgICAgLyogbmFtZSAqLyBrZXksXG4gICAgICAgICAgLyogcXVlc3Rpb25Ub2tlbiAqLyB1bmRlZmluZWQsXG4gICAgICAgICAgLyogdHlwZSAqLyB0c0NyZWF0ZVR5cGVRdWVyeUZvckNvZXJjZWRJbnB1dChyYXdUeXBlLnR5cGVOYW1lLCBrZXkpLFxuICAgICAgICAgIC8qIGluaXRpYWxpemVyICovIHVuZGVmaW5lZCkpO1xuICAgIH1cbiAgfVxuICBpZiAocGxhaW5LZXlzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBDb25zdHJ1Y3QgYSB1bmlvbiBvZiBhbGwgdGhlIGZpZWxkIG5hbWVzLlxuICAgIGNvbnN0IGtleVR5cGVVbmlvbiA9IHRzLmNyZWF0ZVVuaW9uVHlwZU5vZGUocGxhaW5LZXlzKTtcblxuICAgIC8vIENvbnN0cnVjdCB0aGUgUGljazxyYXdUeXBlLCBrZXlUeXBlVW5pb24+LlxuICAgIGluaXRUeXBlID0gdHMuY3JlYXRlVHlwZVJlZmVyZW5jZU5vZGUoJ1BpY2snLCBbcmF3VHlwZSwga2V5VHlwZVVuaW9uXSk7XG4gIH1cbiAgaWYgKGNvZXJjZWRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBjb2VyY2VkTGl0ZXJhbCA9IHRzLmNyZWF0ZVR5cGVMaXRlcmFsTm9kZShjb2VyY2VkS2V5cyk7XG5cbiAgICBpbml0VHlwZSA9IGluaXRUeXBlICE9PSBudWxsID8gdHMuY3JlYXRlSW50ZXJzZWN0aW9uVHlwZU5vZGUoW2luaXRUeXBlLCBjb2VyY2VkTGl0ZXJhbF0pIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29lcmNlZExpdGVyYWw7XG4gIH1cblxuICBpZiAoaW5pdFR5cGUgPT09IG51bGwpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2UgLSBubyBpbnB1dHMsIG91dHB1dHMsIG9yIG90aGVyIGZpZWxkcyB3aGljaCBjb3VsZCBpbmZsdWVuY2UgdGhlIHJlc3VsdCB0eXBlLlxuICAgIGluaXRUeXBlID0gdHMuY3JlYXRlVHlwZUxpdGVyYWxOb2RlKFtdKTtcbiAgfVxuXG4gIC8vIENyZWF0ZSB0aGUgJ2luaXQnIHBhcmFtZXRlciBpdHNlbGYuXG4gIHJldHVybiB0cy5jcmVhdGVQYXJhbWV0ZXIoXG4gICAgICAvKiBkZWNvcmF0b3JzICovIHVuZGVmaW5lZCxcbiAgICAgIC8qIG1vZGlmaWVycyAqLyB1bmRlZmluZWQsXG4gICAgICAvKiBkb3REb3REb3RUb2tlbiAqLyB1bmRlZmluZWQsXG4gICAgICAvKiBuYW1lICovICdpbml0JyxcbiAgICAgIC8qIHF1ZXN0aW9uVG9rZW4gKi8gdW5kZWZpbmVkLFxuICAgICAgLyogdHlwZSAqLyBpbml0VHlwZSxcbiAgICAgIC8qIGluaXRpYWxpemVyICovIHVuZGVmaW5lZCk7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlR2VuZXJpY0FyZ3MocGFyYW1zOiBSZWFkb25seUFycmF5PHRzLlR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbj4pOiB0cy5UeXBlTm9kZVtdIHtcbiAgcmV0dXJuIHBhcmFtcy5tYXAocGFyYW0gPT4gdHMuY3JlYXRlVHlwZVJlZmVyZW5jZU5vZGUocGFyYW0ubmFtZSwgdW5kZWZpbmVkKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlc0lubGluZVR5cGVDdG9yKFxuICAgIG5vZGU6IENsYXNzRGVjbGFyYXRpb248dHMuQ2xhc3NEZWNsYXJhdGlvbj4sIGhvc3Q6IFJlZmxlY3Rpb25Ib3N0KTogYm9vbGVhbiB7XG4gIC8vIFRoZSBjbGFzcyByZXF1aXJlcyBhbiBpbmxpbmUgdHlwZSBjb25zdHJ1Y3RvciBpZiBpdCBoYXMgZ2VuZXJpYyB0eXBlIGJvdW5kcyB0aGF0IGNhbiBub3QgYmVcbiAgLy8gZW1pdHRlZCBpbnRvIGEgZGlmZmVyZW50IGNvbnRleHQuXG4gIHJldHVybiAhY2hlY2tJZkdlbmVyaWNUeXBlQm91bmRzQXJlQ29udGV4dEZyZWUobm9kZSwgaG9zdCk7XG59XG5cbi8qKlxuICogQWRkIGEgZGVmYXVsdCBgPSBhbnlgIHRvIHR5cGUgcGFyYW1ldGVycyB0aGF0IGRvbid0IGhhdmUgYSBkZWZhdWx0IHZhbHVlIGFscmVhZHkuXG4gKlxuICogVHlwZVNjcmlwdCB1c2VzIHRoZSBkZWZhdWx0IHR5cGUgb2YgYSB0eXBlIHBhcmFtZXRlciB3aGVuZXZlciBpbmZlcmVuY2Ugb2YgdGhhdCBwYXJhbWV0ZXIgZmFpbHMuXG4gKiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBpbmZlcnJpbmcgYSBjb21wbGV4IHR5cGUgZnJvbSAnYW55Jy4gRm9yIGV4YW1wbGUsIGlmIGBOZ0ZvcmAncyBpbmZlcmVuY2UgaXNcbiAqIGRvbmUgd2l0aCB0aGUgVENCIGNvZGU6XG4gKlxuICogYGBgXG4gKiBjbGFzcyBOZ0ZvcjxUPiB7XG4gKiAgIG5nRm9yT2Y6IFRbXTtcbiAqIH1cbiAqXG4gKiBkZWNsYXJlIGZ1bmN0aW9uIGN0b3I8VD4obzogUGljazxOZ0ZvcjxUPiwgJ25nRm9yT2YnfCduZ0ZvclRyYWNrQnknfCduZ0ZvclRlbXBsYXRlJz4pOiBOZ0ZvcjxUPjtcbiAqIGBgYFxuICpcbiAqIEFuIGludm9jYXRpb24gbG9va3MgbGlrZTpcbiAqXG4gKiBgYGBcbiAqIHZhciBfdDEgPSBjdG9yKHtuZ0Zvck9mOiBbMSwgMl0sIG5nRm9yVHJhY2tCeTogbnVsbCBhcyBhbnksIG5nRm9yVGVtcGxhdGU6IG51bGwgYXMgYW55fSk7XG4gKiBgYGBcbiAqXG4gKiBUaGlzIGNvcnJlY3RseSBpbmZlcnMgdGhlIHR5cGUgYE5nRm9yPG51bWJlcj5gIGZvciBgX3QxYCwgc2luY2UgYFRgIGlzIGluZmVycmVkIGZyb20gdGhlXG4gKiBhc3NpZ25tZW50IG9mIHR5cGUgYG51bWJlcltdYCB0byBgbmdGb3JPZmAncyB0eXBlIGBUW11gLiBIb3dldmVyLCBpZiBgYW55YCBpcyBwYXNzZWQgaW5zdGVhZDpcbiAqXG4gKiBgYGBcbiAqIHZhciBfdDIgPSBjdG9yKHtuZ0Zvck9mOiBbMSwgMl0gYXMgYW55LCBuZ0ZvclRyYWNrQnk6IG51bGwgYXMgYW55LCBuZ0ZvclRlbXBsYXRlOiBudWxsIGFzIGFueX0pO1xuICogYGBgXG4gKlxuICogdGhlbiBpbmZlcmVuY2UgZm9yIGBUYCBmYWlscyAoaXQgY2Fubm90IGJlIGluZmVycmVkIGZyb20gYFRbXSA9IGFueWApLiBJbiB0aGlzIGNhc2UsIGBUYCB0YWtlc1xuICogdGhlIHR5cGUgYHt9YCwgYW5kIHNvIGBfdDJgIGlzIGluZmVycmVkIGFzIGBOZ0Zvcjx7fT5gLiBUaGlzIGlzIG9idmlvdXNseSB3cm9uZy5cbiAqXG4gKiBBZGRpbmcgYSBkZWZhdWx0IHR5cGUgdG8gdGhlIGdlbmVyaWMgZGVjbGFyYXRpb24gaW4gdGhlIGNvbnN0cnVjdG9yIHNvbHZlcyB0aGlzIHByb2JsZW0sIGFzIHRoZVxuICogZGVmYXVsdCB0eXBlIHdpbGwgYmUgdXNlZCBpbiB0aGUgZXZlbnQgdGhhdCBpbmZlcmVuY2UgZmFpbHMuXG4gKlxuICogYGBgXG4gKiBkZWNsYXJlIGZ1bmN0aW9uIGN0b3I8VCA9IGFueT4obzogUGljazxOZ0ZvcjxUPiwgJ25nRm9yT2YnPik6IE5nRm9yPFQ+O1xuICpcbiAqIHZhciBfdDMgPSBjdG9yKHtuZ0Zvck9mOiBbMSwgMl0gYXMgYW55fSk7XG4gKiBgYGBcbiAqXG4gKiBUaGlzIGNvcnJlY3RseSBpbmZlcnMgYFRgIGFzIGBhbnlgLCBhbmQgdGhlcmVmb3JlIGBfdDNgIGFzIGBOZ0Zvcjxhbnk+YC5cbiAqL1xuZnVuY3Rpb24gdHlwZVBhcmFtZXRlcnNXaXRoRGVmYXVsdFR5cGVzKHBhcmFtczogUmVhZG9ubHlBcnJheTx0cy5UeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24+fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCk6IHRzLlR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbltdfHVuZGVmaW5lZCB7XG4gIGlmIChwYXJhbXMgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gcGFyYW1zLm1hcChwYXJhbSA9PiB7XG4gICAgaWYgKHBhcmFtLmRlZmF1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRzLnVwZGF0ZVR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbihcbiAgICAgICAgICAvKiBub2RlICovIHBhcmFtLFxuICAgICAgICAgIC8qIG5hbWUgKi8gcGFyYW0ubmFtZSxcbiAgICAgICAgICAvKiBjb25zdHJhaW50ICovIHBhcmFtLmNvbnN0cmFpbnQsXG4gICAgICAgICAgLyogZGVmYXVsdFR5cGUgKi8gdHMuY3JlYXRlS2V5d29yZFR5cGVOb2RlKHRzLlN5bnRheEtpbmQuQW55S2V5d29yZCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcGFyYW07XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==
@@ -1,127 +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 { Reference } from '../../imports';
10
- const INELIGIBLE = {};
11
- /**
12
- * Determines whether the provided type can be emitted, which means that it can be safely emitted
13
- * into a different location.
14
- *
15
- * If this function returns true, a `TypeEmitter` should be able to succeed. Vice versa, if this
16
- * function returns false, then using the `TypeEmitter` should not be attempted as it is known to
17
- * fail.
18
- */
19
- export function canEmitType(type, resolver) {
20
- return canEmitTypeWorker(type);
21
- function canEmitTypeWorker(type) {
22
- return visitNode(type) !== INELIGIBLE;
23
- }
24
- // To determine whether a type can be emitted, we have to recursively look through all type nodes.
25
- // If a type reference node is found at any position within the type and that type reference
26
- // cannot be emitted, then the `INELIGIBLE` constant is returned to stop the recursive walk as
27
- // the type as a whole cannot be emitted in that case. Otherwise, the result of visiting all child
28
- // nodes determines the result. If no ineligible type reference node is found then the walk
29
- // returns `undefined`, indicating that no type node was visited that could not be emitted.
30
- function visitNode(node) {
31
- // Emitting a type reference node in a different context requires that an import for the type
32
- // can be created. If a type reference node cannot be emitted, `INELIGIBLE` is returned to stop
33
- // the walk.
34
- if (ts.isTypeReferenceNode(node) && !canEmitTypeReference(node)) {
35
- return INELIGIBLE;
36
- }
37
- else {
38
- return ts.forEachChild(node, visitNode);
39
- }
40
- }
41
- function canEmitTypeReference(type) {
42
- const reference = resolver(type);
43
- // If the type could not be resolved, it can not be emitted.
44
- if (reference === null) {
45
- return false;
46
- }
47
- // If the type is a reference, consider the type to be eligible for emitting.
48
- if (reference instanceof Reference) {
49
- return true;
50
- }
51
- // The type can be emitted if either it does not have any type arguments, or all of them can be
52
- // emitted.
53
- return type.typeArguments === undefined || type.typeArguments.every(canEmitTypeWorker);
54
- }
55
- }
56
- /**
57
- * Given a `ts.TypeNode`, this class derives an equivalent `ts.TypeNode` that has been emitted into
58
- * a different context.
59
- *
60
- * For example, consider the following code:
61
- *
62
- * ```
63
- * import {NgIterable} from '@angular/core';
64
- *
65
- * class NgForOf<T, U extends NgIterable<T>> {}
66
- * ```
67
- *
68
- * Here, the generic type parameters `T` and `U` can be emitted into a different context, as the
69
- * type reference to `NgIterable` originates from an absolute module import so that it can be
70
- * emitted anywhere, using that same module import. The process of emitting translates the
71
- * `NgIterable` type reference to a type reference that is valid in the context in which it is
72
- * emitted, for example:
73
- *
74
- * ```
75
- * import * as i0 from '@angular/core';
76
- * import * as i1 from '@angular/common';
77
- *
78
- * const _ctor1: <T, U extends i0.NgIterable<T>>(o: Pick<i1.NgForOf<T, U>, 'ngForOf'>):
79
- * i1.NgForOf<T, U>;
80
- * ```
81
- *
82
- * Notice how the type reference for `NgIterable` has been translated into a qualified name,
83
- * referring to the namespace import that was created.
84
- */
85
- export class TypeEmitter {
86
- constructor(resolver, emitReference) {
87
- this.resolver = resolver;
88
- this.emitReference = emitReference;
89
- }
90
- emitType(type) {
91
- const typeReferenceTransformer = context => {
92
- const visitNode = (node) => {
93
- if (ts.isTypeReferenceNode(node)) {
94
- return this.emitTypeReference(node);
95
- }
96
- else {
97
- return ts.visitEachChild(node, visitNode, context);
98
- }
99
- };
100
- return node => ts.visitNode(node, visitNode);
101
- };
102
- return ts.transform(type, [typeReferenceTransformer]).transformed[0];
103
- }
104
- emitTypeReference(type) {
105
- // Determine the reference that the type corresponds with.
106
- const reference = this.resolver(type);
107
- if (reference === null) {
108
- throw new Error('Unable to emit an unresolved reference');
109
- }
110
- // Emit the type arguments, if any.
111
- let typeArguments = undefined;
112
- if (type.typeArguments !== undefined) {
113
- typeArguments = ts.createNodeArray(type.typeArguments.map(typeArg => this.emitType(typeArg)));
114
- }
115
- // Emit the type name.
116
- let typeName = type.typeName;
117
- if (reference instanceof Reference) {
118
- const emittedType = this.emitReference(reference);
119
- if (!ts.isTypeReferenceNode(emittedType)) {
120
- throw new Error(`Expected TypeReferenceNode for emitted reference, got ${ts.SyntaxKind[emittedType.kind]}`);
121
- }
122
- typeName = emittedType.typeName;
123
- }
124
- return ts.updateTypeReferenceNode(type, typeName, typeArguments);
125
- }
126
- }
127
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZV9lbWl0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy90eXBlY2hlY2svc3JjL3R5cGVfZW1pdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFDSCxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNqQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBc0J4QyxNQUFNLFVBQVUsR0FBZSxFQUFnQixDQUFDO0FBRWhEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQWlCLEVBQUUsUUFBK0I7SUFDNUUsT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUUvQixTQUFTLGlCQUFpQixDQUFDLElBQWlCO1FBQzFDLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLFVBQVUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsa0dBQWtHO0lBQ2xHLDRGQUE0RjtJQUM1Riw4RkFBOEY7SUFDOUYsa0dBQWtHO0lBQ2xHLDJGQUEyRjtJQUMzRiwyRkFBMkY7SUFDM0YsU0FBUyxTQUFTLENBQUMsSUFBYTtRQUM5Qiw2RkFBNkY7UUFDN0YsK0ZBQStGO1FBQy9GLFlBQVk7UUFDWixJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQy9ELE9BQU8sVUFBVSxDQUFDO1NBQ25CO2FBQU07WUFDTCxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQztJQUVELFNBQVMsb0JBQW9CLENBQUMsSUFBMEI7UUFDdEQsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWpDLDREQUE0RDtRQUM1RCxJQUFJLFNBQVMsS0FBSyxJQUFJLEVBQUU7WUFDdEIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELDZFQUE2RTtRQUM3RSxJQUFJLFNBQVMsWUFBWSxTQUFTLEVBQUU7WUFDbEMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELCtGQUErRjtRQUMvRixXQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsYUFBYSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Qkc7QUFDSCxNQUFNLE9BQU8sV0FBVztJQVl0QixZQUFZLFFBQStCLEVBQUUsYUFBOEM7UUFDekYsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7SUFDckMsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFpQjtRQUN4QixNQUFNLHdCQUF3QixHQUF1QyxPQUFPLENBQUMsRUFBRTtZQUM3RSxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQWEsRUFBVyxFQUFFO2dCQUMzQyxJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDaEMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ3JDO3FCQUFNO29CQUNMLE9BQU8sRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2lCQUNwRDtZQUNILENBQUMsQ0FBQztZQUNGLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUM7UUFDRixPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRU8saUJBQWlCLENBQUMsSUFBMEI7UUFDbEQsMERBQTBEO1FBQzFELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFO1lBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztTQUMzRDtRQUVELG1DQUFtQztRQUNuQyxJQUFJLGFBQWEsR0FBd0MsU0FBUyxDQUFDO1FBQ25FLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxTQUFTLEVBQUU7WUFDcEMsYUFBYSxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMvRjtRQUVELHNCQUFzQjtRQUN0QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzdCLElBQUksU0FBUyxZQUFZLFNBQVMsRUFBRTtZQUNsQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQUMseURBQ1osRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3hDO1lBRUQsUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7U0FDakM7UUFFRCxPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ25FLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQge1JlZmVyZW5jZX0gZnJvbSAnLi4vLi4vaW1wb3J0cyc7XG5cbi8qKlxuICogQSByZXNvbHZlZCB0eXBlIHJlZmVyZW5jZSBjYW4gZWl0aGVyIGJlIGEgYFJlZmVyZW5jZWAsIHRoZSBvcmlnaW5hbCBgdHMuVHlwZVJlZmVyZW5jZU5vZGVgIGl0c2VsZlxuICogb3IgbnVsbC4gQSB2YWx1ZSBvZiBudWxsIGluZGljYXRlcyB0aGF0IG5vIHJlZmVyZW5jZSBjb3VsZCBiZSByZXNvbHZlZCBvciB0aGF0IHRoZSByZWZlcmVuY2UgY2FuXG4gKiBub3QgYmUgZW1pdHRlZC5cbiAqL1xuZXhwb3J0IHR5cGUgUmVzb2x2ZWRUeXBlUmVmZXJlbmNlID0gUmVmZXJlbmNlfHRzLlR5cGVSZWZlcmVuY2VOb2RlfG51bGw7XG5cbi8qKlxuICogQSB0eXBlIHJlZmVyZW5jZSByZXNvbHZlciBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZmluZGluZyB0aGUgZGVjbGFyYXRpb24gb2YgdGhlIHR5cGVcbiAqIHJlZmVyZW5jZSBhbmQgdmVyaWZ5aW5nIHdoZXRoZXIgaXQgY2FuIGJlIGVtaXR0ZWQuXG4gKi9cbmV4cG9ydCB0eXBlIFR5cGVSZWZlcmVuY2VSZXNvbHZlciA9ICh0eXBlOiB0cy5UeXBlUmVmZXJlbmNlTm9kZSkgPT4gUmVzb2x2ZWRUeXBlUmVmZXJlbmNlO1xuXG4vKipcbiAqIEEgbWFya2VyIHRvIGluZGljYXRlIHRoYXQgYSB0eXBlIHJlZmVyZW5jZSBpcyBpbmVsaWdpYmxlIGZvciBlbWl0dGluZy4gVGhpcyBuZWVkcyB0byBiZSB0cnV0aHlcbiAqIGFzIGl0J3MgcmV0dXJuZWQgZnJvbSBgdHMuZm9yRWFjaENoaWxkYCwgd2hpY2ggb25seSByZXR1cm5zIHRydXRoeSB2YWx1ZXMuXG4gKi9cbnR5cGUgSU5FTElHSUJMRSA9IHtcbiAgX19icmFuZDogJ2luZWxpZ2libGUnO1xufTtcbmNvbnN0IElORUxJR0lCTEU6IElORUxJR0lCTEUgPSB7fSBhcyBJTkVMSUdJQkxFO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcHJvdmlkZWQgdHlwZSBjYW4gYmUgZW1pdHRlZCwgd2hpY2ggbWVhbnMgdGhhdCBpdCBjYW4gYmUgc2FmZWx5IGVtaXR0ZWRcbiAqIGludG8gYSBkaWZmZXJlbnQgbG9jYXRpb24uXG4gKlxuICogSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUsIGEgYFR5cGVFbWl0dGVyYCBzaG91bGQgYmUgYWJsZSB0byBzdWNjZWVkLiBWaWNlIHZlcnNhLCBpZiB0aGlzXG4gKiBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLCB0aGVuIHVzaW5nIHRoZSBgVHlwZUVtaXR0ZXJgIHNob3VsZCBub3QgYmUgYXR0ZW1wdGVkIGFzIGl0IGlzIGtub3duIHRvXG4gKiBmYWlsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FuRW1pdFR5cGUodHlwZTogdHMuVHlwZU5vZGUsIHJlc29sdmVyOiBUeXBlUmVmZXJlbmNlUmVzb2x2ZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNhbkVtaXRUeXBlV29ya2VyKHR5cGUpO1xuXG4gIGZ1bmN0aW9uIGNhbkVtaXRUeXBlV29ya2VyKHR5cGU6IHRzLlR5cGVOb2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZpc2l0Tm9kZSh0eXBlKSAhPT0gSU5FTElHSUJMRTtcbiAgfVxuXG4gIC8vIFRvIGRldGVybWluZSB3aGV0aGVyIGEgdHlwZSBjYW4gYmUgZW1pdHRlZCwgd2UgaGF2ZSB0byByZWN1cnNpdmVseSBsb29rIHRocm91Z2ggYWxsIHR5cGUgbm9kZXMuXG4gIC8vIElmIGEgdHlwZSByZWZlcmVuY2Ugbm9kZSBpcyBmb3VuZCBhdCBhbnkgcG9zaXRpb24gd2l0aGluIHRoZSB0eXBlIGFuZCB0aGF0IHR5cGUgcmVmZXJlbmNlXG4gIC8vIGNhbm5vdCBiZSBlbWl0dGVkLCB0aGVuIHRoZSBgSU5FTElHSUJMRWAgY29uc3RhbnQgaXMgcmV0dXJuZWQgdG8gc3RvcCB0aGUgcmVjdXJzaXZlIHdhbGsgYXNcbiAgLy8gdGhlIHR5cGUgYXMgYSB3aG9sZSBjYW5ub3QgYmUgZW1pdHRlZCBpbiB0aGF0IGNhc2UuIE90aGVyd2lzZSwgdGhlIHJlc3VsdCBvZiB2aXNpdGluZyBhbGwgY2hpbGRcbiAgLy8gbm9kZXMgZGV0ZXJtaW5lcyB0aGUgcmVzdWx0LiBJZiBubyBpbmVsaWdpYmxlIHR5cGUgcmVmZXJlbmNlIG5vZGUgaXMgZm91bmQgdGhlbiB0aGUgd2Fsa1xuICAvLyByZXR1cm5zIGB1bmRlZmluZWRgLCBpbmRpY2F0aW5nIHRoYXQgbm8gdHlwZSBub2RlIHdhcyB2aXNpdGVkIHRoYXQgY291bGQgbm90IGJlIGVtaXR0ZWQuXG4gIGZ1bmN0aW9uIHZpc2l0Tm9kZShub2RlOiB0cy5Ob2RlKTogSU5FTElHSUJMRXx1bmRlZmluZWQge1xuICAgIC8vIEVtaXR0aW5nIGEgdHlwZSByZWZlcmVuY2Ugbm9kZSBpbiBhIGRpZmZlcmVudCBjb250ZXh0IHJlcXVpcmVzIHRoYXQgYW4gaW1wb3J0IGZvciB0aGUgdHlwZVxuICAgIC8vIGNhbiBiZSBjcmVhdGVkLiBJZiBhIHR5cGUgcmVmZXJlbmNlIG5vZGUgY2Fubm90IGJlIGVtaXR0ZWQsIGBJTkVMSUdJQkxFYCBpcyByZXR1cm5lZCB0byBzdG9wXG4gICAgLy8gdGhlIHdhbGsuXG4gICAgaWYgKHRzLmlzVHlwZVJlZmVyZW5jZU5vZGUobm9kZSkgJiYgIWNhbkVtaXRUeXBlUmVmZXJlbmNlKG5vZGUpKSB7XG4gICAgICByZXR1cm4gSU5FTElHSUJMRTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRzLmZvckVhY2hDaGlsZChub2RlLCB2aXNpdE5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbkVtaXRUeXBlUmVmZXJlbmNlKHR5cGU6IHRzLlR5cGVSZWZlcmVuY2VOb2RlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVmZXJlbmNlID0gcmVzb2x2ZXIodHlwZSk7XG5cbiAgICAvLyBJZiB0aGUgdHlwZSBjb3VsZCBub3QgYmUgcmVzb2x2ZWQsIGl0IGNhbiBub3QgYmUgZW1pdHRlZC5cbiAgICBpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHR5cGUgaXMgYSByZWZlcmVuY2UsIGNvbnNpZGVyIHRoZSB0eXBlIHRvIGJlIGVsaWdpYmxlIGZvciBlbWl0dGluZy5cbiAgICBpZiAocmVmZXJlbmNlIGluc3RhbmNlb2YgUmVmZXJlbmNlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBUaGUgdHlwZSBjYW4gYmUgZW1pdHRlZCBpZiBlaXRoZXIgaXQgZG9lcyBub3QgaGF2ZSBhbnkgdHlwZSBhcmd1bWVudHMsIG9yIGFsbCBvZiB0aGVtIGNhbiBiZVxuICAgIC8vIGVtaXR0ZWQuXG4gICAgcmV0dXJuIHR5cGUudHlwZUFyZ3VtZW50cyA9PT0gdW5kZWZpbmVkIHx8IHR5cGUudHlwZUFyZ3VtZW50cy5ldmVyeShjYW5FbWl0VHlwZVdvcmtlcik7XG4gIH1cbn1cblxuLyoqXG4gKiBHaXZlbiBhIGB0cy5UeXBlTm9kZWAsIHRoaXMgY2xhc3MgZGVyaXZlcyBhbiBlcXVpdmFsZW50IGB0cy5UeXBlTm9kZWAgdGhhdCBoYXMgYmVlbiBlbWl0dGVkIGludG9cbiAqIGEgZGlmZmVyZW50IGNvbnRleHQuXG4gKlxuICogRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgY29kZTpcbiAqXG4gKiBgYGBcbiAqIGltcG9ydCB7TmdJdGVyYWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKlxuICogY2xhc3MgTmdGb3JPZjxULCBVIGV4dGVuZHMgTmdJdGVyYWJsZTxUPj4ge31cbiAqIGBgYFxuICpcbiAqIEhlcmUsIHRoZSBnZW5lcmljIHR5cGUgcGFyYW1ldGVycyBgVGAgYW5kIGBVYCBjYW4gYmUgZW1pdHRlZCBpbnRvIGEgZGlmZmVyZW50IGNvbnRleHQsIGFzIHRoZVxuICogdHlwZSByZWZlcmVuY2UgdG8gYE5nSXRlcmFibGVgIG9yaWdpbmF0ZXMgZnJvbSBhbiBhYnNvbHV0ZSBtb2R1bGUgaW1wb3J0IHNvIHRoYXQgaXQgY2FuIGJlXG4gKiBlbWl0dGVkIGFueXdoZXJlLCB1c2luZyB0aGF0IHNhbWUgbW9kdWxlIGltcG9ydC4gVGhlIHByb2Nlc3Mgb2YgZW1pdHRpbmcgdHJhbnNsYXRlcyB0aGVcbiAqIGBOZ0l0ZXJhYmxlYCB0eXBlIHJlZmVyZW5jZSB0byBhIHR5cGUgcmVmZXJlbmNlIHRoYXQgaXMgdmFsaWQgaW4gdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXNcbiAqIGVtaXR0ZWQsIGZvciBleGFtcGxlOlxuICpcbiAqIGBgYFxuICogaW1wb3J0ICogYXMgaTAgZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKiBpbXBvcnQgKiBhcyBpMSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuICpcbiAqIGNvbnN0IF9jdG9yMTogPFQsIFUgZXh0ZW5kcyBpMC5OZ0l0ZXJhYmxlPFQ+PihvOiBQaWNrPGkxLk5nRm9yT2Y8VCwgVT4sICduZ0Zvck9mJz4pOlxuICogaTEuTmdGb3JPZjxULCBVPjtcbiAqIGBgYFxuICpcbiAqIE5vdGljZSBob3cgdGhlIHR5cGUgcmVmZXJlbmNlIGZvciBgTmdJdGVyYWJsZWAgaGFzIGJlZW4gdHJhbnNsYXRlZCBpbnRvIGEgcXVhbGlmaWVkIG5hbWUsXG4gKiByZWZlcnJpbmcgdG8gdGhlIG5hbWVzcGFjZSBpbXBvcnQgdGhhdCB3YXMgY3JlYXRlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFR5cGVFbWl0dGVyIHtcbiAgLyoqXG4gICAqIFJlc29sdmVyIGZ1bmN0aW9uIHRoYXQgY29tcHV0ZXMgYSBgUmVmZXJlbmNlYCBjb3JyZXNwb25kaW5nIHdpdGggYSBgdHMuVHlwZVJlZmVyZW5jZU5vZGVgLlxuICAgKi9cbiAgcHJpdmF0ZSByZXNvbHZlcjogVHlwZVJlZmVyZW5jZVJlc29sdmVyO1xuXG4gIC8qKlxuICAgKiBHaXZlbiBhIGBSZWZlcmVuY2VgLCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgYWN0dWFsIGVtaXR0aW5nIHdvcmsuIEl0IHNob3VsZFxuICAgKiBwcm9kdWNlIGEgYHRzLlR5cGVOb2RlYCB0aGF0IGlzIHZhbGlkIHdpdGhpbiB0aGUgZGVzaXJlZCBjb250ZXh0LlxuICAgKi9cbiAgcHJpdmF0ZSBlbWl0UmVmZXJlbmNlOiAocmVmOiBSZWZlcmVuY2UpID0+IHRzLlR5cGVOb2RlO1xuXG4gIGNvbnN0cnVjdG9yKHJlc29sdmVyOiBUeXBlUmVmZXJlbmNlUmVzb2x2ZXIsIGVtaXRSZWZlcmVuY2U6IChyZWY6IFJlZmVyZW5jZSkgPT4gdHMuVHlwZU5vZGUpIHtcbiAgICB0aGlzLnJlc29sdmVyID0gcmVzb2x2ZXI7XG4gICAgdGhpcy5lbWl0UmVmZXJlbmNlID0gZW1pdFJlZmVyZW5jZTtcbiAgfVxuXG4gIGVtaXRUeXBlKHR5cGU6IHRzLlR5cGVOb2RlKTogdHMuVHlwZU5vZGUge1xuICAgIGNvbnN0IHR5cGVSZWZlcmVuY2VUcmFuc2Zvcm1lcjogdHMuVHJhbnNmb3JtZXJGYWN0b3J5PHRzLlR5cGVOb2RlPiA9IGNvbnRleHQgPT4ge1xuICAgICAgY29uc3QgdmlzaXROb2RlID0gKG5vZGU6IHRzLk5vZGUpOiB0cy5Ob2RlID0+IHtcbiAgICAgICAgaWYgKHRzLmlzVHlwZVJlZmVyZW5jZU5vZGUobm9kZSkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5lbWl0VHlwZVJlZmVyZW5jZShub2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdHMudmlzaXRFYWNoQ2hpbGQobm9kZSwgdmlzaXROb2RlLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiBub2RlID0+IHRzLnZpc2l0Tm9kZShub2RlLCB2aXNpdE5vZGUpO1xuICAgIH07XG4gICAgcmV0dXJuIHRzLnRyYW5zZm9ybSh0eXBlLCBbdHlwZVJlZmVyZW5jZVRyYW5zZm9ybWVyXSkudHJhbnNmb3JtZWRbMF07XG4gIH1cblxuICBwcml2YXRlIGVtaXRUeXBlUmVmZXJlbmNlKHR5cGU6IHRzLlR5cGVSZWZlcmVuY2VOb2RlKTogdHMuVHlwZU5vZGUge1xuICAgIC8vIERldGVybWluZSB0aGUgcmVmZXJlbmNlIHRoYXQgdGhlIHR5cGUgY29ycmVzcG9uZHMgd2l0aC5cbiAgICBjb25zdCByZWZlcmVuY2UgPSB0aGlzLnJlc29sdmVyKHR5cGUpO1xuICAgIGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGVtaXQgYW4gdW5yZXNvbHZlZCByZWZlcmVuY2UnKTtcbiAgICB9XG5cbiAgICAvLyBFbWl0IHRoZSB0eXBlIGFyZ3VtZW50cywgaWYgYW55LlxuICAgIGxldCB0eXBlQXJndW1lbnRzOiB0cy5Ob2RlQXJyYXk8dHMuVHlwZU5vZGU+fHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAodHlwZS50eXBlQXJndW1lbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHR5cGVBcmd1bWVudHMgPSB0cy5jcmVhdGVOb2RlQXJyYXkodHlwZS50eXBlQXJndW1lbnRzLm1hcCh0eXBlQXJnID0+IHRoaXMuZW1pdFR5cGUodHlwZUFyZykpKTtcbiAgICB9XG5cbiAgICAvLyBFbWl0IHRoZSB0eXBlIG5hbWUuXG4gICAgbGV0IHR5cGVOYW1lID0gdHlwZS50eXBlTmFtZTtcbiAgICBpZiAocmVmZXJlbmNlIGluc3RhbmNlb2YgUmVmZXJlbmNlKSB7XG4gICAgICBjb25zdCBlbWl0dGVkVHlwZSA9IHRoaXMuZW1pdFJlZmVyZW5jZShyZWZlcmVuY2UpO1xuICAgICAgaWYgKCF0cy5pc1R5cGVSZWZlcmVuY2VOb2RlKGVtaXR0ZWRUeXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIFR5cGVSZWZlcmVuY2VOb2RlIGZvciBlbWl0dGVkIHJlZmVyZW5jZSwgZ290ICR7XG4gICAgICAgICAgICB0cy5TeW50YXhLaW5kW2VtaXR0ZWRUeXBlLmtpbmRdfWApO1xuICAgICAgfVxuXG4gICAgICB0eXBlTmFtZSA9IGVtaXR0ZWRUeXBlLnR5cGVOYW1lO1xuICAgIH1cblxuICAgIHJldHVybiB0cy51cGRhdGVUeXBlUmVmZXJlbmNlTm9kZSh0eXBlLCB0eXBlTmFtZSwgdHlwZUFyZ3VtZW50cyk7XG4gIH1cbn1cbiJdfQ==
@@ -1,93 +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 { Reference } from '../../imports';
10
- import { isNamedClassDeclaration } from '../../reflection';
11
- import { canEmitType, TypeEmitter } from './type_emitter';
12
- /**
13
- * See `TypeEmitter` for more information on the emitting process.
14
- */
15
- export class TypeParameterEmitter {
16
- constructor(typeParameters, reflector) {
17
- this.typeParameters = typeParameters;
18
- this.reflector = reflector;
19
- }
20
- /**
21
- * Determines whether the type parameters can be emitted. If this returns true, then a call to
22
- * `emit` is known to succeed. Vice versa, if false is returned then `emit` should not be
23
- * called, as it would fail.
24
- */
25
- canEmit() {
26
- if (this.typeParameters === undefined) {
27
- return true;
28
- }
29
- return this.typeParameters.every(typeParam => {
30
- return this.canEmitType(typeParam.constraint) && this.canEmitType(typeParam.default);
31
- });
32
- }
33
- canEmitType(type) {
34
- if (type === undefined) {
35
- return true;
36
- }
37
- return canEmitType(type, typeReference => this.resolveTypeReference(typeReference));
38
- }
39
- /**
40
- * Emits the type parameters using the provided emitter function for `Reference`s.
41
- */
42
- emit(emitReference) {
43
- if (this.typeParameters === undefined) {
44
- return undefined;
45
- }
46
- const emitter = new TypeEmitter(type => this.resolveTypeReference(type), emitReference);
47
- return this.typeParameters.map(typeParam => {
48
- const constraint = typeParam.constraint !== undefined ? emitter.emitType(typeParam.constraint) : undefined;
49
- const defaultType = typeParam.default !== undefined ? emitter.emitType(typeParam.default) : undefined;
50
- return ts.updateTypeParameterDeclaration(
51
- /* node */ typeParam,
52
- /* name */ typeParam.name,
53
- /* constraint */ constraint,
54
- /* defaultType */ defaultType);
55
- });
56
- }
57
- resolveTypeReference(type) {
58
- const target = ts.isIdentifier(type.typeName) ? type.typeName : type.typeName.right;
59
- const declaration = this.reflector.getDeclarationOfIdentifier(target);
60
- // If no declaration could be resolved or does not have a `ts.Declaration`, the type cannot be
61
- // resolved.
62
- if (declaration === null || declaration.node === null) {
63
- return null;
64
- }
65
- // If the declaration corresponds with a local type parameter, the type reference can be used
66
- // as is.
67
- if (this.isLocalTypeParameter(declaration.node)) {
68
- return type;
69
- }
70
- let owningModule = null;
71
- if (declaration.viaModule !== null) {
72
- owningModule = {
73
- specifier: declaration.viaModule,
74
- resolutionContext: type.getSourceFile().fileName,
75
- };
76
- }
77
- // If no owning module is known, the reference needs to be exported to be able to emit an import
78
- // statement for it. If the declaration is not exported, null is returned to prevent emit.
79
- if (owningModule === null && !this.isStaticallyExported(declaration.node)) {
80
- return null;
81
- }
82
- return new Reference(declaration.node, owningModule);
83
- }
84
- isStaticallyExported(decl) {
85
- return isNamedClassDeclaration(decl) && this.reflector.isStaticallyExported(decl);
86
- }
87
- isLocalTypeParameter(decl) {
88
- // Checking for local type parameters only occurs during resolution of type parameters, so it is
89
- // guaranteed that type parameters are present.
90
- return this.typeParameters.some(param => param === decl);
91
- }
92
- }
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZV9wYXJhbWV0ZXJfZW1pdHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvdHlwZWNoZWNrL3NyYy90eXBlX3BhcmFtZXRlcl9lbWl0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILE9BQU8sS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpDLE9BQU8sRUFBZSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFrQix1QkFBdUIsRUFBaUIsTUFBTSxrQkFBa0IsQ0FBQztBQUUxRixPQUFPLEVBQUMsV0FBVyxFQUF5QixXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUcvRTs7R0FFRztBQUNILE1BQU0sT0FBTyxvQkFBb0I7SUFDL0IsWUFDWSxjQUFtRSxFQUNuRSxTQUF5QjtRQUR6QixtQkFBYyxHQUFkLGNBQWMsQ0FBcUQ7UUFDbkUsY0FBUyxHQUFULFNBQVMsQ0FBZ0I7SUFBRyxDQUFDO0lBRXpDOzs7O09BSUc7SUFDSCxPQUFPO1FBQ0wsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLFNBQVMsRUFBRTtZQUNyQyxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUMzQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFdBQVcsQ0FBQyxJQUEyQjtRQUM3QyxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDdEIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE9BQU8sV0FBVyxDQUFDLElBQUks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LEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQzVELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7T3duaW5nTW9kdWxlLCBSZWZlcmVuY2V9IGZyb20gJy4uLy4uL2ltcG9ydHMnO1xuaW1wb3J0IHtEZWNsYXJhdGlvbk5vZGUsIGlzTmFtZWRDbGFzc0RlY2xhcmF0aW9uLCBSZWZsZWN0aW9uSG9zdH0gZnJvbSAnLi4vLi4vcmVmbGVjdGlvbic7XG5cbmltcG9ydCB7Y2FuRW1pdFR5cGUsIFJlc29sdmVkVHlwZVJlZmVyZW5jZSwgVHlwZUVtaXR0ZXJ9IGZyb20gJy4vdHlwZV9lbWl0dGVyJztcblxuXG4vKipcbiAqIFNlZSBgVHlwZUVtaXR0ZXJgIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBlbWl0dGluZyBwcm9jZXNzLlxuICovXG5leHBvcnQgY2xhc3MgVHlwZVBhcmFtZXRlckVtaXR0ZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgdHlwZVBhcmFtZXRlcnM6IHRzLk5vZGVBcnJheTx0cy5UeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24+fHVuZGVmaW5lZCxcbiAgICAgIHByaXZhdGUgcmVmbGVjdG9yOiBSZWZsZWN0aW9uSG9zdCkge31cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSB0eXBlIHBhcmFtZXRlcnMgY2FuIGJlIGVtaXR0ZWQuIElmIHRoaXMgcmV0dXJucyB0cnVlLCB0aGVuIGEgY2FsbCB0b1xuICAgKiBgZW1pdGAgaXMga25vd24gdG8gc3VjY2VlZC4gVmljZSB2ZXJzYSwgaWYgZmFsc2UgaXMgcmV0dXJuZWQgdGhlbiBgZW1pdGAgc2hvdWxkIG5vdCBiZVxuICAgKiBjYWxsZWQsIGFzIGl0IHdvdWxkIGZhaWwuXG4gICAqL1xuICBjYW5FbWl0KCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnR5cGVQYXJhbWV0ZXJzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnR5cGVQYXJhbWV0ZXJzLmV2ZXJ5KHR5cGVQYXJhbSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jYW5FbWl0VHlwZSh0eXBlUGFyYW0uY29uc3RyYWludCkgJiYgdGhpcy5jYW5FbWl0VHlwZSh0eXBlUGFyYW0uZGVmYXVsdCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNhbkVtaXRUeXBlKHR5cGU6IHRzLlR5cGVOb2RlfHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBjYW5FbWl0VHlwZSh0eXBlLCB0eXBlUmVmZXJlbmNlID0+IHRoaXMucmVzb2x2ZVR5cGVSZWZlcmVuY2UodHlwZVJlZmVyZW5jZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIHRoZSB0eXBlIHBhcmFtZXRlcnMgdXNpbmcgdGhlIHByb3ZpZGVkIGVtaXR0ZXIgZnVuY3Rpb24gZm9yIGBSZWZlcmVuY2Vgcy5cbiAgICovXG4gIGVtaXQoZW1pdFJlZmVyZW5jZTogKHJlZjogUmVmZXJlbmNlKSA9PiB0cy5UeXBlTm9kZSk6IHRzLlR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbltdfHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMudHlwZVBhcmFtZXRlcnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBlbWl0dGVyID0gbmV3IFR5cGVFbWl0dGVyKHR5cGUgPT4gdGhpcy5yZXNvbHZlVHlwZVJlZmVyZW5jZSh0eXBlKSwgZW1pdFJlZmVyZW5jZSk7XG5cbiAgICByZXR1cm4gdGhpcy50eXBlUGFyYW1ldGVycy5tYXAodHlwZVBhcmFtID0+IHtcbiAgICAgIGNvbnN0IGNvbnN0cmFpbnQgPVxuICAgICAgICAgIHR5cGVQYXJhbS5jb25zdHJhaW50ICE9PSB1bmRlZmluZWQgPyBlbWl0dGVyLmVtaXRUeXBlKHR5cGVQYXJhbS5jb25zdHJhaW50KSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGRlZmF1bHRUeXBlID1cbiAgICAgICAgICB0eXBlUGFyYW0uZGVmYXVsdCAhPT0gdW5kZWZpbmVkID8gZW1pdHRlci5lbWl0VHlwZSh0eXBlUGFyYW0uZGVmYXVsdCkgOiB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiB0cy51cGRhdGVUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oXG4gICAgICAgICAgLyogbm9kZSAqLyB0eXBlUGFyYW0sXG4gICAgICAgICAgLyogbmFtZSAqLyB0eXBlUGFyYW0ubmFtZSxcbiAgICAgICAgICAvKiBjb25zdHJhaW50ICovIGNvbnN0cmFpbnQsXG4gICAgICAgICAgLyogZGVmYXVsdFR5cGUgKi8gZGVmYXVsdFR5cGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlVHlwZVJlZmVyZW5jZSh0eXBlOiB0cy5UeXBlUmVmZXJlbmNlTm9kZSk6IFJlc29sdmVkVHlwZVJlZmVyZW5jZSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gdHMuaXNJZGVudGlmaWVyKHR5cGUudHlwZU5hbWUpID8gdHlwZS50eXBlTmFtZSA6IHR5cGUudHlwZU5hbWUucmlnaHQ7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSB0aGlzLnJlZmxlY3Rvci5nZXREZWNsYXJhdGlvbk9mSWRlbnRpZmllcih0YXJnZXQpO1xuXG4gICAgLy8gSWYgbm8gZGVjbGFyYXRpb24gY291bGQgYmUgcmVzb2x2ZWQgb3IgZG9lcyBub3QgaGF2ZSBhIGB0cy5EZWNsYXJhdGlvbmAsIHRoZSB0eXBlIGNhbm5vdCBiZVxuICAgIC8vIHJlc29sdmVkLlxuICAgIGlmIChkZWNsYXJhdGlvbiA9PT0gbnVsbCB8fCBkZWNsYXJhdGlvbi5ub2RlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgZGVjbGFyYXRpb24gY29ycmVzcG9uZHMgd2l0aCBhIGxvY2FsIHR5cGUgcGFyYW1ldGVyLCB0aGUgdHlwZSByZWZlcmVuY2UgY2FuIGJlIHVzZWRcbiAgICAvLyBhcyBpcy5cbiAgICBpZiAodGhpcy5pc0xvY2FsVHlwZVBhcmFtZXRlcihkZWNsYXJhdGlvbi5ub2RlKSkge1xuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuXG4gICAgbGV0IG93bmluZ01vZHVsZTogT3duaW5nTW9kdWxlfG51bGwgPSBudWxsO1xuICAgIGlmIChkZWNsYXJhdGlvbi52aWFNb2R1bGUgIT09IG51bGwpIHtcbiAgICAgIG93bmluZ01vZHVsZSA9IHtcbiAgICAgICAgc3BlY2lmaWVyOiBkZWNsYXJhdGlvbi52aWFNb2R1bGUsXG4gICAgICAgIHJlc29sdXRpb25Db250ZXh0OiB0eXBlLmdldFNvdXJjZUZpbGUoKS5maWxlTmFtZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSWYgbm8gb3duaW5nIG1vZHVsZSBpcyBrbm93biwgdGhlIHJlZmVyZW5jZSBuZWVkcyB0byBiZSBleHBvcnRlZCB0byBiZSBhYmxlIHRvIGVtaXQgYW4gaW1wb3J0XG4gICAgLy8gc3RhdGVtZW50IGZvciBpdC4gSWYgdGhlIGRlY2xhcmF0aW9uIGlzIG5vdCBleHBvcnRlZCwgbnVsbCBpcyByZXR1cm5lZCB0byBwcmV2ZW50IGVtaXQuXG4gICAgaWYgKG93bmluZ01vZHVsZSA9PT0gbnVsbCAmJiAhdGhpcy5pc1N0YXRpY2FsbHlFeHBvcnRlZChkZWNsYXJhdGlvbi5ub2RlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSZWZlcmVuY2UoZGVjbGFyYXRpb24ubm9kZSwgb3duaW5nTW9kdWxlKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNTdGF0aWNhbGx5RXhwb3J0ZWQoZGVjbDogRGVjbGFyYXRpb25Ob2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTmFtZWRDbGFzc0RlY2xhcmF0aW9uKGRlY2wpICYmIHRoaXMucmVmbGVjdG9yLmlzU3RhdGljYWxseUV4cG9ydGVkKGRlY2wpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0xvY2FsVHlwZVBhcmFtZXRlcihkZWNsOiBEZWNsYXJhdGlvbk5vZGUpOiBib29sZWFuIHtcbiAgICAvLyBDaGVja2luZyBmb3IgbG9jYWwgdHlwZSBwYXJhbWV0ZXJzIG9ubHkgb2NjdXJzIGR1cmluZyByZXNvbHV0aW9uIG9mIHR5cGUgcGFyYW1ldGVycywgc28gaXQgaXNcbiAgICAvLyBndWFyYW50ZWVkIHRoYXQgdHlwZSBwYXJhbWV0ZXJzIGFyZSBwcmVzZW50LlxuICAgIHJldHVybiB0aGlzLnR5cGVQYXJhbWV0ZXJzIS5zb21lKHBhcmFtID0+IHBhcmFtID09PSBkZWNsKTtcbiAgfVxufVxuIl19
File without changes
@@ -1,18 +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 { dirname, relative, resolve, toRelativeImport } from '../../file_system';
9
- import { stripExtension } from '../../file_system/src/util';
10
- export function relativePathBetween(from, to) {
11
- const relativePath = stripExtension(relative(dirname(resolve(from)), resolve(to)));
12
- return relativePath !== '' ? toRelativeImport(relativePath) : null;
13
- }
14
- export function normalizeSeparators(path) {
15
- // TODO: normalize path only for OS that need it.
16
- return path.replace(/\\/g, '/');
17
- }
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvdXRpbC9zcmMvcGF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFDSCxPQUFPLEVBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUMvRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFFMUQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLElBQVksRUFBRSxFQUFVO0lBQzFELE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkYsT0FBTyxZQUFZLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3JFLENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsSUFBWTtJQUM5QyxpREFBaUQ7SUFDakQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNsQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQge2Rpcm5hbWUsIHJlbGF0aXZlLCByZXNvbHZlLCB0b1JlbGF0aXZlSW1wb3J0fSBmcm9tICcuLi8uLi9maWxlX3N5c3RlbSc7XG5pbXBvcnQge3N0cmlwRXh0ZW5zaW9ufSBmcm9tICcuLi8uLi9maWxlX3N5c3RlbS9zcmMvdXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWxhdGl2ZVBhdGhCZXR3ZWVuKGZyb206IHN0cmluZywgdG86IHN0cmluZyk6IHN0cmluZ3xudWxsIHtcbiAgY29uc3QgcmVsYXRpdmVQYXRoID0gc3RyaXBFeHRlbnNpb24ocmVsYXRpdmUoZGlybmFtZShyZXNvbHZlKGZyb20pKSwgcmVzb2x2ZSh0bykpKTtcbiAgcmV0dXJuIHJlbGF0aXZlUGF0aCAhPT0gJycgPyB0b1JlbGF0aXZlSW1wb3J0KHJlbGF0aXZlUGF0aCkgOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplU2VwYXJhdG9ycyhwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBUT0RPOiBub3JtYWxpemUgcGF0aCBvbmx5IGZvciBPUyB0aGF0IG5lZWQgaXQuXG4gIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbn1cbiJdfQ==