@angular/compiler-cli 12.1.0 → 12.1.4

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 (459) hide show
  1. package/linker/src/file_linker/emit_scopes/iife_emit_scope.js +1 -1
  2. package/linker/src/file_linker/partial_linkers/partial_linker_selector.js +2 -2
  3. package/ngcc/src/dependencies/commonjs_dependency_host.js +1 -1
  4. package/ngcc/src/dependencies/dts_dependency_host.js +1 -1
  5. package/ngcc/src/dependencies/esm_dependency_host.js +1 -1
  6. package/ngcc/src/dependencies/umd_dependency_host.js +1 -1
  7. package/ngcc/src/entry_point_finder/program_based_entry_point_finder.js +1 -1
  8. package/ngcc/src/entry_point_finder/targeted_entry_point_finder.js +1 -1
  9. package/ngcc/src/execution/tasks/queues/parallel_task_queue.js +1 -1
  10. package/ngcc/src/execution/tasks/queues/serial_task_queue.js +1 -1
  11. package/ngcc/src/host/commonjs_host.js +1 -1
  12. package/ngcc/src/host/esm2015_host.js +1 -1
  13. package/ngcc/src/host/esm5_host.js +1 -1
  14. package/ngcc/src/host/umd_host.js +1 -1
  15. package/ngcc/src/packages/build_marker.d.ts +1 -1
  16. package/ngcc/src/packages/build_marker.js +1 -1
  17. package/ngcc/src/packages/entry_point_manifest.js +1 -1
  18. package/ngcc/src/packages/ngcc_compiler_host.js +1 -1
  19. package/ngcc/src/rendering/commonjs_rendering_formatter.js +1 -1
  20. package/ngcc/src/rendering/esm5_rendering_formatter.js +1 -1
  21. package/ngcc/src/rendering/umd_rendering_formatter.js +1 -1
  22. package/ngcc/src/writing/new_entry_point_file_writer.js +1 -1
  23. package/package.json +2 -2
  24. package/src/ngtsc/annotations/src/component.js +1 -1
  25. package/src/ngtsc/annotations/src/directive.js +1 -1
  26. package/src/ngtsc/annotations/src/ng_module.js +1 -1
  27. package/src/ngtsc/annotations/src/pipe.js +1 -1
  28. package/src/ngtsc/core/src/compiler.js +1 -1
  29. package/src/ngtsc/cycles/src/analyzer.d.ts +7 -0
  30. package/src/ngtsc/cycles/src/analyzer.js +89 -4
  31. package/src/ngtsc/cycles/src/imports.d.ts +1 -6
  32. package/src/ngtsc/cycles/src/imports.js +5 -23
  33. package/src/ngtsc/file_system/testing/src/mock_file_system_native.js +1 -1
  34. package/src/ngtsc/file_system/testing/src/mock_file_system_posix.js +1 -1
  35. package/src/ngtsc/file_system/testing/src/mock_file_system_windows.js +1 -1
  36. package/src/ngtsc/incremental/semantic_graph/src/graph.js +1 -1
  37. package/src/ngtsc/incremental/src/incremental.js +30 -4
  38. package/src/ngtsc/indexer/src/template.js +1 -1
  39. package/src/ngtsc/metadata/src/dts.js +4 -5
  40. package/src/ngtsc/metadata/src/util.d.ts +2 -2
  41. package/src/ngtsc/metadata/src/util.js +9 -6
  42. package/src/ngtsc/partial_evaluator/src/builtin.js +1 -1
  43. package/src/ngtsc/partial_evaluator/src/diagnostics.js +4 -1
  44. package/src/ngtsc/partial_evaluator/src/dynamic.d.ts +19 -1
  45. package/src/ngtsc/partial_evaluator/src/dynamic.js +12 -4
  46. package/src/ngtsc/partial_evaluator/src/interpreter.d.ts +2 -0
  47. package/src/ngtsc/partial_evaluator/src/interpreter.js +53 -5
  48. package/src/ngtsc/partial_evaluator/src/ts_helpers.js +1 -1
  49. package/src/ngtsc/program_driver/src/api.d.ts +20 -1
  50. package/src/ngtsc/program_driver/src/api.js +3 -2
  51. package/src/ngtsc/program_driver/src/ts_create_program_driver.d.ts +2 -2
  52. package/src/ngtsc/program_driver/src/ts_create_program_driver.js +7 -3
  53. package/src/ngtsc/reflection/src/typescript.js +4 -1
  54. package/src/ngtsc/transform/src/compilation.d.ts +5 -0
  55. package/src/ngtsc/transform/src/compilation.js +95 -72
  56. package/src/ngtsc/transform/src/transform.js +1 -1
  57. package/src/ngtsc/typecheck/src/context.d.ts +2 -1
  58. package/src/ngtsc/typecheck/src/context.js +11 -3
  59. package/src/ngtsc/typecheck/src/template_semantics.js +1 -1
  60. package/src/ngtsc/typecheck/src/template_symbol_builder.js +21 -1
  61. package/src/ngtsc/typecheck/src/type_check_block.js +2 -2
  62. package/src/ngtsc/typecheck/src/type_check_file.js +1 -1
  63. package/src/ngtsc/typecheck/src/type_emitter.js +25 -6
  64. package/src/ngtsc/util/src/visitor.d.ts +1 -1
  65. package/src/ngtsc/util/src/visitor.js +1 -8
  66. package/src/version.js +1 -1
  67. package/compiler-cli.externs.js +0 -0
  68. package/index.mjs +0 -20
  69. package/linker/babel/babel.externs.js +0 -0
  70. package/linker/babel/index.mjs +0 -11
  71. package/linker/babel/src/ast/babel_ast_factory.mjs +0 -137
  72. package/linker/babel/src/ast/babel_ast_host.mjs +0 -154
  73. package/linker/babel/src/babel_declaration_scope.mjs +0 -52
  74. package/linker/babel/src/babel_plugin.mjs +0 -23
  75. package/linker/babel/src/es2015_linker_plugin.mjs +0 -158
  76. package/linker/babel/src/linker_plugin_options.mjs +0 -2
  77. package/linker/index.mjs +0 -7
  78. package/linker/linker.externs.js +0 -0
  79. package/linker/src/ast/ast_host.mjs +0 -9
  80. package/linker/src/ast/ast_value.mjs +0 -256
  81. package/linker/src/ast/typescript/typescript_ast_host.mjs +0 -156
  82. package/linker/src/ast/utils.mjs +0 -17
  83. package/linker/src/fatal_linker_error.mjs +0 -30
  84. package/linker/src/file_linker/declaration_scope.mjs +0 -9
  85. package/linker/src/file_linker/emit_scopes/emit_scope.mjs +0 -41
  86. package/linker/src/file_linker/emit_scopes/iife_emit_scope.mjs +0 -33
  87. package/linker/src/file_linker/file_linker.mjs +0 -70
  88. package/linker/src/file_linker/get_source_file.mjs +0 -28
  89. package/linker/src/file_linker/linker_environment.mjs +0 -23
  90. package/linker/src/file_linker/linker_options.mjs +0 -16
  91. package/linker/src/file_linker/needs_linking.mjs +0 -27
  92. package/linker/src/file_linker/partial_linkers/partial_class_metadata_linker_1.mjs +0 -29
  93. package/linker/src/file_linker/partial_linkers/partial_component_linker_1.mjs +0 -194
  94. package/linker/src/file_linker/partial_linkers/partial_directive_linker_1.mjs +0 -137
  95. package/linker/src/file_linker/partial_linkers/partial_factory_linker_1.mjs +0 -52
  96. package/linker/src/file_linker/partial_linkers/partial_injectable_linker_1.mjs +0 -56
  97. package/linker/src/file_linker/partial_linkers/partial_injector_linker_1.mjs +0 -38
  98. package/linker/src/file_linker/partial_linkers/partial_linker.mjs +0 -2
  99. package/linker/src/file_linker/partial_linkers/partial_linker_selector.mjs +0 -166
  100. package/linker/src/file_linker/partial_linkers/partial_ng_module_linker_1.mjs +0 -110
  101. package/linker/src/file_linker/partial_linkers/partial_pipe_linker_1.mjs +0 -42
  102. package/linker/src/file_linker/partial_linkers/util.mjs +0 -78
  103. package/linker/src/file_linker/translator.mjs +0 -23
  104. package/linker/src/linker_import_generator.mjs +0 -28
  105. package/ngcc/index.mjs +0 -16
  106. package/ngcc/main-ivy-ngcc.mjs +0 -12
  107. package/ngcc/main-ngcc.mjs +0 -32
  108. package/ngcc/ngcc.externs.js +0 -0
  109. package/ngcc/src/analysis/decoration_analyzer.mjs +0 -215
  110. package/ngcc/src/analysis/migration_host.mjs +0 -80
  111. package/ngcc/src/analysis/module_with_providers_analyzer.mjs +0 -178
  112. package/ngcc/src/analysis/ngcc_references_registry.mjs +0 -45
  113. package/ngcc/src/analysis/ngcc_trait_compiler.mjs +0 -70
  114. package/ngcc/src/analysis/private_declarations_analyzer.mjs +0 -47
  115. package/ngcc/src/analysis/switch_marker_analyzer.mjs +0 -34
  116. package/ngcc/src/analysis/types.mjs +0 -2
  117. package/ngcc/src/analysis/util.mjs +0 -19
  118. package/ngcc/src/command_line_options.mjs +0 -142
  119. package/ngcc/src/constants.mjs +0 -10
  120. package/ngcc/src/dependencies/commonjs_dependency_host.mjs +0 -87
  121. package/ngcc/src/dependencies/dependency_host.mjs +0 -102
  122. package/ngcc/src/dependencies/dependency_resolver.mjs +0 -151
  123. package/ngcc/src/dependencies/dts_dependency_host.mjs +0 -18
  124. package/ngcc/src/dependencies/esm_dependency_host.mjs +0 -286
  125. package/ngcc/src/dependencies/module_resolver.mjs +0 -233
  126. package/ngcc/src/dependencies/umd_dependency_host.mjs +0 -33
  127. package/ngcc/src/entry_point_finder/directory_walker_entry_point_finder.mjs +0 -42
  128. package/ngcc/src/entry_point_finder/entry_point_collector.mjs +0 -120
  129. package/ngcc/src/entry_point_finder/interface.mjs +0 -2
  130. package/ngcc/src/entry_point_finder/program_based_entry_point_finder.mjs +0 -91
  131. package/ngcc/src/entry_point_finder/targeted_entry_point_finder.mjs +0 -216
  132. package/ngcc/src/entry_point_finder/tracing_entry_point_finder.mjs +0 -63
  133. package/ngcc/src/entry_point_finder/utils.mjs +0 -176
  134. package/ngcc/src/execution/analyze_entry_points.mjs +0 -130
  135. package/ngcc/src/execution/api.mjs +0 -2
  136. package/ngcc/src/execution/cluster/api.mjs +0 -9
  137. package/ngcc/src/execution/cluster/executor.mjs +0 -27
  138. package/ngcc/src/execution/cluster/master.mjs +0 -261
  139. package/ngcc/src/execution/cluster/package_json_updater.mjs +0 -45
  140. package/ngcc/src/execution/cluster/utils.mjs +0 -59
  141. package/ngcc/src/execution/cluster/worker.mjs +0 -81
  142. package/ngcc/src/execution/create_compile_function.mjs +0 -62
  143. package/ngcc/src/execution/single_process_executor.mjs +0 -57
  144. package/ngcc/src/execution/tasks/api.mjs +0 -22
  145. package/ngcc/src/execution/tasks/completion.mjs +0 -61
  146. package/ngcc/src/execution/tasks/queues/base_task_queue.mjs +0 -78
  147. package/ngcc/src/execution/tasks/queues/parallel_task_queue.mjs +0 -53
  148. package/ngcc/src/execution/tasks/queues/serial_task_queue.mjs +0 -29
  149. package/ngcc/src/execution/tasks/utils.mjs +0 -114
  150. package/ngcc/src/host/commonjs_host.mjs +0 -220
  151. package/ngcc/src/host/commonjs_umd_utils.mjs +0 -186
  152. package/ngcc/src/host/delegating_host.mjs +0 -140
  153. package/ngcc/src/host/esm2015_host.mjs +0 -2293
  154. package/ngcc/src/host/esm5_host.mjs +0 -721
  155. package/ngcc/src/host/ngcc_host.mjs +0 -15
  156. package/ngcc/src/host/umd_host.mjs +0 -486
  157. package/ngcc/src/host/utils.mjs +0 -12
  158. package/ngcc/src/locking/async_locker.mjs +0 -76
  159. package/ngcc/src/locking/lock_file.mjs +0 -4
  160. package/ngcc/src/locking/lock_file_with_child_process/index.mjs +0 -78
  161. package/ngcc/src/locking/lock_file_with_child_process/unlocker.mjs +0 -34
  162. package/ngcc/src/locking/lock_file_with_child_process/util.mjs +0 -29
  163. package/ngcc/src/locking/sync_locker.mjs +0 -52
  164. package/ngcc/src/main.mjs +0 -134
  165. package/ngcc/src/migrations/migration.mjs +0 -2
  166. package/ngcc/src/migrations/missing_injectable_migration.mjs +0 -164
  167. package/ngcc/src/migrations/undecorated_child_migration.mjs +0 -61
  168. package/ngcc/src/migrations/undecorated_parent_migration.mjs +0 -86
  169. package/ngcc/src/migrations/utils.mjs +0 -117
  170. package/ngcc/src/ngcc_options.mjs +0 -119
  171. package/ngcc/src/packages/build_marker.mjs +0 -84
  172. package/ngcc/src/packages/bundle_program.mjs +0 -52
  173. package/ngcc/src/packages/configuration.mjs +0 -255
  174. package/ngcc/src/packages/entry_point.mjs +0 -239
  175. package/ngcc/src/packages/entry_point_bundle.mjs +0 -68
  176. package/ngcc/src/packages/entry_point_manifest.mjs +0 -162
  177. package/ngcc/src/packages/ngcc_compiler_host.mjs +0 -77
  178. package/ngcc/src/packages/patch_ts_expando_initializer.mjs +0 -166
  179. package/ngcc/src/packages/source_file_cache.mjs +0 -187
  180. package/ngcc/src/packages/transformer.mjs +0 -140
  181. package/ngcc/src/path_mappings.mjs +0 -13
  182. package/ngcc/src/rendering/commonjs_rendering_formatter.mjs +0 -65
  183. package/ngcc/src/rendering/dts_renderer.mjs +0 -139
  184. package/ngcc/src/rendering/esm5_rendering_formatter.mjs +0 -50
  185. package/ngcc/src/rendering/esm_rendering_formatter.mjs +0 -251
  186. package/ngcc/src/rendering/ngcc_import_rewriter.mjs +0 -32
  187. package/ngcc/src/rendering/renderer.mjs +0 -170
  188. package/ngcc/src/rendering/rendering_formatter.mjs +0 -2
  189. package/ngcc/src/rendering/source_maps.mjs +0 -54
  190. package/ngcc/src/rendering/umd_rendering_formatter.mjs +0 -292
  191. package/ngcc/src/rendering/utils.mjs +0 -20
  192. package/ngcc/src/utils.mjs +0 -144
  193. package/ngcc/src/writing/cleaning/cleaning_strategies.mjs +0 -61
  194. package/ngcc/src/writing/cleaning/package_cleaner.mjs +0 -67
  195. package/ngcc/src/writing/cleaning/utils.mjs +0 -16
  196. package/ngcc/src/writing/file_writer.mjs +0 -2
  197. package/ngcc/src/writing/in_place_file_writer.mjs +0 -62
  198. package/ngcc/src/writing/new_entry_point_file_writer.mjs +0 -161
  199. package/ngcc/src/writing/package_json_updater.mjs +0 -144
  200. package/src/diagnostics/translate_diagnostics.mjs +0 -47
  201. package/src/diagnostics/typescript_version.mjs +0 -79
  202. package/src/extract_i18n.mjs +0 -46
  203. package/src/language_services.mjs +0 -18
  204. package/src/main.mjs +0 -185
  205. package/src/metadata/bundle_index_host.mjs +0 -107
  206. package/src/metadata/bundler.mjs +0 -556
  207. package/src/metadata/collector.mjs +0 -701
  208. package/src/metadata/evaluator.mjs +0 -643
  209. package/src/metadata/index.mjs +0 -11
  210. package/src/metadata/index_writer.mjs +0 -44
  211. package/src/metadata/schema.mjs +0 -102
  212. package/src/metadata/symbols.mjs +0 -117
  213. package/src/ngtsc/annotations/annotations.externs.js +0 -0
  214. package/src/ngtsc/annotations/index.mjs +0 -15
  215. package/src/ngtsc/annotations/src/api.mjs +0 -9
  216. package/src/ngtsc/annotations/src/component.mjs +0 -1068
  217. package/src/ngtsc/annotations/src/diagnostics.mjs +0 -147
  218. package/src/ngtsc/annotations/src/directive.mjs +0 -692
  219. package/src/ngtsc/annotations/src/factory.mjs +0 -17
  220. package/src/ngtsc/annotations/src/injectable.mjs +0 -260
  221. package/src/ngtsc/annotations/src/metadata.mjs +0 -145
  222. package/src/ngtsc/annotations/src/ng_module.mjs +0 -565
  223. package/src/ngtsc/annotations/src/pipe.mjs +0 -151
  224. package/src/ngtsc/annotations/src/references_registry.mjs +0 -16
  225. package/src/ngtsc/annotations/src/util.mjs +0 -495
  226. package/src/ngtsc/core/api/index.mjs +0 -12
  227. package/src/ngtsc/core/api/src/adapter.mjs +0 -9
  228. package/src/ngtsc/core/api/src/interfaces.mjs +0 -9
  229. package/src/ngtsc/core/api/src/options.mjs +0 -9
  230. package/src/ngtsc/core/api/src/public_options.mjs +0 -9
  231. package/src/ngtsc/core/api.externs.js +0 -0
  232. package/src/ngtsc/core/core.externs.js +0 -0
  233. package/src/ngtsc/core/index.mjs +0 -10
  234. package/src/ngtsc/core/src/compiler.mjs +0 -917
  235. package/src/ngtsc/core/src/config.mjs +0 -15
  236. package/src/ngtsc/core/src/host.mjs +0 -229
  237. package/src/ngtsc/cycles/cycles.externs.js +0 -0
  238. package/src/ngtsc/cycles/index.mjs +0 -10
  239. package/src/ngtsc/cycles/src/analyzer.mjs +0 -60
  240. package/src/ngtsc/cycles/src/imports.mjs +0 -152
  241. package/src/ngtsc/diagnostics/diagnostics.externs.js +0 -0
  242. package/src/ngtsc/diagnostics/index.mjs +0 -11
  243. package/src/ngtsc/diagnostics/src/error.mjs +0 -51
  244. package/src/ngtsc/diagnostics/src/error_code.mjs +0 -198
  245. package/src/ngtsc/diagnostics/src/util.mjs +0 -21
  246. package/src/ngtsc/entry_point/entry_point.externs.js +0 -0
  247. package/src/ngtsc/entry_point/index.mjs +0 -12
  248. package/src/ngtsc/entry_point/src/generator.mjs +0 -35
  249. package/src/ngtsc/entry_point/src/logic.mjs +0 -35
  250. package/src/ngtsc/entry_point/src/private_export_checker.mjs +0 -122
  251. package/src/ngtsc/entry_point/src/reference_graph.mjs +0 -73
  252. package/src/ngtsc/file_system/file_system.externs.js +0 -0
  253. package/src/ngtsc/file_system/index.mjs +0 -13
  254. package/src/ngtsc/file_system/src/compiler_host.mjs +0 -64
  255. package/src/ngtsc/file_system/src/helpers.mjs +0 -99
  256. package/src/ngtsc/file_system/src/invalid_file_system.mjs +0 -95
  257. package/src/ngtsc/file_system/src/logical.mjs +0 -84
  258. package/src/ngtsc/file_system/src/node_js_file_system.mjs +0 -142
  259. package/src/ngtsc/file_system/src/types.mjs +0 -9
  260. package/src/ngtsc/file_system/src/util.mjs +0 -22
  261. package/src/ngtsc/file_system/testing/index.mjs +0 -13
  262. package/src/ngtsc/file_system/testing/src/mock_file_system.mjs +0 -293
  263. package/src/ngtsc/file_system/testing/src/mock_file_system_native.mjs +0 -57
  264. package/src/ngtsc/file_system/testing/src/mock_file_system_posix.mjs +0 -38
  265. package/src/ngtsc/file_system/testing/src/mock_file_system_windows.mjs +0 -38
  266. package/src/ngtsc/file_system/testing/src/test_helper.mjs +0 -108
  267. package/src/ngtsc/file_system/testing/testing.externs.js +0 -0
  268. package/src/ngtsc/imports/imports.externs.js +0 -0
  269. package/src/ngtsc/imports/index.mjs +0 -14
  270. package/src/ngtsc/imports/src/alias.mjs +0 -137
  271. package/src/ngtsc/imports/src/core.mjs +0 -78
  272. package/src/ngtsc/imports/src/default.mjs +0 -135
  273. package/src/ngtsc/imports/src/emitter.mjs +0 -266
  274. package/src/ngtsc/imports/src/find_export.mjs +0 -56
  275. package/src/ngtsc/imports/src/reexport.mjs +0 -9
  276. package/src/ngtsc/imports/src/references.mjs +0 -137
  277. package/src/ngtsc/imports/src/resolver.mjs +0 -24
  278. package/src/ngtsc/incremental/api.externs.js +0 -0
  279. package/src/ngtsc/incremental/api.mjs +0 -9
  280. package/src/ngtsc/incremental/incremental.externs.js +0 -0
  281. package/src/ngtsc/incremental/index.mjs +0 -12
  282. package/src/ngtsc/incremental/semantic_graph/index.mjs +0 -12
  283. package/src/ngtsc/incremental/semantic_graph/semantic_graph.externs.js +0 -0
  284. package/src/ngtsc/incremental/semantic_graph/src/api.mjs +0 -36
  285. package/src/ngtsc/incremental/semantic_graph/src/graph.mjs +0 -237
  286. package/src/ngtsc/incremental/semantic_graph/src/type_parameters.mjs +0 -40
  287. package/src/ngtsc/incremental/semantic_graph/src/util.mjs +0 -69
  288. package/src/ngtsc/incremental/src/dependency_tracking.mjs +0 -117
  289. package/src/ngtsc/incremental/src/incremental.mjs +0 -271
  290. package/src/ngtsc/incremental/src/noop.mjs +0 -13
  291. package/src/ngtsc/incremental/src/state.mjs +0 -17
  292. package/src/ngtsc/incremental/src/strategy.mjs +0 -76
  293. package/src/ngtsc/indexer/index.mjs +0 -11
  294. package/src/ngtsc/indexer/indexer.externs.js +0 -0
  295. package/src/ngtsc/indexer/src/api.mjs +0 -30
  296. package/src/ngtsc/indexer/src/context.mjs +0 -25
  297. package/src/ngtsc/indexer/src/template.mjs +0 -303
  298. package/src/ngtsc/indexer/src/transform.mjs +0 -51
  299. package/src/ngtsc/logging/index.mjs +0 -10
  300. package/src/ngtsc/logging/logging.externs.js +0 -0
  301. package/src/ngtsc/logging/src/console_logger.mjs +0 -43
  302. package/src/ngtsc/logging/src/logger.mjs +0 -15
  303. package/src/ngtsc/logging/testing/index.mjs +0 -9
  304. package/src/ngtsc/logging/testing/src/mock_logger.mjs +0 -32
  305. package/src/ngtsc/logging/testing/testing.externs.js +0 -0
  306. package/src/ngtsc/metadata/index.mjs +0 -15
  307. package/src/ngtsc/metadata/metadata.externs.js +0 -0
  308. package/src/ngtsc/metadata/src/api.mjs +0 -13
  309. package/src/ngtsc/metadata/src/dts.mjs +0 -143
  310. package/src/ngtsc/metadata/src/inheritance.mjs +0 -71
  311. package/src/ngtsc/metadata/src/property_mapping.mjs +0 -136
  312. package/src/ngtsc/metadata/src/registry.mjs +0 -80
  313. package/src/ngtsc/metadata/src/resource_registry.mjs +0 -81
  314. package/src/ngtsc/metadata/src/util.mjs +0 -200
  315. package/src/ngtsc/partial_evaluator/index.mjs +0 -12
  316. package/src/ngtsc/partial_evaluator/partial_evaluator.externs.js +0 -0
  317. package/src/ngtsc/partial_evaluator/src/builtin.mjs +0 -65
  318. package/src/ngtsc/partial_evaluator/src/diagnostics.mjs +0 -171
  319. package/src/ngtsc/partial_evaluator/src/dynamic.mjs +0 -86
  320. package/src/ngtsc/partial_evaluator/src/interface.mjs +0 -27
  321. package/src/ngtsc/partial_evaluator/src/interpreter.mjs +0 -683
  322. package/src/ngtsc/partial_evaluator/src/known_declaration.mjs +0 -43
  323. package/src/ngtsc/partial_evaluator/src/result.mjs +0 -50
  324. package/src/ngtsc/partial_evaluator/src/ts_helpers.mjs +0 -72
  325. package/src/ngtsc/perf/index.mjs +0 -11
  326. package/src/ngtsc/perf/perf.externs.js +0 -0
  327. package/src/ngtsc/perf/src/api.mjs +0 -278
  328. package/src/ngtsc/perf/src/clock.mjs +0 -15
  329. package/src/ngtsc/perf/src/noop.mjs +0 -21
  330. package/src/ngtsc/perf/src/recorder.mjs +0 -125
  331. package/src/ngtsc/program.mjs +0 -271
  332. package/src/ngtsc/program_driver/index.mjs +0 -10
  333. package/src/ngtsc/program_driver/program_driver.externs.js +0 -0
  334. package/src/ngtsc/program_driver/src/api.mjs +0 -22
  335. package/src/ngtsc/program_driver/src/ts_create_program_driver.mjs +0 -164
  336. package/src/ngtsc/reflection/index.mjs +0 -12
  337. package/src/ngtsc/reflection/reflection.externs.js +0 -0
  338. package/src/ngtsc/reflection/src/host.mjs +0 -73
  339. package/src/ngtsc/reflection/src/type_to_value.mjs +0 -243
  340. package/src/ngtsc/reflection/src/typescript.mjs +0 -608
  341. package/src/ngtsc/reflection/src/util.mjs +0 -21
  342. package/src/ngtsc/resource/index.mjs +0 -9
  343. package/src/ngtsc/resource/resource.externs.js +0 -0
  344. package/src/ngtsc/resource/src/loader.mjs +0 -242
  345. package/src/ngtsc/routing/index.mjs +0 -11
  346. package/src/ngtsc/routing/routing.externs.js +0 -0
  347. package/src/ngtsc/routing/src/analyzer.mjs +0 -69
  348. package/src/ngtsc/routing/src/lazy.mjs +0 -168
  349. package/src/ngtsc/routing/src/route.mjs +0 -51
  350. package/src/ngtsc/scope/index.mjs +0 -12
  351. package/src/ngtsc/scope/scope.externs.js +0 -0
  352. package/src/ngtsc/scope/src/api.mjs +0 -9
  353. package/src/ngtsc/scope/src/component_scope.mjs +0 -31
  354. package/src/ngtsc/scope/src/dependency.mjs +0 -134
  355. package/src/ngtsc/scope/src/local.mjs +0 -531
  356. package/src/ngtsc/scope/src/typecheck.mjs +0 -83
  357. package/src/ngtsc/shims/api.externs.js +0 -0
  358. package/src/ngtsc/shims/api.mjs +0 -2
  359. package/src/ngtsc/shims/index.mjs +0 -14
  360. package/src/ngtsc/shims/shims.externs.js +0 -0
  361. package/src/ngtsc/shims/src/adapter.mjs +0 -188
  362. package/src/ngtsc/shims/src/expando.mjs +0 -102
  363. package/src/ngtsc/shims/src/factory_generator.mjs +0 -265
  364. package/src/ngtsc/shims/src/reference_tagger.mjs +0 -67
  365. package/src/ngtsc/shims/src/summary_generator.mjs +0 -64
  366. package/src/ngtsc/shims/src/util.mjs +0 -26
  367. package/src/ngtsc/sourcemaps/index.mjs +0 -11
  368. package/src/ngtsc/sourcemaps/sourcemaps.externs.js +0 -0
  369. package/src/ngtsc/sourcemaps/src/content_origin.mjs +0 -35
  370. package/src/ngtsc/sourcemaps/src/raw_source_map.mjs +0 -2
  371. package/src/ngtsc/sourcemaps/src/segment_marker.mjs +0 -40
  372. package/src/ngtsc/sourcemaps/src/source_file.mjs +0 -459
  373. package/src/ngtsc/sourcemaps/src/source_file_loader.mjs +0 -213
  374. package/src/ngtsc/switch/index.mjs +0 -9
  375. package/src/ngtsc/switch/src/switch.mjs +0 -115
  376. package/src/ngtsc/switch/switch.externs.js +0 -0
  377. package/src/ngtsc/transform/index.mjs +0 -14
  378. package/src/ngtsc/transform/src/alias.mjs +0 -30
  379. package/src/ngtsc/transform/src/api.mjs +0 -63
  380. package/src/ngtsc/transform/src/compilation.mjs +0 -514
  381. package/src/ngtsc/transform/src/declaration.mjs +0 -182
  382. package/src/ngtsc/transform/src/trait.mjs +0 -95
  383. package/src/ngtsc/transform/src/transform.mjs +0 -298
  384. package/src/ngtsc/transform/src/utils.mjs +0 -57
  385. package/src/ngtsc/transform/transform.externs.js +0 -0
  386. package/src/ngtsc/translator/index.mjs +0 -14
  387. package/src/ngtsc/translator/src/api/ast_factory.mjs +0 -9
  388. package/src/ngtsc/translator/src/api/import_generator.mjs +0 -9
  389. package/src/ngtsc/translator/src/context.mjs +0 -24
  390. package/src/ngtsc/translator/src/import_manager.mjs +0 -48
  391. package/src/ngtsc/translator/src/translator.mjs +0 -317
  392. package/src/ngtsc/translator/src/type_translator.mjs +0 -204
  393. package/src/ngtsc/translator/src/typescript_ast_factory.mjs +0 -211
  394. package/src/ngtsc/translator/src/typescript_translator.mjs +0 -17
  395. package/src/ngtsc/translator/translator.externs.js +0 -0
  396. package/src/ngtsc/tsc_plugin.mjs +0 -98
  397. package/src/ngtsc/typecheck/api/api.externs.js +0 -0
  398. package/src/ngtsc/typecheck/api/api.mjs +0 -9
  399. package/src/ngtsc/typecheck/api/checker.mjs +0 -31
  400. package/src/ngtsc/typecheck/api/completion.mjs +0 -16
  401. package/src/ngtsc/typecheck/api/context.mjs +0 -9
  402. package/src/ngtsc/typecheck/api/index.mjs +0 -14
  403. package/src/ngtsc/typecheck/api/scope.mjs +0 -9
  404. package/src/ngtsc/typecheck/api/symbols.mjs +0 -22
  405. package/src/ngtsc/typecheck/diagnostics/diagnostics.externs.js +0 -0
  406. package/src/ngtsc/typecheck/diagnostics/index.mjs +0 -10
  407. package/src/ngtsc/typecheck/diagnostics/src/diagnostic.mjs +0 -99
  408. package/src/ngtsc/typecheck/diagnostics/src/id.mjs +0 -23
  409. package/src/ngtsc/typecheck/index.mjs +0 -12
  410. package/src/ngtsc/typecheck/src/checker.mjs +0 -591
  411. package/src/ngtsc/typecheck/src/comments.mjs +0 -159
  412. package/src/ngtsc/typecheck/src/completion.mjs +0 -155
  413. package/src/ngtsc/typecheck/src/context.mjs +0 -350
  414. package/src/ngtsc/typecheck/src/diagnostics.mjs +0 -95
  415. package/src/ngtsc/typecheck/src/dom.mjs +0 -68
  416. package/src/ngtsc/typecheck/src/environment.mjs +0 -146
  417. package/src/ngtsc/typecheck/src/expression.mjs +0 -412
  418. package/src/ngtsc/typecheck/src/line_mappings.mjs +0 -60
  419. package/src/ngtsc/typecheck/src/oob.mjs +0 -112
  420. package/src/ngtsc/typecheck/src/shim.mjs +0 -37
  421. package/src/ngtsc/typecheck/src/source.mjs +0 -74
  422. package/src/ngtsc/typecheck/src/tcb_util.mjs +0 -135
  423. package/src/ngtsc/typecheck/src/template_semantics.mjs +0 -34
  424. package/src/ngtsc/typecheck/src/template_symbol_builder.mjs +0 -485
  425. package/src/ngtsc/typecheck/src/ts_util.mjs +0 -157
  426. package/src/ngtsc/typecheck/src/type_check_block.mjs +0 -1770
  427. package/src/ngtsc/typecheck/src/type_check_file.mjs +0 -65
  428. package/src/ngtsc/typecheck/src/type_constructor.mjs +0 -227
  429. package/src/ngtsc/typecheck/src/type_emitter.mjs +0 -127
  430. package/src/ngtsc/typecheck/src/type_parameter_emitter.mjs +0 -93
  431. package/src/ngtsc/typecheck/typecheck.externs.js +0 -0
  432. package/src/ngtsc/util/src/path.mjs +0 -18
  433. package/src/ngtsc/util/src/typescript.mjs +0 -143
  434. package/src/ngtsc/util/src/visitor.mjs +0 -107
  435. package/src/ngtsc/util/util.externs.js +0 -0
  436. package/src/ngtsc/xi18n/index.mjs +0 -9
  437. package/src/ngtsc/xi18n/src/context.mjs +0 -9
  438. package/src/ngtsc/xi18n/xi18n.externs.js +0 -0
  439. package/src/perform_compile.mjs +0 -275
  440. package/src/perform_watch.mjs +0 -247
  441. package/src/tooling.mjs +0 -32
  442. package/src/transformers/api.mjs +0 -27
  443. package/src/transformers/compiler_host.mjs +0 -593
  444. package/src/transformers/downlevel_decorators_transform.mjs +0 -507
  445. package/src/transformers/entry_points.mjs +0 -10
  446. package/src/transformers/i18n.mjs +0 -59
  447. package/src/transformers/inline_resources.mjs +0 -269
  448. package/src/transformers/lower_expressions.mjs +0 -336
  449. package/src/transformers/metadata_cache.mjs +0 -53
  450. package/src/transformers/metadata_reader.mjs +0 -104
  451. package/src/transformers/node_emitter.mjs +0 -606
  452. package/src/transformers/node_emitter_transform.mjs +0 -78
  453. package/src/transformers/patch_alias_reference_resolution.mjs +0 -109
  454. package/src/transformers/program.mjs +0 -887
  455. package/src/transformers/r3_metadata_transform.mjs +0 -46
  456. package/src/transformers/r3_transform.mjs +0 -29
  457. package/src/transformers/util.mjs +0 -89
  458. package/src/typescript_support.mjs +0 -57
  459. package/src/version.mjs +0 -15
@@ -1,293 +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 { basename, dirname, resolve } from '../../src/helpers';
9
- /**
10
- * An in-memory file system that can be used in unit tests.
11
- */
12
- export class MockFileSystem {
13
- constructor(_isCaseSensitive = false, cwd = '/') {
14
- this._isCaseSensitive = _isCaseSensitive;
15
- this._fileTree = {};
16
- this._cwd = this.normalize(cwd);
17
- }
18
- isCaseSensitive() {
19
- return this._isCaseSensitive;
20
- }
21
- exists(path) {
22
- return this.findFromPath(path).entity !== null;
23
- }
24
- readFile(path) {
25
- const { entity } = this.findFromPath(path);
26
- if (isFile(entity)) {
27
- return entity.toString();
28
- }
29
- else {
30
- throw new MockFileSystemError('ENOENT', path, `File "${path}" does not exist.`);
31
- }
32
- }
33
- readFileBuffer(path) {
34
- const { entity } = this.findFromPath(path);
35
- if (isFile(entity)) {
36
- return entity instanceof Uint8Array ? entity : new Buffer(entity);
37
- }
38
- else {
39
- throw new MockFileSystemError('ENOENT', path, `File "${path}" does not exist.`);
40
- }
41
- }
42
- writeFile(path, data, exclusive = false) {
43
- const [folderPath, basename] = this.splitIntoFolderAndFile(path);
44
- const { entity } = this.findFromPath(folderPath);
45
- if (entity === null || !isFolder(entity)) {
46
- throw new MockFileSystemError('ENOENT', path, `Unable to write file "${path}". The containing folder does not exist.`);
47
- }
48
- if (exclusive && entity[basename] !== undefined) {
49
- throw new MockFileSystemError('EEXIST', path, `Unable to exclusively write file "${path}". The file already exists.`);
50
- }
51
- entity[basename] = data;
52
- }
53
- removeFile(path) {
54
- const [folderPath, basename] = this.splitIntoFolderAndFile(path);
55
- const { entity } = this.findFromPath(folderPath);
56
- if (entity === null || !isFolder(entity)) {
57
- throw new MockFileSystemError('ENOENT', path, `Unable to remove file "${path}". The containing folder does not exist.`);
58
- }
59
- if (isFolder(entity[basename])) {
60
- throw new MockFileSystemError('EISDIR', path, `Unable to remove file "${path}". The path to remove is a folder.`);
61
- }
62
- delete entity[basename];
63
- }
64
- symlink(target, path) {
65
- const [folderPath, basename] = this.splitIntoFolderAndFile(path);
66
- const { entity } = this.findFromPath(folderPath);
67
- if (entity === null || !isFolder(entity)) {
68
- throw new MockFileSystemError('ENOENT', path, `Unable to create symlink at "${path}". The containing folder does not exist.`);
69
- }
70
- entity[basename] = new SymLink(target);
71
- }
72
- readdir(path) {
73
- const { entity } = this.findFromPath(path);
74
- if (entity === null) {
75
- throw new MockFileSystemError('ENOENT', path, `Unable to read directory "${path}". It does not exist.`);
76
- }
77
- if (isFile(entity)) {
78
- throw new MockFileSystemError('ENOTDIR', path, `Unable to read directory "${path}". It is a file.`);
79
- }
80
- return Object.keys(entity);
81
- }
82
- lstat(path) {
83
- const { entity } = this.findFromPath(path);
84
- if (entity === null) {
85
- throw new MockFileSystemError('ENOENT', path, `File "${path}" does not exist.`);
86
- }
87
- return new MockFileStats(entity);
88
- }
89
- stat(path) {
90
- const { entity } = this.findFromPath(path, { followSymLinks: true });
91
- if (entity === null) {
92
- throw new MockFileSystemError('ENOENT', path, `File "${path}" does not exist.`);
93
- }
94
- return new MockFileStats(entity);
95
- }
96
- copyFile(from, to) {
97
- this.writeFile(to, this.readFile(from));
98
- }
99
- moveFile(from, to) {
100
- this.writeFile(to, this.readFile(from));
101
- const result = this.findFromPath(dirname(from));
102
- const folder = result.entity;
103
- const name = basename(from);
104
- delete folder[name];
105
- }
106
- ensureDir(path) {
107
- const segments = this.splitPath(path).map(segment => this.getCanonicalPath(segment));
108
- // Convert the root folder to a canonical empty string `''` (on Windows it would be `'C:'`).
109
- segments[0] = '';
110
- if (segments.length > 1 && segments[segments.length - 1] === '') {
111
- // Remove a trailing slash (unless the path was only `/`)
112
- segments.pop();
113
- }
114
- let current = this._fileTree;
115
- for (const segment of segments) {
116
- if (isFile(current[segment])) {
117
- throw new Error(`Folder already exists as a file.`);
118
- }
119
- if (!current[segment]) {
120
- current[segment] = {};
121
- }
122
- current = current[segment];
123
- }
124
- return current;
125
- }
126
- removeDeep(path) {
127
- const [folderPath, basename] = this.splitIntoFolderAndFile(path);
128
- const { entity } = this.findFromPath(folderPath);
129
- if (entity === null || !isFolder(entity)) {
130
- throw new MockFileSystemError('ENOENT', path, `Unable to remove folder "${path}". The containing folder does not exist.`);
131
- }
132
- delete entity[basename];
133
- }
134
- isRoot(path) {
135
- return this.dirname(path) === path;
136
- }
137
- extname(path) {
138
- const match = /.+(\.[^.]*)$/.exec(path);
139
- return match !== null ? match[1] : '';
140
- }
141
- realpath(filePath) {
142
- const result = this.findFromPath(filePath, { followSymLinks: true });
143
- if (result.entity === null) {
144
- throw new MockFileSystemError('ENOENT', filePath, `Unable to find the real path of "${filePath}". It does not exist.`);
145
- }
146
- else {
147
- return result.path;
148
- }
149
- }
150
- pwd() {
151
- return this._cwd;
152
- }
153
- chdir(path) {
154
- this._cwd = this.normalize(path);
155
- }
156
- getDefaultLibLocation() {
157
- // Mimic the node module resolution algorithm and start in the current directory, then look
158
- // progressively further up the tree until reaching the FS root.
159
- // E.g. if the current directory is /foo/bar, look in /foo/bar/node_modules, then
160
- // /foo/node_modules, then /node_modules.
161
- let path = 'node_modules/typescript/lib';
162
- let resolvedPath = this.resolve(path);
163
- // Construct a path for the top-level node_modules to identify the stopping point.
164
- const topLevelNodeModules = this.resolve('/' + path);
165
- while (resolvedPath !== topLevelNodeModules) {
166
- if (this.exists(resolvedPath)) {
167
- return resolvedPath;
168
- }
169
- // Not here, look one level higher.
170
- path = '../' + path;
171
- resolvedPath = this.resolve(path);
172
- }
173
- // The loop exits before checking the existence of /node_modules/typescript at the top level.
174
- // This is intentional - if no /node_modules/typescript exists anywhere in the tree, there's
175
- // nothing this function can do about it, and TS may error later if it looks for a lib.d.ts file
176
- // within this directory. It might be okay, though, if TS never checks for one.
177
- return topLevelNodeModules;
178
- }
179
- dump() {
180
- const { entity } = this.findFromPath(this.resolve('/'));
181
- if (entity === null || !isFolder(entity)) {
182
- return {};
183
- }
184
- return this.cloneFolder(entity);
185
- }
186
- init(folder) {
187
- this.mount(this.resolve('/'), folder);
188
- }
189
- mount(path, folder) {
190
- if (this.exists(path)) {
191
- throw new Error(`Unable to mount in '${path}' as it already exists.`);
192
- }
193
- const mountFolder = this.ensureDir(path);
194
- this.copyInto(folder, mountFolder);
195
- }
196
- cloneFolder(folder) {
197
- const clone = {};
198
- this.copyInto(folder, clone);
199
- return clone;
200
- }
201
- copyInto(from, to) {
202
- for (const path in from) {
203
- const item = from[path];
204
- const canonicalPath = this.getCanonicalPath(path);
205
- if (isSymLink(item)) {
206
- to[canonicalPath] = new SymLink(this.getCanonicalPath(item.path));
207
- }
208
- else if (isFolder(item)) {
209
- to[canonicalPath] = this.cloneFolder(item);
210
- }
211
- else {
212
- to[canonicalPath] = from[path];
213
- }
214
- }
215
- }
216
- findFromPath(path, options) {
217
- const followSymLinks = !!options && options.followSymLinks;
218
- const segments = this.splitPath(path);
219
- if (segments.length > 1 && segments[segments.length - 1] === '') {
220
- // Remove a trailing slash (unless the path was only `/`)
221
- segments.pop();
222
- }
223
- // Convert the root folder to a canonical empty string `""` (on Windows it would be `C:`).
224
- segments[0] = '';
225
- let current = this._fileTree;
226
- while (segments.length) {
227
- current = current[this.getCanonicalPath(segments.shift())];
228
- if (current === undefined) {
229
- return { path, entity: null };
230
- }
231
- if (segments.length > 0 && (!isFolder(current))) {
232
- current = null;
233
- break;
234
- }
235
- if (isFile(current)) {
236
- break;
237
- }
238
- if (isSymLink(current)) {
239
- if (followSymLinks) {
240
- return this.findFromPath(resolve(current.path, ...segments), { followSymLinks });
241
- }
242
- else {
243
- break;
244
- }
245
- }
246
- }
247
- return { path, entity: current };
248
- }
249
- splitIntoFolderAndFile(path) {
250
- const segments = this.splitPath(this.getCanonicalPath(path));
251
- const file = segments.pop();
252
- return [path.substring(0, path.length - file.length - 1), file];
253
- }
254
- getCanonicalPath(p) {
255
- return this.isCaseSensitive() ? p : p.toLowerCase();
256
- }
257
- }
258
- export class SymLink {
259
- constructor(path) {
260
- this.path = path;
261
- }
262
- }
263
- class MockFileStats {
264
- constructor(entity) {
265
- this.entity = entity;
266
- }
267
- isFile() {
268
- return isFile(this.entity);
269
- }
270
- isDirectory() {
271
- return isFolder(this.entity);
272
- }
273
- isSymbolicLink() {
274
- return isSymLink(this.entity);
275
- }
276
- }
277
- class MockFileSystemError extends Error {
278
- constructor(code, path, message) {
279
- super(message);
280
- this.code = code;
281
- this.path = path;
282
- }
283
- }
284
- export function isFile(item) {
285
- return Buffer.isBuffer(item) || typeof item === 'string';
286
- }
287
- export function isSymLink(item) {
288
- return item instanceof SymLink;
289
- }
290
- export function isFolder(item) {
291
- return item !== null && !isFile(item) && !isSymLink(item);
292
- }
293
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19maWxlX3N5c3RlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvZmlsZV9zeXN0ZW0vdGVzdGluZy9zcmMvbW9ja19maWxlX3N5c3RlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUc3RDs7R0FFRztBQUNILE1BQU0sT0FBZ0IsY0FBYztJQUtsQyxZQUFvQixtQkFBbUIsS0FBSyxFQUFFLE1BQXNCLEdBQXFCO1FBQXJFLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBUTtRQUpwQyxjQUFTLEdBQVcsRUFBRSxDQUFDO1FBSzdCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBb0I7UUFDekIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUM7SUFDakQsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFvQjtRQUMzQixNQUFNLEVBQUMsTUFBTSxFQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNsQixPQUFPLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUMxQjthQUFNO1lBQ0wsTUFBTSxJQUFJLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxJQUFJLG1CQUFtQixDQUFDLENBQUM7U0FDakY7SUFDSCxDQUFDO0lBRUQsY0FB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QUFhO0lBQ2pCLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQUcsQ0FBQztJQUN0QyxNQUFNO1FBQ0osT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRCxXQUFXO1FBQ1QsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFDRCxjQUFjO1FBQ1osT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7Q0FDRjtBQUVELE1BQU0sbUJBQW9CLFNBQVEsS0FBSztJQUNyQyxZQUFtQixJQUFZLEVBQVMsSUFBWSxFQUFFLE9BQWU7UUFDbkUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBREUsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUFTLFNBQUksR0FBSixJQUFJLENBQVE7SUFFcEQsQ0FBQztDQUNGO0FBRUQsTUFBTSxVQUFVLE1BQU0sQ0FBQyxJQUFpQjtJQUN0QyxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDO0FBQzNELENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLElBQWlCO0lBQ3pDLE9BQU8sSUFBSSxZQUFZLE9BQU8sQ0FBQztBQUNqQyxDQUFDO0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxJQUFpQjtJQUN4QyxPQUFPLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge2Jhc2VuYW1lLCBkaXJuYW1lLCByZXNvbHZlfSBmcm9tICcuLi8uLi9zcmMvaGVscGVycyc7XG5pbXBvcnQge0Fic29sdXRlRnNQYXRoLCBGaWxlU3RhdHMsIEZpbGVTeXN0ZW0sIFBhdGhTZWdtZW50LCBQYXRoU3RyaW5nfSBmcm9tICcuLi8uLi9zcmMvdHlwZXMnO1xuXG4vKipcbiAqIEFuIGluLW1lbW9yeSBmaWxlIHN5c3RlbSB0aGF0IGNhbiBiZSB1c2VkIGluIHVuaXQgdGVzdHMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNb2NrRmlsZVN5c3RlbSBpbXBsZW1lbnRzIEZpbGVTeXN0ZW0ge1xuICBwcml2YXRlIF9maWxlVHJlZTogRm9sZGVyID0ge307XG4gIHByaXZhdGUgX2N3ZDogQWJzb2x1dGVGc1BhdGg7XG5cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9pc0Nhc2VTZW5zaXRpdmUgPSBmYWxzZSwgY3dkOiBBYnNvbHV0ZUZzUGF0aCA9ICcvJyBhcyBBYnNvbHV0ZUZzUGF0aCkge1xuICAgIHRoaXMuX2N3ZCA9IHRoaXMubm9ybWFsaXplKGN3ZCk7XG4gIH1cblxuICBpc0Nhc2VTZW5zaXRpdmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzQ2FzZVNlbnNpdGl2ZTtcbiAgfVxuXG4gIGV4aXN0cyhwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpbmRGcm9tUGF0aChwYXRoKS5lbnRpdHkgIT09IG51bGw7XG4gIH1cblxuICByZWFkRmlsZShwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IHN0cmluZyB7XG4gICAgY29uc3Qge2VudGl0eX0gPSB0aGlzLmZpbmRGcm9tUGF0aChwYXRoKTtcbiAgICBpZiAoaXNGaWxlKGVudGl0eSkpIHtcbiAgICAgIHJldHVybiBlbnRpdHkudG9TdHJpbmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IE1vY2tGaWxlU3lzdGVtRXJyb3IoJ0VOT0VOVCcsIHBhdGgsIGBGaWxlIFwiJHtwYXRofVwiIGRvZXMgbm90IGV4aXN0LmApO1xuICAgIH1cbiAgfVxuXG4gIHJlYWRGaWxlQnVmZmVyKHBhdGg6IEFic29sdXRlRnNQYXRoKTogVWludDhBcnJheSB7XG4gICAgY29uc3Qge2VudGl0eX0gPSB0aGlzLmZpbmRGcm9tUGF0aChwYXRoKTtcbiAgICBpZiAoaXNGaWxlKGVudGl0eSkpIHtcbiAgICAgIHJldHVybiBlbnRpdHkgaW5zdGFuY2VvZiBVaW50OEFycmF5ID8gZW50aXR5IDogbmV3IEJ1ZmZlcihlbnRpdHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgTW9ja0ZpbGVTeXN0ZW1FcnJvcignRU5PRU5UJywgcGF0aCwgYEZpbGUgXCIke3BhdGh9XCIgZG9lcyBub3QgZXhpc3QuYCk7XG4gICAgfVxuICB9XG5cbiAgd3JpdGVGaWxlKHBhdGg6IEFic29sdXRlRnNQYXRoLCBkYXRhOiBzdHJpbmd8VWludDhBcnJheSwgZXhjbHVzaXZlOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICBjb25zdCBbZm9sZGVyUGF0aCwgYmFzZW5hbWVdID0gdGhpcy5zcGxpdEludG9Gb2xkZXJBbmRGaWxlKHBhdGgpO1xuICAgIGNvbnN0IHtlbnRpdHl9ID0gdGhpcy5maW5kRnJvbVBhdGgoZm9sZGVyUGF0aCk7XG4gICAgaWYgKGVudGl0eSA9PT0gbnVsbCB8fCAhaXNGb2xkZXIoZW50aXR5KSkge1xuICAgICAgdGhyb3cgbmV3IE1vY2tGaWxlU3lzdGVtRXJyb3IoXG4gICAgICAgICAgJ0VOT0VOVCcsIHBhdGgsIGBVbmFibGUgdG8gd3JpdGUgZmlsZSBcIiR7cGF0aH1cIi4gVGhlIGNvbnRhaW5pbmcgZm9sZGVyIGRvZXMgbm90IGV4aXN0LmApO1xuICAgIH1cbiAgICBpZiAoZXhjbHVzaXZlICYmIGVudGl0eVtiYXNlbmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IE1vY2tGaWxlU3lzdGVtRXJyb3IoXG4gICAgICAgICAgJ0VFWElTVCcsIHBhdGgsIGBVbmFibGUgdG8gZXhjbHVzaXZlbHkgd3JpdGUgZmlsZSBcIiR7cGF0aH1cIi4gVGhlIGZpbGUgYWxyZWFkeSBleGlzdHMuYCk7XG4gICAgfVxuICAgIGVudGl0eVtiYXNlbmFtZV0gPSBkYXRhO1xuICB9XG5cbiAgcmVtb3ZlRmlsZShwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IHZvaWQge1xuICAgIGNvbnN0IFtmb2xkZXJQYXRoLCBiYXNlbmFtZV0gPSB0aGlzLnNwbGl0SW50b0ZvbGRlckFuZEZpbGUocGF0aCk7XG4gICAgY29uc3Qge2VudGl0eX0gPSB0aGlzLmZpbmRGcm9tUGF0aChmb2xkZXJQYXRoKTtcbiAgICBpZiAoZW50aXR5ID09PSBudWxsIHx8ICFpc0ZvbGRlcihlbnRpdHkpKSB7XG4gICAgICB0aHJvdyBuZXcgTW9ja0ZpbGVTeXN0ZW1FcnJvcihcbiAgICAgICAgICAnRU5PRU5UJywgcGF0aCwgYFVuYWJsZSB0byByZW1vdmUgZmlsZSBcIiR7cGF0aH1cIi4gVGhlIGNvbnRhaW5pbmcgZm9sZGVyIGRvZXMgbm90IGV4aXN0LmApO1xuICAgIH1cbiAgICBpZiAoaXNGb2xkZXIoZW50aXR5W2Jhc2VuYW1lXSkpIHtcbiAgICAgIHRocm93IG5ldyBNb2NrRmlsZVN5c3RlbUVycm9yKFxuICAgICAgICAgICdFSVNESVInLCBwYXRoLCBgVW5hYmxlIHRvIHJlbW92ZSBmaWxlIFwiJHtwYXRofVwiLiBUaGUgcGF0aCB0byByZW1vdmUgaXMgYSBmb2xkZXIuYCk7XG4gICAgfVxuICAgIGRlbGV0ZSBlbnRpdHlbYmFzZW5hbWVdO1xuICB9XG5cbiAgc3ltbGluayh0YXJnZXQ6IEFic29sdXRlRnNQYXRoLCBwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IHZvaWQge1xuICAgIGNvbnN0IFtmb2xkZXJQYXRoLCBiYXNlbmFtZV0gPSB0aGlzLnNwbGl0SW50b0ZvbGRlckFuZEZpbGUocGF0aCk7XG4gICAgY29uc3Qge2VudGl0eX0gPSB0aGlzLmZpbmRGcm9tUGF0aChmb2xkZXJQYXRoKTtcbiAgICBpZiAoZW50aXR5ID09PSBudWxsIHx8ICFpc0ZvbGRlcihlbnRpdHkpKSB7XG4gICAgICB0aHJvdyBuZXcgTW9ja0ZpbGVTeXN0ZW1FcnJvcihcbiAgICAgICAgICAnRU5PRU5UJywgcGF0aCxcbiAgICAgICAgICBgVW5hYmxlIHRvIGNyZWF0ZSBzeW1saW5rIGF0IFwiJHtwYXRofVwiLiBUaGUgY29udGFpbmluZyBmb2xkZXIgZG9lcyBub3QgZXhpc3QuYCk7XG4gICAgfVxuICAgIGVudGl0eVtiYXNlbmFtZV0gPSBuZXcgU3ltTGluayh0YXJnZXQpO1xuICB9XG5cbiAgcmVhZGRpcihwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IFBhdGhTZWdtZW50W10ge1xuICAgIGNvbnN0IHtlbnRpdHl9ID0gdGhpcy5maW5kRnJvbVBhdGgocGF0aCk7XG4gICAgaWYgKGVudGl0eSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IE1vY2tGaWxlU3lzdGVtRXJyb3IoXG4gICAgICAgICAgJ0VOT0VOVCcsIHBhdGgsIGBVbmFibGUgdG8gcmVhZCBkaXJlY3RvcnkgXCIke3BhdGh9XCIuIEl0IGRvZXMgbm90IGV4aXN0LmApO1xuICAgIH1cbiAgICBpZiAoaXNGaWxlKGVudGl0eSkpIHtcbiAgICAgIHRocm93IG5ldyBNb2NrRmlsZVN5c3RlbUVycm9yKFxuICAgICAgICAgICdFTk9URElSJywgcGF0aCwgYFVuYWJsZSB0byByZWFkIGRpcmVjdG9yeSBcIiR7cGF0aH1cIi4gSXQgaXMgYSBmaWxlLmApO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZW50aXR5KSBhcyBQYXRoU2VnbWVudFtdO1xuICB9XG5cbiAgbHN0YXQocGF0aDogQWJzb2x1dGVGc1BhdGgpOiBGaWxlU3RhdHMge1xuICAgIGNvbnN0IHtlbnRpdHl9ID0gdGhpcy5maW5kRnJvbVBhdGgocGF0aCk7XG4gICAgaWYgKGVudGl0eSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IE1vY2tGaWxlU3lzdGVtRXJyb3IoJ0VOT0VOVCcsIHBhdGgsIGBGaWxlIFwiJHtwYXRofVwiIGRvZXMgbm90IGV4aXN0LmApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vY2tGaWxlU3RhdHMoZW50aXR5KTtcbiAgfVxuXG4gIHN0YXQocGF0aDogQWJzb2x1dGVGc1BhdGgpOiBGaWxlU3RhdHMge1xuICAgIGNvbnN0IHtlbnRpdHl9ID0gdGhpcy5maW5kRnJvbVBhdGgocGF0aCwge2ZvbGxvd1N5bUxpbmtzOiB0cnVlfSk7XG4gICAgaWYgKGVudGl0eSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IE1vY2tGaWxlU3lzdGVtRXJyb3IoJ0VOT0VOVCcsIHBhdGgsIGBGaWxlIFwiJHtwYXRofVwiIGRvZXMgbm90IGV4aXN0LmApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vY2tGaWxlU3RhdHMoZW50aXR5KTtcbiAgfVxuXG4gIGNvcHlGaWxlKGZyb206IEFic29sdXRlRnNQYXRoLCB0bzogQWJzb2x1dGVGc1BhdGgpOiB2b2lkIHtcbiAgICB0aGlzLndyaXRlRmlsZSh0bywgdGhpcy5yZWFkRmlsZShmcm9tKSk7XG4gIH1cblxuICBtb3ZlRmlsZShmcm9tOiBBYnNvbHV0ZUZzUGF0aCwgdG86IEFic29sdXRlRnNQYXRoKTogdm9pZCB7XG4gICAgdGhpcy53cml0ZUZpbGUodG8sIHRoaXMucmVhZEZpbGUoZnJvbSkpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmluZEZyb21QYXRoKGRpcm5hbWUoZnJvbSkpO1xuICAgIGNvbnN0IGZvbGRlciA9IHJlc3VsdC5lbnRpdHkgYXMgRm9sZGVyO1xuICAgIGNvbnN0IG5hbWUgPSBiYXNlbmFtZShmcm9tKTtcbiAgICBkZWxldGUgZm9sZGVyW25hbWVdO1xuICB9XG5cbiAgZW5zdXJlRGlyKHBhdGg6IEFic29sdXRlRnNQYXRoKTogRm9sZGVyIHtcbiAgICBjb25zdCBzZWdtZW50cyA9IHRoaXMuc3BsaXRQYXRoKHBhdGgpLm1hcChzZWdtZW50ID0+IHRoaXMuZ2V0Q2Fub25pY2FsUGF0aChzZWdtZW50KSk7XG5cbiAgICAvLyBDb252ZXJ0IHRoZSByb290IGZvbGRlciB0byBhIGNhbm9uaWNhbCBlbXB0eSBzdHJpbmcgYCcnYCAob24gV2luZG93cyBpdCB3b3VsZCBiZSBgJ0M6J2ApLlxuICAgIHNlZ21lbnRzWzBdID0gJyc7XG4gICAgaWYgKHNlZ21lbnRzLmxlbmd0aCA+IDEgJiYgc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV0gPT09ICcnKSB7XG4gICAgICAvLyBSZW1vdmUgYSB0cmFpbGluZyBzbGFzaCAodW5sZXNzIHRoZSBwYXRoIHdhcyBvbmx5IGAvYClcbiAgICAgIHNlZ21lbnRzLnBvcCgpO1xuICAgIH1cblxuICAgIGxldCBjdXJyZW50OiBGb2xkZXIgPSB0aGlzLl9maWxlVHJlZTtcbiAgICBmb3IgKGNvbnN0IHNlZ21lbnQgb2Ygc2VnbWVudHMpIHtcbiAgICAgIGlmIChpc0ZpbGUoY3VycmVudFtzZWdtZW50XSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb2xkZXIgYWxyZWFkeSBleGlzdHMgYXMgYSBmaWxlLmApO1xuICAgICAgfVxuICAgICAgaWYgKCFjdXJyZW50W3NlZ21lbnRdKSB7XG4gICAgICAgIGN1cnJlbnRbc2VnbWVudF0gPSB7fTtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50W3NlZ21lbnRdIGFzIEZvbGRlcjtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cblxuICByZW1vdmVEZWVwKHBhdGg6IEFic29sdXRlRnNQYXRoKTogdm9pZCB7XG4gICAgY29uc3QgW2ZvbGRlclBhdGgsIGJhc2VuYW1lXSA9IHRoaXMuc3BsaXRJbnRvRm9sZGVyQW5kRmlsZShwYXRoKTtcbiAgICBjb25zdCB7ZW50aXR5fSA9IHRoaXMuZmluZEZyb21QYXRoKGZvbGRlclBhdGgpO1xuICAgIGlmIChlbnRpdHkgPT09IG51bGwgfHwgIWlzRm9sZGVyKGVudGl0eSkpIHtcbiAgICAgIHRocm93IG5ldyBNb2NrRmlsZVN5c3RlbUVycm9yKFxuICAgICAgICAgICdFTk9FTlQnLCBwYXRoLFxuICAgICAgICAgIGBVbmFibGUgdG8gcmVtb3ZlIGZvbGRlciBcIiR7cGF0aH1cIi4gVGhlIGNvbnRhaW5pbmcgZm9sZGVyIGRvZXMgbm90IGV4aXN0LmApO1xuICAgIH1cbiAgICBkZWxldGUgZW50aXR5W2Jhc2VuYW1lXTtcbiAgfVxuXG4gIGlzUm9vdChwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRpcm5hbWUocGF0aCkgPT09IHBhdGg7XG4gIH1cblxuICBleHRuYW1lKHBhdGg6IEFic29sdXRlRnNQYXRofFBhdGhTZWdtZW50KTogc3RyaW5nIHtcbiAgICBjb25zdCBtYXRjaCA9IC8uKyhcXC5bXi5dKikkLy5leGVjKHBhdGgpO1xuICAgIHJldHVybiBtYXRjaCAhPT0gbnVsbCA/IG1hdGNoWzFdIDogJyc7XG4gIH1cblxuICByZWFscGF0aChmaWxlUGF0aDogQWJzb2x1dGVGc1BhdGgpOiBBYnNvbHV0ZUZzUGF0aCB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5maW5kRnJvbVBhdGgoZmlsZVBhdGgsIHtmb2xsb3dTeW1MaW5rczogdHJ1ZX0pO1xuICAgIGlmIChyZXN1bHQuZW50aXR5ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgTW9ja0ZpbGVTeXN0ZW1FcnJvcihcbiAgICAgICAgICAnRU5PRU5UJywgZmlsZVBhdGgsIGBVbmFibGUgdG8gZmluZCB0aGUgcmVhbCBwYXRoIG9mIFwiJHtmaWxlUGF0aH1cIi4gSXQgZG9lcyBub3QgZXhpc3QuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXN1bHQucGF0aDtcbiAgICB9XG4gIH1cblxuICBwd2QoKTogQWJzb2x1dGVGc1BhdGgge1xuICAgIHJldHVybiB0aGlzLl9jd2Q7XG4gIH1cblxuICBjaGRpcihwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IHZvaWQge1xuICAgIHRoaXMuX2N3ZCA9IHRoaXMubm9ybWFsaXplKHBhdGgpO1xuICB9XG5cbiAgZ2V0RGVmYXVsdExpYkxvY2F0aW9uKCk6IEFic29sdXRlRnNQYXRoIHtcbiAgICAvLyBNaW1pYyB0aGUgbm9kZSBtb2R1bGUgcmVzb2x1dGlvbiBhbGdvcml0aG0gYW5kIHN0YXJ0IGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgdGhlbiBsb29rXG4gICAgLy8gcHJvZ3Jlc3NpdmVseSBmdXJ0aGVyIHVwIHRoZSB0cmVlIHVudGlsIHJlYWNoaW5nIHRoZSBGUyByb290LlxuICAgIC8vIEUuZy4gaWYgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIC9mb28vYmFyLCBsb29rIGluIC9mb28vYmFyL25vZGVfbW9kdWxlcywgdGhlblxuICAgIC8vIC9mb28vbm9kZV9tb2R1bGVzLCB0aGVuIC9ub2RlX21vZHVsZXMuXG5cbiAgICBsZXQgcGF0aCA9ICdub2RlX21vZHVsZXMvdHlwZXNjcmlwdC9saWInO1xuICAgIGxldCByZXNvbHZlZFBhdGggPSB0aGlzLnJlc29sdmUocGF0aCk7XG5cbiAgICAvLyBDb25zdHJ1Y3QgYSBwYXRoIGZvciB0aGUgdG9wLWxldmVsIG5vZGVfbW9kdWxlcyB0byBpZGVudGlmeSB0aGUgc3RvcHBpbmcgcG9pbnQuXG4gICAgY29uc3QgdG9wTGV2ZWxOb2RlTW9kdWxlcyA9IHRoaXMucmVzb2x2ZSgnLycgKyBwYXRoKTtcblxuICAgIHdoaWxlIChyZXNvbHZlZFBhdGggIT09IHRvcExldmVsTm9kZU1vZHVsZXMpIHtcbiAgICAgIGlmICh0aGlzLmV4aXN0cyhyZXNvbHZlZFBhdGgpKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlZFBhdGg7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vdCBoZXJlLCBsb29rIG9uZSBsZXZlbCBoaWdoZXIuXG4gICAgICBwYXRoID0gJy4uLycgKyBwYXRoO1xuICAgICAgcmVzb2x2ZWRQYXRoID0gdGhpcy5yZXNvbHZlKHBhdGgpO1xuICAgIH1cblxuICAgIC8vIFRoZSBsb29wIGV4aXRzIGJlZm9yZSBjaGVja2luZyB0aGUgZXhpc3RlbmNlIG9mIC9ub2RlX21vZHVsZXMvdHlwZXNjcmlwdCBhdCB0aGUgdG9wIGxldmVsLlxuICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWwgLSBpZiBubyAvbm9kZV9tb2R1bGVzL3R5cGVzY3JpcHQgZXhpc3RzIGFueXdoZXJlIGluIHRoZSB0cmVlLCB0aGVyZSdzXG4gICAgLy8gbm90aGluZyB0aGlzIGZ1bmN0aW9uIGNhbiBkbyBhYm91dCBpdCwgYW5kIFRTIG1heSBlcnJvciBsYXRlciBpZiBpdCBsb29rcyBmb3IgYSBsaWIuZC50cyBmaWxlXG4gICAgLy8gd2l0aGluIHRoaXMgZGlyZWN0b3J5LiBJdCBtaWdodCBiZSBva2F5LCB0aG91Z2gsIGlmIFRTIG5ldmVyIGNoZWNrcyBmb3Igb25lLlxuICAgIHJldHVybiB0b3BMZXZlbE5vZGVNb2R1bGVzO1xuICB9XG5cbiAgYWJzdHJhY3QgcmVzb2x2ZSguLi5wYXRoczogc3RyaW5nW10pOiBBYnNvbHV0ZUZzUGF0aDtcbiAgYWJzdHJhY3QgZGlybmFtZTxUIGV4dGVuZHMgc3RyaW5nPihmaWxlOiBUKTogVDtcbiAgYWJzdHJhY3Qgam9pbjxUIGV4dGVuZHMgc3RyaW5nPihiYXNlUGF0aDogVCwgLi4ucGF0aHM6IHN0cmluZ1tdKTogVDtcbiAgYWJzdHJhY3QgcmVsYXRpdmU8VCBleHRlbmRzIFBhdGhTdHJpbmc+KGZyb206IFQsIHRvOiBUKTogUGF0aFNlZ21lbnR8QWJzb2x1dGVGc1BhdGg7XG4gIGFic3RyYWN0IGJhc2VuYW1lKGZpbGVQYXRoOiBzdHJpbmcsIGV4dGVuc2lvbj86IHN0cmluZyk6IFBhdGhTZWdtZW50O1xuICBhYnN0cmFjdCBpc1Jvb3RlZChwYXRoOiBzdHJpbmcpOiBib29sZWFuO1xuICBhYnN0cmFjdCBub3JtYWxpemU8VCBleHRlbmRzIFBhdGhTdHJpbmc+KHBhdGg6IFQpOiBUO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc3BsaXRQYXRoPFQgZXh0ZW5kcyBQYXRoU3RyaW5nPihwYXRoOiBUKTogc3RyaW5nW107XG5cbiAgZHVtcCgpOiBGb2xkZXIge1xuICAgIGNvbnN0IHtlbnRpdHl9ID0gdGhpcy5maW5kRnJvbVBhdGgodGhpcy5yZXNvbHZlKCcvJykpO1xuICAgIGlmIChlbnRpdHkgPT09IG51bGwgfHwgIWlzRm9sZGVyKGVudGl0eSkpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jbG9uZUZvbGRlcihlbnRpdHkpO1xuICB9XG5cbiAgaW5pdChmb2xkZXI6IEZvbGRlcik6IHZvaWQge1xuICAgIHRoaXMubW91bnQodGhpcy5yZXNvbHZlKCcvJyksIGZvbGRlcik7XG4gIH1cblxuICBtb3VudChwYXRoOiBBYnNvbHV0ZUZzUGF0aCwgZm9sZGVyOiBGb2xkZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5leGlzdHMocGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIG1vdW50IGluICcke3BhdGh9JyBhcyBpdCBhbHJlYWR5IGV4aXN0cy5gKTtcbiAgICB9XG4gICAgY29uc3QgbW91bnRGb2xkZXIgPSB0aGlzLmVuc3VyZURpcihwYXRoKTtcblxuICAgIHRoaXMuY29weUludG8oZm9sZGVyLCBtb3VudEZvbGRlcik7XG4gIH1cblxuICBwcml2YXRlIGNsb25lRm9sZGVyKGZvbGRlcjogRm9sZGVyKTogRm9sZGVyIHtcbiAgICBjb25zdCBjbG9uZTogRm9sZGVyID0ge307XG4gICAgdGhpcy5jb3B5SW50byhmb2xkZXIsIGNsb25lKTtcbiAgICByZXR1cm4gY2xvbmU7XG4gIH1cblxuICBwcml2YXRlIGNvcHlJbnRvKGZyb206IEZvbGRlciwgdG86IEZvbGRlcik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgcGF0aCBpbiBmcm9tKSB7XG4gICAgICBjb25zdCBpdGVtID0gZnJvbVtwYXRoXTtcbiAgICAgIGNvbnN0IGNhbm9uaWNhbFBhdGggPSB0aGlzLmdldENhbm9uaWNhbFBhdGgocGF0aCk7XG4gICAgICBpZiAoaXNTeW1MaW5rKGl0ZW0pKSB7XG4gICAgICAgIHRvW2Nhbm9uaWNhbFBhdGhdID0gbmV3IFN5bUxpbmsodGhpcy5nZXRDYW5vbmljYWxQYXRoKGl0ZW0ucGF0aCkpO1xuICAgICAgfSBlbHNlIGlmIChpc0ZvbGRlcihpdGVtKSkge1xuICAgICAgICB0b1tjYW5vbmljYWxQYXRoXSA9IHRoaXMuY2xvbmVGb2xkZXIoaXRlbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b1tjYW5vbmljYWxQYXRoXSA9IGZyb21bcGF0aF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICBwcm90ZWN0ZWQgZmluZEZyb21QYXRoKHBhdGg6IEFic29sdXRlRnNQYXRoLCBvcHRpb25zPzoge2ZvbGxvd1N5bUxpbmtzOiBib29sZWFufSk6IEZpbmRSZXN1bHQge1xuICAgIGNvbnN0IGZvbGxvd1N5bUxpbmtzID0gISFvcHRpb25zICYmIG9wdGlvbnMuZm9sbG93U3ltTGlua3M7XG4gICAgY29uc3Qgc2VnbWVudHMgPSB0aGlzLnNwbGl0UGF0aChwYXRoKTtcbiAgICBpZiAoc2VnbWVudHMubGVuZ3RoID4gMSAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXSA9PT0gJycpIHtcbiAgICAgIC8vIFJlbW92ZSBhIHRyYWlsaW5nIHNsYXNoICh1bmxlc3MgdGhlIHBhdGggd2FzIG9ubHkgYC9gKVxuICAgICAgc2VnbWVudHMucG9wKCk7XG4gICAgfVxuICAgIC8vIENvbnZlcnQgdGhlIHJvb3QgZm9sZGVyIHRvIGEgY2Fub25pY2FsIGVtcHR5IHN0cmluZyBgXCJcImAgKG9uIFdpbmRvd3MgaXQgd291bGQgYmUgYEM6YCkuXG4gICAgc2VnbWVudHNbMF0gPSAnJztcbiAgICBsZXQgY3VycmVudDogRW50aXR5fG51bGwgPSB0aGlzLl9maWxlVHJlZTtcbiAgICB3aGlsZSAoc2VnbWVudHMubGVuZ3RoKSB7XG4gICAgICBjdXJyZW50ID0gY3VycmVudFt0aGlzLmdldENhbm9uaWNhbFBhdGgoc2VnbWVudHMuc2hpZnQoKSEpXTtcbiAgICAgIGlmIChjdXJyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHtwYXRoLCBlbnRpdHk6IG51bGx9O1xuICAgICAgfVxuICAgICAgaWYgKHNlZ21lbnRzLmxlbmd0aCA+IDAgJiYgKCFpc0ZvbGRlcihjdXJyZW50KSkpIHtcbiAgICAgICAgY3VycmVudCA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGlzRmlsZShjdXJyZW50KSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChpc1N5bUxpbmsoY3VycmVudCkpIHtcbiAgICAgICAgaWYgKGZvbGxvd1N5bUxpbmtzKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZmluZEZyb21QYXRoKHJlc29sdmUoY3VycmVudC5wYXRoLCAuLi5zZWdtZW50cyksIHtmb2xsb3dTeW1MaW5rc30pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7cGF0aCwgZW50aXR5OiBjdXJyZW50fTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzcGxpdEludG9Gb2xkZXJBbmRGaWxlKHBhdGg6IEFic29sdXRlRnNQYXRoKTogW0Fic29sdXRlRnNQYXRoLCBzdHJpbmddIHtcbiAgICBjb25zdCBzZWdtZW50cyA9IHRoaXMuc3BsaXRQYXRoKHRoaXMuZ2V0Q2Fub25pY2FsUGF0aChwYXRoKSk7XG4gICAgY29uc3QgZmlsZSA9IHNlZ21lbnRzLnBvcCgpITtcbiAgICByZXR1cm4gW3BhdGguc3Vic3RyaW5nKDAsIHBhdGgubGVuZ3RoIC0gZmlsZS5sZW5ndGggLSAxKSBhcyBBYnNvbHV0ZUZzUGF0aCwgZmlsZV07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q2Fub25pY2FsUGF0aDxUIGV4dGVuZHMgc3RyaW5nPihwOiBUKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuaXNDYXNlU2Vuc2l0aXZlKCkgPyBwIDogcC50b0xvd2VyQ2FzZSgpIGFzIFQ7XG4gIH1cbn1cbmV4cG9ydCBpbnRlcmZhY2UgRmluZFJlc3VsdCB7XG4gIHBhdGg6IEFic29sdXRlRnNQYXRoO1xuICBlbnRpdHk6IEVudGl0eXxudWxsO1xufVxuZXhwb3J0IHR5cGUgRW50aXR5ID0gRm9sZGVyfEZpbGV8U3ltTGluaztcbmV4cG9ydCBpbnRlcmZhY2UgRm9sZGVyIHtcbiAgW3BhdGhTZWdtZW50czogc3RyaW5nXTogRW50aXR5O1xufVxuZXhwb3J0IHR5cGUgRmlsZSA9IHN0cmluZ3xVaW50OEFycmF5O1xuZXhwb3J0IGNsYXNzIFN5bUxpbmsge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGF0aDogQWJzb2x1dGVGc1BhdGgpIHt9XG59XG5cbmNsYXNzIE1vY2tGaWxlU3RhdHMgaW1wbGVtZW50cyBGaWxlU3RhdHMge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVudGl0eTogRW50aXR5KSB7fVxuICBpc0ZpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzRmlsZSh0aGlzLmVudGl0eSk7XG4gIH1cbiAgaXNEaXJlY3RvcnkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzRm9sZGVyKHRoaXMuZW50aXR5KTtcbiAgfVxuICBpc1N5bWJvbGljTGluaygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNTeW1MaW5rKHRoaXMuZW50aXR5KTtcbiAgfVxufVxuXG5jbGFzcyBNb2NrRmlsZVN5c3RlbUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgY29kZTogc3RyaW5nLCBwdWJsaWMgcGF0aDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGaWxlKGl0ZW06IEVudGl0eXxudWxsKTogaXRlbSBpcyBGaWxlIHtcbiAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihpdGVtKSB8fCB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N5bUxpbmsoaXRlbTogRW50aXR5fG51bGwpOiBpdGVtIGlzIFN5bUxpbmsge1xuICByZXR1cm4gaXRlbSBpbnN0YW5jZW9mIFN5bUxpbms7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZvbGRlcihpdGVtOiBFbnRpdHl8bnVsbCk6IGl0ZW0gaXMgRm9sZGVyIHtcbiAgcmV0dXJuIGl0ZW0gIT09IG51bGwgJiYgIWlzRmlsZShpdGVtKSAmJiAhaXNTeW1MaW5rKGl0ZW0pO1xufVxuIl19
@@ -1,57 +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
- import * as os from 'os';
10
- import { NodeJSFileSystem } from '../../src/node_js_file_system';
11
- import { MockFileSystem } from './mock_file_system';
12
- const isWindows = os.platform() === 'win32';
13
- export class MockFileSystemNative extends MockFileSystem {
14
- constructor(cwd = '/') {
15
- super(undefined, cwd);
16
- }
17
- // Delegate to the real NodeJSFileSystem for these path related methods
18
- resolve(...paths) {
19
- return NodeJSFileSystem.prototype.resolve.call(this, this.pwd(), ...paths);
20
- }
21
- dirname(file) {
22
- return NodeJSFileSystem.prototype.dirname.call(this, file);
23
- }
24
- join(basePath, ...paths) {
25
- return NodeJSFileSystem.prototype.join.call(this, basePath, ...paths);
26
- }
27
- relative(from, to) {
28
- return NodeJSFileSystem.prototype.relative.call(this, from, to);
29
- }
30
- basename(filePath, extension) {
31
- return NodeJSFileSystem.prototype.basename.call(this, filePath, extension);
32
- }
33
- isCaseSensitive() {
34
- return NodeJSFileSystem.prototype.isCaseSensitive.call(this);
35
- }
36
- isRooted(path) {
37
- return NodeJSFileSystem.prototype.isRooted.call(this, path);
38
- }
39
- isRoot(path) {
40
- return NodeJSFileSystem.prototype.isRoot.call(this, path);
41
- }
42
- normalize(path) {
43
- // When running in Windows, absolute paths are normalized to always include a drive letter. This
44
- // ensures that rooted posix paths used in tests will be normalized to real Windows paths, i.e.
45
- // including a drive letter. Note that the same normalization is done in emulated Windows mode
46
- // (see `MockFileSystemWindows`) so that the behavior is identical between native Windows and
47
- // emulated Windows mode.
48
- if (isWindows) {
49
- path = path.replace(/^[\/\\]/i, 'C:/');
50
- }
51
- return NodeJSFileSystem.prototype.normalize.call(this, path);
52
- }
53
- splitPath(path) {
54
- return path.split(/[\\\/]/);
55
- }
56
- }
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19maWxlX3N5c3RlbV9uYXRpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL2ZpbGVfc3lzdGVtL3Rlc3Rpbmcvc3JjL21vY2tfZmlsZV9zeXN0ZW1fbmF0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILDhCQUE4QjtBQUM5QixPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUN6QixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUcvRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbEQsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxLQUFLLE9BQU8sQ0FBQztBQUU1QyxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsY0FBYztJQUN0RCxZQUFZLE1BQXNCLEdBQXFCO1FBQ3JELEtBQUssQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELHVFQUF1RTtJQUV2RSxPQUFPLENBQUMsR0FBRyxLQUFlO1FBQ3hCLE9BQU8sZ0JBQWdCLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFDRCxPQUFPLENBQW1CLElBQU87UUFDL0IsT0FBTyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFNLENBQUM7SUFDbEUsQ0FBQztJQUNELElBQUksQ0FBbUIsUUFBVyxFQUFFLEdBQUcsS0FBZTtRQUNwRCxPQUFPLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQU0sQ0FBQztJQUM3RSxDQUFDO0lBQ0QsUUFBUSxDQUF1QixJQUFPLEVBQUUsRUFBSztRQUMzQyxPQUFPLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELFFBQVEsQ0FBQyxRQUFnQixFQUFFLFNBQWtCO1FBQzNDLE9BQU8sZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFZO1FBQ25CLE9BQU8sZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxNQUFNLENBQUMsSUFBb0I7UUFDekIsT0FBTyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELFNBQVMsQ0FBdUIsSUFBTztRQUNyQyxnR0FBZ0c7UUFDaEcsK0ZBQStGO1FBQy9GLDhGQUE4RjtRQUM5Riw2RkFBNkY7UUFDN0YseUJBQXlCO1FBQ3pCLElBQUksU0FBUyxFQUFFO1lBQ2IsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBTSxDQUFDO1NBQzdDO1FBRUQsT0FBTyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFNLENBQUM7SUFDcEUsQ0FBQztJQUVTLFNBQVMsQ0FBSSxJQUFZO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwibm9kZVwiIC8+XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQge05vZGVKU0ZpbGVTeXN0ZW19IGZyb20gJy4uLy4uL3NyYy9ub2RlX2pzX2ZpbGVfc3lzdGVtJztcbmltcG9ydCB7QWJzb2x1dGVGc1BhdGgsIFBhdGhTZWdtZW50LCBQYXRoU3RyaW5nfSBmcm9tICcuLi8uLi9zcmMvdHlwZXMnO1xuXG5pbXBvcnQge01vY2tGaWxlU3lzdGVtfSBmcm9tICcuL21vY2tfZmlsZV9zeXN0ZW0nO1xuXG5jb25zdCBpc1dpbmRvd3MgPSBvcy5wbGF0Zm9ybSgpID09PSAnd2luMzInO1xuXG5leHBvcnQgY2xhc3MgTW9ja0ZpbGVTeXN0ZW1OYXRpdmUgZXh0ZW5kcyBNb2NrRmlsZVN5c3RlbSB7XG4gIGNvbnN0cnVjdG9yKGN3ZDogQWJzb2x1dGVGc1BhdGggPSAnLycgYXMgQWJzb2x1dGVGc1BhdGgpIHtcbiAgICBzdXBlcih1bmRlZmluZWQsIGN3ZCk7XG4gIH1cblxuICAvLyBEZWxlZ2F0ZSB0byB0aGUgcmVhbCBOb2RlSlNGaWxlU3lzdGVtIGZvciB0aGVzZSBwYXRoIHJlbGF0ZWQgbWV0aG9kc1xuXG4gIHJlc29sdmUoLi4ucGF0aHM6IHN0cmluZ1tdKTogQWJzb2x1dGVGc1BhdGgge1xuICAgIHJldHVybiBOb2RlSlNGaWxlU3lzdGVtLnByb3RvdHlwZS5yZXNvbHZlLmNhbGwodGhpcywgdGhpcy5wd2QoKSwgLi4ucGF0aHMpO1xuICB9XG4gIGRpcm5hbWU8VCBleHRlbmRzIHN0cmluZz4oZmlsZTogVCk6IFQge1xuICAgIHJldHVybiBOb2RlSlNGaWxlU3lzdGVtLnByb3RvdHlwZS5kaXJuYW1lLmNhbGwodGhpcywgZmlsZSkgYXMgVDtcbiAgfVxuICBqb2luPFQgZXh0ZW5kcyBzdHJpbmc+KGJhc2VQYXRoOiBULCAuLi5wYXRoczogc3RyaW5nW10pOiBUIHtcbiAgICByZXR1cm4gTm9kZUpTRmlsZVN5c3RlbS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMsIGJhc2VQYXRoLCAuLi5wYXRocykgYXMgVDtcbiAgfVxuICByZWxhdGl2ZTxUIGV4dGVuZHMgUGF0aFN0cmluZz4oZnJvbTogVCwgdG86IFQpOiBQYXRoU2VnbWVudHxBYnNvbHV0ZUZzUGF0aCB7XG4gICAgcmV0dXJuIE5vZGVKU0ZpbGVTeXN0ZW0ucHJvdG90eXBlLnJlbGF0aXZlLmNhbGwodGhpcywgZnJvbSwgdG8pO1xuICB9XG5cbiAgYmFzZW5hbWUoZmlsZVBhdGg6IHN0cmluZywgZXh0ZW5zaW9uPzogc3RyaW5nKTogUGF0aFNlZ21lbnQge1xuICAgIHJldHVybiBOb2RlSlNGaWxlU3lzdGVtLnByb3RvdHlwZS5iYXNlbmFtZS5jYWxsKHRoaXMsIGZpbGVQYXRoLCBleHRlbnNpb24pO1xuICB9XG5cbiAgaXNDYXNlU2Vuc2l0aXZlKCkge1xuICAgIHJldHVybiBOb2RlSlNGaWxlU3lzdGVtLnByb3RvdHlwZS5pc0Nhc2VTZW5zaXRpdmUuY2FsbCh0aGlzKTtcbiAgfVxuXG4gIGlzUm9vdGVkKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBOb2RlSlNGaWxlU3lzdGVtLnByb3RvdHlwZS5pc1Jvb3RlZC5jYWxsKHRoaXMsIHBhdGgpO1xuICB9XG5cbiAgaXNSb290KHBhdGg6IEFic29sdXRlRnNQYXRoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIE5vZGVKU0ZpbGVTeXN0ZW0ucHJvdG90eXBlLmlzUm9vdC5jYWxsKHRoaXMsIHBhdGgpO1xuICB9XG5cbiAgbm9ybWFsaXplPFQgZXh0ZW5kcyBQYXRoU3RyaW5nPihwYXRoOiBUKTogVCB7XG4gICAgLy8gV2hlbiBydW5uaW5nIGluIFdpbmRvd3MsIGFic29sdXRlIHBhdGhzIGFyZSBub3JtYWxpemVkIHRvIGFsd2F5cyBpbmNsdWRlIGEgZHJpdmUgbGV0dGVyLiBUaGlzXG4gICAgLy8gZW5zdXJlcyB0aGF0IHJvb3RlZCBwb3NpeCBwYXRocyB1c2VkIGluIHRlc3RzIHdpbGwgYmUgbm9ybWFsaXplZCB0byByZWFsIFdpbmRvd3MgcGF0aHMsIGkuZS5cbiAgICAvLyBpbmNsdWRpbmcgYSBkcml2ZSBsZXR0ZXIuIE5vdGUgdGhhdCB0aGUgc2FtZSBub3JtYWxpemF0aW9uIGlzIGRvbmUgaW4gZW11bGF0ZWQgV2luZG93cyBtb2RlXG4gICAgLy8gKHNlZSBgTW9ja0ZpbGVTeXN0ZW1XaW5kb3dzYCkgc28gdGhhdCB0aGUgYmVoYXZpb3IgaXMgaWRlbnRpY2FsIGJldHdlZW4gbmF0aXZlIFdpbmRvd3MgYW5kXG4gICAgLy8gZW11bGF0ZWQgV2luZG93cyBtb2RlLlxuICAgIGlmIChpc1dpbmRvd3MpIHtcbiAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoL15bXFwvXFxcXF0vaSwgJ0M6LycpIGFzIFQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIE5vZGVKU0ZpbGVTeXN0ZW0ucHJvdG90eXBlLm5vcm1hbGl6ZS5jYWxsKHRoaXMsIHBhdGgpIGFzIFQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3BsaXRQYXRoPFQ+KHBhdGg6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gcGF0aC5zcGxpdCgvW1xcXFxcXC9dLyk7XG4gIH1cbn1cbiJdfQ==
@@ -1,38 +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
- import * as p from 'path';
10
- import { MockFileSystem } from './mock_file_system';
11
- export class MockFileSystemPosix extends MockFileSystem {
12
- resolve(...paths) {
13
- const resolved = p.posix.resolve(this.pwd(), ...paths);
14
- return this.normalize(resolved);
15
- }
16
- dirname(file) {
17
- return this.normalize(p.posix.dirname(file));
18
- }
19
- join(basePath, ...paths) {
20
- return this.normalize(p.posix.join(basePath, ...paths));
21
- }
22
- relative(from, to) {
23
- return this.normalize(p.posix.relative(from, to));
24
- }
25
- basename(filePath, extension) {
26
- return p.posix.basename(filePath, extension);
27
- }
28
- isRooted(path) {
29
- return path.startsWith('/');
30
- }
31
- splitPath(path) {
32
- return path.split('/');
33
- }
34
- normalize(path) {
35
- return path.replace(/^[a-z]:\//i, '/').replace(/\\/g, '/');
36
- }
37
- }
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19maWxlX3N5c3RlbV9wb3NpeC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvZmlsZV9zeXN0ZW0vdGVzdGluZy9zcmMvbW9ja19maWxlX3N5c3RlbV9wb3NpeC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFDSCw4QkFBOEI7QUFDOUIsT0FBTyxLQUFLLENBQUMsTUFBTSxNQUFNLENBQUM7QUFHMUIsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRWxELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxjQUFjO0lBQ3JELE9BQU8sQ0FBQyxHQUFHLEtBQWU7UUFDeEIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDdkQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBbUIsQ0FBQztJQUNwRCxDQUFDO0lBRUQsT0FBTyxDQUFtQixJQUFPO1FBQy9CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBTSxDQUFDO0lBQ3BELENBQUM7SUFFRCxJQUFJLENBQW1CLFFBQVcsRUFBRSxHQUFHLEtBQWU7UUFDcEQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFNLENBQUM7SUFDL0QsQ0FBQztJQUVELFFBQVEsQ0FBdUIsSUFBTyxFQUFFLEVBQUs7UUFDM0MsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBaUMsQ0FBQztJQUNwRixDQUFDO0lBRUQsUUFBUSxDQUFDLFFBQWdCLEVBQUUsU0FBa0I7UUFDM0MsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFnQixDQUFDO0lBQzlELENBQUM7SUFFRCxRQUFRLENBQUMsSUFBWTtRQUNuQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVTLFNBQVMsQ0FBdUIsSUFBTztRQUMvQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELFNBQVMsQ0FBdUIsSUFBTztRQUNyQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFNLENBQUM7SUFDbEUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG4vLy8gPHJlZmVyZW5jZSB0eXBlcz1cIm5vZGVcIiAvPlxuaW1wb3J0ICogYXMgcCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtBYnNvbHV0ZUZzUGF0aCwgUGF0aFNlZ21lbnQsIFBhdGhTdHJpbmd9IGZyb20gJy4uLy4uL3NyYy90eXBlcyc7XG5pbXBvcnQge01vY2tGaWxlU3lzdGVtfSBmcm9tICcuL21vY2tfZmlsZV9zeXN0ZW0nO1xuXG5leHBvcnQgY2xhc3MgTW9ja0ZpbGVTeXN0ZW1Qb3NpeCBleHRlbmRzIE1vY2tGaWxlU3lzdGVtIHtcbiAgcmVzb2x2ZSguLi5wYXRoczogc3RyaW5nW10pOiBBYnNvbHV0ZUZzUGF0aCB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBwLnBvc2l4LnJlc29sdmUodGhpcy5wd2QoKSwgLi4ucGF0aHMpO1xuICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZShyZXNvbHZlZCkgYXMgQWJzb2x1dGVGc1BhdGg7XG4gIH1cblxuICBkaXJuYW1lPFQgZXh0ZW5kcyBzdHJpbmc+KGZpbGU6IFQpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5ub3JtYWxpemUocC5wb3NpeC5kaXJuYW1lKGZpbGUpKSBhcyBUO1xuICB9XG5cbiAgam9pbjxUIGV4dGVuZHMgc3RyaW5nPihiYXNlUGF0aDogVCwgLi4ucGF0aHM6IHN0cmluZ1tdKTogVCB7XG4gICAgcmV0dXJuIHRoaXMubm9ybWFsaXplKHAucG9zaXguam9pbihiYXNlUGF0aCwgLi4ucGF0aHMpKSBhcyBUO1xuICB9XG5cbiAgcmVsYXRpdmU8VCBleHRlbmRzIFBhdGhTdHJpbmc+KGZyb206IFQsIHRvOiBUKTogUGF0aFNlZ21lbnR8QWJzb2x1dGVGc1BhdGgge1xuICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZShwLnBvc2l4LnJlbGF0aXZlKGZyb20sIHRvKSkgYXMgUGF0aFNlZ21lbnQgfCBBYnNvbHV0ZUZzUGF0aDtcbiAgfVxuXG4gIGJhc2VuYW1lKGZpbGVQYXRoOiBzdHJpbmcsIGV4dGVuc2lvbj86IHN0cmluZyk6IFBhdGhTZWdtZW50IHtcbiAgICByZXR1cm4gcC5wb3NpeC5iYXNlbmFtZShmaWxlUGF0aCwgZXh0ZW5zaW9uKSBhcyBQYXRoU2VnbWVudDtcbiAgfVxuXG4gIGlzUm9vdGVkKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwYXRoLnN0YXJ0c1dpdGgoJy8nKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzcGxpdFBhdGg8VCBleHRlbmRzIFBhdGhTdHJpbmc+KHBhdGg6IFQpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHBhdGguc3BsaXQoJy8nKTtcbiAgfVxuXG4gIG5vcm1hbGl6ZTxUIGV4dGVuZHMgUGF0aFN0cmluZz4ocGF0aDogVCk6IFQge1xuICAgIHJldHVybiBwYXRoLnJlcGxhY2UoL15bYS16XTpcXC8vaSwgJy8nKS5yZXBsYWNlKC9cXFxcL2csICcvJykgYXMgVDtcbiAgfVxufVxuIl19
@@ -1,38 +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
- import * as p from 'path';
10
- import { MockFileSystem } from './mock_file_system';
11
- export class MockFileSystemWindows extends MockFileSystem {
12
- resolve(...paths) {
13
- const resolved = p.win32.resolve(this.pwd(), ...paths);
14
- return this.normalize(resolved);
15
- }
16
- dirname(path) {
17
- return this.normalize(p.win32.dirname(path));
18
- }
19
- join(basePath, ...paths) {
20
- return this.normalize(p.win32.join(basePath, ...paths));
21
- }
22
- relative(from, to) {
23
- return this.normalize(p.win32.relative(from, to));
24
- }
25
- basename(filePath, extension) {
26
- return p.win32.basename(filePath, extension);
27
- }
28
- isRooted(path) {
29
- return /^([A-Z]:)?([\\\/]|$)/i.test(path);
30
- }
31
- splitPath(path) {
32
- return path.split(/[\\\/]/);
33
- }
34
- normalize(path) {
35
- return path.replace(/^[\/\\]/i, 'C:/').replace(/\\/g, '/');
36
- }
37
- }
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19maWxlX3N5c3RlbV93aW5kb3dzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9maWxlX3N5c3RlbS90ZXN0aW5nL3NyYy9tb2NrX2ZpbGVfc3lzdGVtX3dpbmRvd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsOEJBQThCO0FBQzlCLE9BQU8sS0FBSyxDQUFDLE1BQU0sTUFBTSxDQUFDO0FBRzFCLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsY0FBYztJQUN2RCxPQUFPLENBQUMsR0FBRyxLQUFlO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUEwQixDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELE9BQU8sQ0FBbUIsSUFBTztRQUMvQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFNLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFBSSxDQUFtQixRQUFXLEVBQUUsR0FBRyxLQUFlO1FBQ3BELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBTSxDQUFDO0lBQy9ELENBQUM7SUFFRCxRQUFRLENBQXVCLElBQU8sRUFBRSxFQUFLO1FBQzNDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQWlDLENBQUM7SUFDcEYsQ0FBQztJQUVELFFBQVEsQ0FBQyxRQUFnQixFQUFFLFNBQWtCO1FBQzNDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBZ0IsQ0FBQztJQUM5RCxDQUFDO0lBRUQsUUFBUSxDQUFDLElBQVk7UUFDbkIsT0FBTyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVTLFNBQVMsQ0FBdUIsSUFBTztRQUMvQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELFNBQVMsQ0FBdUIsSUFBTztRQUNyQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFNLENBQUM7SUFDbEUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG4vLy8gPHJlZmVyZW5jZSB0eXBlcz1cIm5vZGVcIiAvPlxuaW1wb3J0ICogYXMgcCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtBYnNvbHV0ZUZzUGF0aCwgUGF0aFNlZ21lbnQsIFBhdGhTdHJpbmd9IGZyb20gJy4uLy4uL3NyYy90eXBlcyc7XG5pbXBvcnQge01vY2tGaWxlU3lzdGVtfSBmcm9tICcuL21vY2tfZmlsZV9zeXN0ZW0nO1xuXG5leHBvcnQgY2xhc3MgTW9ja0ZpbGVTeXN0ZW1XaW5kb3dzIGV4dGVuZHMgTW9ja0ZpbGVTeXN0ZW0ge1xuICByZXNvbHZlKC4uLnBhdGhzOiBzdHJpbmdbXSk6IEFic29sdXRlRnNQYXRoIHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHAud2luMzIucmVzb2x2ZSh0aGlzLnB3ZCgpLCAuLi5wYXRocyk7XG4gICAgcmV0dXJuIHRoaXMubm9ybWFsaXplKHJlc29sdmVkIGFzIEFic29sdXRlRnNQYXRoKTtcbiAgfVxuXG4gIGRpcm5hbWU8VCBleHRlbmRzIHN0cmluZz4ocGF0aDogVCk6IFQge1xuICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZShwLndpbjMyLmRpcm5hbWUocGF0aCkgYXMgVCk7XG4gIH1cblxuICBqb2luPFQgZXh0ZW5kcyBzdHJpbmc+KGJhc2VQYXRoOiBULCAuLi5wYXRoczogc3RyaW5nW10pOiBUIHtcbiAgICByZXR1cm4gdGhpcy5ub3JtYWxpemUocC53aW4zMi5qb2luKGJhc2VQYXRoLCAuLi5wYXRocykpIGFzIFQ7XG4gIH1cblxuICByZWxhdGl2ZTxUIGV4dGVuZHMgUGF0aFN0cmluZz4oZnJvbTogVCwgdG86IFQpOiBQYXRoU2VnbWVudHxBYnNvbHV0ZUZzUGF0aCB7XG4gICAgcmV0dXJuIHRoaXMubm9ybWFsaXplKHAud2luMzIucmVsYXRpdmUoZnJvbSwgdG8pKSBhcyBQYXRoU2VnbWVudCB8IEFic29sdXRlRnNQYXRoO1xuICB9XG5cbiAgYmFzZW5hbWUoZmlsZVBhdGg6IHN0cmluZywgZXh0ZW5zaW9uPzogc3RyaW5nKTogUGF0aFNlZ21lbnQge1xuICAgIHJldHVybiBwLndpbjMyLmJhc2VuYW1lKGZpbGVQYXRoLCBleHRlbnNpb24pIGFzIFBhdGhTZWdtZW50O1xuICB9XG5cbiAgaXNSb290ZWQocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9eKFtBLVpdOik/KFtcXFxcXFwvXXwkKS9pLnRlc3QocGF0aCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3BsaXRQYXRoPFQgZXh0ZW5kcyBQYXRoU3RyaW5nPihwYXRoOiBUKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBwYXRoLnNwbGl0KC9bXFxcXFxcL10vKTtcbiAgfVxuXG4gIG5vcm1hbGl6ZTxUIGV4dGVuZHMgUGF0aFN0cmluZz4ocGF0aDogVCk6IFQge1xuICAgIHJldHVybiBwYXRoLnJlcGxhY2UoL15bXFwvXFxcXF0vaSwgJ0M6LycpLnJlcGxhY2UoL1xcXFwvZywgJy8nKSBhcyBUO1xuICB9XG59XG4iXX0=
@@ -1,108 +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="jasmine"/>
9
- import * as ts from 'typescript';
10
- import { absoluteFrom, setFileSystem } from '../../src/helpers';
11
- import { InvalidFileSystem } from '../../src/invalid_file_system';
12
- import { MockFileSystemNative } from './mock_file_system_native';
13
- import { MockFileSystemPosix } from './mock_file_system_posix';
14
- import { MockFileSystemWindows } from './mock_file_system_windows';
15
- const FS_NATIVE = 'Native';
16
- const FS_OS_X = 'OS/X';
17
- const FS_UNIX = 'Unix';
18
- const FS_WINDOWS = 'Windows';
19
- const FS_ALL = [FS_OS_X, FS_WINDOWS, FS_UNIX, FS_NATIVE];
20
- function runInEachFileSystemFn(callback) {
21
- FS_ALL.forEach(os => runInFileSystem(os, callback, false));
22
- }
23
- function runInFileSystem(os, callback, error) {
24
- describe(`<<FileSystem: ${os}>>`, () => {
25
- beforeEach(() => initMockFileSystem(os));
26
- afterEach(() => setFileSystem(new InvalidFileSystem()));
27
- callback(os);
28
- if (error) {
29
- afterAll(() => {
30
- throw new Error(`runInFileSystem limited to ${os}, cannot pass`);
31
- });
32
- }
33
- });
34
- }
35
- export const runInEachFileSystem = runInEachFileSystemFn;
36
- runInEachFileSystem.native = (callback) => runInFileSystem(FS_NATIVE, callback, true);
37
- runInEachFileSystem.osX = (callback) => runInFileSystem(FS_OS_X, callback, true);
38
- runInEachFileSystem.unix = (callback) => runInFileSystem(FS_UNIX, callback, true);
39
- runInEachFileSystem.windows = (callback) => runInFileSystem(FS_WINDOWS, callback, true);
40
- export function initMockFileSystem(os, cwd) {
41
- const fs = createMockFileSystem(os, cwd);
42
- setFileSystem(fs);
43
- monkeyPatchTypeScript(os, fs);
44
- return fs;
45
- }
46
- function createMockFileSystem(os, cwd) {
47
- switch (os) {
48
- case 'OS/X':
49
- return new MockFileSystemPosix(/* isCaseSensitive */ false, cwd);
50
- case 'Unix':
51
- return new MockFileSystemPosix(/* isCaseSensitive */ true, cwd);
52
- case 'Windows':
53
- return new MockFileSystemWindows(/* isCaseSensitive*/ false, cwd);
54
- case 'Native':
55
- return new MockFileSystemNative(cwd);
56
- default:
57
- throw new Error('FileSystem not supported');
58
- }
59
- }
60
- function monkeyPatchTypeScript(os, fs) {
61
- ts.sys.directoryExists = path => {
62
- const absPath = fs.resolve(path);
63
- return fs.exists(absPath) && fs.stat(absPath).isDirectory();
64
- };
65
- ts.sys.fileExists = path => {
66
- const absPath = fs.resolve(path);
67
- return fs.exists(absPath) && fs.stat(absPath).isFile();
68
- };
69
- ts.sys.getCurrentDirectory = () => fs.pwd();
70
- ts.sys.getDirectories = getDirectories;
71
- ts.sys.readFile = fs.readFile.bind(fs);
72
- ts.sys.resolvePath = fs.resolve.bind(fs);
73
- ts.sys.writeFile = fs.writeFile.bind(fs);
74
- ts.sys.readDirectory = readDirectory;
75
- function getDirectories(path) {
76
- return fs.readdir(absoluteFrom(path)).filter(p => fs.stat(fs.resolve(path, p)).isDirectory());
77
- }
78
- function getFileSystemEntries(path) {
79
- const files = [];
80
- const directories = [];
81
- const absPath = fs.resolve(path);
82
- const entries = fs.readdir(absPath);
83
- for (const entry of entries) {
84
- if (entry == '.' || entry === '..') {
85
- continue;
86
- }
87
- const absPath = fs.resolve(path, entry);
88
- const stat = fs.stat(absPath);
89
- if (stat.isDirectory()) {
90
- directories.push(absPath);
91
- }
92
- else if (stat.isFile()) {
93
- files.push(absPath);
94
- }
95
- }
96
- return { files, directories };
97
- }
98
- function realPath(path) {
99
- return fs.realpath(fs.resolve(path));
100
- }
101
- // Rather than completely re-implementing we are using the `ts.matchFiles` function,
102
- // which is internal to the `ts` namespace.
103
- const tsMatchFiles = ts.matchFiles;
104
- function readDirectory(path, extensions, excludes, includes, depth) {
105
- return tsMatchFiles(path, extensions, excludes, includes, fs.isCaseSensitive(), fs.pwd(), depth, getFileSystemEntries, realPath);
106
- }
107
- }
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF9oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL2ZpbGVfc3lzdGVtL3Rlc3Rpbmcvc3JjL3Rlc3RfaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILGdDQUFnQztBQUNoQyxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVqQyxPQUFPLEVBQUMsWUFBWSxFQUFFLGFBQWEsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzlELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBSWhFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzdELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBZ0JqRSxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUM7QUFDM0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3ZCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUN2QixNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUM7QUFDN0IsTUFBTSxNQUFNLEdBQUcsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztBQUV6RCxTQUFTLHFCQUFxQixDQUFDLFFBQThCO0lBQzNELE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxFQUFVLEVBQUUsUUFBOEIsRUFBRSxLQUFjO0lBQ2pGLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLEVB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biAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiamFzbWluZVwiLz5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge2Fic29sdXRlRnJvbSwgc2V0RmlsZVN5c3RlbX0gZnJvbSAnLi4vLi4vc3JjL2hlbHBlcnMnO1xuaW1wb3J0IHtJbnZhbGlkRmlsZVN5c3RlbX0gZnJvbSAnLi4vLi4vc3JjL2ludmFsaWRfZmlsZV9zeXN0ZW0nO1xuaW1wb3J0IHtBYnNvbHV0ZUZzUGF0aH0gZnJvbSAnLi4vLi4vc3JjL3R5cGVzJztcblxuaW1wb3J0IHtNb2NrRmlsZVN5c3RlbX0gZnJvbSAnLi9tb2NrX2ZpbGVfc3lzdGVtJztcbmltcG9ydCB7TW9ja0ZpbGVTeXN0ZW1OYXRpdmV9IGZyb20gJy4vbW9ja19maWxlX3N5c3RlbV9uYXRpdmUnO1xuaW1wb3J0IHtNb2NrRmlsZVN5c3RlbVBvc2l4fSBmcm9tICcuL21vY2tfZmlsZV9zeXN0ZW1fcG9zaXgnO1xuaW1wb3J0IHtNb2NrRmlsZVN5c3RlbVdpbmRvd3N9IGZyb20gJy4vbW9ja19maWxlX3N5c3RlbV93aW5kb3dzJztcblxuZXhwb3J0IGludGVyZmFjZSBUZXN0RmlsZSB7XG4gIG5hbWU6IEFic29sdXRlRnNQYXRoO1xuICBjb250ZW50czogc3RyaW5nO1xuICBpc1Jvb3Q/OiBib29sZWFufHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSdW5JbkVhY2hGaWxlU3lzdGVtRm4ge1xuICAoY2FsbGJhY2s6IChvczogc3RyaW5nKSA9PiB2b2lkKTogdm9pZDtcbiAgd2luZG93cyhjYWxsYmFjazogKG9zOiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkO1xuICB1bml4KGNhbGxiYWNrOiAob3M6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQ7XG4gIG5hdGl2ZShjYWxsYmFjazogKG9zOiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkO1xuICBvc1goY2FsbGJhY2s6IChvczogc3RyaW5nKSA9PiB2b2lkKTogdm9pZDtcbn1cblxuY29uc3QgRlNfTkFUSVZFID0gJ05hdGl2ZSc7XG5jb25zdCBGU19PU19YID0gJ09TL1gnO1xuY29uc3QgRlNfVU5JWCA9ICdVbml4JztcbmNvbnN0IEZTX1dJTkRPV1MgPSAnV2luZG93cyc7XG5jb25zdCBGU19BTEwgPSBbRlNfT1NfWCwgRlNfV0lORE9XUywgRlNfVU5JWCwgRlNfTkFUSVZFXTtcblxuZnVuY3Rpb24gcnVuSW5FYWNoRmlsZVN5c3RlbUZuKGNhbGxiYWNrOiAob3M6IHN0cmluZykgPT4gdm9pZCkge1xuICBGU19BTEwuZm9yRWFjaChvcyA9PiBydW5JbkZpbGVTeXN0ZW0ob3MsIGNhbGxiYWNrLCBmYWxzZSkpO1xufVxuXG5mdW5jdGlvbiBydW5JbkZpbGVTeXN0ZW0ob3M6IHN0cmluZywgY2FsbGJhY2s6IChvczogc3RyaW5nKSA9PiB2b2lkLCBlcnJvcjogYm9vbGVhbikge1xuICBkZXNjcmliZShgPDxGaWxlU3lzdGVtOiAke29zfT4+YCwgKCkgPT4ge1xuICAgIGJlZm9yZUVhY2goKCkgPT4gaW5pdE1vY2tGaWxlU3lzdGVtKG9zKSk7XG4gICAgYWZ0ZXJFYWNoKCgpID0+IHNldEZpbGVTeXN0ZW0obmV3IEludmFsaWRGaWxlU3lzdGVtKCkpKTtcbiAgICBjYWxsYmFjayhvcyk7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBhZnRlckFsbCgoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgcnVuSW5GaWxlU3lzdGVtIGxpbWl0ZWQgdG8gJHtvc30sIGNhbm5vdCBwYXNzYCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgY29uc3QgcnVuSW5FYWNoRmlsZVN5c3RlbTogUnVuSW5FYWNoRmlsZVN5c3RlbUZuID1cbiAgICBydW5JbkVhY2hGaWxlU3lzdGVtRm4gYXMgUnVuSW5FYWNoRmlsZVN5c3RlbUZuO1xuXG5ydW5JbkVhY2hGaWxlU3lzdGVtLm5hdGl2ZSA9IChjYWxsYmFjazogKG9zOiBzdHJpbmcpID0+IHZvaWQpID0+XG4gICAgcnVuSW5GaWxlU3lzdGVtKEZTX05BVElWRSwgY2FsbGJhY2ssIHRydWUpO1xucnVuSW5FYWNoRmlsZVN5c3RlbS5vc1ggPSAoY2FsbGJhY2s6IChvczogc3RyaW5nKSA9PiB2b2lkKSA9PlxuICAgIHJ1bkluRmlsZVN5c3RlbShGU19PU19YLCBjYWxsYmFjaywgdHJ1ZSk7XG5ydW5JbkVhY2hGaWxlU3lzdGVtLnVuaXggPSAoY2FsbGJhY2s6IChvczogc3RyaW5nKSA9PiB2b2lkKSA9PlxuICAgIHJ1bkluRmlsZVN5c3RlbShGU19VTklYLCBjYWxsYmFjaywgdHJ1ZSk7XG5ydW5JbkVhY2hGaWxlU3lzdGVtLndpbmRvd3MgPSAoY2FsbGJhY2s6IChvczogc3RyaW5nKSA9PiB2b2lkKSA9PlxuICAgIHJ1bkluRmlsZVN5c3RlbShGU19XSU5ET1dTLCBjYWxsYmFjaywgdHJ1ZSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0TW9ja0ZpbGVTeXN0ZW0ob3M6IHN0cmluZywgY3dkPzogQWJzb2x1dGVGc1BhdGgpOiBNb2NrRmlsZVN5c3RlbSB7XG4gIGNvbnN0IGZzID0gY3JlYXRlTW9ja0ZpbGVTeXN0ZW0ob3MsIGN3ZCk7XG4gIHNldEZpbGVTeXN0ZW0oZnMpO1xuICBtb25rZXlQYXRjaFR5cGVTY3JpcHQob3MsIGZzKTtcbiAgcmV0dXJuIGZzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVNb2NrRmlsZVN5c3RlbShvczogc3RyaW5nLCBjd2Q/OiBBYnNvbHV0ZUZzUGF0aCk6IE1vY2tGaWxlU3lzdGVtIHtcbiAgc3dpdGNoIChvcykge1xuICAgIGNhc2UgJ09TL1gnOlxuICAgICAgcmV0dXJuIG5ldyBNb2NrRmlsZVN5c3RlbVBvc2l4KC8qIGlzQ2FzZVNlbnNpdGl2ZSAqLyBmYWxzZSwgY3dkKTtcbiAgICBjYXNlICdVbml4JzpcbiAgICAgIHJldHVybiBuZXcgTW9ja0ZpbGVTeXN0ZW1Qb3NpeCgvKiBpc0Nhc2VTZW5zaXRpdmUgKi8gdHJ1ZSwgY3dkKTtcbiAgICBjYXNlICdXaW5kb3dzJzpcbiAgICAgIHJldHVybiBuZXcgTW9ja0ZpbGVTeXN0ZW1XaW5kb3dzKC8qIGlzQ2FzZVNlbnNpdGl2ZSovIGZhbHNlLCBjd2QpO1xuICAgIGNhc2UgJ05hdGl2ZSc6XG4gICAgICByZXR1cm4gbmV3IE1vY2tGaWxlU3lzdGVtTmF0aXZlKGN3ZCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmlsZVN5c3RlbSBub3Qgc3VwcG9ydGVkJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbW9ua2V5UGF0Y2hUeXBlU2NyaXB0KG9zOiBzdHJpbmcsIGZzOiBNb2NrRmlsZVN5c3RlbSkge1xuICB0cy5zeXMuZGlyZWN0b3J5RXhpc3RzID0gcGF0aCA9PiB7XG4gICAgY29uc3QgYWJzUGF0aCA9IGZzLnJlc29sdmUocGF0aCk7XG4gICAgcmV0dXJuIGZzLmV4aXN0cyhhYnNQYXRoKSAmJiBmcy5zdGF0KGFic1BhdGgpLmlzRGlyZWN0b3J5KCk7XG4gIH07XG4gIHRzLnN5cy5maWxlRXhpc3RzID0gcGF0aCA9PiB7XG4gICAgY29uc3QgYWJzUGF0aCA9IGZzLnJlc29sdmUocGF0aCk7XG4gICAgcmV0dXJuIGZzLmV4aXN0cyhhYnNQYXRoKSAmJiBmcy5zdGF0KGFic1BhdGgpLmlzRmlsZSgpO1xuICB9O1xuICB0cy5zeXMuZ2V0Q3VycmVudERpcmVjdG9yeSA9ICgpID0+IGZzLnB3ZCgpO1xuICB0cy5zeXMuZ2V0RGlyZWN0b3JpZXMgPSBnZXREaXJlY3RvcmllcztcbiAgdHMuc3lzLnJlYWRGaWxlID0gZnMucmVhZEZpbGUuYmluZChmcyk7XG4gIHRzLnN5cy5yZXNvbHZlUGF0aCA9IGZzLnJlc29sdmUuYmluZChmcyk7XG4gIHRzLnN5cy53cml0ZUZpbGUgPSBmcy53cml0ZUZpbGUuYmluZChmcyk7XG4gIHRzLnN5cy5yZWFkRGlyZWN0b3J5ID0gcmVhZERpcmVjdG9yeTtcblxuICBmdW5jdGlvbiBnZXREaXJlY3RvcmllcyhwYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGZzLnJlYWRkaXIoYWJzb2x1dGVGcm9tKHBhdGgpKS5maWx0ZXIocCA9PiBmcy5zdGF0KGZzLnJlc29sdmUocGF0aCwgcCkpLmlzRGlyZWN0b3J5KCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RmlsZVN5c3RlbUVudHJpZXMocGF0aDogc3RyaW5nKTogRmlsZVN5c3RlbUVudHJpZXMge1xuICAgIGNvbnN0IGZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGRpcmVjdG9yaWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGFic1BhdGggPSBmcy5yZXNvbHZlKHBhdGgpO1xuICAgIGNvbnN0IGVudHJpZXMgPSBmcy5yZWFkZGlyKGFic1BhdGgpO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgaWYgKGVudHJ5ID09ICcuJyB8fCBlbnRyeSA9PT0gJy4uJykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFic1BhdGggPSBmcy5yZXNvbHZlKHBhdGgsIGVudHJ5KTtcbiAgICAgIGNvbnN0IHN0YXQgPSBmcy5zdGF0KGFic1BhdGgpO1xuICAgICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBkaXJlY3Rvcmllcy5wdXNoKGFic1BhdGgpO1xuICAgICAgfSBlbHNlIGlmIChzdGF0LmlzRmlsZSgpKSB7XG4gICAgICAgIGZpbGVzLnB1c2goYWJzUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7ZmlsZXMsIGRpcmVjdG9yaWVzfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWxQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGZzLnJlYWxwYXRoKGZzLnJlc29sdmUocGF0aCkpO1xuICB9XG5cbiAgLy8gUmF0aGVyIHRoYW4gY29tcGxldGVseSByZS1pbXBsZW1lbnRpbmcgd2UgYXJlIHVzaW5nIHRoZSBgdHMubWF0Y2hGaWxlc2AgZnVuY3Rpb24sXG4gIC8vIHdoaWNoIGlzIGludGVybmFsIHRvIHRoZSBgdHNgIG5hbWVzcGFjZS5cbiAgY29uc3QgdHNNYXRjaEZpbGVzOiAoXG4gICAgICBwYXRoOiBzdHJpbmcsIGV4dGVuc2lvbnM6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPnx1bmRlZmluZWQsXG4gICAgICBleGNsdWRlczogUmVhZG9ubHlBcnJheTxzdHJpbmc+fHVuZGVmaW5lZCwgaW5jbHVkZXM6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPnx1bmRlZmluZWQsXG4gICAgICB1c2VDYXNlU2Vuc2l0aXZlRmlsZU5hbWVzOiBib29sZWFuLCBjdXJyZW50RGlyZWN0b3J5OiBzdHJpbmcsIGRlcHRoOiBudW1iZXJ8dW5kZWZpbmVkLFxuICAgICAgZ2V0RmlsZVN5c3RlbUVudHJpZXM6IChwYXRoOiBzdHJpbmcpID0+IEZpbGVTeXN0ZW1FbnRyaWVzLFxuICAgICAgcmVhbHBhdGg6IChwYXRoOiBzdHJpbmcpID0+IHN0cmluZykgPT4gc3RyaW5nW10gPSAodHMgYXMgYW55KS5tYXRjaEZpbGVzO1xuXG4gIGZ1bmN0aW9uIHJlYWREaXJlY3RvcnkoXG4gICAgICBwYXRoOiBzdHJpbmcsIGV4dGVuc2lvbnM/OiBSZWFkb25seUFycmF5PHN0cmluZz4sIGV4Y2x1ZGVzPzogUmVhZG9ubHlBcnJheTxzdHJpbmc+LFxuICAgICAgaW5jbHVkZXM/OiBSZWFkb25seUFycmF5PHN0cmluZz4sIGRlcHRoPzogbnVtYmVyKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0c01hdGNoRmlsZXMoXG4gICAgICAgIHBhdGgsIGV4dGVuc2lvbnMsIGV4Y2x1ZGVzLCBpbmNsdWRlcywgZnMuaXNDYXNlU2Vuc2l0aXZlKCksIGZzLnB3ZCgpLCBkZXB0aCxcbiAgICAgICAgZ2V0RmlsZVN5c3RlbUVudHJpZXMsIHJlYWxQYXRoKTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgRmlsZVN5c3RlbUVudHJpZXMge1xuICByZWFkb25seSBmaWxlczogUmVhZG9ubHlBcnJheTxzdHJpbmc+O1xuICByZWFkb25seSBkaXJlY3RvcmllczogUmVhZG9ubHlBcnJheTxzdHJpbmc+O1xufVxuIl19
File without changes
File without changes