@angular/compiler-cli 12.1.0-next.5 → 12.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (476) hide show
  1. package/linker/src/file_linker/emit_scopes/iife_emit_scope.js +1 -1
  2. package/linker/src/file_linker/partial_linkers/partial_component_linker_1.js +2 -3
  3. package/linker/src/file_linker/partial_linkers/partial_linker_selector.js +2 -2
  4. package/ngcc/src/dependencies/commonjs_dependency_host.js +1 -1
  5. package/ngcc/src/dependencies/dts_dependency_host.js +1 -1
  6. package/ngcc/src/dependencies/esm_dependency_host.js +1 -1
  7. package/ngcc/src/dependencies/umd_dependency_host.js +1 -1
  8. package/ngcc/src/entry_point_finder/program_based_entry_point_finder.js +1 -1
  9. package/ngcc/src/entry_point_finder/targeted_entry_point_finder.js +1 -1
  10. package/ngcc/src/execution/tasks/queues/parallel_task_queue.js +1 -1
  11. package/ngcc/src/execution/tasks/queues/serial_task_queue.js +1 -1
  12. package/ngcc/src/host/commonjs_host.js +1 -1
  13. package/ngcc/src/host/esm2015_host.js +1 -1
  14. package/ngcc/src/host/esm5_host.js +1 -1
  15. package/ngcc/src/host/umd_host.js +1 -1
  16. package/ngcc/src/packages/build_marker.d.ts +1 -1
  17. package/ngcc/src/packages/build_marker.js +1 -1
  18. package/ngcc/src/packages/configuration.d.ts +7 -0
  19. package/ngcc/src/packages/configuration.js +8 -3
  20. package/ngcc/src/packages/entry_point_manifest.js +2 -2
  21. package/ngcc/src/packages/ngcc_compiler_host.js +1 -1
  22. package/ngcc/src/rendering/commonjs_rendering_formatter.js +1 -1
  23. package/ngcc/src/rendering/esm5_rendering_formatter.js +1 -1
  24. package/ngcc/src/rendering/umd_rendering_formatter.js +1 -1
  25. package/ngcc/src/writing/new_entry_point_file_writer.js +1 -1
  26. package/package.json +2 -2
  27. package/src/ngtsc/annotations/src/component.d.ts +2 -0
  28. package/src/ngtsc/annotations/src/component.js +6 -2
  29. package/src/ngtsc/annotations/src/directive.js +1 -1
  30. package/src/ngtsc/annotations/src/ng_module.js +1 -1
  31. package/src/ngtsc/annotations/src/pipe.js +1 -1
  32. package/src/ngtsc/core/api/src/public_options.d.ts +12 -0
  33. package/src/ngtsc/core/api/src/public_options.js +1 -1
  34. package/src/ngtsc/core/src/compiler.d.ts +5 -0
  35. package/src/ngtsc/core/src/compiler.js +10 -1
  36. package/src/ngtsc/file_system/testing/src/mock_file_system_native.js +1 -1
  37. package/src/ngtsc/file_system/testing/src/mock_file_system_posix.js +1 -1
  38. package/src/ngtsc/file_system/testing/src/mock_file_system_windows.js +1 -1
  39. package/src/ngtsc/incremental/semantic_graph/src/graph.js +1 -1
  40. package/src/ngtsc/incremental/src/incremental.js +36 -6
  41. package/src/ngtsc/incremental/src/state.d.ts +5 -3
  42. package/src/ngtsc/incremental/src/state.js +1 -1
  43. package/src/ngtsc/indexer/src/template.js +1 -1
  44. package/src/ngtsc/metadata/src/dts.js +2 -3
  45. package/src/ngtsc/metadata/src/inheritance.js +2 -7
  46. package/src/ngtsc/partial_evaluator/src/builtin.js +1 -1
  47. package/src/ngtsc/partial_evaluator/src/diagnostics.js +4 -1
  48. package/src/ngtsc/partial_evaluator/src/dynamic.d.ts +19 -1
  49. package/src/ngtsc/partial_evaluator/src/dynamic.js +12 -4
  50. package/src/ngtsc/partial_evaluator/src/interpreter.d.ts +2 -0
  51. package/src/ngtsc/partial_evaluator/src/interpreter.js +48 -1
  52. package/src/ngtsc/partial_evaluator/src/ts_helpers.js +1 -1
  53. package/src/ngtsc/program.d.ts +1 -0
  54. package/src/ngtsc/program.js +26 -2
  55. package/src/ngtsc/program_driver/src/api.d.ts +20 -1
  56. package/src/ngtsc/program_driver/src/api.js +3 -2
  57. package/src/ngtsc/program_driver/src/ts_create_program_driver.d.ts +2 -2
  58. package/src/ngtsc/program_driver/src/ts_create_program_driver.js +7 -3
  59. package/src/ngtsc/reflection/src/typescript.js +4 -1
  60. package/src/ngtsc/transform/src/api.d.ts +6 -0
  61. package/src/ngtsc/transform/src/api.js +1 -1
  62. package/src/ngtsc/transform/src/compilation.d.ts +3 -0
  63. package/src/ngtsc/transform/src/compilation.js +124 -53
  64. package/src/ngtsc/transform/src/transform.js +1 -1
  65. package/src/ngtsc/typecheck/src/context.d.ts +2 -1
  66. package/src/ngtsc/typecheck/src/context.js +11 -3
  67. package/src/ngtsc/typecheck/src/template_semantics.js +1 -1
  68. package/src/ngtsc/typecheck/src/template_symbol_builder.js +36 -4
  69. package/src/ngtsc/typecheck/src/type_check_block.js +2 -2
  70. package/src/ngtsc/typecheck/src/type_check_file.js +1 -1
  71. package/src/ngtsc/typecheck/src/type_emitter.d.ts +2 -1
  72. package/src/ngtsc/typecheck/src/type_emitter.js +54 -48
  73. package/src/ngtsc/typecheck/src/type_parameter_emitter.d.ts +2 -0
  74. package/src/ngtsc/typecheck/src/type_parameter_emitter.js +21 -7
  75. package/src/ngtsc/util/src/visitor.d.ts +1 -1
  76. package/src/ngtsc/util/src/visitor.js +1 -8
  77. package/src/ngtsc/xi18n/index.d.ts +9 -0
  78. package/src/ngtsc/xi18n/index.js +22 -0
  79. package/src/ngtsc/xi18n/src/context.d.ts +26 -0
  80. package/src/ngtsc/xi18n/src/context.js +20 -0
  81. package/src/transformers/api.d.ts +0 -3
  82. package/src/transformers/api.js +1 -1
  83. package/src/transformers/i18n.d.ts +14 -0
  84. package/src/transformers/i18n.js +76 -0
  85. package/src/transformers/program.d.ts +0 -4
  86. package/src/transformers/program.js +5 -56
  87. package/src/version.js +1 -1
  88. package/compiler-cli.externs.js +0 -0
  89. package/index.mjs +0 -20
  90. package/linker/babel/babel.externs.js +0 -0
  91. package/linker/babel/index.mjs +0 -11
  92. package/linker/babel/src/ast/babel_ast_factory.mjs +0 -137
  93. package/linker/babel/src/ast/babel_ast_host.mjs +0 -154
  94. package/linker/babel/src/babel_declaration_scope.mjs +0 -52
  95. package/linker/babel/src/babel_plugin.mjs +0 -23
  96. package/linker/babel/src/es2015_linker_plugin.mjs +0 -158
  97. package/linker/babel/src/linker_plugin_options.mjs +0 -2
  98. package/linker/index.mjs +0 -7
  99. package/linker/linker.externs.js +0 -0
  100. package/linker/src/ast/ast_host.mjs +0 -9
  101. package/linker/src/ast/ast_value.mjs +0 -256
  102. package/linker/src/ast/typescript/typescript_ast_host.mjs +0 -156
  103. package/linker/src/ast/utils.mjs +0 -17
  104. package/linker/src/fatal_linker_error.mjs +0 -30
  105. package/linker/src/file_linker/declaration_scope.mjs +0 -9
  106. package/linker/src/file_linker/emit_scopes/emit_scope.mjs +0 -41
  107. package/linker/src/file_linker/emit_scopes/iife_emit_scope.mjs +0 -33
  108. package/linker/src/file_linker/file_linker.mjs +0 -70
  109. package/linker/src/file_linker/get_source_file.mjs +0 -28
  110. package/linker/src/file_linker/linker_environment.mjs +0 -23
  111. package/linker/src/file_linker/linker_options.mjs +0 -16
  112. package/linker/src/file_linker/needs_linking.mjs +0 -27
  113. package/linker/src/file_linker/partial_linkers/partial_class_metadata_linker_1.mjs +0 -29
  114. package/linker/src/file_linker/partial_linkers/partial_component_linker_1.mjs +0 -194
  115. package/linker/src/file_linker/partial_linkers/partial_directive_linker_1.mjs +0 -137
  116. package/linker/src/file_linker/partial_linkers/partial_factory_linker_1.mjs +0 -52
  117. package/linker/src/file_linker/partial_linkers/partial_injectable_linker_1.mjs +0 -56
  118. package/linker/src/file_linker/partial_linkers/partial_injector_linker_1.mjs +0 -38
  119. package/linker/src/file_linker/partial_linkers/partial_linker.mjs +0 -2
  120. package/linker/src/file_linker/partial_linkers/partial_linker_selector.mjs +0 -166
  121. package/linker/src/file_linker/partial_linkers/partial_ng_module_linker_1.mjs +0 -110
  122. package/linker/src/file_linker/partial_linkers/partial_pipe_linker_1.mjs +0 -42
  123. package/linker/src/file_linker/partial_linkers/util.mjs +0 -78
  124. package/linker/src/file_linker/translator.mjs +0 -23
  125. package/linker/src/linker_import_generator.mjs +0 -28
  126. package/ngcc/index.mjs +0 -16
  127. package/ngcc/main-ivy-ngcc.mjs +0 -12
  128. package/ngcc/main-ngcc.mjs +0 -32
  129. package/ngcc/ngcc.externs.js +0 -0
  130. package/ngcc/src/analysis/decoration_analyzer.mjs +0 -215
  131. package/ngcc/src/analysis/migration_host.mjs +0 -80
  132. package/ngcc/src/analysis/module_with_providers_analyzer.mjs +0 -178
  133. package/ngcc/src/analysis/ngcc_references_registry.mjs +0 -45
  134. package/ngcc/src/analysis/ngcc_trait_compiler.mjs +0 -70
  135. package/ngcc/src/analysis/private_declarations_analyzer.mjs +0 -47
  136. package/ngcc/src/analysis/switch_marker_analyzer.mjs +0 -34
  137. package/ngcc/src/analysis/types.mjs +0 -2
  138. package/ngcc/src/analysis/util.mjs +0 -19
  139. package/ngcc/src/command_line_options.mjs +0 -142
  140. package/ngcc/src/constants.mjs +0 -10
  141. package/ngcc/src/dependencies/commonjs_dependency_host.mjs +0 -87
  142. package/ngcc/src/dependencies/dependency_host.mjs +0 -102
  143. package/ngcc/src/dependencies/dependency_resolver.mjs +0 -151
  144. package/ngcc/src/dependencies/dts_dependency_host.mjs +0 -18
  145. package/ngcc/src/dependencies/esm_dependency_host.mjs +0 -286
  146. package/ngcc/src/dependencies/module_resolver.mjs +0 -233
  147. package/ngcc/src/dependencies/umd_dependency_host.mjs +0 -33
  148. package/ngcc/src/entry_point_finder/directory_walker_entry_point_finder.mjs +0 -42
  149. package/ngcc/src/entry_point_finder/entry_point_collector.mjs +0 -120
  150. package/ngcc/src/entry_point_finder/interface.mjs +0 -2
  151. package/ngcc/src/entry_point_finder/program_based_entry_point_finder.mjs +0 -91
  152. package/ngcc/src/entry_point_finder/targeted_entry_point_finder.mjs +0 -216
  153. package/ngcc/src/entry_point_finder/tracing_entry_point_finder.mjs +0 -63
  154. package/ngcc/src/entry_point_finder/utils.mjs +0 -176
  155. package/ngcc/src/execution/analyze_entry_points.mjs +0 -130
  156. package/ngcc/src/execution/api.mjs +0 -2
  157. package/ngcc/src/execution/cluster/api.mjs +0 -9
  158. package/ngcc/src/execution/cluster/executor.mjs +0 -27
  159. package/ngcc/src/execution/cluster/master.mjs +0 -261
  160. package/ngcc/src/execution/cluster/package_json_updater.mjs +0 -45
  161. package/ngcc/src/execution/cluster/utils.mjs +0 -59
  162. package/ngcc/src/execution/cluster/worker.mjs +0 -81
  163. package/ngcc/src/execution/create_compile_function.mjs +0 -62
  164. package/ngcc/src/execution/single_process_executor.mjs +0 -57
  165. package/ngcc/src/execution/tasks/api.mjs +0 -22
  166. package/ngcc/src/execution/tasks/completion.mjs +0 -61
  167. package/ngcc/src/execution/tasks/queues/base_task_queue.mjs +0 -78
  168. package/ngcc/src/execution/tasks/queues/parallel_task_queue.mjs +0 -53
  169. package/ngcc/src/execution/tasks/queues/serial_task_queue.mjs +0 -29
  170. package/ngcc/src/execution/tasks/utils.mjs +0 -114
  171. package/ngcc/src/host/commonjs_host.mjs +0 -220
  172. package/ngcc/src/host/commonjs_umd_utils.mjs +0 -186
  173. package/ngcc/src/host/delegating_host.mjs +0 -140
  174. package/ngcc/src/host/esm2015_host.mjs +0 -2293
  175. package/ngcc/src/host/esm5_host.mjs +0 -721
  176. package/ngcc/src/host/ngcc_host.mjs +0 -15
  177. package/ngcc/src/host/umd_host.mjs +0 -486
  178. package/ngcc/src/host/utils.mjs +0 -12
  179. package/ngcc/src/locking/async_locker.mjs +0 -76
  180. package/ngcc/src/locking/lock_file.mjs +0 -4
  181. package/ngcc/src/locking/lock_file_with_child_process/index.mjs +0 -78
  182. package/ngcc/src/locking/lock_file_with_child_process/unlocker.mjs +0 -34
  183. package/ngcc/src/locking/lock_file_with_child_process/util.mjs +0 -29
  184. package/ngcc/src/locking/sync_locker.mjs +0 -52
  185. package/ngcc/src/main.mjs +0 -134
  186. package/ngcc/src/migrations/migration.mjs +0 -2
  187. package/ngcc/src/migrations/missing_injectable_migration.mjs +0 -164
  188. package/ngcc/src/migrations/undecorated_child_migration.mjs +0 -61
  189. package/ngcc/src/migrations/undecorated_parent_migration.mjs +0 -86
  190. package/ngcc/src/migrations/utils.mjs +0 -117
  191. package/ngcc/src/ngcc_options.mjs +0 -119
  192. package/ngcc/src/packages/build_marker.mjs +0 -84
  193. package/ngcc/src/packages/bundle_program.mjs +0 -52
  194. package/ngcc/src/packages/configuration.mjs +0 -250
  195. package/ngcc/src/packages/entry_point.mjs +0 -239
  196. package/ngcc/src/packages/entry_point_bundle.mjs +0 -68
  197. package/ngcc/src/packages/entry_point_manifest.mjs +0 -162
  198. package/ngcc/src/packages/ngcc_compiler_host.mjs +0 -77
  199. package/ngcc/src/packages/patch_ts_expando_initializer.mjs +0 -166
  200. package/ngcc/src/packages/source_file_cache.mjs +0 -187
  201. package/ngcc/src/packages/transformer.mjs +0 -140
  202. package/ngcc/src/path_mappings.mjs +0 -13
  203. package/ngcc/src/rendering/commonjs_rendering_formatter.mjs +0 -65
  204. package/ngcc/src/rendering/dts_renderer.mjs +0 -139
  205. package/ngcc/src/rendering/esm5_rendering_formatter.mjs +0 -50
  206. package/ngcc/src/rendering/esm_rendering_formatter.mjs +0 -251
  207. package/ngcc/src/rendering/ngcc_import_rewriter.mjs +0 -32
  208. package/ngcc/src/rendering/renderer.mjs +0 -170
  209. package/ngcc/src/rendering/rendering_formatter.mjs +0 -2
  210. package/ngcc/src/rendering/source_maps.mjs +0 -54
  211. package/ngcc/src/rendering/umd_rendering_formatter.mjs +0 -292
  212. package/ngcc/src/rendering/utils.mjs +0 -20
  213. package/ngcc/src/utils.mjs +0 -144
  214. package/ngcc/src/writing/cleaning/cleaning_strategies.mjs +0 -61
  215. package/ngcc/src/writing/cleaning/package_cleaner.mjs +0 -67
  216. package/ngcc/src/writing/cleaning/utils.mjs +0 -16
  217. package/ngcc/src/writing/file_writer.mjs +0 -2
  218. package/ngcc/src/writing/in_place_file_writer.mjs +0 -62
  219. package/ngcc/src/writing/new_entry_point_file_writer.mjs +0 -161
  220. package/ngcc/src/writing/package_json_updater.mjs +0 -144
  221. package/src/diagnostics/translate_diagnostics.mjs +0 -47
  222. package/src/diagnostics/typescript_version.mjs +0 -79
  223. package/src/extract_i18n.mjs +0 -46
  224. package/src/language_services.mjs +0 -18
  225. package/src/main.mjs +0 -185
  226. package/src/metadata/bundle_index_host.mjs +0 -107
  227. package/src/metadata/bundler.mjs +0 -556
  228. package/src/metadata/collector.mjs +0 -701
  229. package/src/metadata/evaluator.mjs +0 -643
  230. package/src/metadata/index.mjs +0 -11
  231. package/src/metadata/index_writer.mjs +0 -44
  232. package/src/metadata/schema.mjs +0 -102
  233. package/src/metadata/symbols.mjs +0 -117
  234. package/src/ngtsc/annotations/annotations.externs.js +0 -0
  235. package/src/ngtsc/annotations/index.mjs +0 -15
  236. package/src/ngtsc/annotations/src/api.mjs +0 -9
  237. package/src/ngtsc/annotations/src/component.mjs +0 -1064
  238. package/src/ngtsc/annotations/src/diagnostics.mjs +0 -147
  239. package/src/ngtsc/annotations/src/directive.mjs +0 -692
  240. package/src/ngtsc/annotations/src/factory.mjs +0 -17
  241. package/src/ngtsc/annotations/src/injectable.mjs +0 -260
  242. package/src/ngtsc/annotations/src/metadata.mjs +0 -145
  243. package/src/ngtsc/annotations/src/ng_module.mjs +0 -565
  244. package/src/ngtsc/annotations/src/pipe.mjs +0 -151
  245. package/src/ngtsc/annotations/src/references_registry.mjs +0 -16
  246. package/src/ngtsc/annotations/src/util.mjs +0 -495
  247. package/src/ngtsc/core/api/index.mjs +0 -12
  248. package/src/ngtsc/core/api/src/adapter.mjs +0 -9
  249. package/src/ngtsc/core/api/src/interfaces.mjs +0 -9
  250. package/src/ngtsc/core/api/src/options.mjs +0 -9
  251. package/src/ngtsc/core/api/src/public_options.mjs +0 -9
  252. package/src/ngtsc/core/api.externs.js +0 -0
  253. package/src/ngtsc/core/core.externs.js +0 -0
  254. package/src/ngtsc/core/index.mjs +0 -10
  255. package/src/ngtsc/core/src/compiler.mjs +0 -908
  256. package/src/ngtsc/core/src/config.mjs +0 -15
  257. package/src/ngtsc/core/src/host.mjs +0 -229
  258. package/src/ngtsc/cycles/cycles.externs.js +0 -0
  259. package/src/ngtsc/cycles/index.mjs +0 -10
  260. package/src/ngtsc/cycles/src/analyzer.mjs +0 -60
  261. package/src/ngtsc/cycles/src/imports.mjs +0 -152
  262. package/src/ngtsc/diagnostics/diagnostics.externs.js +0 -0
  263. package/src/ngtsc/diagnostics/index.mjs +0 -11
  264. package/src/ngtsc/diagnostics/src/error.mjs +0 -51
  265. package/src/ngtsc/diagnostics/src/error_code.mjs +0 -198
  266. package/src/ngtsc/diagnostics/src/util.mjs +0 -21
  267. package/src/ngtsc/entry_point/entry_point.externs.js +0 -0
  268. package/src/ngtsc/entry_point/index.mjs +0 -12
  269. package/src/ngtsc/entry_point/src/generator.mjs +0 -35
  270. package/src/ngtsc/entry_point/src/logic.mjs +0 -35
  271. package/src/ngtsc/entry_point/src/private_export_checker.mjs +0 -122
  272. package/src/ngtsc/entry_point/src/reference_graph.mjs +0 -73
  273. package/src/ngtsc/file_system/file_system.externs.js +0 -0
  274. package/src/ngtsc/file_system/index.mjs +0 -13
  275. package/src/ngtsc/file_system/src/compiler_host.mjs +0 -64
  276. package/src/ngtsc/file_system/src/helpers.mjs +0 -99
  277. package/src/ngtsc/file_system/src/invalid_file_system.mjs +0 -95
  278. package/src/ngtsc/file_system/src/logical.mjs +0 -84
  279. package/src/ngtsc/file_system/src/node_js_file_system.mjs +0 -142
  280. package/src/ngtsc/file_system/src/types.mjs +0 -9
  281. package/src/ngtsc/file_system/src/util.mjs +0 -22
  282. package/src/ngtsc/file_system/testing/index.mjs +0 -13
  283. package/src/ngtsc/file_system/testing/src/mock_file_system.mjs +0 -293
  284. package/src/ngtsc/file_system/testing/src/mock_file_system_native.mjs +0 -57
  285. package/src/ngtsc/file_system/testing/src/mock_file_system_posix.mjs +0 -38
  286. package/src/ngtsc/file_system/testing/src/mock_file_system_windows.mjs +0 -38
  287. package/src/ngtsc/file_system/testing/src/test_helper.mjs +0 -108
  288. package/src/ngtsc/file_system/testing/testing.externs.js +0 -0
  289. package/src/ngtsc/imports/imports.externs.js +0 -0
  290. package/src/ngtsc/imports/index.mjs +0 -14
  291. package/src/ngtsc/imports/src/alias.mjs +0 -137
  292. package/src/ngtsc/imports/src/core.mjs +0 -78
  293. package/src/ngtsc/imports/src/default.mjs +0 -135
  294. package/src/ngtsc/imports/src/emitter.mjs +0 -266
  295. package/src/ngtsc/imports/src/find_export.mjs +0 -56
  296. package/src/ngtsc/imports/src/reexport.mjs +0 -9
  297. package/src/ngtsc/imports/src/references.mjs +0 -137
  298. package/src/ngtsc/imports/src/resolver.mjs +0 -24
  299. package/src/ngtsc/incremental/api.externs.js +0 -0
  300. package/src/ngtsc/incremental/api.mjs +0 -9
  301. package/src/ngtsc/incremental/incremental.externs.js +0 -0
  302. package/src/ngtsc/incremental/index.mjs +0 -12
  303. package/src/ngtsc/incremental/semantic_graph/index.mjs +0 -12
  304. package/src/ngtsc/incremental/semantic_graph/semantic_graph.externs.js +0 -0
  305. package/src/ngtsc/incremental/semantic_graph/src/api.mjs +0 -36
  306. package/src/ngtsc/incremental/semantic_graph/src/graph.mjs +0 -237
  307. package/src/ngtsc/incremental/semantic_graph/src/type_parameters.mjs +0 -40
  308. package/src/ngtsc/incremental/semantic_graph/src/util.mjs +0 -69
  309. package/src/ngtsc/incremental/src/dependency_tracking.mjs +0 -117
  310. package/src/ngtsc/incremental/src/incremental.mjs +0 -267
  311. package/src/ngtsc/incremental/src/noop.mjs +0 -13
  312. package/src/ngtsc/incremental/src/state.mjs +0 -17
  313. package/src/ngtsc/incremental/src/strategy.mjs +0 -76
  314. package/src/ngtsc/indexer/index.mjs +0 -11
  315. package/src/ngtsc/indexer/indexer.externs.js +0 -0
  316. package/src/ngtsc/indexer/src/api.mjs +0 -30
  317. package/src/ngtsc/indexer/src/context.mjs +0 -25
  318. package/src/ngtsc/indexer/src/template.mjs +0 -303
  319. package/src/ngtsc/indexer/src/transform.mjs +0 -51
  320. package/src/ngtsc/logging/index.mjs +0 -10
  321. package/src/ngtsc/logging/logging.externs.js +0 -0
  322. package/src/ngtsc/logging/src/console_logger.mjs +0 -43
  323. package/src/ngtsc/logging/src/logger.mjs +0 -15
  324. package/src/ngtsc/logging/testing/index.mjs +0 -9
  325. package/src/ngtsc/logging/testing/src/mock_logger.mjs +0 -32
  326. package/src/ngtsc/logging/testing/testing.externs.js +0 -0
  327. package/src/ngtsc/metadata/index.mjs +0 -15
  328. package/src/ngtsc/metadata/metadata.externs.js +0 -0
  329. package/src/ngtsc/metadata/src/api.mjs +0 -13
  330. package/src/ngtsc/metadata/src/dts.mjs +0 -143
  331. package/src/ngtsc/metadata/src/inheritance.mjs +0 -71
  332. package/src/ngtsc/metadata/src/property_mapping.mjs +0 -136
  333. package/src/ngtsc/metadata/src/registry.mjs +0 -80
  334. package/src/ngtsc/metadata/src/resource_registry.mjs +0 -81
  335. package/src/ngtsc/metadata/src/util.mjs +0 -200
  336. package/src/ngtsc/partial_evaluator/index.mjs +0 -12
  337. package/src/ngtsc/partial_evaluator/partial_evaluator.externs.js +0 -0
  338. package/src/ngtsc/partial_evaluator/src/builtin.mjs +0 -65
  339. package/src/ngtsc/partial_evaluator/src/diagnostics.mjs +0 -171
  340. package/src/ngtsc/partial_evaluator/src/dynamic.mjs +0 -86
  341. package/src/ngtsc/partial_evaluator/src/interface.mjs +0 -27
  342. package/src/ngtsc/partial_evaluator/src/interpreter.mjs +0 -683
  343. package/src/ngtsc/partial_evaluator/src/known_declaration.mjs +0 -43
  344. package/src/ngtsc/partial_evaluator/src/result.mjs +0 -50
  345. package/src/ngtsc/partial_evaluator/src/ts_helpers.mjs +0 -72
  346. package/src/ngtsc/perf/index.mjs +0 -11
  347. package/src/ngtsc/perf/perf.externs.js +0 -0
  348. package/src/ngtsc/perf/src/api.mjs +0 -278
  349. package/src/ngtsc/perf/src/clock.mjs +0 -15
  350. package/src/ngtsc/perf/src/noop.mjs +0 -21
  351. package/src/ngtsc/perf/src/recorder.mjs +0 -125
  352. package/src/ngtsc/program.mjs +0 -247
  353. package/src/ngtsc/program_driver/index.mjs +0 -10
  354. package/src/ngtsc/program_driver/program_driver.externs.js +0 -0
  355. package/src/ngtsc/program_driver/src/api.mjs +0 -22
  356. package/src/ngtsc/program_driver/src/ts_create_program_driver.mjs +0 -164
  357. package/src/ngtsc/reflection/index.mjs +0 -12
  358. package/src/ngtsc/reflection/reflection.externs.js +0 -0
  359. package/src/ngtsc/reflection/src/host.mjs +0 -73
  360. package/src/ngtsc/reflection/src/type_to_value.mjs +0 -243
  361. package/src/ngtsc/reflection/src/typescript.mjs +0 -608
  362. package/src/ngtsc/reflection/src/util.mjs +0 -21
  363. package/src/ngtsc/resource/index.mjs +0 -9
  364. package/src/ngtsc/resource/resource.externs.js +0 -0
  365. package/src/ngtsc/resource/src/loader.mjs +0 -242
  366. package/src/ngtsc/routing/index.mjs +0 -11
  367. package/src/ngtsc/routing/routing.externs.js +0 -0
  368. package/src/ngtsc/routing/src/analyzer.mjs +0 -69
  369. package/src/ngtsc/routing/src/lazy.mjs +0 -168
  370. package/src/ngtsc/routing/src/route.mjs +0 -51
  371. package/src/ngtsc/scope/index.mjs +0 -12
  372. package/src/ngtsc/scope/scope.externs.js +0 -0
  373. package/src/ngtsc/scope/src/api.mjs +0 -9
  374. package/src/ngtsc/scope/src/component_scope.mjs +0 -31
  375. package/src/ngtsc/scope/src/dependency.mjs +0 -134
  376. package/src/ngtsc/scope/src/local.mjs +0 -531
  377. package/src/ngtsc/scope/src/typecheck.mjs +0 -83
  378. package/src/ngtsc/shims/api.externs.js +0 -0
  379. package/src/ngtsc/shims/api.mjs +0 -2
  380. package/src/ngtsc/shims/index.mjs +0 -14
  381. package/src/ngtsc/shims/shims.externs.js +0 -0
  382. package/src/ngtsc/shims/src/adapter.mjs +0 -188
  383. package/src/ngtsc/shims/src/expando.mjs +0 -102
  384. package/src/ngtsc/shims/src/factory_generator.mjs +0 -265
  385. package/src/ngtsc/shims/src/reference_tagger.mjs +0 -67
  386. package/src/ngtsc/shims/src/summary_generator.mjs +0 -64
  387. package/src/ngtsc/shims/src/util.mjs +0 -26
  388. package/src/ngtsc/sourcemaps/index.mjs +0 -11
  389. package/src/ngtsc/sourcemaps/sourcemaps.externs.js +0 -0
  390. package/src/ngtsc/sourcemaps/src/content_origin.mjs +0 -35
  391. package/src/ngtsc/sourcemaps/src/raw_source_map.mjs +0 -2
  392. package/src/ngtsc/sourcemaps/src/segment_marker.mjs +0 -40
  393. package/src/ngtsc/sourcemaps/src/source_file.mjs +0 -459
  394. package/src/ngtsc/sourcemaps/src/source_file_loader.mjs +0 -213
  395. package/src/ngtsc/switch/index.mjs +0 -9
  396. package/src/ngtsc/switch/src/switch.mjs +0 -115
  397. package/src/ngtsc/switch/switch.externs.js +0 -0
  398. package/src/ngtsc/transform/index.mjs +0 -14
  399. package/src/ngtsc/transform/src/alias.mjs +0 -30
  400. package/src/ngtsc/transform/src/api.mjs +0 -63
  401. package/src/ngtsc/transform/src/compilation.mjs +0 -485
  402. package/src/ngtsc/transform/src/declaration.mjs +0 -182
  403. package/src/ngtsc/transform/src/trait.mjs +0 -95
  404. package/src/ngtsc/transform/src/transform.mjs +0 -298
  405. package/src/ngtsc/transform/src/utils.mjs +0 -57
  406. package/src/ngtsc/transform/transform.externs.js +0 -0
  407. package/src/ngtsc/translator/index.mjs +0 -14
  408. package/src/ngtsc/translator/src/api/ast_factory.mjs +0 -9
  409. package/src/ngtsc/translator/src/api/import_generator.mjs +0 -9
  410. package/src/ngtsc/translator/src/context.mjs +0 -24
  411. package/src/ngtsc/translator/src/import_manager.mjs +0 -48
  412. package/src/ngtsc/translator/src/translator.mjs +0 -317
  413. package/src/ngtsc/translator/src/type_translator.mjs +0 -204
  414. package/src/ngtsc/translator/src/typescript_ast_factory.mjs +0 -211
  415. package/src/ngtsc/translator/src/typescript_translator.mjs +0 -17
  416. package/src/ngtsc/translator/translator.externs.js +0 -0
  417. package/src/ngtsc/tsc_plugin.mjs +0 -98
  418. package/src/ngtsc/typecheck/api/api.externs.js +0 -0
  419. package/src/ngtsc/typecheck/api/api.mjs +0 -9
  420. package/src/ngtsc/typecheck/api/checker.mjs +0 -31
  421. package/src/ngtsc/typecheck/api/completion.mjs +0 -16
  422. package/src/ngtsc/typecheck/api/context.mjs +0 -9
  423. package/src/ngtsc/typecheck/api/index.mjs +0 -14
  424. package/src/ngtsc/typecheck/api/scope.mjs +0 -9
  425. package/src/ngtsc/typecheck/api/symbols.mjs +0 -22
  426. package/src/ngtsc/typecheck/diagnostics/diagnostics.externs.js +0 -0
  427. package/src/ngtsc/typecheck/diagnostics/index.mjs +0 -10
  428. package/src/ngtsc/typecheck/diagnostics/src/diagnostic.mjs +0 -99
  429. package/src/ngtsc/typecheck/diagnostics/src/id.mjs +0 -23
  430. package/src/ngtsc/typecheck/index.mjs +0 -12
  431. package/src/ngtsc/typecheck/src/checker.mjs +0 -591
  432. package/src/ngtsc/typecheck/src/comments.mjs +0 -159
  433. package/src/ngtsc/typecheck/src/completion.mjs +0 -155
  434. package/src/ngtsc/typecheck/src/context.mjs +0 -350
  435. package/src/ngtsc/typecheck/src/diagnostics.mjs +0 -95
  436. package/src/ngtsc/typecheck/src/dom.mjs +0 -68
  437. package/src/ngtsc/typecheck/src/environment.mjs +0 -146
  438. package/src/ngtsc/typecheck/src/expression.mjs +0 -412
  439. package/src/ngtsc/typecheck/src/line_mappings.mjs +0 -60
  440. package/src/ngtsc/typecheck/src/oob.mjs +0 -112
  441. package/src/ngtsc/typecheck/src/shim.mjs +0 -37
  442. package/src/ngtsc/typecheck/src/source.mjs +0 -74
  443. package/src/ngtsc/typecheck/src/tcb_util.mjs +0 -135
  444. package/src/ngtsc/typecheck/src/template_semantics.mjs +0 -34
  445. package/src/ngtsc/typecheck/src/template_symbol_builder.mjs +0 -472
  446. package/src/ngtsc/typecheck/src/ts_util.mjs +0 -157
  447. package/src/ngtsc/typecheck/src/type_check_block.mjs +0 -1770
  448. package/src/ngtsc/typecheck/src/type_check_file.mjs +0 -65
  449. package/src/ngtsc/typecheck/src/type_constructor.mjs +0 -227
  450. package/src/ngtsc/typecheck/src/type_emitter.mjs +0 -140
  451. package/src/ngtsc/typecheck/src/type_parameter_emitter.mjs +0 -80
  452. package/src/ngtsc/typecheck/typecheck.externs.js +0 -0
  453. package/src/ngtsc/util/src/path.mjs +0 -18
  454. package/src/ngtsc/util/src/typescript.mjs +0 -143
  455. package/src/ngtsc/util/src/visitor.mjs +0 -107
  456. package/src/ngtsc/util/util.externs.js +0 -0
  457. package/src/perform_compile.mjs +0 -275
  458. package/src/perform_watch.mjs +0 -247
  459. package/src/tooling.mjs +0 -32
  460. package/src/transformers/api.mjs +0 -27
  461. package/src/transformers/compiler_host.mjs +0 -593
  462. package/src/transformers/downlevel_decorators_transform.mjs +0 -507
  463. package/src/transformers/entry_points.mjs +0 -10
  464. package/src/transformers/inline_resources.mjs +0 -269
  465. package/src/transformers/lower_expressions.mjs +0 -336
  466. package/src/transformers/metadata_cache.mjs +0 -53
  467. package/src/transformers/metadata_reader.mjs +0 -104
  468. package/src/transformers/node_emitter.mjs +0 -606
  469. package/src/transformers/node_emitter_transform.mjs +0 -78
  470. package/src/transformers/patch_alias_reference_resolution.mjs +0 -109
  471. package/src/transformers/program.mjs +0 -935
  472. package/src/transformers/r3_metadata_transform.mjs +0 -46
  473. package/src/transformers/r3_transform.mjs +0 -29
  474. package/src/transformers/util.mjs +0 -89
  475. package/src/typescript_support.mjs +0 -57
  476. package/src/version.mjs +0 -15
@@ -1,21 +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
- export function isNamedClassDeclaration(node) {
10
- return ts.isClassDeclaration(node) && isIdentifier(node.name);
11
- }
12
- export function isNamedFunctionDeclaration(node) {
13
- return ts.isFunctionDeclaration(node) && isIdentifier(node.name);
14
- }
15
- export function isNamedVariableDeclaration(node) {
16
- return ts.isVariableDeclaration(node) && isIdentifier(node.name);
17
- }
18
- function isIdentifier(node) {
19
- return node !== undefined && ts.isIdentifier(node);
20
- }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvcmVmbGVjdGlvbi9zcmMvdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUdqQyxNQUFNLFVBQVUsdUJBQXVCLENBQUMsSUFBYTtJQUVuRCxPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsSUFBYTtJQUV0RCxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsSUFBYTtJQUV0RCxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxJQUF1QjtJQUMzQyxPQUFPLElBQUksS0FBSyxTQUFTLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHtDbGFzc0RlY2xhcmF0aW9ufSBmcm9tICcuL2hvc3QnO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNOYW1lZENsYXNzRGVjbGFyYXRpb24obm9kZTogdHMuTm9kZSk6XG4gICAgbm9kZSBpcyBDbGFzc0RlY2xhcmF0aW9uPHRzLkNsYXNzRGVjbGFyYXRpb24+IHtcbiAgcmV0dXJuIHRzLmlzQ2xhc3NEZWNsYXJhdGlvbihub2RlKSAmJiBpc0lkZW50aWZpZXIobm9kZS5uYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTmFtZWRGdW5jdGlvbkRlY2xhcmF0aW9uKG5vZGU6IHRzLk5vZGUpOlxuICAgIG5vZGUgaXMgQ2xhc3NEZWNsYXJhdGlvbjx0cy5GdW5jdGlvbkRlY2xhcmF0aW9uPiB7XG4gIHJldHVybiB0cy5pc0Z1bmN0aW9uRGVjbGFyYXRpb24obm9kZSkgJiYgaXNJZGVudGlmaWVyKG5vZGUubmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05hbWVkVmFyaWFibGVEZWNsYXJhdGlvbihub2RlOiB0cy5Ob2RlKTpcbiAgICBub2RlIGlzIENsYXNzRGVjbGFyYXRpb248dHMuVmFyaWFibGVEZWNsYXJhdGlvbj4ge1xuICByZXR1cm4gdHMuaXNWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUpICYmIGlzSWRlbnRpZmllcihub2RlLm5hbWUpO1xufVxuXG5mdW5jdGlvbiBpc0lkZW50aWZpZXIobm9kZTogdHMuTm9kZXx1bmRlZmluZWQpOiBub2RlIGlzIHRzLklkZW50aWZpZXIge1xuICByZXR1cm4gbm9kZSAhPT0gdW5kZWZpbmVkICYmIHRzLmlzSWRlbnRpZmllcihub2RlKTtcbn1cbiJdfQ==
@@ -1,9 +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
- export { AdapterResourceLoader } from './src/loader';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3Jlc291cmNlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5leHBvcnQge0FkYXB0ZXJSZXNvdXJjZUxvYWRlcn0gZnJvbSAnLi9zcmMvbG9hZGVyJztcbiJdfQ==
File without changes
@@ -1,242 +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 { __awaiter } from "tslib";
9
- import * as ts from 'typescript';
10
- import { join } from '../../file_system';
11
- const CSS_PREPROCESSOR_EXT = /(\.scss|\.sass|\.less|\.styl)$/;
12
- const RESOURCE_MARKER = '.$ngresource$';
13
- const RESOURCE_MARKER_TS = RESOURCE_MARKER + '.ts';
14
- /**
15
- * `ResourceLoader` which delegates to an `NgCompilerAdapter`'s resource loading methods.
16
- */
17
- export class AdapterResourceLoader {
18
- constructor(adapter, options) {
19
- this.adapter = adapter;
20
- this.options = options;
21
- this.cache = new Map();
22
- this.fetching = new Map();
23
- this.lookupResolutionHost = createLookupResolutionHost(this.adapter);
24
- this.canPreload = !!this.adapter.readResource;
25
- this.canPreprocess = !!this.adapter.transformResource;
26
- }
27
- /**
28
- * Resolve the url of a resource relative to the file that contains the reference to it.
29
- * The return value of this method can be used in the `load()` and `preload()` methods.
30
- *
31
- * Uses the provided CompilerHost if it supports mapping resources to filenames.
32
- * Otherwise, uses a fallback mechanism that searches the module resolution candidates.
33
- *
34
- * @param url The, possibly relative, url of the resource.
35
- * @param fromFile The path to the file that contains the URL of the resource.
36
- * @returns A resolved url of resource.
37
- * @throws An error if the resource cannot be resolved.
38
- */
39
- resolve(url, fromFile) {
40
- let resolvedUrl = null;
41
- if (this.adapter.resourceNameToFileName) {
42
- resolvedUrl = this.adapter.resourceNameToFileName(url, fromFile, (url, fromFile) => this.fallbackResolve(url, fromFile));
43
- }
44
- else {
45
- resolvedUrl = this.fallbackResolve(url, fromFile);
46
- }
47
- if (resolvedUrl === null) {
48
- throw new Error(`HostResourceResolver: could not resolve ${url} in context of ${fromFile})`);
49
- }
50
- return resolvedUrl;
51
- }
52
- /**
53
- * Preload the specified resource, asynchronously.
54
- *
55
- * Once the resource is loaded, its value is cached so it can be accessed synchronously via the
56
- * `load()` method.
57
- *
58
- * @param resolvedUrl The url (resolved by a call to `resolve()`) of the resource to preload.
59
- * @param context Information about the resource such as the type and containing file.
60
- * @returns A Promise that is resolved once the resource has been loaded or `undefined` if the
61
- * file has already been loaded.
62
- * @throws An Error if pre-loading is not available.
63
- */
64
- preload(resolvedUrl, context) {
65
- if (!this.adapter.readResource) {
66
- throw new Error('HostResourceLoader: the CompilerHost provided does not support pre-loading resources.');
67
- }
68
- if (this.cache.has(resolvedUrl)) {
69
- return undefined;
70
- }
71
- else if (this.fetching.has(resolvedUrl)) {
72
- return this.fetching.get(resolvedUrl);
73
- }
74
- let result = this.adapter.readResource(resolvedUrl);
75
- if (this.adapter.transformResource && context.type === 'style') {
76
- const resourceContext = {
77
- type: 'style',
78
- containingFile: context.containingFile,
79
- resourceFile: resolvedUrl,
80
- };
81
- result = Promise.resolve(result).then((str) => __awaiter(this, void 0, void 0, function* () {
82
- const transformResult = yield this.adapter.transformResource(str, resourceContext);
83
- return transformResult === null ? str : transformResult.content;
84
- }));
85
- }
86
- if (typeof result === 'string') {
87
- this.cache.set(resolvedUrl, result);
88
- return undefined;
89
- }
90
- else {
91
- const fetchCompletion = result.then(str => {
92
- this.fetching.delete(resolvedUrl);
93
- this.cache.set(resolvedUrl, str);
94
- });
95
- this.fetching.set(resolvedUrl, fetchCompletion);
96
- return fetchCompletion;
97
- }
98
- }
99
- /**
100
- * Preprocess the content data of an inline resource, asynchronously.
101
- *
102
- * @param data The existing content data from the inline resource.
103
- * @param context Information regarding the resource such as the type and containing file.
104
- * @returns A Promise that resolves to the processed data. If no processing occurs, the
105
- * same data string that was passed to the function will be resolved.
106
- */
107
- preprocessInline(data, context) {
108
- return __awaiter(this, void 0, void 0, function* () {
109
- if (!this.adapter.transformResource || context.type !== 'style') {
110
- return data;
111
- }
112
- const transformResult = yield this.adapter.transformResource(data, { type: 'style', containingFile: context.containingFile, resourceFile: null });
113
- if (transformResult === null) {
114
- return data;
115
- }
116
- return transformResult.content;
117
- });
118
- }
119
- /**
120
- * Load the resource at the given url, synchronously.
121
- *
122
- * The contents of the resource may have been cached by a previous call to `preload()`.
123
- *
124
- * @param resolvedUrl The url (resolved by a call to `resolve()`) of the resource to load.
125
- * @returns The contents of the resource.
126
- */
127
- load(resolvedUrl) {
128
- if (this.cache.has(resolvedUrl)) {
129
- return this.cache.get(resolvedUrl);
130
- }
131
- const result = this.adapter.readResource ? this.adapter.readResource(resolvedUrl) :
132
- this.adapter.readFile(resolvedUrl);
133
- if (typeof result !== 'string') {
134
- throw new Error(`HostResourceLoader: loader(${resolvedUrl}) returned a Promise`);
135
- }
136
- this.cache.set(resolvedUrl, result);
137
- return result;
138
- }
139
- /**
140
- * Invalidate the entire resource cache.
141
- */
142
- invalidate() {
143
- this.cache.clear();
144
- }
145
- /**
146
- * Attempt to resolve `url` in the context of `fromFile`, while respecting the rootDirs
147
- * option from the tsconfig. First, normalize the file name.
148
- */
149
- fallbackResolve(url, fromFile) {
150
- let candidateLocations;
151
- if (url.startsWith('/')) {
152
- // This path is not really an absolute path, but instead the leading '/' means that it's
153
- // rooted in the project rootDirs. So look for it according to the rootDirs.
154
- candidateLocations = this.getRootedCandidateLocations(url);
155
- }
156
- else {
157
- // This path is a "relative" path and can be resolved as such. To make this easier on the
158
- // downstream resolver, the './' prefix is added if missing to distinguish these paths from
159
- // absolute node_modules paths.
160
- if (!url.startsWith('.')) {
161
- url = `./${url}`;
162
- }
163
- candidateLocations = this.getResolvedCandidateLocations(url, fromFile);
164
- }
165
- for (const candidate of candidateLocations) {
166
- if (this.adapter.fileExists(candidate)) {
167
- return candidate;
168
- }
169
- else if (CSS_PREPROCESSOR_EXT.test(candidate)) {
170
- /**
171
- * If the user specified styleUrl points to *.scss, but the Sass compiler was run before
172
- * Angular, then the resource may have been generated as *.css. Simply try the resolution
173
- * again.
174
- */
175
- const cssFallbackUrl = candidate.replace(CSS_PREPROCESSOR_EXT, '.css');
176
- if (this.adapter.fileExists(cssFallbackUrl)) {
177
- return cssFallbackUrl;
178
- }
179
- }
180
- }
181
- return null;
182
- }
183
- getRootedCandidateLocations(url) {
184
- // The path already starts with '/', so add a '.' to make it relative.
185
- const segment = ('.' + url);
186
- return this.adapter.rootDirs.map(rootDir => join(rootDir, segment));
187
- }
188
- /**
189
- * TypeScript provides utilities to resolve module names, but not resource files (which aren't
190
- * a part of the ts.Program). However, TypeScript's module resolution can be used creatively
191
- * to locate where resource files should be expected to exist. Since module resolution returns
192
- * a list of file names that were considered, the loader can enumerate the possible locations
193
- * for the file by setting up a module resolution for it that will fail.
194
- */
195
- getResolvedCandidateLocations(url, fromFile) {
196
- // clang-format off
197
- const failedLookup = ts.resolveModuleName(url + RESOURCE_MARKER, fromFile, this.options, this.lookupResolutionHost);
198
- // clang-format on
199
- if (failedLookup.failedLookupLocations === undefined) {
200
- throw new Error(`Internal error: expected to find failedLookupLocations during resolution of resource '${url}' in context of ${fromFile}`);
201
- }
202
- return failedLookup.failedLookupLocations
203
- .filter(candidate => candidate.endsWith(RESOURCE_MARKER_TS))
204
- .map(candidate => candidate.slice(0, -RESOURCE_MARKER_TS.length));
205
- }
206
- }
207
- /**
208
- * Derives a `ts.ModuleResolutionHost` from a compiler adapter that recognizes the special resource
209
- * marker and does not go to the filesystem for these requests, as they are known not to exist.
210
- */
211
- function createLookupResolutionHost(adapter) {
212
- var _a, _b, _c;
213
- return {
214
- directoryExists(directoryName) {
215
- if (directoryName.includes(RESOURCE_MARKER)) {
216
- return false;
217
- }
218
- else if (adapter.directoryExists !== undefined) {
219
- return adapter.directoryExists(directoryName);
220
- }
221
- else {
222
- // TypeScript's module resolution logic assumes that the directory exists when no host
223
- // implementation is available.
224
- return true;
225
- }
226
- },
227
- fileExists(fileName) {
228
- if (fileName.includes(RESOURCE_MARKER)) {
229
- return false;
230
- }
231
- else {
232
- return adapter.fileExists(fileName);
233
- }
234
- },
235
- readFile: adapter.readFile.bind(adapter),
236
- getCurrentDirectory: adapter.getCurrentDirectory.bind(adapter),
237
- getDirectories: (_a = adapter.getDirectories) === null || _a === void 0 ? void 0 : _a.bind(adapter),
238
- realpath: (_b = adapter.realpath) === null || _b === void 0 ? void 0 : _b.bind(adapter),
239
- trace: (_c = adapter.trace) === null || _c === void 0 ? void 0 : _c.bind(adapter),
240
- };
241
- }
242
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9yZXNvdXJjZS9zcmMvbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUlqQyxPQUFPLEVBQWlCLElBQUksRUFBYyxNQUFNLG1CQUFtQixDQUFDO0FBR3BFLE1BQU0sb0JBQW9CLEdBQUcsZ0NBQWdDLENBQUM7QUFFOUQsTUFBTSxlQUFlLEdBQUcsZUFBZSxDQUFDO0FBQ3hDLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUVuRDs7R0FFRztBQUNILE1BQU0sT0FBTyxxQkFBcUI7SUFRaEMsWUFBb0IsT0FBMEIsRUFBVSxPQUEyQjtRQUEvRCxZQUFPLEdBQVAsT0FBTyxDQUFtQjtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQW9CO1FBUDNFLFVBQUssR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUNsQyxhQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUM7UUFDNUMseUJBQW9CLEdBQUcsMEJBQTBCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXhFLGVBQVUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDekMsa0JBQWEsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztJQUVxQyxDQUFDO0lBRXZGOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsT0FBTyxDQUFDLEdBQVcsRUFBRSxRQUFnQjtRQUNuQyxJQUFJLFdBQVcsR0FBZ0IsSUFBSSxDQUFDO1FBQ3BDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRTtZQUN2QyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8s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RUFBRTtnQkFDdEMsT0FBTyxLQUFLLENBQUM7YUFDZDtpQkFBTTtnQkFDTCxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDckM7UUFDSCxDQUFDO1FBQ0QsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUN4QyxtQkFBbUIsRUFBRSxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM5RCxjQUFjLEVBQUUsTUFBQSxPQUFPLENBQUMsY0FBYywwQ0FBRSxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3JELFFBQVEsRUFBRSxNQUFBLE9BQU8sQ0FBQyxRQUFRLDBDQUFFLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDekMsS0FBSyxFQUFFLE1BQUEsT0FBTyxDQUFDLEtBQUssMENBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQztLQUNwQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtSZXNvdXJjZUxvYWRlciwgUmVzb3VyY2VMb2FkZXJDb250ZXh0fSBmcm9tICcuLi8uLi9hbm5vdGF0aW9ucyc7XG5pbXBvcnQge05nQ29tcGlsZXJBZGFwdGVyLCBSZXNvdXJjZUhvc3RDb250ZXh0fSBmcm9tICcuLi8uLi9jb3JlL2FwaSc7XG5pbXBvcnQge0Fic29sdXRlRnNQYXRoLCBqb2luLCBQYXRoU2VnbWVudH0gZnJvbSAnLi4vLi4vZmlsZV9zeXN0ZW0nO1xuaW1wb3J0IHtSZXF1aXJlZERlbGVnYXRpb25zfSBmcm9tICcuLi8uLi91dGlsL3NyYy90eXBlc2NyaXB0JztcblxuY29uc3QgQ1NTX1BSRVBST0NFU1NPUl9FWFQgPSAvKFxcLnNjc3N8XFwuc2Fzc3xcXC5sZXNzfFxcLnN0eWwpJC87XG5cbmNvbnN0IFJFU09VUkNFX01BUktFUiA9ICcuJG5ncmVzb3VyY2UkJztcbmNvbnN0IFJFU09VUkNFX01BUktFUl9UUyA9IFJFU09VUkNFX01BUktFUiArICcudHMnO1xuXG4vKipcbiAqIGBSZXNvdXJjZUxvYWRlcmAgd2hpY2ggZGVsZWdhdGVzIHRvIGFuIGBOZ0NvbXBpbGVyQWRhcHRlcmAncyByZXNvdXJjZSBsb2FkaW5nIG1ldGhvZHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBBZGFwdGVyUmVzb3VyY2VMb2FkZXIgaW1wbGVtZW50cyBSZXNvdXJjZUxvYWRlciB7XG4gIHByaXZhdGUgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBwcml2YXRlIGZldGNoaW5nID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8dm9pZD4+KCk7XG4gIHByaXZhdGUgbG9va3VwUmVzb2x1dGlvbkhvc3QgPSBjcmVhdGVMb29rdXBSZXNvbHV0aW9uSG9zdCh0aGlzLmFkYXB0ZXIpO1xuXG4gIGNhblByZWxvYWQgPSAhIXRoaXMuYWRhcHRlci5yZWFkUmVzb3VyY2U7XG4gIGNhblByZXByb2Nlc3MgPSAhIXRoaXMuYWRhcHRlci50cmFuc2Zvcm1SZXNvdXJjZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFkYXB0ZXI6IE5nQ29tcGlsZXJBZGFwdGVyLCBwcml2YXRlIG9wdGlvbnM6IHRzLkNvbXBpbGVyT3B0aW9ucykge31cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgdXJsIG9mIGEgcmVzb3VyY2UgcmVsYXRpdmUgdG8gdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgcmVmZXJlbmNlIHRvIGl0LlxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIGluIHRoZSBgbG9hZCgpYCBhbmQgYHByZWxvYWQoKWAgbWV0aG9kcy5cbiAgICpcbiAgICogVXNlcyB0aGUgcHJvdmlkZWQgQ29tcGlsZXJIb3N0IGlmIGl0IHN1cHBvcnRzIG1hcHBpbmcgcmVzb3VyY2VzIHRvIGZpbGVuYW1lcy5cbiAgICogT3RoZXJ3aXNlLCB1c2VzIGEgZmFsbGJhY2sgbWVjaGFuaXNtIHRoYXQgc2VhcmNoZXMgdGhlIG1vZHVsZSByZXNvbHV0aW9uIGNhbmRpZGF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB1cmwgVGhlLCBwb3NzaWJseSByZWxhdGl2ZSwgdXJsIG9mIHRoZSByZXNvdXJjZS5cbiAgICogQHBhcmFtIGZyb21GaWxlIFRoZSBwYXRoIHRvIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIFVSTCBvZiB0aGUgcmVzb3VyY2UuXG4gICAqIEByZXR1cm5zIEEgcmVzb2x2ZWQgdXJsIG9mIHJlc291cmNlLlxuICAgKiBAdGhyb3dzIEFuIGVycm9yIGlmIHRoZSByZXNvdXJjZSBjYW5ub3QgYmUgcmVzb2x2ZWQuXG4gICAqL1xuICByZXNvbHZlKHVybDogc3RyaW5nLCBmcm9tRmlsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzb2x2ZWRVcmw6IHN0cmluZ3xudWxsID0gbnVsbDtcbiAgICBpZiAodGhpcy5hZGFwdGVyLnJlc291cmNlTmFtZVRvRmlsZU5hbWUpIHtcbiAgICAgIHJlc29sdmVkVXJsID0gdGhpcy5hZGFwdGVyLnJlc291cmNlTmFtZVRvRmlsZU5hbWUoXG4gICAgICAgICAgdXJsLCBmcm9tRmlsZSwgKHVybDogc3RyaW5nLCBmcm9tRmlsZTogc3RyaW5nKSA9PiB0aGlzLmZhbGxiYWNrUmVzb2x2ZSh1cmwsIGZyb21GaWxlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc29sdmVkVXJsID0gdGhpcy5mYWxsYmFja1Jlc29sdmUodXJsLCBmcm9tRmlsZSk7XG4gICAgfVxuICAgIGlmIChyZXNvbHZlZFVybCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBIb3N0UmVzb3VyY2VSZXNvbHZlcjogY291bGQgbm90IHJlc29sdmUgJHt1cmx9IGluIGNvbnRleHQgb2YgJHtmcm9tRmlsZX0pYCk7XG4gICAgfVxuICAgIHJldHVybiByZXNvbHZlZFVybDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVsb2FkIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UsIGFzeW5jaHJvbm91c2x5LlxuICAgKlxuICAgKiBPbmNlIHRoZSByZXNvdXJjZSBpcyBsb2FkZWQsIGl0cyB2YWx1ZSBpcyBjYWNoZWQgc28gaXQgY2FuIGJlIGFjY2Vzc2VkIHN5bmNocm9ub3VzbHkgdmlhIHRoZVxuICAgKiBgbG9hZCgpYCBtZXRob2QuXG4gICAqXG4gICAqIEBwYXJhbSByZXNvbHZlZFVybCBUaGUgdXJsIChyZXNvbHZlZCBieSBhIGNhbGwgdG8gYHJlc29sdmUoKWApIG9mIHRoZSByZXNvdXJjZSB0byBwcmVsb2FkLlxuICAgKiBAcGFyYW0gY29udGV4dCBJbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVzb3VyY2Ugc3VjaCBhcyB0aGUgdHlwZSBhbmQgY29udGFpbmluZyBmaWxlLlxuICAgKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCBpcyByZXNvbHZlZCBvbmNlIHRoZSByZXNvdXJjZSBoYXMgYmVlbiBsb2FkZWQgb3IgYHVuZGVmaW5lZGAgaWYgdGhlXG4gICAqIGZpbGUgaGFzIGFscmVhZHkgYmVlbiBsb2FkZWQuXG4gICAqIEB0aHJvd3MgQW4gRXJyb3IgaWYgcHJlLWxvYWRpbmcgaXMgbm90IGF2YWlsYWJsZS5cbiAgICovXG4gIHByZWxvYWQocmVzb2x2ZWRVcmw6IHN0cmluZywgY29udGV4dDogUmVzb3VyY2VMb2FkZXJDb250ZXh0KTogUHJvbWlzZTx2b2lkPnx1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5hZGFwdGVyLnJlYWRSZXNvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdIb3N0UmVzb3VyY2VMb2FkZXI6IHRoZSBDb21waWxlckhvc3QgcHJvdmlkZWQgZG9lcyBub3Qgc3VwcG9ydCBwcmUtbG9hZGluZyByZXNvdXJjZXMuJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNhY2hlLmhhcyhyZXNvbHZlZFVybCkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZldGNoaW5nLmhhcyhyZXNvbHZlZFVybCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmZldGNoaW5nLmdldChyZXNvbHZlZFVybCk7XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuYWRhcHRlci5yZWFkUmVzb3VyY2UocmVzb2x2ZWRVcmwpO1xuXG4gICAgaWYgKHRoaXMuYWRhcHRlci50cmFuc2Zvcm1SZXNvdXJjZSAmJiBjb250ZXh0LnR5cGUgPT09ICdzdHlsZScpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlQ29udGV4dDogUmVzb3VyY2VIb3N0Q29udGV4dCA9IHtcbiAgICAgICAgdHlwZTogJ3N0eWxlJyxcbiAgICAgICAgY29udGFpbmluZ0ZpbGU6IGNvbnRleHQuY29udGFpbmluZ0ZpbGUsXG4gICAgICAgIHJlc291cmNlRmlsZTogcmVzb2x2ZWRVcmwsXG4gICAgICB9O1xuICAgICAgcmVzdWx0ID0gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbihhc3luYyAoc3RyKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybVJlc3VsdCA9IGF3YWl0IHRoaXMuYWRhcHRlci50cmFuc2Zvcm1SZXNvdXJjZSEoc3RyLCByZXNvdXJjZUNvbnRleHQpO1xuICAgICAgICByZXR1cm4gdHJhbnNmb3JtUmVzdWx0ID09PSBudWxsID8gc3RyIDogdHJhbnNmb3JtUmVzdWx0LmNvbnRlbnQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuY2FjaGUuc2V0KHJlc29sdmVkVXJsLCByZXN1bHQpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmV0Y2hDb21wbGV0aW9uID0gcmVzdWx0LnRoZW4oc3RyID0+IHtcbiAgICAgICAgdGhpcy5mZXRjaGluZy5kZWxldGUocmVzb2x2ZWRVcmwpO1xuICAgICAgICB0aGlzLmNhY2hlLnNldChyZXNvbHZlZFVybCwgc3RyKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5mZXRjaGluZy5zZXQocmVzb2x2ZWRVcmwsIGZldGNoQ29tcGxldGlvbik7XG4gICAgICByZXR1cm4gZmV0Y2hDb21wbGV0aW9uO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwcm9jZXNzIHRoZSBjb250ZW50IGRhdGEgb2YgYW4gaW5saW5lIHJlc291cmNlLCBhc3luY2hyb25vdXNseS5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgVGhlIGV4aXN0aW5nIGNvbnRlbnQgZGF0YSBmcm9tIHRoZSBpbmxpbmUgcmVzb3VyY2UuXG4gICAqIEBwYXJhbSBjb250ZXh0IEluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgcmVzb3VyY2Ugc3VjaCBhcyB0aGUgdHlwZSBhbmQgY29udGFpbmluZyBmaWxlLlxuICAgKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgcHJvY2Vzc2VkIGRhdGEuIElmIG5vIHByb2Nlc3Npbmcgb2NjdXJzLCB0aGVcbiAgICogc2FtZSBkYXRhIHN0cmluZyB0aGF0IHdhcyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIHdpbGwgYmUgcmVzb2x2ZWQuXG4gICAqL1xuICBhc3luYyBwcmVwcm9jZXNzSW5saW5lKGRhdGE6IHN0cmluZywgY29udGV4dDogUmVzb3VyY2VMb2FkZXJDb250ZXh0KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIXRoaXMuYWRhcHRlci50cmFuc2Zvcm1SZXNvdXJjZSB8fCBjb250ZXh0LnR5cGUgIT09ICdzdHlsZScpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zZm9ybVJlc3VsdCA9IGF3YWl0IHRoaXMuYWRhcHRlci50cmFuc2Zvcm1SZXNvdXJjZShcbiAgICAgICAgZGF0YSwge3R5cGU6ICdzdHlsZScsIGNvbnRhaW5pbmdGaWxlOiBjb250ZXh0LmNvbnRhaW5pbmdGaWxlLCByZXNvdXJjZUZpbGU6IG51bGx9KTtcbiAgICBpZiAodHJhbnNmb3JtUmVzdWx0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhbnNmb3JtUmVzdWx0LmNvbnRlbnQ7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0aGUgcmVzb3VyY2UgYXQgdGhlIGdpdmVuIHVybCwgc3luY2hyb25vdXNseS5cbiAgICpcbiAgICogVGhlIGNvbnRlbnRzIG9mIHRoZSByZXNvdXJjZSBtYXkgaGF2ZSBiZWVuIGNhY2hlZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gYHByZWxvYWQoKWAuXG4gICAqXG4gICAqIEBwYXJhbSByZXNvbHZlZFVybCBUaGUgdXJsIChyZXNvbHZlZCBieSBhIGNhbGwgdG8gYHJlc29sdmUoKWApIG9mIHRoZSByZXNvdXJjZSB0byBsb2FkLlxuICAgKiBAcmV0dXJucyBUaGUgY29udGVudHMgb2YgdGhlIHJlc291cmNlLlxuICAgKi9cbiAgbG9hZChyZXNvbHZlZFVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5jYWNoZS5oYXMocmVzb2x2ZWRVcmwpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYWNoZS5nZXQocmVzb2x2ZWRVcmwpITtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmFkYXB0ZXIucmVhZFJlc291cmNlID8gdGhpcy5hZGFwdGVyLnJlYWRSZXNvdXJjZShyZXNvbHZlZFVybCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkYXB0ZXIucmVhZEZpbGUocmVzb2x2ZWRVcmwpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBIb3N0UmVzb3VyY2VMb2FkZXI6IGxvYWRlcigke3Jlc29sdmVkVXJsfSkgcmV0dXJuZWQgYSBQcm9taXNlYCk7XG4gICAgfVxuICAgIHRoaXMuY2FjaGUuc2V0KHJlc29sdmVkVXJsLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogSW52YWxpZGF0ZSB0aGUgZW50aXJlIHJlc291cmNlIGNhY2hlLlxuICAgKi9cbiAgaW52YWxpZGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogQXR0ZW1wdCB0byByZXNvbHZlIGB1cmxgIGluIHRoZSBjb250ZXh0IG9mIGBmcm9tRmlsZWAsIHdoaWxlIHJlc3BlY3RpbmcgdGhlIHJvb3REaXJzXG4gICAqIG9wdGlvbiBmcm9tIHRoZSB0c2NvbmZpZy4gRmlyc3QsIG5vcm1hbGl6ZSB0aGUgZmlsZSBuYW1lLlxuICAgKi9cbiAgcHJpdmF0ZSBmYWxsYmFja1Jlc29sdmUodXJsOiBzdHJpbmcsIGZyb21GaWxlOiBzdHJpbmcpOiBzdHJpbmd8bnVsbCB7XG4gICAgbGV0IGNhbmRpZGF0ZUxvY2F0aW9uczogc3RyaW5nW107XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIC8vIFRoaXMgcGF0aCBpcyBub3QgcmVhbGx5IGFuIGFic29sdXRlIHBhdGgsIGJ1dCBpbnN0ZWFkIHRoZSBsZWFkaW5nICcvJyBtZWFucyB0aGF0IGl0J3NcbiAgICAgIC8vIHJvb3RlZCBpbiB0aGUgcHJvamVjdCByb290RGlycy4gU28gbG9vayBmb3IgaXQgYWNjb3JkaW5nIHRvIHRoZSByb290RGlycy5cbiAgICAgIGNhbmRpZGF0ZUxvY2F0aW9ucyA9IHRoaXMuZ2V0Um9vdGVkQ2FuZGlkYXRlTG9jYXRpb25zKHVybCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgcGF0aCBpcyBhIFwicmVsYXRpdmVcIiBwYXRoIGFuZCBjYW4gYmUgcmVzb2x2ZWQgYXMgc3VjaC4gVG8gbWFrZSB0aGlzIGVhc2llciBvbiB0aGVcbiAgICAgIC8vIGRvd25zdHJlYW0gcmVzb2x2ZXIsIHRoZSAnLi8nIHByZWZpeCBpcyBhZGRlZCBpZiBtaXNzaW5nIHRvIGRpc3Rpbmd1aXNoIHRoZXNlIHBhdGhzIGZyb21cbiAgICAgIC8vIGFic29sdXRlIG5vZGVfbW9kdWxlcyBwYXRocy5cbiAgICAgIGlmICghdXJsLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgICAgICB1cmwgPSBgLi8ke3VybH1gO1xuICAgICAgfVxuICAgICAgY2FuZGlkYXRlTG9jYXRpb25zID0gdGhpcy5nZXRSZXNvbHZlZENhbmRpZGF0ZUxvY2F0aW9ucyh1cmwsIGZyb21GaWxlKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBjYW5kaWRhdGVMb2NhdGlvbnMpIHtcbiAgICAgIGlmICh0aGlzLmFkYXB0ZXIuZmlsZUV4aXN0cyhjYW5kaWRhdGUpKSB7XG4gICAgICAgIHJldHVybiBjYW5kaWRhdGU7XG4gICAgICB9IGVsc2UgaWYgKENTU19QUkVQUk9DRVNTT1JfRVhULnRlc3QoY2FuZGlkYXRlKSkge1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdGhlIHVzZXIgc3BlY2lmaWVkIHN0eWxlVXJsIHBvaW50cyB0byAqLnNjc3MsIGJ1dCB0aGUgU2FzcyBjb21waWxlciB3YXMgcnVuIGJlZm9yZVxuICAgICAgICAgKiBBbmd1bGFyLCB0aGVuIHRoZSByZXNvdXJjZSBtYXkgaGF2ZSBiZWVuIGdlbmVyYXRlZCBhcyAqLmNzcy4gU2ltcGx5IHRyeSB0aGUgcmVzb2x1dGlvblxuICAgICAgICAgKiBhZ2Fpbi5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGNzc0ZhbGxiYWNrVXJsID0gY2FuZGlkYXRlLnJlcGxhY2UoQ1NTX1BSRVBST0NFU1NPUl9FWFQsICcuY3NzJyk7XG4gICAgICAgIGlmICh0aGlzLmFkYXB0ZXIuZmlsZUV4aXN0cyhjc3NGYWxsYmFja1VybCkpIHtcbiAgICAgICAgICByZXR1cm4gY3NzRmFsbGJhY2tVcmw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldFJvb3RlZENhbmRpZGF0ZUxvY2F0aW9ucyh1cmw6IHN0cmluZyk6IEFic29sdXRlRnNQYXRoW10ge1xuICAgIC8vIFRoZSBwYXRoIGFscmVhZHkgc3RhcnRzIHdpdGggJy8nLCBzbyBhZGQgYSAnLicgdG8gbWFrZSBpdCByZWxhdGl2ZS5cbiAgICBjb25zdCBzZWdtZW50OiBQYXRoU2VnbWVudCA9ICgnLicgKyB1cmwpIGFzIFBhdGhTZWdtZW50O1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucm9vdERpcnMubWFwKHJvb3REaXIgPT4gam9pbihyb290RGlyLCBzZWdtZW50KSk7XG4gIH1cblxuICAvKipcbiAgICogVHlwZVNjcmlwdCBwcm92aWRlcyB1dGlsaXRpZXMgdG8gcmVzb2x2ZSBtb2R1bGUgbmFtZXMsIGJ1dCBub3QgcmVzb3VyY2UgZmlsZXMgKHdoaWNoIGFyZW4ndFxuICAgKiBhIHBhcnQgb2YgdGhlIHRzLlByb2dyYW0pLiBIb3dldmVyLCBUeXBlU2NyaXB0J3MgbW9kdWxlIHJlc29sdXRpb24gY2FuIGJlIHVzZWQgY3JlYXRpdmVseVxuICAgKiB0byBsb2NhdGUgd2hlcmUgcmVzb3VyY2UgZmlsZXMgc2hvdWxkIGJlIGV4cGVjdGVkIHRvIGV4aXN0LiBTaW5jZSBtb2R1bGUgcmVzb2x1dGlvbiByZXR1cm5zXG4gICAqIGEgbGlzdCBvZiBmaWxlIG5hbWVzIHRoYXQgd2VyZSBjb25zaWRlcmVkLCB0aGUgbG9hZGVyIGNhbiBlbnVtZXJhdGUgdGhlIHBvc3NpYmxlIGxvY2F0aW9uc1xuICAgKiBmb3IgdGhlIGZpbGUgYnkgc2V0dGluZyB1cCBhIG1vZHVsZSByZXNvbHV0aW9uIGZvciBpdCB0aGF0IHdpbGwgZmFpbC5cbiAgICovXG4gIHByaXZhdGUgZ2V0UmVzb2x2ZWRDYW5kaWRhdGVMb2NhdGlvbnModXJsOiBzdHJpbmcsIGZyb21GaWxlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgLy8gYGZhaWxlZExvb2t1cExvY2F0aW9uc2AgaXMgaW4gdGhlIG5hbWUgb2YgdGhlIHR5cGUgdHMuUmVzb2x2ZWRNb2R1bGVXaXRoRmFpbGVkTG9va3VwTG9jYXRpb25zXG4gICAgLy8gYnV0IGlzIG1hcmtlZCBAaW50ZXJuYWwgaW4gVHlwZVNjcmlwdC4gU2VlXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yODc3MC5cbiAgICB0eXBlIFJlc29sdmVkTW9kdWxlV2l0aEZhaWxlZExvb2t1cExvY2F0aW9ucyA9XG4gICAgICAgIHRzLlJlc29sdmVkTW9kdWxlV2l0aEZhaWxlZExvb2t1cExvY2F0aW9ucyZ7ZmFpbGVkTG9va3VwTG9jYXRpb25zOiBSZWFkb25seUFycmF5PHN0cmluZz59O1xuXG4gICAgLy8gY2xhbmctZm9ybWF0IG9mZlxuICAgIGNvbnN0IGZhaWxlZExvb2t1cCA9IHRzLnJlc29sdmVNb2R1bGVOYW1lKHVybCArIFJFU09VUkNFX01BUktFUiwgZnJvbUZpbGUsIHRoaXMub3B0aW9ucywgdGhpcy5sb29rdXBSZXNvbHV0aW9uSG9zdCkgYXMgUmVzb2x2ZWRNb2R1bGVXaXRoRmFpbGVkTG9va3VwTG9jYXRpb25zO1xuICAgIC8vIGNsYW5nLWZvcm1hdCBvblxuICAgIGlmIChmYWlsZWRMb29rdXAuZmFpbGVkTG9va3VwTG9jYXRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW50ZXJuYWwgZXJyb3I6IGV4cGVjdGVkIHRvIGZpbmQgZmFpbGVkTG9va3VwTG9jYXRpb25zIGR1cmluZyByZXNvbHV0aW9uIG9mIHJlc291cmNlICcke1xuICAgICAgICAgICAgICB1cmx9JyBpbiBjb250ZXh0IG9mICR7ZnJvbUZpbGV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhaWxlZExvb2t1cC5mYWlsZWRMb29rdXBMb2NhdGlvbnNcbiAgICAgICAgLmZpbHRlcihjYW5kaWRhdGUgPT4gY2FuZGlkYXRlLmVuZHNXaXRoKFJFU09VUkNFX01BUktFUl9UUykpXG4gICAgICAgIC5tYXAoY2FuZGlkYXRlID0+IGNhbmRpZGF0ZS5zbGljZSgwLCAtUkVTT1VSQ0VfTUFSS0VSX1RTLmxlbmd0aCkpO1xuICB9XG59XG5cbi8qKlxuICogRGVyaXZlcyBhIGB0cy5Nb2R1bGVSZXNvbHV0aW9uSG9zdGAgZnJvbSBhIGNvbXBpbGVyIGFkYXB0ZXIgdGhhdCByZWNvZ25pemVzIHRoZSBzcGVjaWFsIHJlc291cmNlXG4gKiBtYXJrZXIgYW5kIGRvZXMgbm90IGdvIHRvIHRoZSBmaWxlc3lzdGVtIGZvciB0aGVzZSByZXF1ZXN0cywgYXMgdGhleSBhcmUga25vd24gbm90IHRvIGV4aXN0LlxuICovXG5mdW5jdGlvbiBjcmVhdGVMb29rdXBSZXNvbHV0aW9uSG9zdChhZGFwdGVyOiBOZ0NvbXBpbGVyQWRhcHRlcik6XG4gICAgUmVxdWlyZWREZWxlZ2F0aW9uczx0cy5Nb2R1bGVSZXNvbHV0aW9uSG9zdD4ge1xuICByZXR1cm4ge1xuICAgIGRpcmVjdG9yeUV4aXN0cyhkaXJlY3RvcnlOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgIGlmIChkaXJlY3RvcnlOYW1lLmluY2x1ZGVzKFJFU09VUkNFX01BUktFUikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChhZGFwdGVyLmRpcmVjdG9yeUV4aXN0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBhZGFwdGVyLmRpcmVjdG9yeUV4aXN0cyhkaXJlY3RvcnlOYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFR5cGVTY3JpcHQncyBtb2R1bGUgcmVzb2x1dGlvbiBsb2dpYyBhc3N1bWVzIHRoYXQgdGhlIGRpcmVjdG9yeSBleGlzdHMgd2hlbiBubyBob3N0XG4gICAgICAgIC8vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZS5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBmaWxlRXhpc3RzKGZpbGVOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgIGlmIChmaWxlTmFtZS5pbmNsdWRlcyhSRVNPVVJDRV9NQVJLRVIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhZGFwdGVyLmZpbGVFeGlzdHMoZmlsZU5hbWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVhZEZpbGU6IGFkYXB0ZXIucmVhZEZpbGUuYmluZChhZGFwdGVyKSxcbiAgICBnZXRDdXJyZW50RGlyZWN0b3J5OiBhZGFwdGVyLmdldEN1cnJlbnREaXJlY3RvcnkuYmluZChhZGFwdGVyKSxcbiAgICBnZXREaXJlY3RvcmllczogYWRhcHRlci5nZXREaXJlY3Rvcmllcz8uYmluZChhZGFwdGVyKSxcbiAgICByZWFscGF0aDogYWRhcHRlci5yZWFscGF0aD8uYmluZChhZGFwdGVyKSxcbiAgICB0cmFjZTogYWRhcHRlci50cmFjZT8uYmluZChhZGFwdGVyKSxcbiAgfTtcbn1cbiJdfQ==
@@ -1,11 +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
- /// <reference types="node" />
9
- export { NgModuleRouteAnalyzer } from './src/analyzer';
10
- export { entryPointKeyFor } from './src/route';
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3JvdXRpbmcvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsOEJBQThCO0FBRTlCLE9BQU8sRUFBWSxxQkFBcUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vLy8gPHJlZmVyZW5jZSB0eXBlcz1cIm5vZGVcIiAvPlxuXG5leHBvcnQge0xhenlSb3V0ZSwgTmdNb2R1bGVSb3V0ZUFuYWx5emVyfSBmcm9tICcuL3NyYy9hbmFseXplcic7XG5leHBvcnQge2VudHJ5UG9pbnRLZXlGb3J9IGZyb20gJy4vc3JjL3JvdXRlJztcbiJdfQ==
File without changes
@@ -1,69 +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 { scanForCandidateTransitiveModules, scanForRouteEntryPoints } from './lazy';
9
- import { entryPointKeyFor, RouterEntryPointManager } from './route';
10
- export class NgModuleRouteAnalyzer {
11
- constructor(moduleResolver, evaluator) {
12
- this.evaluator = evaluator;
13
- this.modules = new Map();
14
- this.entryPointManager = new RouterEntryPointManager(moduleResolver);
15
- }
16
- add(sourceFile, moduleName, imports, exports, providers) {
17
- const key = entryPointKeyFor(sourceFile.fileName, moduleName);
18
- if (this.modules.has(key)) {
19
- throw new Error(`Double route analyzing for '${key}'.`);
20
- }
21
- this.modules.set(key, {
22
- sourceFile,
23
- moduleName,
24
- imports,
25
- exports,
26
- providers,
27
- });
28
- }
29
- listLazyRoutes(entryModuleKey) {
30
- if ((entryModuleKey !== undefined) && !this.modules.has(entryModuleKey)) {
31
- throw new Error(`Failed to list lazy routes: Unknown module '${entryModuleKey}'.`);
32
- }
33
- const routes = [];
34
- const scannedModuleKeys = new Set();
35
- const pendingModuleKeys = entryModuleKey ? [entryModuleKey] : Array.from(this.modules.keys());
36
- // When listing lazy routes for a specific entry module, we need to recursively extract
37
- // "transitive" routes from imported/exported modules. This is not necessary when listing all
38
- // lazy routes, because all analyzed modules will be scanned anyway.
39
- const scanRecursively = entryModuleKey !== undefined;
40
- while (pendingModuleKeys.length > 0) {
41
- const key = pendingModuleKeys.pop();
42
- if (scannedModuleKeys.has(key)) {
43
- continue;
44
- }
45
- else {
46
- scannedModuleKeys.add(key);
47
- }
48
- const data = this.modules.get(key);
49
- const entryPoints = scanForRouteEntryPoints(data.sourceFile, data.moduleName, data, this.entryPointManager, this.evaluator);
50
- routes.push(...entryPoints.map(entryPoint => ({
51
- route: entryPoint.loadChildren,
52
- module: entryPoint.from,
53
- referencedModule: entryPoint.resolvedTo,
54
- })));
55
- if (scanRecursively) {
56
- pendingModuleKeys.push(...[
57
- // Scan the retrieved lazy route entry points.
58
- ...entryPoints.map(({ resolvedTo }) => entryPointKeyFor(resolvedTo.filePath, resolvedTo.moduleName)),
59
- // Scan the current module's imported modules.
60
- ...scanForCandidateTransitiveModules(data.imports, this.evaluator),
61
- // Scan the current module's exported modules.
62
- ...scanForCandidateTransitiveModules(data.exports, this.evaluator),
63
- ].filter(key => this.modules.has(key)));
64
- }
65
- }
66
- return routes;
67
- }
68
- }
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3JvdXRpbmcvc3JjL2FuYWx5emVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQU9ILE9BQU8sRUFBQyxpQ0FBaUMsRUFBRSx1QkFBdUIsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUNsRixPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFnQmxFLE1BQU0sT0FBTyxxQkFBcUI7SUFJaEMsWUFBWSxjQUE4QixFQUFVLFNBQTJCO1FBQTNCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBSHZFLFlBQU8sR0FBRyxJQUFJLEdBQUcsRUFBZ0MsQ0FBQztRQUl4RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsR0FBRyxDQUFDLFVBQXlCLEVBQUUsVUFBa0IsRUFBRSxPQUEyQixFQUMxRSxPQUEyQixFQUFFLFNBQTZCO1FBQzVELE1BQU0sR0FBRyxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDOUQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixHQUFHLElBQUksQ0FBQyxDQUFDO1NBQ3pEO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ3BCLFVBQVU7WUFDVixVQUFVO1lBQ1YsT0FBTztZQUNQLE9BQU87WUFDUCxTQUFTO1NBQ1YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxjQUFpQztRQUM5QyxJQUFJLENBQUMsY0FBYyxLQUFLLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDdkUsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsY0FBYyxJQUFJLENBQUMsQ0FBQztTQUNwRjtRQUVELE1BQU0sTUFBTSxHQUFnQixFQUFFLENBQUM7UUFDL0IsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBQzVDLE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUU5Rix1RkFBdUY7UUFDdkYsNkZBQTZGO1FBQzdGLG9FQUFvRTtRQUNwRSxNQUFNLGVBQWUsR0FBRyxjQUFjLEtBQUssU0FBUyxDQUFDO1FBRXJELE9BQU8saUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNuQyxNQUFNLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUcsQ0FBQztZQUVyQyxJQUFJLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDOUIsU0FBUzthQUNWO2lCQUFNO2dCQUNMLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUM1QjtZQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBRSxDQUFDO1lBQ3BDLE1BQU0sV0FBVyxHQUFHLHVCQUF1QixDQUN2QyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFcEYsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNiLEtBQUssRUFBRSxVQUFVLENBQUMsWUFBWTtnQkFDOUIsTUFBTSxFQUFFLFVBQVUsQ0FBQyxJQUFJO2dCQUN2QixnQkFBZ0IsRUFBRSxVQUFVLENBQUMsVUFBVTthQUN4QyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXBDLElBQUksZUFBZSxFQUFFO2dCQUNuQixpQkFBaUIsQ0FBQyxJQUFJLENBQ2xCLEdBQUc7b0JBQ0MsOENBQThDO29CQUM5QyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQ2QsQ0FBQyxFQUFDLFVBQVUsRUFBQyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDbkYsOENBQThDO29CQUM5QyxHQUFHLGlDQUFpQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztvQkFDbEUsOENBQThDO29CQUM5QyxHQUFHLGlDQUFpQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztpQkFDekUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDekM7U0FDRjtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtNb2R1bGVSZXNvbHZlcn0gZnJvbSAnLi4vLi4vaW1wb3J0cyc7XG5pbXBvcnQge1BhcnRpYWxFdmFsdWF0b3J9IGZyb20gJy4uLy4uL3BhcnRpYWxfZXZhbHVhdG9yJztcblxuaW1wb3J0IHtzY2FuRm9yQ2FuZGlkYXRlVHJhbnNpdGl2ZU1vZHVsZXMsIHNjYW5Gb3JSb3V0ZUVudHJ5UG9pbnRzfSBmcm9tICcuL2xhenknO1xuaW1wb3J0IHtlbnRyeVBvaW50S2V5Rm9yLCBSb3V0ZXJFbnRyeVBvaW50TWFuYWdlcn0gZnJvbSAnLi9yb3V0ZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmdNb2R1bGVSYXdSb3V0ZURhdGEge1xuICBzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlO1xuICBtb2R1bGVOYW1lOiBzdHJpbmc7XG4gIGltcG9ydHM6IHRzLkV4cHJlc3Npb258bnVsbDtcbiAgZXhwb3J0czogdHMuRXhwcmVzc2lvbnxudWxsO1xuICBwcm92aWRlcnM6IHRzLkV4cHJlc3Npb258bnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYXp5Um91dGUge1xuICByb3V0ZTogc3RyaW5nO1xuICBtb2R1bGU6IHtuYW1lOiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmd9O1xuICByZWZlcmVuY2VkTW9kdWxlOiB7bmFtZTogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nfTtcbn1cblxuZXhwb3J0IGNsYXNzIE5nTW9kdWxlUm91dGVBbmFseXplciB7XG4gIHByaXZhdGUgbW9kdWxlcyA9IG5ldyBNYXA8c3RyaW5nLCBOZ01vZHVsZVJhd1JvdXRlRGF0YT4oKTtcbiAgcHJpdmF0ZSBlbnRyeVBvaW50TWFuYWdlcjogUm91dGVyRW50cnlQb2ludE1hbmFnZXI7XG5cbiAgY29uc3RydWN0b3IobW9kdWxlUmVzb2x2ZXI6IE1vZHVsZVJlc29sdmVyLCBwcml2YXRlIGV2YWx1YXRvcjogUGFydGlhbEV2YWx1YXRvcikge1xuICAgIHRoaXMuZW50cnlQb2ludE1hbmFnZXIgPSBuZXcgUm91dGVyRW50cnlQb2ludE1hbmFnZXIobW9kdWxlUmVzb2x2ZXIpO1xuICB9XG5cbiAgYWRkKHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUsIG1vZHVsZU5hbWU6IHN0cmluZywgaW1wb3J0czogdHMuRXhwcmVzc2lvbnxudWxsLFxuICAgICAgZXhwb3J0czogdHMuRXhwcmVzc2lvbnxudWxsLCBwcm92aWRlcnM6IHRzLkV4cHJlc3Npb258bnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IGVudHJ5UG9pbnRLZXlGb3Ioc291cmNlRmlsZS5maWxlTmFtZSwgbW9kdWxlTmFtZSk7XG4gICAgaWYgKHRoaXMubW9kdWxlcy5oYXMoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEb3VibGUgcm91dGUgYW5hbHl6aW5nIGZvciAnJHtrZXl9Jy5gKTtcbiAgICB9XG4gICAgdGhpcy5tb2R1bGVzLnNldChrZXksIHtcbiAgICAgIHNvdXJjZUZpbGUsXG4gICAgICBtb2R1bGVOYW1lLFxuICAgICAgaW1wb3J0cyxcbiAgICAgIGV4cG9ydHMsXG4gICAgICBwcm92aWRlcnMsXG4gICAgfSk7XG4gIH1cblxuICBsaXN0TGF6eVJvdXRlcyhlbnRyeU1vZHVsZUtleT86IHN0cmluZ3x1bmRlZmluZWQpOiBMYXp5Um91dGVbXSB7XG4gICAgaWYgKChlbnRyeU1vZHVsZUtleSAhPT0gdW5kZWZpbmVkKSAmJiAhdGhpcy5tb2R1bGVzLmhhcyhlbnRyeU1vZHVsZUtleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGxpc3QgbGF6eSByb3V0ZXM6IFVua25vd24gbW9kdWxlICcke2VudHJ5TW9kdWxlS2V5fScuYCk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm91dGVzOiBMYXp5Um91dGVbXSA9IFtdO1xuICAgIGNvbnN0IHNjYW5uZWRNb2R1bGVLZXlzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgcGVuZGluZ01vZHVsZUtleXMgPSBlbnRyeU1vZHVsZUtleSA/IFtlbnRyeU1vZHVsZUtleV0gOiBBcnJheS5mcm9tKHRoaXMubW9kdWxlcy5rZXlzKCkpO1xuXG4gICAgLy8gV2hlbiBsaXN0aW5nIGxhenkgcm91dGVzIGZvciBhIHNwZWNpZmljIGVudHJ5IG1vZHVsZSwgd2UgbmVlZCB0byByZWN1cnNpdmVseSBleHRyYWN0XG4gICAgLy8gXCJ0cmFuc2l0aXZlXCIgcm91dGVzIGZyb20gaW1wb3J0ZWQvZXhwb3J0ZWQgbW9kdWxlcy4gVGhpcyBpcyBub3QgbmVjZXNzYXJ5IHdoZW4gbGlzdGluZyBhbGxcbiAgICAvLyBsYXp5IHJvdXRlcywgYmVjYXVzZSBhbGwgYW5hbHl6ZWQgbW9kdWxlcyB3aWxsIGJlIHNjYW5uZWQgYW55d2F5LlxuICAgIGNvbnN0IHNjYW5SZWN1cnNpdmVseSA9IGVudHJ5TW9kdWxlS2V5ICE9PSB1bmRlZmluZWQ7XG5cbiAgICB3aGlsZSAocGVuZGluZ01vZHVsZUtleXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qga2V5ID0gcGVuZGluZ01vZHVsZUtleXMucG9wKCkhO1xuXG4gICAgICBpZiAoc2Nhbm5lZE1vZHVsZUtleXMuaGFzKGtleSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2FubmVkTW9kdWxlS2V5cy5hZGQoa2V5KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMubW9kdWxlcy5nZXQoa2V5KSE7XG4gICAgICBjb25zdCBlbnRyeVBvaW50cyA9IHNjYW5Gb3JSb3V0ZUVudHJ5UG9pbnRzKFxuICAgICAgICAgIGRhdGEuc291cmNlRmlsZSwgZGF0YS5tb2R1bGVOYW1lLCBkYXRhLCB0aGlzLmVudHJ5UG9pbnRNYW5hZ2VyLCB0aGlzLmV2YWx1YXRvcik7XG5cbiAgICAgIHJvdXRlcy5wdXNoKC4uLmVudHJ5UG9pbnRzLm1hcChlbnRyeVBvaW50ID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZTogZW50cnlQb2ludC5sb2FkQ2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGU6IGVudHJ5UG9pbnQuZnJvbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZWRNb2R1bGU6IGVudHJ5UG9pbnQucmVzb2x2ZWRUbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSkpO1xuXG4gICAgICBpZiAoc2NhblJlY3Vyc2l2ZWx5KSB7XG4gICAgICAgIHBlbmRpbmdNb2R1bGVLZXlzLnB1c2goXG4gICAgICAgICAgICAuLi5bXG4gICAgICAgICAgICAgICAgLy8gU2NhbiB0aGUgcmV0cmlldmVkIGxhenkgcm91dGUgZW50cnkgcG9pbnRzLlxuICAgICAgICAgICAgICAgIC4uLmVudHJ5UG9pbnRzLm1hcChcbiAgICAgICAgICAgICAgICAgICAgKHtyZXNvbHZlZFRvfSkgPT4gZW50cnlQb2ludEtleUZvcihyZXNvbHZlZFRvLmZpbGVQYXRoLCByZXNvbHZlZFRvLm1vZHVsZU5hbWUpKSxcbiAgICAgICAgICAgICAgICAvLyBTY2FuIHRoZSBjdXJyZW50IG1vZHVsZSdzIGltcG9ydGVkIG1vZHVsZXMuXG4gICAgICAgICAgICAgICAgLi4uc2NhbkZvckNhbmRpZGF0ZVRyYW5zaXRpdmVNb2R1bGVzKGRhdGEuaW1wb3J0cywgdGhpcy5ldmFsdWF0b3IpLFxuICAgICAgICAgICAgICAgIC8vIFNjYW4gdGhlIGN1cnJlbnQgbW9kdWxlJ3MgZXhwb3J0ZWQgbW9kdWxlcy5cbiAgICAgICAgICAgICAgICAuLi5zY2FuRm9yQ2FuZGlkYXRlVHJhbnNpdGl2ZU1vZHVsZXMoZGF0YS5leHBvcnRzLCB0aGlzLmV2YWx1YXRvciksXG4gICAgICAgIF0uZmlsdGVyKGtleSA9PiB0aGlzLm1vZHVsZXMuaGFzKGtleSkpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcm91dGVzO1xuICB9XG59XG4iXX0=
@@ -1,168 +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 { entryPointKeyFor } from './route';
11
- const ROUTES_MARKER = '__ngRoutesMarker__';
12
- export function scanForCandidateTransitiveModules(expr, evaluator) {
13
- if (expr === null) {
14
- return [];
15
- }
16
- const candidateModuleKeys = [];
17
- const entries = evaluator.evaluate(expr);
18
- function recursivelyAddModules(entry) {
19
- if (Array.isArray(entry)) {
20
- for (const e of entry) {
21
- recursivelyAddModules(e);
22
- }
23
- }
24
- else if (entry instanceof Map) {
25
- if (entry.has('ngModule')) {
26
- recursivelyAddModules(entry.get('ngModule'));
27
- }
28
- }
29
- else if ((entry instanceof Reference) && hasIdentifier(entry.node)) {
30
- const filePath = entry.node.getSourceFile().fileName;
31
- const moduleName = entry.node.name.text;
32
- candidateModuleKeys.push(entryPointKeyFor(filePath, moduleName));
33
- }
34
- }
35
- recursivelyAddModules(entries);
36
- return candidateModuleKeys;
37
- }
38
- export function scanForRouteEntryPoints(ngModule, moduleName, data, entryPointManager, evaluator) {
39
- const loadChildrenIdentifiers = [];
40
- const from = entryPointManager.fromNgModule(ngModule, moduleName);
41
- if (data.providers !== null) {
42
- loadChildrenIdentifiers.push(...scanForProviders(data.providers, evaluator));
43
- }
44
- if (data.imports !== null) {
45
- loadChildrenIdentifiers.push(...scanForRouterModuleUsage(data.imports, evaluator));
46
- }
47
- if (data.exports !== null) {
48
- loadChildrenIdentifiers.push(...scanForRouterModuleUsage(data.exports, evaluator));
49
- }
50
- const routes = [];
51
- for (const loadChildren of loadChildrenIdentifiers) {
52
- const resolvedTo = entryPointManager.resolveLoadChildrenIdentifier(loadChildren, ngModule);
53
- if (resolvedTo !== null) {
54
- routes.push({
55
- loadChildren,
56
- from,
57
- resolvedTo,
58
- });
59
- }
60
- }
61
- return routes;
62
- }
63
- function scanForProviders(expr, evaluator) {
64
- const loadChildrenIdentifiers = [];
65
- const providers = evaluator.evaluate(expr);
66
- function recursivelyAddProviders(provider) {
67
- if (Array.isArray(provider)) {
68
- for (const entry of provider) {
69
- recursivelyAddProviders(entry);
70
- }
71
- }
72
- else if (provider instanceof Map) {
73
- if (provider.has('provide') && provider.has('useValue')) {
74
- const provide = provider.get('provide');
75
- const useValue = provider.get('useValue');
76
- if (isRouteToken(provide) && Array.isArray(useValue)) {
77
- loadChildrenIdentifiers.push(...scanForLazyRoutes(useValue));
78
- }
79
- }
80
- }
81
- }
82
- recursivelyAddProviders(providers);
83
- return loadChildrenIdentifiers;
84
- }
85
- function scanForRouterModuleUsage(expr, evaluator) {
86
- const loadChildrenIdentifiers = [];
87
- const imports = evaluator.evaluate(expr, routerModuleFFR);
88
- function recursivelyAddRoutes(imp) {
89
- if (Array.isArray(imp)) {
90
- for (const entry of imp) {
91
- recursivelyAddRoutes(entry);
92
- }
93
- }
94
- else if (imp instanceof Map) {
95
- if (imp.has(ROUTES_MARKER) && imp.has('routes')) {
96
- const routes = imp.get('routes');
97
- if (Array.isArray(routes)) {
98
- loadChildrenIdentifiers.push(...scanForLazyRoutes(routes));
99
- }
100
- }
101
- }
102
- }
103
- recursivelyAddRoutes(imports);
104
- return loadChildrenIdentifiers;
105
- }
106
- function scanForLazyRoutes(routes) {
107
- const loadChildrenIdentifiers = [];
108
- function recursivelyScanRoutes(routes) {
109
- for (let route of routes) {
110
- if (!(route instanceof Map)) {
111
- continue;
112
- }
113
- if (route.has('loadChildren')) {
114
- const loadChildren = route.get('loadChildren');
115
- if (typeof loadChildren === 'string') {
116
- loadChildrenIdentifiers.push(loadChildren);
117
- }
118
- }
119
- else if (route.has('children')) {
120
- const children = route.get('children');
121
- if (Array.isArray(children)) {
122
- recursivelyScanRoutes(children);
123
- }
124
- }
125
- }
126
- }
127
- recursivelyScanRoutes(routes);
128
- return loadChildrenIdentifiers;
129
- }
130
- /**
131
- * A foreign function resolver that converts `RouterModule.forRoot/forChild(X)` to a special object
132
- * of the form `{__ngRoutesMarker__: true, routes: X}`.
133
- *
134
- * These objects are then recognizable inside the larger set of imports/exports.
135
- */
136
- const routerModuleFFR = function routerModuleFFR(ref, args) {
137
- if (!isMethodNodeReference(ref) || !ts.isClassDeclaration(ref.node.parent)) {
138
- return null;
139
- }
140
- else if (ref.bestGuessOwningModule === null ||
141
- ref.bestGuessOwningModule.specifier !== '@angular/router') {
142
- return null;
143
- }
144
- else if (ref.node.parent.name === undefined || ref.node.parent.name.text !== 'RouterModule') {
145
- return null;
146
- }
147
- else if (!ts.isIdentifier(ref.node.name) ||
148
- (ref.node.name.text !== 'forRoot' && ref.node.name.text !== 'forChild')) {
149
- return null;
150
- }
151
- const routes = args[0];
152
- return ts.createObjectLiteral([
153
- ts.createPropertyAssignment(ROUTES_MARKER, ts.createTrue()),
154
- ts.createPropertyAssignment('routes', routes),
155
- ]);
156
- };
157
- function hasIdentifier(node) {
158
- const node_ = node;
159
- return (node_.name !== undefined) && ts.isIdentifier(node_.name);
160
- }
161
- function isMethodNodeReference(ref) {
162
- return ts.isMethodDeclaration(ref.node);
163
- }
164
- function isRouteToken(ref) {
165
- return ref instanceof Reference && ref.bestGuessOwningModule !== null &&
166
- ref.bestGuessOwningModule.specifier === '@angular/router' && ref.debugName === 'ROUTES';
167
- }
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2Mvcm91dGluZy9zcmMvbGF6eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVqQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBSXhDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBNEMsTUFBTSxTQUFTLENBQUM7QUFFcEYsTUFBTSxhQUFhLEdBQUcsb0JBQW9CLENBQUM7QUFRM0MsTUFBTSxVQUFVLGlDQUFpQyxDQUM3QyxJQUF3QixFQUFFLFNBQTJCO0lBQ3ZELElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtRQUNqQixPQUFPLEVBQUUsQ0FBQztLQUNYO0lBRUQsTUFBTSxtQkFBbUIsR0FBYSxFQUFFLENBQUM7SUFDekMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV6QyxTQUFTLHFCQUFxQixDQUFDLEtBQW9CO1FBQ2pELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixLQUFLLE1BQU0sQ0FBQyxJQUFJLEtBQUssRUFBRTtnQkFDckIscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDMUI7U0FDRjthQUFNLElBQUksS0FBSyxZQUFZLEdBQUcsRUFBRTtZQUMvQixJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQ3pCLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFFLENBQUMsQ0FBQzthQUMvQztTQUNGO2FBQU0sSUFBSSxDQUFDLEtBQUssWUFBWSxTQUFTLENBQUMsSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3BFLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxDQUFDO1lBQ3JELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN4QyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7U0FDbEU7SUFDSCxDQUFDO0lBRUQscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0IsT0FBTyxtQkFBbUIsQ0FBQztBQUM3QixDQUFDO0FBRUQsTUFBTSxVQUFVLHVCQUF1QixDQUNuQyxRQUF1QixFQUFFLFVBQWtCLEVBQUUsSUFBMEIsRUFDdkUsaUJBQTBDLEVBQUUsU0FBMkI7SUFDekUsTUFBTSx1QkFBdUIsR0FBYSxFQUFFLENBQUM7SUFDN0MsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNsRSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxFQUFFO1FBQzNCLHVCQUF1QixDQUFDLElBQUksQ0FBQyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztLQUM5RTtJQUNELElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUU7UUFDekIsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEdBQUcsd0JBQXdCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0tBQ3BGO0lBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRTtRQUN6Qix1QkFBdUIsQ0FBQyxJQUFJLENBQUMsR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7S0FDcEY7SUFDRCxNQUFNLE1BQU0sR0FBcUIsRUFBRSxDQUFDO0lBQ3BDLEtBQUssTUFBTSxZQUFZLElBQUksdUJBQXVCLEVBQUU7UUFDbEQsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsNkJBQTZCLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzNGLElBQUksVUFBVSxLQUFLLElBQUksRUFBRTtZQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNWLFlBQVk7Z0JBQ1osSUFBSTtnQkFDSixVQUFVO2FBQ1gsQ0FBQyxDQUFDO1NBQ0o7S0FDRjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLElBQW1CLEVBQUUsU0FBMkI7SUFDeEUsTUFBTSx1QkFBdUIsR0FBYSxFQUFFLENBQUM7SUFDN0MsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUUzQyxTQUFTLHVCQUF1QixDQUFDLFFBQXVCO1FBQ3RELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUMzQixLQUFLLE1BQU0sS0FBSyxJQUFJLFFBQVEsRUFBRTtnQkFDNUIsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDaEM7U0FDRjthQUFNLElBQUksUUFBUSxZQUFZLEdBQUcsRUFBRTtZQUNsQyxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDdkQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDeEMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDcEQsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztpQkFDOUQ7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVELHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25DLE9BQU8sdUJBQXVCLENBQUM7QUFDakMsQ0FBQztBQUVELFNBQVMsd0JBQXdCLENBQUMsSUFBbUIsRUFBRSxTQUEyQjtJQUNoRixNQUFNLHVCQUF1QixHQUFhLEVBQUUsQ0FBQztJQUM3QyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztJQUUxRCxTQUFTLG9CQUFvQixDQUFDLEdBQWtCO1FBQzlDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN0QixLQUFLLE1BQU0sS0FBSyxJQUFJLEdBQUcsRUFBRTtnQkFDdkIsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDN0I7U0FDRjthQUFNLElBQUksR0FBRyxZQUFZLEdBQUcsRUFBRTtZQUM3QixJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDL0MsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDakMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUN6Qix1QkFBdUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2lCQUM1RDthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUIsT0FBTyx1QkFBdUIsQ0FBQztBQUNqQyxDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxNQUF1QjtJQUNoRCxNQUFNLHVCQUF1QixHQUFhLEVBQUUsQ0FBQztJQUU3QyxTQUFTLHFCQUFxQixDQUFDLE1BQXVCO1FBQ3BELEtBQUssSUFBSSxLQUFLLElBQUksTUFBTSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxHQUFHLENBQUMsRUFBRTtnQkFDM0IsU0FBUzthQUNWO1lBQ0QsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUM3QixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLE9BQU8sWUFBWSxLQUFLLFFBQVEsRUFBRTtvQkFDcEMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2lCQUM1QzthQUNGO2lCQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDaEMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUMzQixxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDakM7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVELHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlCLE9BQU8sdUJBQXVCLENBQUM7QUFDakMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxlQUFlLEdBQ2pCLFNBQVMsZUFBZSxDQUNwQixHQUFpRixFQUNqRixJQUFrQztJQUN4QyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUMxRSxPQUFPLElBQUksQ0FBQztLQUNiO1NBQU0sSUFDSCxHQUFHLENBQUMscUJBQXFCLEtBQUssSUFBSTtRQUNsQyxHQUFHLENBQUMscUJBQXFCLENBQUMsU0FBUyxLQUFLLGlCQUFpQixFQUFFO1FBQzdELE9BQU8sSUFBSSxDQUFDO0tBQ2I7U0FBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxjQUFjLEVBQUU7UUFDN0YsT0FBTyxJQUFJLENBQUM7S0FDYjtTQUFNLElBQ0gsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQy9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLEVBQUU7UUFDM0UsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QixPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztRQUM1QixFQUFFLENBQUMsd0JBQXdCLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMzRCxFQUFFLENBQUMsd0JBQXdCLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztLQUM5QyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixTQUFTLGFBQWEsQ0FBQyxJQUFhO0lBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQTJCLENBQUM7SUFDMUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkUsQ0FBQztBQUVELFNBQVMscUJBQXFCLENBQzFCLEdBQWlGO0lBRW5GLE9BQU8sRUFBRSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsR0FBa0I7SUFDdEMsT0FBTyxHQUFHLFlBQVksU0FBUyxJQUFJLEdBQUcsQ0FBQyxxQkFBcUIsS0FBSyxJQUFJO1FBQ2pFLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEtBQUssaUJBQWlCLElBQUksR0FBRyxDQUFDLFNBQVMsS0FBSyxRQUFRLENBQUM7QUFDOUYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtSZWZlcmVuY2V9IGZyb20gJy4uLy4uL2ltcG9ydHMnO1xuaW1wb3J0IHtGb3JlaWduRnVuY3Rpb25SZXNvbHZlciwgUGFydGlhbEV2YWx1YXRvciwgUmVzb2x2ZWRWYWx1ZX0gZnJvbSAnLi4vLi4vcGFydGlhbF9ldmFsdWF0b3InO1xuXG5pbXBvcnQge05nTW9kdWxlUmF3Um91dGVEYXRhfSBmcm9tICcuL2FuYWx5emVyJztcbmltcG9ydCB7ZW50cnlQb2ludEtleUZvciwgUm91dGVyRW50cnlQb2ludCwgUm91dGVyRW50cnlQb2ludE1hbmFnZXJ9IGZyb20gJy4vcm91dGUnO1xuXG5jb25zdCBST1VURVNfTUFSS0VSID0gJ19fbmdSb3V0ZXNNYXJrZXJfXyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF6eVJvdXRlRW50cnkge1xuICBsb2FkQ2hpbGRyZW46IHN0cmluZztcbiAgZnJvbTogUm91dGVyRW50cnlQb2ludDtcbiAgcmVzb2x2ZWRUbzogUm91dGVyRW50cnlQb2ludDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYW5Gb3JDYW5kaWRhdGVUcmFuc2l0aXZlTW9kdWxlcyhcbiAgICBleHByOiB0cy5FeHByZXNzaW9ufG51bGwsIGV2YWx1YXRvcjogUGFydGlhbEV2YWx1YXRvcik6IHN0cmluZ1tdIHtcbiAgaWYgKGV4cHIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBjYW5kaWRhdGVNb2R1bGVLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBlbnRyaWVzID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHIpO1xuXG4gIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5QWRkTW9kdWxlcyhlbnRyeTogUmVzb2x2ZWRWYWx1ZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGVudHJ5KSkge1xuICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJ5KSB7XG4gICAgICAgIHJlY3Vyc2l2ZWx5QWRkTW9kdWxlcyhlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVudHJ5IGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICBpZiAoZW50cnkuaGFzKCduZ01vZHVsZScpKSB7XG4gICAgICAgIHJlY3Vyc2l2ZWx5QWRkTW9kdWxlcyhlbnRyeS5nZXQoJ25nTW9kdWxlJykhKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKChlbnRyeSBpbnN0YW5jZW9mIFJlZmVyZW5jZSkgJiYgaGFzSWRlbnRpZmllcihlbnRyeS5ub2RlKSkge1xuICAgICAgY29uc3QgZmlsZVBhdGggPSBlbnRyeS5ub2RlLmdldFNvdXJjZUZpbGUoKS5maWxlTmFtZTtcbiAgICAgIGNvbnN0IG1vZHVsZU5hbWUgPSBlbnRyeS5ub2RlLm5hbWUudGV4dDtcbiAgICAgIGNhbmRpZGF0ZU1vZHVsZUtleXMucHVzaChlbnRyeVBvaW50S2V5Rm9yKGZpbGVQYXRoLCBtb2R1bGVOYW1lKSk7XG4gICAgfVxuICB9XG5cbiAgcmVjdXJzaXZlbHlBZGRNb2R1bGVzKGVudHJpZXMpO1xuICByZXR1cm4gY2FuZGlkYXRlTW9kdWxlS2V5cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYW5Gb3JSb3V0ZUVudHJ5UG9pbnRzKFxuICAgIG5nTW9kdWxlOiB0cy5Tb3VyY2VGaWxlLCBtb2R1bGVOYW1lOiBzdHJpbmcsIGRhdGE6IE5nTW9kdWxlUmF3Um91dGVEYXRhLFxuICAgIGVudHJ5UG9pbnRNYW5hZ2VyOiBSb3V0ZXJFbnRyeVBvaW50TWFuYWdlciwgZXZhbHVhdG9yOiBQYXJ0aWFsRXZhbHVhdG9yKTogTGF6eVJvdXRlRW50cnlbXSB7XG4gIGNvbnN0IGxvYWRDaGlsZHJlbklkZW50aWZpZXJzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBmcm9tID0gZW50cnlQb2ludE1hbmFnZXIuZnJvbU5nTW9kdWxlKG5nTW9kdWxlLCBtb2R1bGVOYW1lKTtcbiAgaWYgKGRhdGEucHJvdmlkZXJzICE9PSBudWxsKSB7XG4gICAgbG9hZENoaWxkcmVuSWRlbnRpZmllcnMucHVzaCguLi5zY2FuRm9yUHJvdmlkZXJzKGRhdGEucHJvdmlkZXJzLCBldmFsdWF0b3IpKTtcbiAgfVxuICBpZiAoZGF0YS5pbXBvcnRzICE9PSBudWxsKSB7XG4gICAgbG9hZENoaWxkcmVuSWRlbnRpZmllcnMucHVzaCguLi5zY2FuRm9yUm91dGVyTW9kdWxlVXNhZ2UoZGF0YS5pbXBvcnRzLCBldmFsdWF0b3IpKTtcbiAgfVxuICBpZiAoZGF0YS5leHBvcnRzICE9PSBudWxsKSB7XG4gICAgbG9hZENoaWxkcmVuSWRlbnRpZmllcnMucHVzaCguLi5zY2FuRm9yUm91dGVyTW9kdWxlVXNhZ2UoZGF0YS5leHBvcnRzLCBldmFsdWF0b3IpKTtcbiAgfVxuICBjb25zdCByb3V0ZXM6IExhenlSb3V0ZUVudHJ5W10gPSBbXTtcbiAgZm9yIChjb25zdCBsb2FkQ2hpbGRyZW4gb2YgbG9hZENoaWxkcmVuSWRlbnRpZmllcnMpIHtcbiAgICBjb25zdCByZXNvbHZlZFRvID0gZW50cnlQb2ludE1hbmFnZXIucmVzb2x2ZUxvYWRDaGlsZHJlbklkZW50aWZpZXIobG9hZENoaWxkcmVuLCBuZ01vZHVsZSk7XG4gICAgaWYgKHJlc29sdmVkVG8gIT09IG51bGwpIHtcbiAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgbG9hZENoaWxkcmVuLFxuICAgICAgICBmcm9tLFxuICAgICAgICByZXNvbHZlZFRvLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByb3V0ZXM7XG59XG5cbmZ1bmN0aW9uIHNjYW5Gb3JQcm92aWRlcnMoZXhwcjogdHMuRXhwcmVzc2lvbiwgZXZhbHVhdG9yOiBQYXJ0aWFsRXZhbHVhdG9yKTogc3RyaW5nW10ge1xuICBjb25zdCBsb2FkQ2hpbGRyZW5JZGVudGlmaWVyczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgcHJvdmlkZXJzID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHIpO1xuXG4gIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5QWRkUHJvdmlkZXJzKHByb3ZpZGVyOiBSZXNvbHZlZFZhbHVlKTogdm9pZCB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvdmlkZXIpKSB7XG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHByb3ZpZGVyKSB7XG4gICAgICAgIHJlY3Vyc2l2ZWx5QWRkUHJvdmlkZXJzKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3ZpZGVyIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICBpZiAocHJvdmlkZXIuaGFzKCdwcm92aWRlJykgJiYgcHJvdmlkZXIuaGFzKCd1c2VWYWx1ZScpKSB7XG4gICAgICAgIGNvbnN0IHByb3ZpZGUgPSBwcm92aWRlci5nZXQoJ3Byb3ZpZGUnKTtcbiAgICAgICAgY29uc3QgdXNlVmFsdWUgPSBwcm92aWRlci5nZXQoJ3VzZVZhbHVlJyk7XG4gICAgICAgIGlmIChpc1JvdXRlVG9rZW4ocHJvdmlkZSkgJiYgQXJyYXkuaXNBcnJheSh1c2VWYWx1ZSkpIHtcbiAgICAgICAgICBsb2FkQ2hpbGRyZW5JZGVudGlmaWVycy5wdXNoKC4uLnNjYW5Gb3JMYXp5Um91dGVzKHVzZVZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWN1cnNpdmVseUFkZFByb3ZpZGVycyhwcm92aWRlcnMpO1xuICByZXR1cm4gbG9hZENoaWxkcmVuSWRlbnRpZmllcnM7XG59XG5cbmZ1bmN0aW9uIHNjYW5Gb3JSb3V0ZXJNb2R1bGVVc2FnZShleHByOiB0cy5FeHByZXNzaW9uLCBldmFsdWF0b3I6IFBhcnRpYWxFdmFsdWF0b3IpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGxvYWRDaGlsZHJlbklkZW50aWZpZXJzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBpbXBvcnRzID0gZXZhbHVhdG9yLmV2YWx1YXRlKGV4cHIsIHJvdXRlck1vZHVsZUZGUik7XG5cbiAgZnVuY3Rpb24gcmVjdXJzaXZlbHlBZGRSb3V0ZXMoaW1wOiBSZXNvbHZlZFZhbHVlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW1wKSkge1xuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBpbXApIHtcbiAgICAgICAgcmVjdXJzaXZlbHlBZGRSb3V0ZXMoZW50cnkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaW1wIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICBpZiAoaW1wLmhhcyhST1VURVNfTUFSS0VSKSAmJiBpbXAuaGFzKCdyb3V0ZXMnKSkge1xuICAgICAgICBjb25zdCByb3V0ZXMgPSBpbXAuZ2V0KCdyb3V0ZXMnKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocm91dGVzKSkge1xuICAgICAgICAgIGxvYWRDaGlsZHJlbklkZW50aWZpZXJzLnB1c2goLi4uc2NhbkZvckxhenlSb3V0ZXMocm91dGVzKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWN1cnNpdmVseUFkZFJvdXRlcyhpbXBvcnRzKTtcbiAgcmV0dXJuIGxvYWRDaGlsZHJlbklkZW50aWZpZXJzO1xufVxuXG5mdW5jdGlvbiBzY2FuRm9yTGF6eVJvdXRlcyhyb3V0ZXM6IFJlc29sdmVkVmFsdWVbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgbG9hZENoaWxkcmVuSWRlbnRpZmllcnM6IHN0cmluZ1tdID0gW107XG5cbiAgZnVuY3Rpb24gcmVjdXJzaXZlbHlTY2FuUm91dGVzKHJvdXRlczogUmVzb2x2ZWRWYWx1ZVtdKTogdm9pZCB7XG4gICAgZm9yIChsZXQgcm91dGUgb2Ygcm91dGVzKSB7XG4gICAgICBpZiAoIShyb3V0ZSBpbnN0YW5jZW9mIE1hcCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocm91dGUuaGFzKCdsb2FkQ2hpbGRyZW4nKSkge1xuICAgICAgICBjb25zdCBsb2FkQ2hpbGRyZW4gPSByb3V0ZS5nZXQoJ2xvYWRDaGlsZHJlbicpO1xuICAgICAgICBpZiAodHlwZW9mIGxvYWRDaGlsZHJlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBsb2FkQ2hpbGRyZW5JZGVudGlmaWVycy5wdXNoKGxvYWRDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocm91dGUuaGFzKCdjaGlsZHJlbicpKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gcm91dGUuZ2V0KCdjaGlsZHJlbicpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICByZWN1cnNpdmVseVNjYW5Sb3V0ZXMoY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVjdXJzaXZlbHlTY2FuUm91dGVzKHJvdXRlcyk7XG4gIHJldHVybiBsb2FkQ2hpbGRyZW5JZGVudGlmaWVycztcbn1cblxuLyoqXG4gKiBBIGZvcmVpZ24gZnVuY3Rpb24gcmVzb2x2ZXIgdGhhdCBjb252ZXJ0cyBgUm91dGVyTW9kdWxlLmZvclJvb3QvZm9yQ2hpbGQoWClgIHRvIGEgc3BlY2lhbCBvYmplY3RcbiAqIG9mIHRoZSBmb3JtIGB7X19uZ1JvdXRlc01hcmtlcl9fOiB0cnVlLCByb3V0ZXM6IFh9YC5cbiAqXG4gKiBUaGVzZSBvYmplY3RzIGFyZSB0aGVuIHJlY29nbml6YWJsZSBpbnNpZGUgdGhlIGxhcmdlciBzZXQgb2YgaW1wb3J0cy9leHBvcnRzLlxuICovXG5jb25zdCByb3V0ZXJNb2R1bGVGRlI6IEZvcmVpZ25GdW5jdGlvblJlc29sdmVyID1cbiAgICBmdW5jdGlvbiByb3V0ZXJNb2R1bGVGRlIoXG4gICAgICAgIHJlZjogUmVmZXJlbmNlPHRzLkZ1bmN0aW9uRGVjbGFyYXRpb258dHMuTWV0aG9kRGVjbGFyYXRpb258dHMuRnVuY3Rpb25FeHByZXNzaW9uPixcbiAgICAgICAgYXJnczogUmVhZG9ubHlBcnJheTx0cy5FeHByZXNzaW9uPik6IHRzLkV4cHJlc3Npb258bnVsbCB7XG4gIGlmICghaXNNZXRob2ROb2RlUmVmZXJlbmNlKHJlZikgfHwgIXRzLmlzQ2xhc3NEZWNsYXJhdGlvbihyZWYubm9kZS5wYXJlbnQpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSBpZiAoXG4gICAgICByZWYuYmVzdEd1ZXNzT3duaW5nTW9kdWxlID09PSBudWxsIHx8XG4gICAgICByZWYuYmVzdEd1ZXNzT3duaW5nTW9kdWxlLnNwZWNpZmllciAhPT0gJ0Bhbmd1bGFyL3JvdXRlcicpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIGlmIChyZWYubm9kZS5wYXJlbnQubmFtZSA9PT0gdW5kZWZpbmVkIHx8IHJlZi5ub2RlLnBhcmVudC5uYW1lLnRleHQgIT09ICdSb3V0ZXJNb2R1bGUnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSBpZiAoXG4gICAgICAhdHMuaXNJZGVudGlmaWVyKHJlZi5ub2RlLm5hbWUpIHx8XG4gICAgICAocmVmLm5vZGUubmFtZS50ZXh0ICE9PSAnZm9yUm9vdCcgJiYgcmVmLm5vZGUubmFtZS50ZXh0ICE9PSAnZm9yQ2hpbGQnKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgcm91dGVzID0gYXJnc1swXTtcbiAgcmV0dXJuIHRzLmNyZWF0ZU9iamVjdExpdGVyYWwoW1xuICAgIHRzLmNyZWF0ZVByb3BlcnR5QXNzaWdubWVudChST1VURVNfTUFSS0VSLCB0cy5jcmVhdGVUcnVlKCkpLFxuICAgIHRzLmNyZWF0ZVByb3BlcnR5QXNzaWdubWVudCgncm91dGVzJywgcm91dGVzKSxcbiAgXSk7XG59O1xuXG5mdW5jdGlvbiBoYXNJZGVudGlmaWVyKG5vZGU6IHRzLk5vZGUpOiBub2RlIGlzIHRzLk5vZGUme25hbWU6IHRzLklkZW50aWZpZXJ9IHtcbiAgY29uc3Qgbm9kZV8gPSBub2RlIGFzIHRzLk5hbWVkRGVjbGFyYXRpb247XG4gIHJldHVybiAobm9kZV8ubmFtZSAhPT0gdW5kZWZpbmVkKSAmJiB0cy5pc0lkZW50aWZpZXIobm9kZV8ubmFtZSk7XG59XG5cbmZ1bmN0aW9uIGlzTWV0aG9kTm9kZVJlZmVyZW5jZShcbiAgICByZWY6IFJlZmVyZW5jZTx0cy5GdW5jdGlvbkRlY2xhcmF0aW9ufHRzLk1ldGhvZERlY2xhcmF0aW9ufHRzLkZ1bmN0aW9uRXhwcmVzc2lvbj4pOlxuICAgIHJlZiBpcyBSZWZlcmVuY2U8dHMuTWV0aG9kRGVjbGFyYXRpb24+IHtcbiAgcmV0dXJuIHRzLmlzTWV0aG9kRGVjbGFyYXRpb24ocmVmLm5vZGUpO1xufVxuXG5mdW5jdGlvbiBpc1JvdXRlVG9rZW4ocmVmOiBSZXNvbHZlZFZhbHVlKTogYm9vbGVhbiB7XG4gIHJldHVybiByZWYgaW5zdGFuY2VvZiBSZWZlcmVuY2UgJiYgcmVmLmJlc3RHdWVzc093bmluZ01vZHVsZSAhPT0gbnVsbCAmJlxuICAgICAgcmVmLmJlc3RHdWVzc093bmluZ01vZHVsZS5zcGVjaWZpZXIgPT09ICdAYW5ndWxhci9yb3V0ZXInICYmIHJlZi5kZWJ1Z05hbWUgPT09ICdST1VURVMnO1xufVxuIl19