@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.
- package/linker/src/file_linker/emit_scopes/iife_emit_scope.js +1 -1
- package/linker/src/file_linker/partial_linkers/partial_linker_selector.js +2 -2
- package/ngcc/src/dependencies/commonjs_dependency_host.js +1 -1
- package/ngcc/src/dependencies/dts_dependency_host.js +1 -1
- package/ngcc/src/dependencies/esm_dependency_host.js +1 -1
- package/ngcc/src/dependencies/umd_dependency_host.js +1 -1
- package/ngcc/src/entry_point_finder/program_based_entry_point_finder.js +1 -1
- package/ngcc/src/entry_point_finder/targeted_entry_point_finder.js +1 -1
- package/ngcc/src/execution/tasks/queues/parallel_task_queue.js +1 -1
- package/ngcc/src/execution/tasks/queues/serial_task_queue.js +1 -1
- package/ngcc/src/host/commonjs_host.js +1 -1
- package/ngcc/src/host/esm2015_host.js +1 -1
- package/ngcc/src/host/esm5_host.js +1 -1
- package/ngcc/src/host/umd_host.js +1 -1
- package/ngcc/src/packages/build_marker.d.ts +1 -1
- package/ngcc/src/packages/build_marker.js +1 -1
- package/ngcc/src/packages/entry_point_manifest.js +1 -1
- package/ngcc/src/packages/ngcc_compiler_host.js +1 -1
- package/ngcc/src/rendering/commonjs_rendering_formatter.js +1 -1
- package/ngcc/src/rendering/esm5_rendering_formatter.js +1 -1
- package/ngcc/src/rendering/umd_rendering_formatter.js +1 -1
- package/ngcc/src/writing/new_entry_point_file_writer.js +1 -1
- package/package.json +2 -2
- package/src/ngtsc/annotations/src/component.js +1 -1
- package/src/ngtsc/annotations/src/directive.js +1 -1
- package/src/ngtsc/annotations/src/ng_module.js +1 -1
- package/src/ngtsc/annotations/src/pipe.js +1 -1
- package/src/ngtsc/core/src/compiler.js +1 -1
- package/src/ngtsc/cycles/src/analyzer.d.ts +7 -0
- package/src/ngtsc/cycles/src/analyzer.js +89 -4
- package/src/ngtsc/cycles/src/imports.d.ts +1 -6
- package/src/ngtsc/cycles/src/imports.js +5 -23
- package/src/ngtsc/file_system/testing/src/mock_file_system_native.js +1 -1
- package/src/ngtsc/file_system/testing/src/mock_file_system_posix.js +1 -1
- package/src/ngtsc/file_system/testing/src/mock_file_system_windows.js +1 -1
- package/src/ngtsc/incremental/semantic_graph/src/graph.js +1 -1
- package/src/ngtsc/incremental/src/incremental.js +30 -4
- package/src/ngtsc/indexer/src/template.js +1 -1
- package/src/ngtsc/metadata/src/dts.js +4 -5
- package/src/ngtsc/metadata/src/util.d.ts +2 -2
- package/src/ngtsc/metadata/src/util.js +9 -6
- package/src/ngtsc/partial_evaluator/src/builtin.js +1 -1
- package/src/ngtsc/partial_evaluator/src/diagnostics.js +4 -1
- package/src/ngtsc/partial_evaluator/src/dynamic.d.ts +19 -1
- package/src/ngtsc/partial_evaluator/src/dynamic.js +12 -4
- package/src/ngtsc/partial_evaluator/src/interpreter.d.ts +2 -0
- package/src/ngtsc/partial_evaluator/src/interpreter.js +53 -5
- package/src/ngtsc/partial_evaluator/src/ts_helpers.js +1 -1
- package/src/ngtsc/program_driver/src/api.d.ts +20 -1
- package/src/ngtsc/program_driver/src/api.js +3 -2
- package/src/ngtsc/program_driver/src/ts_create_program_driver.d.ts +2 -2
- package/src/ngtsc/program_driver/src/ts_create_program_driver.js +7 -3
- package/src/ngtsc/reflection/src/typescript.js +4 -1
- package/src/ngtsc/transform/src/compilation.d.ts +5 -0
- package/src/ngtsc/transform/src/compilation.js +95 -72
- package/src/ngtsc/transform/src/transform.js +1 -1
- package/src/ngtsc/typecheck/src/context.d.ts +2 -1
- package/src/ngtsc/typecheck/src/context.js +11 -3
- package/src/ngtsc/typecheck/src/template_semantics.js +1 -1
- package/src/ngtsc/typecheck/src/template_symbol_builder.js +21 -1
- package/src/ngtsc/typecheck/src/type_check_block.js +2 -2
- package/src/ngtsc/typecheck/src/type_check_file.js +1 -1
- package/src/ngtsc/typecheck/src/type_emitter.js +25 -6
- package/src/ngtsc/util/src/visitor.d.ts +1 -1
- package/src/ngtsc/util/src/visitor.js +1 -8
- package/src/version.js +1 -1
- package/compiler-cli.externs.js +0 -0
- package/index.mjs +0 -20
- package/linker/babel/babel.externs.js +0 -0
- package/linker/babel/index.mjs +0 -11
- package/linker/babel/src/ast/babel_ast_factory.mjs +0 -137
- package/linker/babel/src/ast/babel_ast_host.mjs +0 -154
- package/linker/babel/src/babel_declaration_scope.mjs +0 -52
- package/linker/babel/src/babel_plugin.mjs +0 -23
- package/linker/babel/src/es2015_linker_plugin.mjs +0 -158
- package/linker/babel/src/linker_plugin_options.mjs +0 -2
- package/linker/index.mjs +0 -7
- package/linker/linker.externs.js +0 -0
- package/linker/src/ast/ast_host.mjs +0 -9
- package/linker/src/ast/ast_value.mjs +0 -256
- package/linker/src/ast/typescript/typescript_ast_host.mjs +0 -156
- package/linker/src/ast/utils.mjs +0 -17
- package/linker/src/fatal_linker_error.mjs +0 -30
- package/linker/src/file_linker/declaration_scope.mjs +0 -9
- package/linker/src/file_linker/emit_scopes/emit_scope.mjs +0 -41
- package/linker/src/file_linker/emit_scopes/iife_emit_scope.mjs +0 -33
- package/linker/src/file_linker/file_linker.mjs +0 -70
- package/linker/src/file_linker/get_source_file.mjs +0 -28
- package/linker/src/file_linker/linker_environment.mjs +0 -23
- package/linker/src/file_linker/linker_options.mjs +0 -16
- package/linker/src/file_linker/needs_linking.mjs +0 -27
- package/linker/src/file_linker/partial_linkers/partial_class_metadata_linker_1.mjs +0 -29
- package/linker/src/file_linker/partial_linkers/partial_component_linker_1.mjs +0 -194
- package/linker/src/file_linker/partial_linkers/partial_directive_linker_1.mjs +0 -137
- package/linker/src/file_linker/partial_linkers/partial_factory_linker_1.mjs +0 -52
- package/linker/src/file_linker/partial_linkers/partial_injectable_linker_1.mjs +0 -56
- package/linker/src/file_linker/partial_linkers/partial_injector_linker_1.mjs +0 -38
- package/linker/src/file_linker/partial_linkers/partial_linker.mjs +0 -2
- package/linker/src/file_linker/partial_linkers/partial_linker_selector.mjs +0 -166
- package/linker/src/file_linker/partial_linkers/partial_ng_module_linker_1.mjs +0 -110
- package/linker/src/file_linker/partial_linkers/partial_pipe_linker_1.mjs +0 -42
- package/linker/src/file_linker/partial_linkers/util.mjs +0 -78
- package/linker/src/file_linker/translator.mjs +0 -23
- package/linker/src/linker_import_generator.mjs +0 -28
- package/ngcc/index.mjs +0 -16
- package/ngcc/main-ivy-ngcc.mjs +0 -12
- package/ngcc/main-ngcc.mjs +0 -32
- package/ngcc/ngcc.externs.js +0 -0
- package/ngcc/src/analysis/decoration_analyzer.mjs +0 -215
- package/ngcc/src/analysis/migration_host.mjs +0 -80
- package/ngcc/src/analysis/module_with_providers_analyzer.mjs +0 -178
- package/ngcc/src/analysis/ngcc_references_registry.mjs +0 -45
- package/ngcc/src/analysis/ngcc_trait_compiler.mjs +0 -70
- package/ngcc/src/analysis/private_declarations_analyzer.mjs +0 -47
- package/ngcc/src/analysis/switch_marker_analyzer.mjs +0 -34
- package/ngcc/src/analysis/types.mjs +0 -2
- package/ngcc/src/analysis/util.mjs +0 -19
- package/ngcc/src/command_line_options.mjs +0 -142
- package/ngcc/src/constants.mjs +0 -10
- package/ngcc/src/dependencies/commonjs_dependency_host.mjs +0 -87
- package/ngcc/src/dependencies/dependency_host.mjs +0 -102
- package/ngcc/src/dependencies/dependency_resolver.mjs +0 -151
- package/ngcc/src/dependencies/dts_dependency_host.mjs +0 -18
- package/ngcc/src/dependencies/esm_dependency_host.mjs +0 -286
- package/ngcc/src/dependencies/module_resolver.mjs +0 -233
- package/ngcc/src/dependencies/umd_dependency_host.mjs +0 -33
- package/ngcc/src/entry_point_finder/directory_walker_entry_point_finder.mjs +0 -42
- package/ngcc/src/entry_point_finder/entry_point_collector.mjs +0 -120
- package/ngcc/src/entry_point_finder/interface.mjs +0 -2
- package/ngcc/src/entry_point_finder/program_based_entry_point_finder.mjs +0 -91
- package/ngcc/src/entry_point_finder/targeted_entry_point_finder.mjs +0 -216
- package/ngcc/src/entry_point_finder/tracing_entry_point_finder.mjs +0 -63
- package/ngcc/src/entry_point_finder/utils.mjs +0 -176
- package/ngcc/src/execution/analyze_entry_points.mjs +0 -130
- package/ngcc/src/execution/api.mjs +0 -2
- package/ngcc/src/execution/cluster/api.mjs +0 -9
- package/ngcc/src/execution/cluster/executor.mjs +0 -27
- package/ngcc/src/execution/cluster/master.mjs +0 -261
- package/ngcc/src/execution/cluster/package_json_updater.mjs +0 -45
- package/ngcc/src/execution/cluster/utils.mjs +0 -59
- package/ngcc/src/execution/cluster/worker.mjs +0 -81
- package/ngcc/src/execution/create_compile_function.mjs +0 -62
- package/ngcc/src/execution/single_process_executor.mjs +0 -57
- package/ngcc/src/execution/tasks/api.mjs +0 -22
- package/ngcc/src/execution/tasks/completion.mjs +0 -61
- package/ngcc/src/execution/tasks/queues/base_task_queue.mjs +0 -78
- package/ngcc/src/execution/tasks/queues/parallel_task_queue.mjs +0 -53
- package/ngcc/src/execution/tasks/queues/serial_task_queue.mjs +0 -29
- package/ngcc/src/execution/tasks/utils.mjs +0 -114
- package/ngcc/src/host/commonjs_host.mjs +0 -220
- package/ngcc/src/host/commonjs_umd_utils.mjs +0 -186
- package/ngcc/src/host/delegating_host.mjs +0 -140
- package/ngcc/src/host/esm2015_host.mjs +0 -2293
- package/ngcc/src/host/esm5_host.mjs +0 -721
- package/ngcc/src/host/ngcc_host.mjs +0 -15
- package/ngcc/src/host/umd_host.mjs +0 -486
- package/ngcc/src/host/utils.mjs +0 -12
- package/ngcc/src/locking/async_locker.mjs +0 -76
- package/ngcc/src/locking/lock_file.mjs +0 -4
- package/ngcc/src/locking/lock_file_with_child_process/index.mjs +0 -78
- package/ngcc/src/locking/lock_file_with_child_process/unlocker.mjs +0 -34
- package/ngcc/src/locking/lock_file_with_child_process/util.mjs +0 -29
- package/ngcc/src/locking/sync_locker.mjs +0 -52
- package/ngcc/src/main.mjs +0 -134
- package/ngcc/src/migrations/migration.mjs +0 -2
- package/ngcc/src/migrations/missing_injectable_migration.mjs +0 -164
- package/ngcc/src/migrations/undecorated_child_migration.mjs +0 -61
- package/ngcc/src/migrations/undecorated_parent_migration.mjs +0 -86
- package/ngcc/src/migrations/utils.mjs +0 -117
- package/ngcc/src/ngcc_options.mjs +0 -119
- package/ngcc/src/packages/build_marker.mjs +0 -84
- package/ngcc/src/packages/bundle_program.mjs +0 -52
- package/ngcc/src/packages/configuration.mjs +0 -255
- package/ngcc/src/packages/entry_point.mjs +0 -239
- package/ngcc/src/packages/entry_point_bundle.mjs +0 -68
- package/ngcc/src/packages/entry_point_manifest.mjs +0 -162
- package/ngcc/src/packages/ngcc_compiler_host.mjs +0 -77
- package/ngcc/src/packages/patch_ts_expando_initializer.mjs +0 -166
- package/ngcc/src/packages/source_file_cache.mjs +0 -187
- package/ngcc/src/packages/transformer.mjs +0 -140
- package/ngcc/src/path_mappings.mjs +0 -13
- package/ngcc/src/rendering/commonjs_rendering_formatter.mjs +0 -65
- package/ngcc/src/rendering/dts_renderer.mjs +0 -139
- package/ngcc/src/rendering/esm5_rendering_formatter.mjs +0 -50
- package/ngcc/src/rendering/esm_rendering_formatter.mjs +0 -251
- package/ngcc/src/rendering/ngcc_import_rewriter.mjs +0 -32
- package/ngcc/src/rendering/renderer.mjs +0 -170
- package/ngcc/src/rendering/rendering_formatter.mjs +0 -2
- package/ngcc/src/rendering/source_maps.mjs +0 -54
- package/ngcc/src/rendering/umd_rendering_formatter.mjs +0 -292
- package/ngcc/src/rendering/utils.mjs +0 -20
- package/ngcc/src/utils.mjs +0 -144
- package/ngcc/src/writing/cleaning/cleaning_strategies.mjs +0 -61
- package/ngcc/src/writing/cleaning/package_cleaner.mjs +0 -67
- package/ngcc/src/writing/cleaning/utils.mjs +0 -16
- package/ngcc/src/writing/file_writer.mjs +0 -2
- package/ngcc/src/writing/in_place_file_writer.mjs +0 -62
- package/ngcc/src/writing/new_entry_point_file_writer.mjs +0 -161
- package/ngcc/src/writing/package_json_updater.mjs +0 -144
- package/src/diagnostics/translate_diagnostics.mjs +0 -47
- package/src/diagnostics/typescript_version.mjs +0 -79
- package/src/extract_i18n.mjs +0 -46
- package/src/language_services.mjs +0 -18
- package/src/main.mjs +0 -185
- package/src/metadata/bundle_index_host.mjs +0 -107
- package/src/metadata/bundler.mjs +0 -556
- package/src/metadata/collector.mjs +0 -701
- package/src/metadata/evaluator.mjs +0 -643
- package/src/metadata/index.mjs +0 -11
- package/src/metadata/index_writer.mjs +0 -44
- package/src/metadata/schema.mjs +0 -102
- package/src/metadata/symbols.mjs +0 -117
- package/src/ngtsc/annotations/annotations.externs.js +0 -0
- package/src/ngtsc/annotations/index.mjs +0 -15
- package/src/ngtsc/annotations/src/api.mjs +0 -9
- package/src/ngtsc/annotations/src/component.mjs +0 -1068
- package/src/ngtsc/annotations/src/diagnostics.mjs +0 -147
- package/src/ngtsc/annotations/src/directive.mjs +0 -692
- package/src/ngtsc/annotations/src/factory.mjs +0 -17
- package/src/ngtsc/annotations/src/injectable.mjs +0 -260
- package/src/ngtsc/annotations/src/metadata.mjs +0 -145
- package/src/ngtsc/annotations/src/ng_module.mjs +0 -565
- package/src/ngtsc/annotations/src/pipe.mjs +0 -151
- package/src/ngtsc/annotations/src/references_registry.mjs +0 -16
- package/src/ngtsc/annotations/src/util.mjs +0 -495
- package/src/ngtsc/core/api/index.mjs +0 -12
- package/src/ngtsc/core/api/src/adapter.mjs +0 -9
- package/src/ngtsc/core/api/src/interfaces.mjs +0 -9
- package/src/ngtsc/core/api/src/options.mjs +0 -9
- package/src/ngtsc/core/api/src/public_options.mjs +0 -9
- package/src/ngtsc/core/api.externs.js +0 -0
- package/src/ngtsc/core/core.externs.js +0 -0
- package/src/ngtsc/core/index.mjs +0 -10
- package/src/ngtsc/core/src/compiler.mjs +0 -917
- package/src/ngtsc/core/src/config.mjs +0 -15
- package/src/ngtsc/core/src/host.mjs +0 -229
- package/src/ngtsc/cycles/cycles.externs.js +0 -0
- package/src/ngtsc/cycles/index.mjs +0 -10
- package/src/ngtsc/cycles/src/analyzer.mjs +0 -60
- package/src/ngtsc/cycles/src/imports.mjs +0 -152
- package/src/ngtsc/diagnostics/diagnostics.externs.js +0 -0
- package/src/ngtsc/diagnostics/index.mjs +0 -11
- package/src/ngtsc/diagnostics/src/error.mjs +0 -51
- package/src/ngtsc/diagnostics/src/error_code.mjs +0 -198
- package/src/ngtsc/diagnostics/src/util.mjs +0 -21
- package/src/ngtsc/entry_point/entry_point.externs.js +0 -0
- package/src/ngtsc/entry_point/index.mjs +0 -12
- package/src/ngtsc/entry_point/src/generator.mjs +0 -35
- package/src/ngtsc/entry_point/src/logic.mjs +0 -35
- package/src/ngtsc/entry_point/src/private_export_checker.mjs +0 -122
- package/src/ngtsc/entry_point/src/reference_graph.mjs +0 -73
- package/src/ngtsc/file_system/file_system.externs.js +0 -0
- package/src/ngtsc/file_system/index.mjs +0 -13
- package/src/ngtsc/file_system/src/compiler_host.mjs +0 -64
- package/src/ngtsc/file_system/src/helpers.mjs +0 -99
- package/src/ngtsc/file_system/src/invalid_file_system.mjs +0 -95
- package/src/ngtsc/file_system/src/logical.mjs +0 -84
- package/src/ngtsc/file_system/src/node_js_file_system.mjs +0 -142
- package/src/ngtsc/file_system/src/types.mjs +0 -9
- package/src/ngtsc/file_system/src/util.mjs +0 -22
- package/src/ngtsc/file_system/testing/index.mjs +0 -13
- package/src/ngtsc/file_system/testing/src/mock_file_system.mjs +0 -293
- package/src/ngtsc/file_system/testing/src/mock_file_system_native.mjs +0 -57
- package/src/ngtsc/file_system/testing/src/mock_file_system_posix.mjs +0 -38
- package/src/ngtsc/file_system/testing/src/mock_file_system_windows.mjs +0 -38
- package/src/ngtsc/file_system/testing/src/test_helper.mjs +0 -108
- package/src/ngtsc/file_system/testing/testing.externs.js +0 -0
- package/src/ngtsc/imports/imports.externs.js +0 -0
- package/src/ngtsc/imports/index.mjs +0 -14
- package/src/ngtsc/imports/src/alias.mjs +0 -137
- package/src/ngtsc/imports/src/core.mjs +0 -78
- package/src/ngtsc/imports/src/default.mjs +0 -135
- package/src/ngtsc/imports/src/emitter.mjs +0 -266
- package/src/ngtsc/imports/src/find_export.mjs +0 -56
- package/src/ngtsc/imports/src/reexport.mjs +0 -9
- package/src/ngtsc/imports/src/references.mjs +0 -137
- package/src/ngtsc/imports/src/resolver.mjs +0 -24
- package/src/ngtsc/incremental/api.externs.js +0 -0
- package/src/ngtsc/incremental/api.mjs +0 -9
- package/src/ngtsc/incremental/incremental.externs.js +0 -0
- package/src/ngtsc/incremental/index.mjs +0 -12
- package/src/ngtsc/incremental/semantic_graph/index.mjs +0 -12
- package/src/ngtsc/incremental/semantic_graph/semantic_graph.externs.js +0 -0
- package/src/ngtsc/incremental/semantic_graph/src/api.mjs +0 -36
- package/src/ngtsc/incremental/semantic_graph/src/graph.mjs +0 -237
- package/src/ngtsc/incremental/semantic_graph/src/type_parameters.mjs +0 -40
- package/src/ngtsc/incremental/semantic_graph/src/util.mjs +0 -69
- package/src/ngtsc/incremental/src/dependency_tracking.mjs +0 -117
- package/src/ngtsc/incremental/src/incremental.mjs +0 -271
- package/src/ngtsc/incremental/src/noop.mjs +0 -13
- package/src/ngtsc/incremental/src/state.mjs +0 -17
- package/src/ngtsc/incremental/src/strategy.mjs +0 -76
- package/src/ngtsc/indexer/index.mjs +0 -11
- package/src/ngtsc/indexer/indexer.externs.js +0 -0
- package/src/ngtsc/indexer/src/api.mjs +0 -30
- package/src/ngtsc/indexer/src/context.mjs +0 -25
- package/src/ngtsc/indexer/src/template.mjs +0 -303
- package/src/ngtsc/indexer/src/transform.mjs +0 -51
- package/src/ngtsc/logging/index.mjs +0 -10
- package/src/ngtsc/logging/logging.externs.js +0 -0
- package/src/ngtsc/logging/src/console_logger.mjs +0 -43
- package/src/ngtsc/logging/src/logger.mjs +0 -15
- package/src/ngtsc/logging/testing/index.mjs +0 -9
- package/src/ngtsc/logging/testing/src/mock_logger.mjs +0 -32
- package/src/ngtsc/logging/testing/testing.externs.js +0 -0
- package/src/ngtsc/metadata/index.mjs +0 -15
- package/src/ngtsc/metadata/metadata.externs.js +0 -0
- package/src/ngtsc/metadata/src/api.mjs +0 -13
- package/src/ngtsc/metadata/src/dts.mjs +0 -143
- package/src/ngtsc/metadata/src/inheritance.mjs +0 -71
- package/src/ngtsc/metadata/src/property_mapping.mjs +0 -136
- package/src/ngtsc/metadata/src/registry.mjs +0 -80
- package/src/ngtsc/metadata/src/resource_registry.mjs +0 -81
- package/src/ngtsc/metadata/src/util.mjs +0 -200
- package/src/ngtsc/partial_evaluator/index.mjs +0 -12
- package/src/ngtsc/partial_evaluator/partial_evaluator.externs.js +0 -0
- package/src/ngtsc/partial_evaluator/src/builtin.mjs +0 -65
- package/src/ngtsc/partial_evaluator/src/diagnostics.mjs +0 -171
- package/src/ngtsc/partial_evaluator/src/dynamic.mjs +0 -86
- package/src/ngtsc/partial_evaluator/src/interface.mjs +0 -27
- package/src/ngtsc/partial_evaluator/src/interpreter.mjs +0 -683
- package/src/ngtsc/partial_evaluator/src/known_declaration.mjs +0 -43
- package/src/ngtsc/partial_evaluator/src/result.mjs +0 -50
- package/src/ngtsc/partial_evaluator/src/ts_helpers.mjs +0 -72
- package/src/ngtsc/perf/index.mjs +0 -11
- package/src/ngtsc/perf/perf.externs.js +0 -0
- package/src/ngtsc/perf/src/api.mjs +0 -278
- package/src/ngtsc/perf/src/clock.mjs +0 -15
- package/src/ngtsc/perf/src/noop.mjs +0 -21
- package/src/ngtsc/perf/src/recorder.mjs +0 -125
- package/src/ngtsc/program.mjs +0 -271
- package/src/ngtsc/program_driver/index.mjs +0 -10
- package/src/ngtsc/program_driver/program_driver.externs.js +0 -0
- package/src/ngtsc/program_driver/src/api.mjs +0 -22
- package/src/ngtsc/program_driver/src/ts_create_program_driver.mjs +0 -164
- package/src/ngtsc/reflection/index.mjs +0 -12
- package/src/ngtsc/reflection/reflection.externs.js +0 -0
- package/src/ngtsc/reflection/src/host.mjs +0 -73
- package/src/ngtsc/reflection/src/type_to_value.mjs +0 -243
- package/src/ngtsc/reflection/src/typescript.mjs +0 -608
- package/src/ngtsc/reflection/src/util.mjs +0 -21
- package/src/ngtsc/resource/index.mjs +0 -9
- package/src/ngtsc/resource/resource.externs.js +0 -0
- package/src/ngtsc/resource/src/loader.mjs +0 -242
- package/src/ngtsc/routing/index.mjs +0 -11
- package/src/ngtsc/routing/routing.externs.js +0 -0
- package/src/ngtsc/routing/src/analyzer.mjs +0 -69
- package/src/ngtsc/routing/src/lazy.mjs +0 -168
- package/src/ngtsc/routing/src/route.mjs +0 -51
- package/src/ngtsc/scope/index.mjs +0 -12
- package/src/ngtsc/scope/scope.externs.js +0 -0
- package/src/ngtsc/scope/src/api.mjs +0 -9
- package/src/ngtsc/scope/src/component_scope.mjs +0 -31
- package/src/ngtsc/scope/src/dependency.mjs +0 -134
- package/src/ngtsc/scope/src/local.mjs +0 -531
- package/src/ngtsc/scope/src/typecheck.mjs +0 -83
- package/src/ngtsc/shims/api.externs.js +0 -0
- package/src/ngtsc/shims/api.mjs +0 -2
- package/src/ngtsc/shims/index.mjs +0 -14
- package/src/ngtsc/shims/shims.externs.js +0 -0
- package/src/ngtsc/shims/src/adapter.mjs +0 -188
- package/src/ngtsc/shims/src/expando.mjs +0 -102
- package/src/ngtsc/shims/src/factory_generator.mjs +0 -265
- package/src/ngtsc/shims/src/reference_tagger.mjs +0 -67
- package/src/ngtsc/shims/src/summary_generator.mjs +0 -64
- package/src/ngtsc/shims/src/util.mjs +0 -26
- package/src/ngtsc/sourcemaps/index.mjs +0 -11
- package/src/ngtsc/sourcemaps/sourcemaps.externs.js +0 -0
- package/src/ngtsc/sourcemaps/src/content_origin.mjs +0 -35
- package/src/ngtsc/sourcemaps/src/raw_source_map.mjs +0 -2
- package/src/ngtsc/sourcemaps/src/segment_marker.mjs +0 -40
- package/src/ngtsc/sourcemaps/src/source_file.mjs +0 -459
- package/src/ngtsc/sourcemaps/src/source_file_loader.mjs +0 -213
- package/src/ngtsc/switch/index.mjs +0 -9
- package/src/ngtsc/switch/src/switch.mjs +0 -115
- package/src/ngtsc/switch/switch.externs.js +0 -0
- package/src/ngtsc/transform/index.mjs +0 -14
- package/src/ngtsc/transform/src/alias.mjs +0 -30
- package/src/ngtsc/transform/src/api.mjs +0 -63
- package/src/ngtsc/transform/src/compilation.mjs +0 -514
- package/src/ngtsc/transform/src/declaration.mjs +0 -182
- package/src/ngtsc/transform/src/trait.mjs +0 -95
- package/src/ngtsc/transform/src/transform.mjs +0 -298
- package/src/ngtsc/transform/src/utils.mjs +0 -57
- package/src/ngtsc/transform/transform.externs.js +0 -0
- package/src/ngtsc/translator/index.mjs +0 -14
- package/src/ngtsc/translator/src/api/ast_factory.mjs +0 -9
- package/src/ngtsc/translator/src/api/import_generator.mjs +0 -9
- package/src/ngtsc/translator/src/context.mjs +0 -24
- package/src/ngtsc/translator/src/import_manager.mjs +0 -48
- package/src/ngtsc/translator/src/translator.mjs +0 -317
- package/src/ngtsc/translator/src/type_translator.mjs +0 -204
- package/src/ngtsc/translator/src/typescript_ast_factory.mjs +0 -211
- package/src/ngtsc/translator/src/typescript_translator.mjs +0 -17
- package/src/ngtsc/translator/translator.externs.js +0 -0
- package/src/ngtsc/tsc_plugin.mjs +0 -98
- package/src/ngtsc/typecheck/api/api.externs.js +0 -0
- package/src/ngtsc/typecheck/api/api.mjs +0 -9
- package/src/ngtsc/typecheck/api/checker.mjs +0 -31
- package/src/ngtsc/typecheck/api/completion.mjs +0 -16
- package/src/ngtsc/typecheck/api/context.mjs +0 -9
- package/src/ngtsc/typecheck/api/index.mjs +0 -14
- package/src/ngtsc/typecheck/api/scope.mjs +0 -9
- package/src/ngtsc/typecheck/api/symbols.mjs +0 -22
- package/src/ngtsc/typecheck/diagnostics/diagnostics.externs.js +0 -0
- package/src/ngtsc/typecheck/diagnostics/index.mjs +0 -10
- package/src/ngtsc/typecheck/diagnostics/src/diagnostic.mjs +0 -99
- package/src/ngtsc/typecheck/diagnostics/src/id.mjs +0 -23
- package/src/ngtsc/typecheck/index.mjs +0 -12
- package/src/ngtsc/typecheck/src/checker.mjs +0 -591
- package/src/ngtsc/typecheck/src/comments.mjs +0 -159
- package/src/ngtsc/typecheck/src/completion.mjs +0 -155
- package/src/ngtsc/typecheck/src/context.mjs +0 -350
- package/src/ngtsc/typecheck/src/diagnostics.mjs +0 -95
- package/src/ngtsc/typecheck/src/dom.mjs +0 -68
- package/src/ngtsc/typecheck/src/environment.mjs +0 -146
- package/src/ngtsc/typecheck/src/expression.mjs +0 -412
- package/src/ngtsc/typecheck/src/line_mappings.mjs +0 -60
- package/src/ngtsc/typecheck/src/oob.mjs +0 -112
- package/src/ngtsc/typecheck/src/shim.mjs +0 -37
- package/src/ngtsc/typecheck/src/source.mjs +0 -74
- package/src/ngtsc/typecheck/src/tcb_util.mjs +0 -135
- package/src/ngtsc/typecheck/src/template_semantics.mjs +0 -34
- package/src/ngtsc/typecheck/src/template_symbol_builder.mjs +0 -485
- package/src/ngtsc/typecheck/src/ts_util.mjs +0 -157
- package/src/ngtsc/typecheck/src/type_check_block.mjs +0 -1770
- package/src/ngtsc/typecheck/src/type_check_file.mjs +0 -65
- package/src/ngtsc/typecheck/src/type_constructor.mjs +0 -227
- package/src/ngtsc/typecheck/src/type_emitter.mjs +0 -127
- package/src/ngtsc/typecheck/src/type_parameter_emitter.mjs +0 -93
- package/src/ngtsc/typecheck/typecheck.externs.js +0 -0
- package/src/ngtsc/util/src/path.mjs +0 -18
- package/src/ngtsc/util/src/typescript.mjs +0 -143
- package/src/ngtsc/util/src/visitor.mjs +0 -107
- package/src/ngtsc/util/util.externs.js +0 -0
- package/src/ngtsc/xi18n/index.mjs +0 -9
- package/src/ngtsc/xi18n/src/context.mjs +0 -9
- package/src/ngtsc/xi18n/xi18n.externs.js +0 -0
- package/src/perform_compile.mjs +0 -275
- package/src/perform_watch.mjs +0 -247
- package/src/tooling.mjs +0 -32
- package/src/transformers/api.mjs +0 -27
- package/src/transformers/compiler_host.mjs +0 -593
- package/src/transformers/downlevel_decorators_transform.mjs +0 -507
- package/src/transformers/entry_points.mjs +0 -10
- package/src/transformers/i18n.mjs +0 -59
- package/src/transformers/inline_resources.mjs +0 -269
- package/src/transformers/lower_expressions.mjs +0 -336
- package/src/transformers/metadata_cache.mjs +0 -53
- package/src/transformers/metadata_reader.mjs +0 -104
- package/src/transformers/node_emitter.mjs +0 -606
- package/src/transformers/node_emitter_transform.mjs +0 -78
- package/src/transformers/patch_alias_reference_resolution.mjs +0 -109
- package/src/transformers/program.mjs +0 -887
- package/src/transformers/r3_metadata_transform.mjs +0 -46
- package/src/transformers/r3_transform.mjs +0 -29
- package/src/transformers/util.mjs +0 -89
- package/src/typescript_support.mjs +0 -57
- 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
|