@angular/compiler-cli 12.1.0-next.6 → 12.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/linker/src/file_linker/emit_scopes/iife_emit_scope.js +1 -1
- package/linker/src/file_linker/partial_linkers/partial_component_linker_1.js +2 -3
- 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/configuration.d.ts +7 -0
- package/ngcc/src/packages/configuration.js +8 -3
- package/ngcc/src/packages/entry_point_manifest.js +2 -2
- 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.d.ts +2 -0
- package/src/ngtsc/annotations/src/component.js +6 -2
- 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/api/src/public_options.d.ts +12 -0
- package/src/ngtsc/core/api/src/public_options.js +1 -1
- package/src/ngtsc/core/src/compiler.d.ts +5 -0
- package/src/ngtsc/core/src/compiler.js +10 -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 +2 -3
- package/src/ngtsc/metadata/src/inheritance.js +2 -7
- 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.d.ts +1 -0
- package/src/ngtsc/program.js +26 -2
- 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/api.d.ts +6 -0
- package/src/ngtsc/transform/src/api.js +1 -1
- package/src/ngtsc/transform/src/compilation.d.ts +2 -0
- package/src/ngtsc/transform/src/compilation.js +59 -20
- 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 +36 -4
- 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.d.ts +2 -1
- package/src/ngtsc/typecheck/src/type_emitter.js +54 -48
- package/src/ngtsc/typecheck/src/type_parameter_emitter.d.ts +2 -0
- package/src/ngtsc/typecheck/src/type_parameter_emitter.js +21 -7
- package/src/ngtsc/util/src/visitor.d.ts +1 -1
- package/src/ngtsc/util/src/visitor.js +1 -8
- package/src/ngtsc/xi18n/index.d.ts +9 -0
- package/src/ngtsc/xi18n/index.js +22 -0
- package/src/ngtsc/xi18n/src/context.d.ts +26 -0
- package/src/ngtsc/xi18n/src/context.js +20 -0
- package/src/transformers/api.d.ts +0 -3
- package/src/transformers/api.js +1 -1
- package/src/transformers/i18n.d.ts +14 -0
- package/src/transformers/i18n.js +76 -0
- package/src/transformers/program.d.ts +0 -4
- package/src/transformers/program.js +5 -56
- 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 -250
- 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 -1064
- 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 -908
- 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 -247
- 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 -496
- 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 -472
- 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 -140
- package/src/ngtsc/typecheck/src/type_parameter_emitter.mjs +0 -80
- 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/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/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 -935
- 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,143 +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
|
-
const TS = /\.tsx?$/i;
|
|
9
|
-
const D_TS = /\.d\.ts$/i;
|
|
10
|
-
import * as ts from 'typescript';
|
|
11
|
-
import { getFileSystem } from '../../file_system';
|
|
12
|
-
export function isSymbolWithValueDeclaration(symbol) {
|
|
13
|
-
// If there is a value declaration set, then the `declarations` property is never undefined. We
|
|
14
|
-
// still check for the property to exist as this matches with the type that `symbol` is narrowed
|
|
15
|
-
// to.
|
|
16
|
-
return symbol != null && symbol.valueDeclaration !== undefined &&
|
|
17
|
-
symbol.declarations !== undefined;
|
|
18
|
-
}
|
|
19
|
-
export function isDtsPath(filePath) {
|
|
20
|
-
return D_TS.test(filePath);
|
|
21
|
-
}
|
|
22
|
-
export function isNonDeclarationTsPath(filePath) {
|
|
23
|
-
return TS.test(filePath) && !D_TS.test(filePath);
|
|
24
|
-
}
|
|
25
|
-
export function isFromDtsFile(node) {
|
|
26
|
-
let sf = node.getSourceFile();
|
|
27
|
-
if (sf === undefined) {
|
|
28
|
-
sf = ts.getOriginalNode(node).getSourceFile();
|
|
29
|
-
}
|
|
30
|
-
return sf !== undefined && sf.isDeclarationFile;
|
|
31
|
-
}
|
|
32
|
-
export function nodeNameForError(node) {
|
|
33
|
-
if (node.name !== undefined && ts.isIdentifier(node.name)) {
|
|
34
|
-
return node.name.text;
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
const kind = ts.SyntaxKind[node.kind];
|
|
38
|
-
const { line, character } = ts.getLineAndCharacterOfPosition(node.getSourceFile(), node.getStart());
|
|
39
|
-
return `${kind}@${line}:${character}`;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
export function getSourceFile(node) {
|
|
43
|
-
// In certain transformation contexts, `ts.Node.getSourceFile()` can actually return `undefined`,
|
|
44
|
-
// despite the type signature not allowing it. In that event, get the `ts.SourceFile` via the
|
|
45
|
-
// original node instead (which works).
|
|
46
|
-
const directSf = node.getSourceFile();
|
|
47
|
-
return directSf !== undefined ? directSf : ts.getOriginalNode(node).getSourceFile();
|
|
48
|
-
}
|
|
49
|
-
export function getSourceFileOrNull(program, fileName) {
|
|
50
|
-
return program.getSourceFile(fileName) || null;
|
|
51
|
-
}
|
|
52
|
-
export function getTokenAtPosition(sf, pos) {
|
|
53
|
-
// getTokenAtPosition is part of TypeScript's private API.
|
|
54
|
-
return ts.getTokenAtPosition(sf, pos);
|
|
55
|
-
}
|
|
56
|
-
export function identifierOfNode(decl) {
|
|
57
|
-
if (decl.name !== undefined && ts.isIdentifier(decl.name)) {
|
|
58
|
-
return decl.name;
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
export function isDeclaration(node) {
|
|
65
|
-
return isValueDeclaration(node) || isTypeDeclaration(node);
|
|
66
|
-
}
|
|
67
|
-
export function isValueDeclaration(node) {
|
|
68
|
-
return ts.isClassDeclaration(node) || ts.isFunctionDeclaration(node) ||
|
|
69
|
-
ts.isVariableDeclaration(node);
|
|
70
|
-
}
|
|
71
|
-
export function isTypeDeclaration(node) {
|
|
72
|
-
return ts.isEnumDeclaration(node) || ts.isTypeAliasDeclaration(node) ||
|
|
73
|
-
ts.isInterfaceDeclaration(node);
|
|
74
|
-
}
|
|
75
|
-
export function isNamedDeclaration(node) {
|
|
76
|
-
const namedNode = node;
|
|
77
|
-
return namedNode.name !== undefined && ts.isIdentifier(namedNode.name);
|
|
78
|
-
}
|
|
79
|
-
export function isExported(node) {
|
|
80
|
-
let topLevel = node;
|
|
81
|
-
if (ts.isVariableDeclaration(node) && ts.isVariableDeclarationList(node.parent)) {
|
|
82
|
-
topLevel = node.parent.parent;
|
|
83
|
-
}
|
|
84
|
-
return topLevel.modifiers !== undefined &&
|
|
85
|
-
topLevel.modifiers.some(modifier => modifier.kind === ts.SyntaxKind.ExportKeyword);
|
|
86
|
-
}
|
|
87
|
-
export function getRootDirs(host, options) {
|
|
88
|
-
const rootDirs = [];
|
|
89
|
-
const cwd = host.getCurrentDirectory();
|
|
90
|
-
const fs = getFileSystem();
|
|
91
|
-
if (options.rootDirs !== undefined) {
|
|
92
|
-
rootDirs.push(...options.rootDirs);
|
|
93
|
-
}
|
|
94
|
-
else if (options.rootDir !== undefined) {
|
|
95
|
-
rootDirs.push(options.rootDir);
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
rootDirs.push(cwd);
|
|
99
|
-
}
|
|
100
|
-
// In Windows the above might not always return posix separated paths
|
|
101
|
-
// See:
|
|
102
|
-
// https://github.com/Microsoft/TypeScript/blob/3f7357d37f66c842d70d835bc925ec2a873ecfec/src/compiler/sys.ts#L650
|
|
103
|
-
// Also compiler options might be set via an API which doesn't normalize paths
|
|
104
|
-
return rootDirs.map(rootDir => fs.resolve(cwd, host.getCanonicalFileName(rootDir)));
|
|
105
|
-
}
|
|
106
|
-
export function nodeDebugInfo(node) {
|
|
107
|
-
const sf = getSourceFile(node);
|
|
108
|
-
const { line, character } = ts.getLineAndCharacterOfPosition(sf, node.pos);
|
|
109
|
-
return `[${sf.fileName}: ${ts.SyntaxKind[node.kind]} @ ${line}:${character}]`;
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Resolve the specified `moduleName` using the given `compilerOptions` and `compilerHost`.
|
|
113
|
-
*
|
|
114
|
-
* This helper will attempt to use the `CompilerHost.resolveModuleNames()` method if available.
|
|
115
|
-
* Otherwise it will fallback on the `ts.ResolveModuleName()` function.
|
|
116
|
-
*/
|
|
117
|
-
export function resolveModuleName(moduleName, containingFile, compilerOptions, compilerHost, moduleResolutionCache) {
|
|
118
|
-
if (compilerHost.resolveModuleNames) {
|
|
119
|
-
return compilerHost.resolveModuleNames([moduleName], containingFile, undefined, // reusedNames
|
|
120
|
-
undefined, // redirectedReference
|
|
121
|
-
compilerOptions)[0];
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
return ts
|
|
125
|
-
.resolveModuleName(moduleName, containingFile, compilerOptions, compilerHost, moduleResolutionCache !== null ? moduleResolutionCache : undefined)
|
|
126
|
-
.resolvedModule;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
/** Returns true if the node is an assignment expression. */
|
|
130
|
-
export function isAssignment(node) {
|
|
131
|
-
return ts.isBinaryExpression(node) && node.operatorToken.kind === ts.SyntaxKind.EqualsToken;
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Obtains the non-redirected source file for `sf`.
|
|
135
|
-
*/
|
|
136
|
-
export function toUnredirectedSourceFile(sf) {
|
|
137
|
-
const redirectInfo = sf.redirectInfo;
|
|
138
|
-
if (redirectInfo === undefined) {
|
|
139
|
-
return sf;
|
|
140
|
-
}
|
|
141
|
-
return redirectInfo.unredirected;
|
|
142
|
-
}
|
|
143
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvdXRpbC9zcmMvdHlwZXNjcmlwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7QUFDdEIsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDO0FBRXpCLE9BQU8sS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2pDLE9BQU8sRUFBaUIsYUFBYSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFXaEUsTUFBTSxVQUFVLDRCQUE0QixDQUFDLE1BQ1M7SUFDcEQsK0ZBQStGO0lBQy9GLGdHQUFnRztJQUNoRyxNQUFNO0lBQ04sT0FBTyxNQUFNLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTO1FBQzFELE1BQU0sQ0FBQyxZQUFZLEtBQUssU0FBUyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLFFBQWdCO0lBQ3hDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLFFBQWdCO0lBQ3JELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBYTtJQUN6QyxJQUFJLEVBQUUsR0FBNEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZELElBQUksRUFBRSxLQUFLLFNBQVMsRUFBRTtRQUNwQixFQUFFLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztLQUMvQztJ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Q0FBQztBQUM5RixDQUFDO0FBd0JEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QixDQUFDLEVBQWlCO0lBQ3hELE1BQU0sWUFBWSxHQUFJLEVBQTJCLENBQUMsWUFBWSxDQUFDO0lBQy9ELElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRTtRQUM5QixPQUFPLEVBQUUsQ0FBQztLQUNYO0lBQ0QsT0FBTyxZQUFZLENBQUMsWUFBWSxDQUFDO0FBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuY29uc3QgVFMgPSAvXFwudHN4PyQvaTtcbmNvbnN0IERfVFMgPSAvXFwuZFxcLnRzJC9pO1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7QWJzb2x1dGVGc1BhdGgsIGdldEZpbGVTeXN0ZW19IGZyb20gJy4uLy4uL2ZpbGVfc3lzdGVtJztcbmltcG9ydCB7RGVjbGFyYXRpb25Ob2RlfSBmcm9tICcuLi8uLi9yZWZsZWN0aW9uJztcblxuLyoqXG4gKiBUeXBlIGRlc2NyaWJpbmcgYSBzeW1ib2wgdGhhdCBpcyBndWFyYW50ZWVkIHRvIGhhdmUgYSB2YWx1ZSBkZWNsYXJhdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgU3ltYm9sV2l0aFZhbHVlRGVjbGFyYXRpb24gPSB0cy5TeW1ib2wme1xuICB2YWx1ZURlY2xhcmF0aW9uOiB0cy5EZWNsYXJhdGlvbjtcbiAgZGVjbGFyYXRpb25zOiB0cy5EZWNsYXJhdGlvbltdO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3ltYm9sV2l0aFZhbHVlRGVjbGFyYXRpb24oc3ltYm9sOiB0cy5TeW1ib2x8bnVsbHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCk6IHN5bWJvbCBpcyBTeW1ib2xXaXRoVmFsdWVEZWNsYXJhdGlvbiB7XG4gIC8vIElmIHRoZXJlIGlzIGEgdmFsdWUgZGVjbGFyYXRpb24gc2V0LCB0aGVuIHRoZSBgZGVjbGFyYXRpb25zYCBwcm9wZXJ0eSBpcyBuZXZlciB1bmRlZmluZWQuIFdlXG4gIC8vIHN0aWxsIGNoZWNrIGZvciB0aGUgcHJvcGVydHkgdG8gZXhpc3QgYXMgdGhpcyBtYXRjaGVzIHdpdGggdGhlIHR5cGUgdGhhdCBgc3ltYm9sYCBpcyBuYXJyb3dlZFxuICAvLyB0by5cbiAgcmV0dXJuIHN5bWJvbCAhPSBudWxsICYmIHN5bWJvbC52YWx1ZURlY2xhcmF0aW9uICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHN5bWJvbC5kZWNsYXJhdGlvbnMgIT09IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRHRzUGF0aChmaWxlUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBEX1RTLnRlc3QoZmlsZVBhdGgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb25EZWNsYXJhdGlvblRzUGF0aChmaWxlUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBUUy50ZXN0KGZpbGVQYXRoKSAmJiAhRF9UUy50ZXN0KGZpbGVQYXRoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRnJvbUR0c0ZpbGUobm9kZTogdHMuTm9kZSk6IGJvb2xlYW4ge1xuICBsZXQgc2Y6IHRzLlNvdXJjZUZpbGV8dW5kZWZpbmVkID0gbm9kZS5nZXRTb3VyY2VGaWxlKCk7XG4gIGlmIChzZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc2YgPSB0cy5nZXRPcmlnaW5hbE5vZGUobm9kZSkuZ2V0U291cmNlRmlsZSgpO1xuICB9XG4gIHJldHVybiBzZiAhPT0gdW5kZWZpbmVkICYmIHNmLmlzRGVjbGFyYXRpb25GaWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9kZU5hbWVGb3JFcnJvcihub2RlOiB0cy5Ob2RlJntuYW1lPzogdHMuTm9kZX0pOiBzdHJpbmcge1xuICBpZiAobm9kZS5uYW1lICE9PSB1bmRlZmluZWQgJiYgdHMuaXNJZGVudGlmaWVyKG5vZGUubmFtZSkpIHtcbiAgICByZXR1cm4gbm9kZS5uYW1lLnRleHQ7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qga2luZCA9IHRzLlN5bnRheEtpbmRbbm9kZS5raW5kXTtcbiAgICBjb25zdCB7bGluZSwgY2hhcmFjdGVyfSA9XG4gICAgICAgIHRzLmdldExpbmVBbmRDaGFyYWN0ZXJPZlBvc2l0aW9uKG5vZGUuZ2V0U291cmNlRmlsZSgpLCBub2RlLmdldFN0YXJ0KCkpO1xuICAgIHJldHVybiBgJHtraW5kfUAke2xpbmV9OiR7Y2hhcmFjdGVyfWA7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvdXJjZUZpbGUobm9kZTogdHMuTm9kZSk6IHRzLlNvdXJjZUZpbGUge1xuICAvLyBJbiBjZXJ0YWluIHRyYW5zZm9ybWF0aW9uIGNvbnRleHRzLCBgdHMuTm9kZS5nZXRTb3VyY2VGaWxlKClgIGNhbiBhY3R1YWxseSByZXR1cm4gYHVuZGVmaW5lZGAsXG4gIC8vIGRlc3BpdGUgdGhlIHR5cGUgc2lnbmF0dXJlIG5vdCBhbGxvd2luZyBpdC4gSW4gdGhhdCBldmVudCwgZ2V0IHRoZSBgdHMuU291cmNlRmlsZWAgdmlhIHRoZVxuICAvLyBvcmlnaW5hbCBub2RlIGluc3RlYWQgKHdoaWNoIHdvcmtzKS5cbiAgY29uc3QgZGlyZWN0U2YgPSBub2RlLmdldFNvdXJjZUZpbGUoKSBhcyB0cy5Tb3VyY2VGaWxlIHwgdW5kZWZpbmVkO1xuICByZXR1cm4gZGlyZWN0U2YgIT09IHVuZGVmaW5lZCA/IGRpcmVjdFNmIDogdHMuZ2V0T3JpZ2luYWxOb2RlKG5vZGUpLmdldFNvdXJjZUZpbGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvdXJjZUZpbGVPck51bGwocHJvZ3JhbTogdHMuUHJvZ3JhbSwgZmlsZU5hbWU6IEFic29sdXRlRnNQYXRoKTogdHMuU291cmNlRmlsZXxcbiAgICBudWxsIHtcbiAgcmV0dXJuIHByb2dyYW0uZ2V0U291cmNlRmlsZShmaWxlTmFtZSkgfHwgbnVsbDtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9rZW5BdFBvc2l0aW9uKHNmOiB0cy5Tb3VyY2VGaWxlLCBwb3M6IG51bWJlcik6IHRzLk5vZGUge1xuICAvLyBnZXRUb2tlbkF0UG9zaXRpb24gaXMgcGFydCBvZiBUeXBlU2NyaXB0J3MgcHJpdmF0ZSBBUEkuXG4gIHJldHVybiAodHMgYXMgYW55KS5nZXRUb2tlbkF0UG9zaXRpb24oc2YsIHBvcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyT2ZOb2RlKGRlY2w6IHRzLk5vZGUme25hbWU/OiB0cy5Ob2RlfSk6IHRzLklkZW50aWZpZXJ8bnVsbCB7XG4gIGlmIChkZWNsLm5hbWUgIT09IHVuZGVmaW5lZCAmJiB0cy5pc0lkZW50aWZpZXIoZGVjbC5uYW1lKSkge1xuICAgIHJldHVybiBkZWNsLm5hbWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVjbGFyYXRpb24obm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgdHMuRGVjbGFyYXRpb24ge1xuICByZXR1cm4gaXNWYWx1ZURlY2xhcmF0aW9uKG5vZGUpIHx8IGlzVHlwZURlY2xhcmF0aW9uKG5vZGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWYWx1ZURlY2xhcmF0aW9uKG5vZGU6IHRzLk5vZGUpOiBub2RlIGlzIHRzLkNsYXNzRGVjbGFyYXRpb258XG4gICAgdHMuRnVuY3Rpb25EZWNsYXJhdGlvbnx0cy5WYXJpYWJsZURlY2xhcmF0aW9uIHtcbiAgcmV0dXJuIHRzLmlzQ2xhc3NEZWNsYXJhdGlvbihub2RlKSB8fCB0cy5pc0Z1bmN0aW9uRGVjbGFyYXRpb24obm9kZSkgfHxcbiAgICAgIHRzLmlzVmFyaWFibGVEZWNsYXJhdGlvbihub2RlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVHlwZURlY2xhcmF0aW9uKG5vZGU6IHRzLk5vZGUpOiBub2RlIGlzIHRzLkVudW1EZWNsYXJhdGlvbnxcbiAgICB0cy5UeXBlQWxpYXNEZWNsYXJhdGlvbnx0cy5JbnRlcmZhY2VEZWNsYXJhdGlvbiB7XG4gIHJldHVybiB0cy5pc0VudW1EZWNsYXJhdGlvbihub2RlKSB8fCB0cy5pc1R5cGVBbGlhc0RlY2xhcmF0aW9uKG5vZGUpIHx8XG4gICAgICB0cy5pc0ludGVyZmFjZURlY2xhcmF0aW9uKG5vZGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOYW1lZERlY2xhcmF0aW9uKG5vZGU6IHRzLk5vZGUpOiBub2RlIGlzIHRzLkRlY2xhcmF0aW9uJntuYW1lOiB0cy5JZGVudGlmaWVyfSB7XG4gIGNvbnN0IG5hbWVkTm9kZSA9IG5vZGUgYXMge25hbWU/OiB0cy5JZGVudGlmaWVyfTtcbiAgcmV0dXJuIG5hbWVkTm9kZS5uYW1lICE9PSB1bmRlZmluZWQgJiYgdHMuaXNJZGVudGlmaWVyKG5hbWVkTm9kZS5uYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXhwb3J0ZWQobm9kZTogRGVjbGFyYXRpb25Ob2RlKTogYm9vbGVhbiB7XG4gIGxldCB0b3BMZXZlbDogdHMuTm9kZSA9IG5vZGU7XG4gIGlmICh0cy5pc1ZhcmlhYmxlRGVjbGFyYXRpb24obm9kZSkgJiYgdHMuaXNWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChub2RlLnBhcmVudCkpIHtcbiAgICB0b3BMZXZlbCA9IG5vZGUucGFyZW50LnBhcmVudDtcbiAgfVxuICByZXR1cm4gdG9wTGV2ZWwubW9kaWZpZXJzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRvcExldmVsLm1vZGlmaWVycy5zb21lKG1vZGlmaWVyID0+IG1vZGlmaWVyLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuRXhwb3J0S2V5d29yZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb290RGlycyhcbiAgICBob3N0OiBQaWNrPHRzLkNvbXBpbGVySG9zdCwgJ2dldEN1cnJlbnREaXJlY3RvcnknfCdnZXRDYW5vbmljYWxGaWxlTmFtZSc+LFxuICAgIG9wdGlvbnM6IHRzLkNvbXBpbGVyT3B0aW9ucyk6IEFic29sdXRlRnNQYXRoW10ge1xuICBjb25zdCByb290RGlyczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgY3dkID0gaG9zdC5nZXRDdXJyZW50RGlyZWN0b3J5KCk7XG4gIGNvbnN0IGZzID0gZ2V0RmlsZVN5c3RlbSgpO1xuICBpZiAob3B0aW9ucy5yb290RGlycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcm9vdERpcnMucHVzaCguLi5vcHRpb25zLnJvb3REaXJzKTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLnJvb3REaXIgIT09IHVuZGVmaW5lZCkge1xuICAgIHJvb3REaXJzLnB1c2gob3B0aW9ucy5yb290RGlyKTtcbiAgfSBlbHNlIHtcbiAgICByb290RGlycy5wdXNoKGN3ZCk7XG4gIH1cblxuICAvLyBJbiBXaW5kb3dzIHRoZSBhYm92ZSBtaWdodCBub3QgYWx3YXlzIHJldHVybiBwb3NpeCBzZXBhcmF0ZWQgcGF0aHNcbiAgLy8gU2VlOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvYmxvYi8zZjczNTdkMzdmNjZjODQyZDcwZDgzNWJjOTI1ZWMyYTg3M2VjZmVjL3NyYy9jb21waWxlci9zeXMudHMjTDY1MFxuICAvLyBBbHNvIGNvbXBpbGVyIG9wdGlvbnMgbWlnaHQgYmUgc2V0IHZpYSBhbiBBUEkgd2hpY2ggZG9lc24ndCBub3JtYWxpemUgcGF0aHNcbiAgcmV0dXJuIHJvb3REaXJzLm1hcChyb290RGlyID0+IGZzLnJlc29sdmUoY3dkLCBob3N0LmdldENhbm9uaWNhbEZpbGVOYW1lKHJvb3REaXIpKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2RlRGVidWdJbmZvKG5vZGU6IHRzLk5vZGUpOiBzdHJpbmcge1xuICBjb25zdCBzZiA9IGdldFNvdXJjZUZpbGUobm9kZSk7XG4gIGNvbnN0IHtsaW5lLCBjaGFyYWN0ZXJ9ID0gdHMuZ2V0TGluZUFuZENoYXJhY3Rlck9mUG9zaXRpb24oc2YsIG5vZGUucG9zKTtcbiAgcmV0dXJuIGBbJHtzZi5maWxlTmFtZX06ICR7dHMuU3ludGF4S2luZFtub2RlLmtpbmRdfSBAICR7bGluZX06JHtjaGFyYWN0ZXJ9XWA7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgc3BlY2lmaWVkIGBtb2R1bGVOYW1lYCB1c2luZyB0aGUgZ2l2ZW4gYGNvbXBpbGVyT3B0aW9uc2AgYW5kIGBjb21waWxlckhvc3RgLlxuICpcbiAqIFRoaXMgaGVscGVyIHdpbGwgYXR0ZW1wdCB0byB1c2UgdGhlIGBDb21waWxlckhvc3QucmVzb2x2ZU1vZHVsZU5hbWVzKClgIG1ldGhvZCBpZiBhdmFpbGFibGUuXG4gKiBPdGhlcndpc2UgaXQgd2lsbCBmYWxsYmFjayBvbiB0aGUgYHRzLlJlc29sdmVNb2R1bGVOYW1lKClgIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU1vZHVsZU5hbWUoXG4gICAgbW9kdWxlTmFtZTogc3RyaW5nLCBjb250YWluaW5nRmlsZTogc3RyaW5nLCBjb21waWxlck9wdGlvbnM6IHRzLkNvbXBpbGVyT3B0aW9ucyxcbiAgICBjb21waWxlckhvc3Q6IHRzLk1vZHVsZVJlc29sdXRpb25Ib3N0JlBpY2s8dHMuQ29tcGlsZXJIb3N0LCAncmVzb2x2ZU1vZHVsZU5hbWVzJz4sXG4gICAgbW9kdWxlUmVzb2x1dGlvbkNhY2hlOiB0cy5Nb2R1bGVSZXNvbHV0aW9uQ2FjaGV8bnVsbCk6IHRzLlJlc29sdmVkTW9kdWxlfHVuZGVmaW5lZCB7XG4gIGlmIChjb21waWxlckhvc3QucmVzb2x2ZU1vZHVsZU5hbWVzKSB7XG4gICAgcmV0dXJuIGNvbXBpbGVySG9zdC5yZXNvbHZlTW9kdWxlTmFtZXMoXG4gICAgICAgIFttb2R1bGVOYW1lXSwgY29udGFpbmluZ0ZpbGUsXG4gICAgICAgIHVuZGVmaW5lZCwgIC8vIHJldXNlZE5hbWVzXG4gICAgICAgIHVuZGVmaW5lZCwgIC8vIHJlZGlyZWN0ZWRSZWZlcmVuY2VcbiAgICAgICAgY29tcGlsZXJPcHRpb25zKVswXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdHNcbiAgICAgICAgLnJlc29sdmVNb2R1bGVOYW1lKFxuICAgICAgICAgICAgbW9kdWxlTmFtZSwgY29udGFpbmluZ0ZpbGUsIGNvbXBpbGVyT3B0aW9ucywgY29tcGlsZXJIb3N0LFxuICAgICAgICAgICAgbW9kdWxlUmVzb2x1dGlvbkNhY2hlICE9PSBudWxsID8gbW9kdWxlUmVzb2x1dGlvbkNhY2hlIDogdW5kZWZpbmVkKVxuICAgICAgICAucmVzb2x2ZWRNb2R1bGU7XG4gIH1cbn1cblxuLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbm9kZSBpcyBhbiBhc3NpZ25tZW50IGV4cHJlc3Npb24uICovXG5leHBvcnQgZnVuY3Rpb24gaXNBc3NpZ25tZW50KG5vZGU6IHRzLk5vZGUpOiBub2RlIGlzIHRzLkJpbmFyeUV4cHJlc3Npb24ge1xuICByZXR1cm4gdHMuaXNCaW5hcnlFeHByZXNzaW9uKG5vZGUpICYmIG5vZGUub3BlcmF0b3JUb2tlbi5raW5kID09PSB0cy5TeW50YXhLaW5kLkVxdWFsc1Rva2VuO1xufVxuXG4vKipcbiAqIEFzc2VydHMgdGhhdCB0aGUga2V5cyBgS2AgZm9ybSBhIHN1YnNldCBvZiB0aGUga2V5cyBvZiBgVGAuXG4gKi9cbmV4cG9ydCB0eXBlIFN1YnNldE9mS2V5czxULCBLIGV4dGVuZHMga2V5b2YgVD4gPSBLO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIHR5cGUgYFRgLCB3aXRoIGEgdHJhbnNmb3JtYXRpb24gYXBwbGllZCB0aGF0IHR1cm5zIGFsbCBtZXRob2RzIChldmVuIG9wdGlvbmFsXG4gKiBvbmVzKSBpbnRvIHJlcXVpcmVkIGZpZWxkcyAod2hpY2ggbWF5IGJlIGB1bmRlZmluZWRgLCBpZiB0aGUgbWV0aG9kIHdhcyBvcHRpb25hbCkuXG4gKi9cbmV4cG9ydCB0eXBlIFJlcXVpcmVkRGVsZWdhdGlvbnM8VD4gPSB7XG4gIFtNIGluIGtleW9mIFJlcXVpcmVkPFQ+XTogVFtNXTtcbn07XG5cbi8qKlxuICogU291cmNlIGZpbGVzIG1heSBiZWNvbWUgcmVkaXJlY3RzIHRvIG90aGVyIHNvdXJjZSBmaWxlcyB3aGVuIHRoZWlyIHBhY2thZ2UgbmFtZSBhbmQgdmVyc2lvbiBhcmVcbiAqIGlkZW50aWNhbC4gVHlwZVNjcmlwdCBjcmVhdGVzIGEgcHJveHkgc291cmNlIGZpbGUgZm9yIHN1Y2ggc291cmNlIGZpbGVzIHdoaWNoIGhhcyBhbiBpbnRlcm5hbFxuICogYHJlZGlyZWN0SW5mb2AgcHJvcGVydHkgdGhhdCByZWZlcnMgdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLlxuICovXG5pbnRlcmZhY2UgUmVkaXJlY3RlZFNvdXJjZUZpbGUgZXh0ZW5kcyB0cy5Tb3VyY2VGaWxlIHtcbiAgcmVkaXJlY3RJbmZvPzoge3VucmVkaXJlY3RlZDogdHMuU291cmNlRmlsZTt9O1xufVxuXG4vKipcbiAqIE9idGFpbnMgdGhlIG5vbi1yZWRpcmVjdGVkIHNvdXJjZSBmaWxlIGZvciBgc2ZgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9VbnJlZGlyZWN0ZWRTb3VyY2VGaWxlKHNmOiB0cy5Tb3VyY2VGaWxlKTogdHMuU291cmNlRmlsZSB7XG4gIGNvbnN0IHJlZGlyZWN0SW5mbyA9IChzZiBhcyBSZWRpcmVjdGVkU291cmNlRmlsZSkucmVkaXJlY3RJbmZvO1xuICBpZiAocmVkaXJlY3RJbmZvID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gc2Y7XG4gIH1cbiAgcmV0dXJuIHJlZGlyZWN0SW5mby51bnJlZGlyZWN0ZWQ7XG59XG4iXX0=
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import * as ts from 'typescript';
|
|
9
|
-
/**
|
|
10
|
-
* Visit a node with the given visitor and return a transformed copy.
|
|
11
|
-
*/
|
|
12
|
-
export function visit(node, visitor, context) {
|
|
13
|
-
return visitor._visit(node, context);
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Abstract base class for visitors, which processes certain nodes specially to allow insertion
|
|
17
|
-
* of other nodes before them.
|
|
18
|
-
*/
|
|
19
|
-
export class Visitor {
|
|
20
|
-
constructor() {
|
|
21
|
-
/**
|
|
22
|
-
* Maps statements to an array of statements that should be inserted before them.
|
|
23
|
-
*/
|
|
24
|
-
this._before = new Map();
|
|
25
|
-
/**
|
|
26
|
-
* Maps statements to an array of statements that should be inserted after them.
|
|
27
|
-
*/
|
|
28
|
-
this._after = new Map();
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Visit a class declaration, returning at least the transformed declaration and optionally other
|
|
32
|
-
* nodes to insert before the declaration.
|
|
33
|
-
*/
|
|
34
|
-
visitClassDeclaration(node) {
|
|
35
|
-
return { node };
|
|
36
|
-
}
|
|
37
|
-
_visitListEntryNode(node, visitor) {
|
|
38
|
-
const result = visitor(node);
|
|
39
|
-
if (result.before !== undefined) {
|
|
40
|
-
// Record that some nodes should be inserted before the given declaration. The declaration's
|
|
41
|
-
// parent's _visit call is responsible for performing this insertion.
|
|
42
|
-
this._before.set(result.node, result.before);
|
|
43
|
-
}
|
|
44
|
-
if (result.after !== undefined) {
|
|
45
|
-
// Same with nodes that should be inserted after.
|
|
46
|
-
this._after.set(result.node, result.after);
|
|
47
|
-
}
|
|
48
|
-
return result.node;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Visit types of nodes which don't have their own explicit visitor.
|
|
52
|
-
*/
|
|
53
|
-
visitOtherNode(node) {
|
|
54
|
-
return node;
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* @internal
|
|
58
|
-
*/
|
|
59
|
-
_visit(node, context) {
|
|
60
|
-
// First, visit the node. visitedNode starts off as `null` but should be set after visiting
|
|
61
|
-
// is completed.
|
|
62
|
-
let visitedNode = null;
|
|
63
|
-
node = ts.visitEachChild(node, child => this._visit(child, context), context);
|
|
64
|
-
if (ts.isClassDeclaration(node)) {
|
|
65
|
-
visitedNode =
|
|
66
|
-
this._visitListEntryNode(node, (node) => this.visitClassDeclaration(node));
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
visitedNode = this.visitOtherNode(node);
|
|
70
|
-
}
|
|
71
|
-
// If the visited node has a `statements` array then process them, maybe replacing the visited
|
|
72
|
-
// node and adding additional statements.
|
|
73
|
-
if (hasStatements(visitedNode)) {
|
|
74
|
-
visitedNode = this._maybeProcessStatements(visitedNode);
|
|
75
|
-
}
|
|
76
|
-
return visitedNode;
|
|
77
|
-
}
|
|
78
|
-
_maybeProcessStatements(node) {
|
|
79
|
-
// Shortcut - if every statement doesn't require nodes to be prepended or appended,
|
|
80
|
-
// this is a no-op.
|
|
81
|
-
if (node.statements.every(stmt => !this._before.has(stmt) && !this._after.has(stmt))) {
|
|
82
|
-
return node;
|
|
83
|
-
}
|
|
84
|
-
// There are statements to prepend, so clone the original node.
|
|
85
|
-
const clone = ts.getMutableClone(node);
|
|
86
|
-
// Build a new list of statements and patch it onto the clone.
|
|
87
|
-
const newStatements = [];
|
|
88
|
-
clone.statements.forEach(stmt => {
|
|
89
|
-
if (this._before.has(stmt)) {
|
|
90
|
-
newStatements.push(...this._before.get(stmt));
|
|
91
|
-
this._before.delete(stmt);
|
|
92
|
-
}
|
|
93
|
-
newStatements.push(stmt);
|
|
94
|
-
if (this._after.has(stmt)) {
|
|
95
|
-
newStatements.push(...this._after.get(stmt));
|
|
96
|
-
this._after.delete(stmt);
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
clone.statements = ts.createNodeArray(newStatements, node.statements.hasTrailingComma);
|
|
100
|
-
return clone;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
function hasStatements(node) {
|
|
104
|
-
const block = node;
|
|
105
|
-
return block.statements !== undefined && Array.isArray(block.statements);
|
|
106
|
-
}
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlzaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvdXRpbC9zcmMvdmlzaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQVlqQzs7R0FFRztBQUNILE1BQU0sVUFBVSxLQUFLLENBQ2pCLElBQU8sRUFBRSxPQUFnQixFQUFFLE9BQWlDO0lBQzlELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sT0FBZ0IsT0FBTztJQUE3QjtRQUNFOztXQUVHO1FBQ0ssWUFBTyxHQUFHLElBQUksR0FBRyxFQUEyQixDQUFDO1FBRXJEOztXQUVHO1FBQ0ssV0FBTSxHQUFHLElBQUksR0FBRyxFQUEyQixDQUFDO0lBdUZ0RCxDQUFDO0lBckZDOzs7T0FHRztJQUNILHFCQUFxQixDQUFDLElBQXlCO1FBRTdDLE9BQU8sRUFBQyxJQUFJLEVBQUMsQ0FBQztJQUNoQixDQUFDO0lBRU8sbUJBQW1CLENBQ3ZCLElBQU8sRUFBRSxPQUEyRDtRQUN0RSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUMvQiw0RkFBNEY7WUFDNUYscUVBQXFFO1lBQ3JFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzlDO1FBQ0QsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUM5QixpREFBaUQ7WUFDakQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxD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QUM7SUFDekMsT0FBTyxLQUFLLENBQUMsVUFBVSxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMzRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG4vKipcbiAqIFJlc3VsdCB0eXBlIG9mIHZpc2l0aW5nIGEgbm9kZSB0aGF0J3MgdHlwaWNhbGx5IGFuIGVudHJ5IGluIGEgbGlzdCwgd2hpY2ggYWxsb3dzIHNwZWNpZnlpbmcgdGhhdFxuICogbm9kZXMgc2hvdWxkIGJlIGFkZGVkIGJlZm9yZSB0aGUgdmlzaXRlZCBub2RlIGluIHRoZSBvdXRwdXQuXG4gKi9cbmV4cG9ydCB0eXBlIFZpc2l0TGlzdEVudHJ5UmVzdWx0PEIgZXh0ZW5kcyB0cy5Ob2RlLCBUIGV4dGVuZHMgQj4gPSB7XG4gIG5vZGU6IFQsXG4gIGJlZm9yZT86IEJbXSxcbiAgYWZ0ZXI/OiBCW10sXG59O1xuXG4vKipcbiAqIFZpc2l0IGEgbm9kZSB3aXRoIHRoZSBnaXZlbiB2aXNpdG9yIGFuZCByZXR1cm4gYSB0cmFuc2Zvcm1lZCBjb3B5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmlzaXQ8VCBleHRlbmRzIHRzLk5vZGU+KFxuICAgIG5vZGU6IFQsIHZpc2l0b3I6IFZpc2l0b3IsIGNvbnRleHQ6IHRzLlRyYW5zZm9ybWF0aW9uQ29udGV4dCk6IFQge1xuICByZXR1cm4gdmlzaXRvci5fdmlzaXQobm9kZSwgY29udGV4dCk7XG59XG5cbi8qKlxuICogQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgdmlzaXRvcnMsIHdoaWNoIHByb2Nlc3NlcyBjZXJ0YWluIG5vZGVzIHNwZWNpYWxseSB0byBhbGxvdyBpbnNlcnRpb25cbiAqIG9mIG90aGVyIG5vZGVzIGJlZm9yZSB0aGVtLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVmlzaXRvciB7XG4gIC8qKlxuICAgKiBNYXBzIHN0YXRlbWVudHMgdG8gYW4gYXJyYXkgb2Ygc3RhdGVtZW50cyB0aGF0IHNob3VsZCBiZSBpbnNlcnRlZCBiZWZvcmUgdGhlbS5cbiAgICovXG4gIHByaXZhdGUgX2JlZm9yZSA9IG5ldyBNYXA8dHMuTm9kZSwgdHMuU3RhdGVtZW50W10+KCk7XG5cbiAgLyoqXG4gICAqIE1hcHMgc3RhdGVtZW50cyB0byBhbiBhcnJheSBvZiBzdGF0ZW1lbnRzIHRoYXQgc2hvdWxkIGJlIGluc2VydGVkIGFmdGVyIHRoZW0uXG4gICAqL1xuICBwcml2YXRlIF9hZnRlciA9IG5ldyBNYXA8dHMuTm9kZSwgdHMuU3RhdGVtZW50W10+KCk7XG5cbiAgLyoqXG4gICAqIFZpc2l0IGEgY2xhc3MgZGVjbGFyYXRpb24sIHJldHVybmluZyBhdCBsZWFzdCB0aGUgdHJhbnNmb3JtZWQgZGVjbGFyYXRpb24gYW5kIG9wdGlvbmFsbHkgb3RoZXJcbiAgICogbm9kZXMgdG8gaW5zZXJ0IGJlZm9yZSB0aGUgZGVjbGFyYXRpb24uXG4gICAqL1xuICB2aXNpdENsYXNzRGVjbGFyYXRpb24obm9kZTogdHMuQ2xhc3NEZWNsYXJhdGlvbik6XG4gICAgICBWaXNpdExpc3RFbnRyeVJlc3VsdDx0cy5TdGF0ZW1lbnQsIHRzLkNsYXNzRGVjbGFyYXRpb24+IHtcbiAgICByZXR1cm4ge25vZGV9O1xuICB9XG5cbiAgcHJpdmF0ZSBfdmlzaXRMaXN0RW50cnlOb2RlPFQgZXh0ZW5kcyB0cy5TdGF0ZW1lbnQ+KFxuICAgICAgbm9kZTogVCwgdmlzaXRvcjogKG5vZGU6IFQpID0+IFZpc2l0TGlzdEVudHJ5UmVzdWx0PHRzLlN0YXRlbWVudCwgVD4pOiBUIHtcbiAgICBjb25zdCByZXN1bHQgPSB2aXNpdG9yKG5vZGUpO1xuICAgIGlmIChyZXN1bHQuYmVmb3JlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFJlY29yZCB0aGF0IHNvbWUgbm9kZXMgc2hvdWxkIGJlIGluc2VydGVkIGJlZm9yZSB0aGUgZ2l2ZW4gZGVjbGFyYXRpb24uIFRoZSBkZWNsYXJhdGlvbidzXG4gICAgICAvLyBwYXJlbnQncyBfdmlzaXQgY2FsbCBpcyByZXNwb25zaWJsZSBmb3IgcGVyZm9ybWluZyB0aGlzIGluc2VydGlvbi5cbiAgICAgIHRoaXMuX2JlZm9yZS5zZXQocmVzdWx0Lm5vZGUsIHJlc3VsdC5iZWZvcmUpO1xuICAgIH1cbiAgICBpZiAocmVzdWx0LmFmdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFNhbWUgd2l0aCBub2RlcyB0aGF0IHNob3VsZCBiZSBpbnNlcnRlZCBhZnRlci5cbiAgICAgIHRoaXMuX2FmdGVyLnNldChyZXN1bHQubm9kZSwgcmVzdWx0LmFmdGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5ub2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZpc2l0IHR5cGVzIG9mIG5vZGVzIHdoaWNoIGRvbid0IGhhdmUgdGhlaXIgb3duIGV4cGxpY2l0IHZpc2l0b3IuXG4gICAqL1xuICB2aXNpdE90aGVyTm9kZTxUIGV4dGVuZHMgdHMuTm9kZT4obm9kZTogVCk6IFQge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX3Zpc2l0PFQgZXh0ZW5kcyB0cy5Ob2RlPihub2RlOiBULCBjb250ZXh0OiB0cy5UcmFuc2Zvcm1hdGlvbkNvbnRleHQpOiBUIHtcbiAgICAvLyBGaXJzdCwgdmlzaXQgdGhlIG5vZGUuIHZpc2l0ZWROb2RlIHN0YXJ0cyBvZmYgYXMgYG51bGxgIGJ1dCBzaG91bGQgYmUgc2V0IGFmdGVyIHZpc2l0aW5nXG4gICAgLy8gaXMgY29tcGxldGVkLlxuICAgIGxldCB2aXNpdGVkTm9kZTogVHxudWxsID0gbnVsbDtcblxuICAgIG5vZGUgPSB0cy52aXNpdEVhY2hDaGlsZChub2RlLCBjaGlsZCA9PiB0aGlzLl92aXNpdChjaGlsZCwgY29udGV4dCksIGNvbnRleHQpIGFzIFQ7XG5cbiAgICBpZiAodHMuaXNDbGFzc0RlY2xhcmF0aW9uKG5vZGUpKSB7XG4gICAgICB2aXNpdGVkTm9kZSA9XG4gICAgICAgICAgdGhpcy5fdmlzaXRMaXN0RW50cnlOb2RlKFxuICAgICAgICAgICAgICBub2RlLCAobm9kZTogdHMuQ2xhc3NEZWNsYXJhdGlvbikgPT4gdGhpcy52aXNpdENsYXNzRGVjbGFyYXRpb24obm9kZSkpIGFzIHR5cGVvZiBub2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICB2aXNpdGVkTm9kZSA9IHRoaXMudmlzaXRPdGhlck5vZGUobm9kZSk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHZpc2l0ZWQgbm9kZSBoYXMgYSBgc3RhdGVtZW50c2AgYXJyYXkgdGhlbiBwcm9jZXNzIHRoZW0sIG1heWJlIHJlcGxhY2luZyB0aGUgdmlzaXRlZFxuICAgIC8vIG5vZGUgYW5kIGFkZGluZyBhZGRpdGlvbmFsIHN0YXRlbWVudHMuXG4gICAgaWYgKGhhc1N0YXRlbWVudHModmlzaXRlZE5vZGUpKSB7XG4gICAgICB2aXNpdGVkTm9kZSA9IHRoaXMuX21heWJlUHJvY2Vzc1N0YXRlbWVudHModmlzaXRlZE5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiB2aXNpdGVkTm9kZTtcbiAgfVxuXG4gIHByaXZhdGUgX21heWJlUHJvY2Vzc1N0YXRlbWVudHM8VCBleHRlbmRzIHRzLk5vZGUme3N0YXRlbWVudHM6IHRzLk5vZGVBcnJheTx0cy5TdGF0ZW1lbnQ+fT4oXG4gICAgICBub2RlOiBUKTogVCB7XG4gICAgLy8gU2hvcnRjdXQgLSBpZiBldmVyeSBzdGF0ZW1lbnQgZG9lc24ndCByZXF1aXJlIG5vZGVzIHRvIGJlIHByZXBlbmRlZCBvciBhcHBlbmRlZCxcbiAgICAvLyB0aGlzIGlzIGEgbm8tb3AuXG4gICAgaWYgKG5vZGUuc3RhdGVtZW50cy5ldmVyeShzdG10ID0+ICF0aGlzLl9iZWZvcmUuaGFzKHN0bXQpICYmICF0aGlzLl9hZnRlci5oYXMoc3RtdCkpKSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICAvLyBUaGVyZSBhcmUgc3RhdGVtZW50cyB0byBwcmVwZW5kLCBzbyBjbG9uZSB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICBjb25zdCBjbG9uZSA9IHRzLmdldE11dGFibGVDbG9uZShub2RlKTtcblxuICAgIC8vIEJ1aWxkIGEgbmV3IGxpc3Qgb2Ygc3RhdGVtZW50cyBhbmQgcGF0Y2ggaXQgb250byB0aGUgY2xvbmUuXG4gICAgY29uc3QgbmV3U3RhdGVtZW50czogdHMuU3RhdGVtZW50W10gPSBbXTtcbiAgICBjbG9uZS5zdGF0ZW1lbnRzLmZvckVhY2goc3RtdCA9PiB7XG4gICAgICBpZiAodGhpcy5fYmVmb3JlLmhhcyhzdG10KSkge1xuICAgICAgICBuZXdTdGF0ZW1lbnRzLnB1c2goLi4uKHRoaXMuX2JlZm9yZS5nZXQoc3RtdCkhIGFzIHRzLlN0YXRlbWVudFtdKSk7XG4gICAgICAgIHRoaXMuX2JlZm9yZS5kZWxldGUoc3RtdCk7XG4gICAgICB9XG4gICAgICBuZXdTdGF0ZW1lbnRzLnB1c2goc3RtdCk7XG4gICAgICBpZiAodGhpcy5fYWZ0ZXIuaGFzKHN0bXQpKSB7XG4gICAgICAgIG5ld1N0YXRlbWVudHMucHVzaCguLi4odGhpcy5fYWZ0ZXIuZ2V0KHN0bXQpISBhcyB0cy5TdGF0ZW1lbnRbXSkpO1xuICAgICAgICB0aGlzLl9hZnRlci5kZWxldGUoc3RtdCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY2xvbmUuc3RhdGVtZW50cyA9IHRzLmNyZWF0ZU5vZGVBcnJheShuZXdTdGF0ZW1lbnRzLCBub2RlLnN0YXRlbWVudHMuaGFzVHJhaWxpbmdDb21tYSk7XG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhc1N0YXRlbWVudHMobm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgdHMuTm9kZSZ7c3RhdGVtZW50czogdHMuTm9kZUFycmF5PHRzLlN0YXRlbWVudD59IHtcbiAgY29uc3QgYmxvY2sgPSBub2RlIGFzIHtzdGF0ZW1lbnRzPzogYW55fTtcbiAgcmV0dXJuIGJsb2NrLnN0YXRlbWVudHMgIT09IHVuZGVmaW5lZCAmJiBBcnJheS5pc0FycmF5KGJsb2NrLnN0YXRlbWVudHMpO1xufVxuIl19
|
|
File without changes
|
package/src/perform_compile.mjs
DELETED
|
@@ -1,275 +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 { isSyntaxError } from '@angular/compiler';
|
|
9
|
-
import * as ts from 'typescript';
|
|
10
|
-
import { absoluteFrom, getFileSystem, relative, resolve } from '../src/ngtsc/file_system';
|
|
11
|
-
import { replaceTsWithNgInErrors } from './ngtsc/diagnostics';
|
|
12
|
-
import * as api from './transformers/api';
|
|
13
|
-
import * as ng from './transformers/entry_points';
|
|
14
|
-
import { createMessageDiagnostic } from './transformers/util';
|
|
15
|
-
export function filterErrorsAndWarnings(diagnostics) {
|
|
16
|
-
return diagnostics.filter(d => d.category !== ts.DiagnosticCategory.Message);
|
|
17
|
-
}
|
|
18
|
-
const defaultFormatHost = {
|
|
19
|
-
getCurrentDirectory: () => ts.sys.getCurrentDirectory(),
|
|
20
|
-
getCanonicalFileName: fileName => fileName,
|
|
21
|
-
getNewLine: () => ts.sys.newLine
|
|
22
|
-
};
|
|
23
|
-
function displayFileName(fileName, host) {
|
|
24
|
-
return relative(resolve(host.getCurrentDirectory()), resolve(host.getCanonicalFileName(fileName)));
|
|
25
|
-
}
|
|
26
|
-
export function formatDiagnosticPosition(position, host = defaultFormatHost) {
|
|
27
|
-
return `${displayFileName(position.fileName, host)}(${position.line + 1},${position.column + 1})`;
|
|
28
|
-
}
|
|
29
|
-
export function flattenDiagnosticMessageChain(chain, host = defaultFormatHost, indent = 0) {
|
|
30
|
-
const newLine = host.getNewLine();
|
|
31
|
-
let result = '';
|
|
32
|
-
if (indent) {
|
|
33
|
-
result += newLine;
|
|
34
|
-
for (let i = 0; i < indent; i++) {
|
|
35
|
-
result += ' ';
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
result += chain.messageText;
|
|
39
|
-
const position = chain.position;
|
|
40
|
-
// add position if available, and we are not at the depest frame
|
|
41
|
-
if (position && indent !== 0) {
|
|
42
|
-
result += ` at ${formatDiagnosticPosition(position, host)}`;
|
|
43
|
-
}
|
|
44
|
-
indent++;
|
|
45
|
-
if (chain.next) {
|
|
46
|
-
for (const kid of chain.next) {
|
|
47
|
-
result += flattenDiagnosticMessageChain(kid, host, indent);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
return result;
|
|
51
|
-
}
|
|
52
|
-
export function formatDiagnostic(diagnostic, host = defaultFormatHost) {
|
|
53
|
-
let result = '';
|
|
54
|
-
const newLine = host.getNewLine();
|
|
55
|
-
const span = diagnostic.span;
|
|
56
|
-
if (span) {
|
|
57
|
-
result += `${formatDiagnosticPosition({ fileName: span.start.file.url, line: span.start.line, column: span.start.col }, host)}: `;
|
|
58
|
-
}
|
|
59
|
-
else if (diagnostic.position) {
|
|
60
|
-
result += `${formatDiagnosticPosition(diagnostic.position, host)}: `;
|
|
61
|
-
}
|
|
62
|
-
if (diagnostic.span && diagnostic.span.details) {
|
|
63
|
-
result += `${diagnostic.span.details}, ${diagnostic.messageText}${newLine}`;
|
|
64
|
-
}
|
|
65
|
-
else if (diagnostic.chain) {
|
|
66
|
-
result += `${flattenDiagnosticMessageChain(diagnostic.chain, host)}.${newLine}`;
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
result += `${diagnostic.messageText}${newLine}`;
|
|
70
|
-
}
|
|
71
|
-
return result;
|
|
72
|
-
}
|
|
73
|
-
export function formatDiagnostics(diags, host = defaultFormatHost) {
|
|
74
|
-
if (diags && diags.length) {
|
|
75
|
-
return diags
|
|
76
|
-
.map(diagnostic => {
|
|
77
|
-
if (api.isTsDiagnostic(diagnostic)) {
|
|
78
|
-
return replaceTsWithNgInErrors(ts.formatDiagnosticsWithColorAndContext([diagnostic], host));
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
return formatDiagnostic(diagnostic, host);
|
|
82
|
-
}
|
|
83
|
-
})
|
|
84
|
-
.join('');
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
return '';
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
export function calcProjectFileAndBasePath(project, host = getFileSystem()) {
|
|
91
|
-
const absProject = host.resolve(project);
|
|
92
|
-
const projectIsDir = host.lstat(absProject).isDirectory();
|
|
93
|
-
const projectFile = projectIsDir ? host.join(absProject, 'tsconfig.json') : absProject;
|
|
94
|
-
const projectDir = projectIsDir ? absProject : host.dirname(absProject);
|
|
95
|
-
const basePath = host.resolve(projectDir);
|
|
96
|
-
return { projectFile, basePath };
|
|
97
|
-
}
|
|
98
|
-
export function readConfiguration(project, existingOptions, host = getFileSystem()) {
|
|
99
|
-
var _a;
|
|
100
|
-
try {
|
|
101
|
-
const fs = getFileSystem();
|
|
102
|
-
const readConfigFile = (configFile) => ts.readConfigFile(configFile, file => host.readFile(host.resolve(file)));
|
|
103
|
-
const readAngularCompilerOptions = (configFile, parentOptions = {}) => {
|
|
104
|
-
const { config, error } = readConfigFile(configFile);
|
|
105
|
-
if (error) {
|
|
106
|
-
// Errors are handled later on by 'parseJsonConfigFileContent'
|
|
107
|
-
return parentOptions;
|
|
108
|
-
}
|
|
109
|
-
// we are only interested into merging 'angularCompilerOptions' as
|
|
110
|
-
// other options like 'compilerOptions' are merged by TS
|
|
111
|
-
const existingNgCompilerOptions = Object.assign(Object.assign({}, config.angularCompilerOptions), parentOptions);
|
|
112
|
-
if (config.extends && typeof config.extends === 'string') {
|
|
113
|
-
const extendedConfigPath = getExtendedConfigPath(configFile, config.extends, host, fs);
|
|
114
|
-
if (extendedConfigPath !== null) {
|
|
115
|
-
// Call readAngularCompilerOptions recursively to merge NG Compiler options
|
|
116
|
-
return readAngularCompilerOptions(extendedConfigPath, existingNgCompilerOptions);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
return existingNgCompilerOptions;
|
|
120
|
-
};
|
|
121
|
-
const { projectFile, basePath } = calcProjectFileAndBasePath(project, host);
|
|
122
|
-
const configFileName = host.resolve(host.pwd(), projectFile);
|
|
123
|
-
const { config, error } = readConfigFile(projectFile);
|
|
124
|
-
if (error) {
|
|
125
|
-
return {
|
|
126
|
-
project,
|
|
127
|
-
errors: [error],
|
|
128
|
-
rootNames: [],
|
|
129
|
-
options: {},
|
|
130
|
-
emitFlags: api.EmitFlags.Default
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
const existingCompilerOptions = Object.assign(Object.assign({ genDir: basePath, basePath }, readAngularCompilerOptions(configFileName)), existingOptions);
|
|
134
|
-
const parseConfigHost = createParseConfigHost(host, fs);
|
|
135
|
-
const { options, errors, fileNames: rootNames, projectReferences } = ts.parseJsonConfigFileContent(config, parseConfigHost, basePath, existingCompilerOptions, configFileName);
|
|
136
|
-
// Coerce to boolean as `enableIvy` can be `ngtsc|true|false|undefined` here.
|
|
137
|
-
options.enableIvy = !!((_a = options.enableIvy) !== null && _a !== void 0 ? _a : true);
|
|
138
|
-
let emitFlags = api.EmitFlags.Default;
|
|
139
|
-
if (!(options.skipMetadataEmit || options.flatModuleOutFile)) {
|
|
140
|
-
emitFlags |= api.EmitFlags.Metadata;
|
|
141
|
-
}
|
|
142
|
-
if (options.skipTemplateCodegen) {
|
|
143
|
-
emitFlags = emitFlags & ~api.EmitFlags.Codegen;
|
|
144
|
-
}
|
|
145
|
-
return { project: projectFile, rootNames, projectReferences, options, errors, emitFlags };
|
|
146
|
-
}
|
|
147
|
-
catch (e) {
|
|
148
|
-
const errors = [{
|
|
149
|
-
category: ts.DiagnosticCategory.Error,
|
|
150
|
-
messageText: e.stack,
|
|
151
|
-
file: undefined,
|
|
152
|
-
start: undefined,
|
|
153
|
-
length: undefined,
|
|
154
|
-
source: 'angular',
|
|
155
|
-
code: api.UNKNOWN_ERROR_CODE,
|
|
156
|
-
}];
|
|
157
|
-
return { project: '', errors, rootNames: [], options: {}, emitFlags: api.EmitFlags.Default };
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
function createParseConfigHost(host, fs = getFileSystem()) {
|
|
161
|
-
return {
|
|
162
|
-
fileExists: host.exists.bind(host),
|
|
163
|
-
readDirectory: ts.sys.readDirectory,
|
|
164
|
-
readFile: host.readFile.bind(host),
|
|
165
|
-
useCaseSensitiveFileNames: fs.isCaseSensitive(),
|
|
166
|
-
};
|
|
167
|
-
}
|
|
168
|
-
function getExtendedConfigPath(configFile, extendsValue, host, fs) {
|
|
169
|
-
const result = getExtendedConfigPathWorker(configFile, extendsValue, host, fs);
|
|
170
|
-
if (result !== null) {
|
|
171
|
-
return result;
|
|
172
|
-
}
|
|
173
|
-
// Try to resolve the paths with a json extension append a json extension to the file in case if
|
|
174
|
-
// it is missing and the resolution failed. This is to replicate TypeScript behaviour, see:
|
|
175
|
-
// https://github.com/microsoft/TypeScript/blob/294a5a7d784a5a95a8048ee990400979a6bc3a1c/src/compiler/commandLineParser.ts#L2806
|
|
176
|
-
return getExtendedConfigPathWorker(configFile, `${extendsValue}.json`, host, fs);
|
|
177
|
-
}
|
|
178
|
-
function getExtendedConfigPathWorker(configFile, extendsValue, host, fs) {
|
|
179
|
-
if (extendsValue.startsWith('.') || fs.isRooted(extendsValue)) {
|
|
180
|
-
const extendedConfigPath = host.resolve(host.dirname(configFile), extendsValue);
|
|
181
|
-
if (host.exists(extendedConfigPath)) {
|
|
182
|
-
return extendedConfigPath;
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
else {
|
|
186
|
-
const parseConfigHost = createParseConfigHost(host, fs);
|
|
187
|
-
// Path isn't a rooted or relative path, resolve like a module.
|
|
188
|
-
const { resolvedModule, } = ts.nodeModuleNameResolver(extendsValue, configFile, { moduleResolution: ts.ModuleResolutionKind.NodeJs, resolveJsonModule: true }, parseConfigHost);
|
|
189
|
-
if (resolvedModule) {
|
|
190
|
-
return absoluteFrom(resolvedModule.resolvedFileName);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
return null;
|
|
194
|
-
}
|
|
195
|
-
export function exitCodeFromResult(diags) {
|
|
196
|
-
if (!diags || filterErrorsAndWarnings(diags).length === 0) {
|
|
197
|
-
// If we have a result and didn't get any errors, we succeeded.
|
|
198
|
-
return 0;
|
|
199
|
-
}
|
|
200
|
-
// Return 2 if any of the errors were unknown.
|
|
201
|
-
return diags.some(d => d.source === 'angular' && d.code === api.UNKNOWN_ERROR_CODE) ? 2 : 1;
|
|
202
|
-
}
|
|
203
|
-
export function performCompilation({ rootNames, options, host, oldProgram, emitCallback, mergeEmitResultsCallback, gatherDiagnostics = defaultGatherDiagnostics, customTransformers, emitFlags = api.EmitFlags.Default, modifiedResourceFiles = null }) {
|
|
204
|
-
let program;
|
|
205
|
-
let emitResult;
|
|
206
|
-
let allDiagnostics = [];
|
|
207
|
-
try {
|
|
208
|
-
if (!host) {
|
|
209
|
-
host = ng.createCompilerHost({ options });
|
|
210
|
-
}
|
|
211
|
-
if (modifiedResourceFiles) {
|
|
212
|
-
host.getModifiedResourceFiles = () => modifiedResourceFiles;
|
|
213
|
-
}
|
|
214
|
-
program = ng.createProgram({ rootNames, host, options, oldProgram });
|
|
215
|
-
const beforeDiags = Date.now();
|
|
216
|
-
allDiagnostics.push(...gatherDiagnostics(program));
|
|
217
|
-
if (options.diagnostics) {
|
|
218
|
-
const afterDiags = Date.now();
|
|
219
|
-
allDiagnostics.push(createMessageDiagnostic(`Time for diagnostics: ${afterDiags - beforeDiags}ms.`));
|
|
220
|
-
}
|
|
221
|
-
if (!hasErrors(allDiagnostics)) {
|
|
222
|
-
emitResult =
|
|
223
|
-
program.emit({ emitCallback, mergeEmitResultsCallback, customTransformers, emitFlags });
|
|
224
|
-
allDiagnostics.push(...emitResult.diagnostics);
|
|
225
|
-
return { diagnostics: allDiagnostics, program, emitResult };
|
|
226
|
-
}
|
|
227
|
-
return { diagnostics: allDiagnostics, program };
|
|
228
|
-
}
|
|
229
|
-
catch (e) {
|
|
230
|
-
let errMsg;
|
|
231
|
-
let code;
|
|
232
|
-
if (isSyntaxError(e)) {
|
|
233
|
-
// don't report the stack for syntax errors as they are well known errors.
|
|
234
|
-
errMsg = e.message;
|
|
235
|
-
code = api.DEFAULT_ERROR_CODE;
|
|
236
|
-
}
|
|
237
|
-
else {
|
|
238
|
-
errMsg = e.stack;
|
|
239
|
-
// It is not a syntax error we might have a program with unknown state, discard it.
|
|
240
|
-
program = undefined;
|
|
241
|
-
code = api.UNKNOWN_ERROR_CODE;
|
|
242
|
-
}
|
|
243
|
-
allDiagnostics.push({ category: ts.DiagnosticCategory.Error, messageText: errMsg, code, source: api.SOURCE });
|
|
244
|
-
return { diagnostics: allDiagnostics, program };
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
export function defaultGatherDiagnostics(program) {
|
|
248
|
-
const allDiagnostics = [];
|
|
249
|
-
function checkDiagnostics(diags) {
|
|
250
|
-
if (diags) {
|
|
251
|
-
allDiagnostics.push(...diags);
|
|
252
|
-
return !hasErrors(diags);
|
|
253
|
-
}
|
|
254
|
-
return true;
|
|
255
|
-
}
|
|
256
|
-
let checkOtherDiagnostics = true;
|
|
257
|
-
// Check parameter diagnostics
|
|
258
|
-
checkOtherDiagnostics = checkOtherDiagnostics &&
|
|
259
|
-
checkDiagnostics([...program.getTsOptionDiagnostics(), ...program.getNgOptionDiagnostics()]);
|
|
260
|
-
// Check syntactic diagnostics
|
|
261
|
-
checkOtherDiagnostics =
|
|
262
|
-
checkOtherDiagnostics && checkDiagnostics(program.getTsSyntacticDiagnostics());
|
|
263
|
-
// Check TypeScript semantic and Angular structure diagnostics
|
|
264
|
-
checkOtherDiagnostics =
|
|
265
|
-
checkOtherDiagnostics &&
|
|
266
|
-
checkDiagnostics([...program.getTsSemanticDiagnostics(), ...program.getNgStructuralDiagnostics()]);
|
|
267
|
-
// Check Angular semantic diagnostics
|
|
268
|
-
checkOtherDiagnostics =
|
|
269
|
-
checkOtherDiagnostics && checkDiagnostics(program.getNgSemanticDiagnostics());
|
|
270
|
-
return allDiagnostics;
|
|
271
|
-
}
|
|
272
|
-
function hasErrors(diags) {
|
|
273
|
-
return diags.some(d => d.category === ts.DiagnosticCategory.Error);
|
|
274
|
-
}
|
|
275
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyZm9ybV9jb21waWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9wZXJmb3JtX2NvbXBpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLGFBQWEsRUFBVyxNQUFNLG1CQUFtQixDQUFDO0FBQzFELE9BQU8sS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpDLE9BQU8sRUFBQyxZQUFZLEVBQThCLGFBQWEsRUFBc0IsUUFBUSxFQUFFLE9BQU8sRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBR3hJLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sS0FBSyxHQUFHLE1BQU0sb0JBQW9CLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUk1RCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsV0FBd0I7SUFDOUQsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDL0UsQ0FBQztBQUVELE1BQU0saUJBQWlCLEdBQTZCO0lBQ2xELG1CQUFtQixFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUU7SUFDdkQsb0JBQW9CLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRO0lBQzFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU87Q0FDakMsQ0FBQztBQUVGLFNBQVMsZUFBZSxDQUFDLFFBQWdCLEVBQUUsSUFBOEI7SUFDdkUsT0FBTyxRQUFRLENBQ1gs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RCxxQkFBcUI7UUFDakIscUJBQXFCO1lBQ3JCLGdCQUFnQixDQUNaLENBQUMsR0FBRyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQywwQkFBMEIsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUUxRixxQ0FBcUM7SUFDckMscUJBQXFCO1FBQ2pCLHFCQUFxQixJQUFJLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsRUFBaUIsQ0FBQyxDQUFDO0lBRWpHLE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxLQUFrQjtJQUNuQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7aXNTeW50YXhFcnJvciwgUG9zaXRpb259IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge2Fic29sdXRlRnJvbSwgQWJzb2x1dGVGc1BhdGgsIEZpbGVTeXN0ZW0sIGdldEZpbGVTeXN0ZW0sIFJlYWRvbmx5RmlsZVN5c3RlbSwgcmVsYXRpdmUsIHJlc29sdmV9IGZyb20gJy4uL3NyYy9uZ3RzYy9maWxlX3N5c3RlbSc7XG5pbXBvcnQge05nQ29tcGlsZXJPcHRpb25zfSBmcm9tICcuL25ndHNjL2NvcmUvYXBpJztcblxuaW1wb3J0IHtyZXBsYWNlVHNXaXRoTmdJbkVycm9yc30gZnJvbSAnLi9uZ3RzYy9kaWFnbm9zdGljcyc7XG5pbXBvcnQgKiBhcyBhcGkgZnJvbSAnLi90cmFuc2Zvcm1lcnMvYXBpJztcbmltcG9ydCAqIGFzIG5nIGZyb20gJy4vdHJhbnNmb3JtZXJzL2VudHJ5X3BvaW50cyc7XG5pbXBvcnQge2NyZWF0ZU1lc3NhZ2VEaWFnbm9zdGljfSBmcm9tICcuL3RyYW5zZm9ybWVycy91dGlsJztcblxuZXhwb3J0IHR5cGUgRGlhZ25vc3RpY3MgPSBSZWFkb25seUFycmF5PHRzLkRpYWdub3N0aWN8YXBpLkRpYWdub3N0aWM+O1xuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRXJyb3JzQW5kV2FybmluZ3MoZGlhZ25vc3RpY3M6IERpYWdub3N0aWNzKTogRGlhZ25vc3RpY3Mge1xuICByZXR1cm4gZGlhZ25vc3RpY3MuZmlsdGVyKGQgPT4gZC5jYXRlZ29yeSAhPT0gdHMuRGlhZ25vc3RpY0NhdGVnb3J5Lk1lc3NhZ2UpO1xufVxuXG5jb25zdCBkZWZhdWx0Rm9ybWF0SG9zdDogdHMuRm9ybWF0RGlhZ25vc3RpY3NIb3N0ID0ge1xuICBnZXRDdXJyZW50RGlyZWN0b3J5OiAoKSA9PiB0cy5zeXMuZ2V0Q3VycmVudERpcmVjdG9yeSgpLFxuICBnZXRDYW5vbmljYWxGaWxlTmFtZTogZmlsZU5hbWUgPT4gZmlsZU5hbWUsXG4gIGdldE5ld0xpbmU6ICgpID0+IHRzLnN5cy5uZXdMaW5lXG59O1xuXG5mdW5jdGlvbiBkaXNwbGF5RmlsZU5hbWUoZmlsZU5hbWU6IHN0cmluZywgaG9zdDogdHMuRm9ybWF0RGlhZ25vc3RpY3NIb3N0KTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlbGF0aXZlKFxuICAgICAgcmVzb2x2ZShob3N0LmdldEN1cnJlbnREaXJlY3RvcnkoKSksIHJlc29sdmUoaG9zdC5nZXRDYW5vbmljYWxGaWxlTmFtZShmaWxlTmFtZSkpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERpYWdub3N0aWNQb3NpdGlvbihcbiAgICBwb3NpdGlvbjogUG9zaXRpb24sIGhvc3Q6IHRzLkZvcm1hdERpYWdub3N0aWNzSG9zdCA9IGRlZmF1bHRGb3JtYXRIb3N0KTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke2Rpc3BsYXlGaWxlTmFtZShwb3NpdGlvbi5maWxlTmFtZSwgaG9zdCl9KCR7cG9zaXRpb24ubGluZSArIDF9LCR7cG9zaXRpb24uY29sdW1uICsgMX0pYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW5EaWFnbm9zdGljTWVzc2FnZUNoYWluKFxuICAgIGNoYWluOiBhcGkuRGlhZ25vc3RpY01lc3NhZ2VDaGFpbiwgaG9zdDogdHMuRm9ybWF0RGlhZ25vc3RpY3NIb3N0ID0gZGVmYXVsdEZvcm1hdEhvc3QsXG4gICAgaW5kZW50ID0gMCk6IHN0cmluZyB7XG4gIGNvbnN0IG5ld0xpbmUgPSBob3N0LmdldE5ld0xpbmUoKTtcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBpZiAoaW5kZW50KSB7XG4gICAgcmVzdWx0ICs9IG5ld0xpbmU7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGVudDsgaSsrKSB7XG4gICAgICByZXN1bHQgKz0gJyAgJztcbiAgICB9XG4gIH1cbiAgcmVzdWx0ICs9IGNoYWluLm1lc3NhZ2VUZXh0O1xuXG4gIGNvbnN0IHBvc2l0aW9uID0gY2hhaW4ucG9zaXRpb247XG4gIC8vIGFkZCBwb3NpdGlvbiBpZiBhdmFpbGFibGUsIGFuZCB3ZSBhcmUgbm90IGF0IHRoZSBkZXBlc3QgZnJhbWVcbiAgaWYgKHBvc2l0aW9uICYmIGluZGVudCAhPT0gMCkge1xuICAgIHJlc3VsdCArPSBgIGF0ICR7Zm9ybWF0RGlhZ25vc3RpY1Bvc2l0aW9uKHBvc2l0aW9uLCBob3N0KX1gO1xuICB9XG5cbiAgaW5kZW50Kys7XG4gIGlmIChjaGFpbi5uZXh0KSB7XG4gICAgZm9yIChjb25zdCBraWQgb2YgY2hhaW4ubmV4dCkge1xuICAgICAgcmVzdWx0ICs9IGZsYXR0ZW5EaWFnbm9zdGljTWVzc2FnZUNoYWluKGtpZCwgaG9zdCwgaW5kZW50KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERpYWdub3N0aWMoXG4gICAgZGlhZ25vc3RpYzogYXBpLkRpYWdub3N0aWMsIGhvc3Q6IHRzLkZvcm1hdERpYWdub3N0aWNzSG9zdCA9IGRlZmF1bHRGb3JtYXRIb3N0KSB7XG4gIGxldCByZXN1bHQgPSAnJztcbiAgY29uc3QgbmV3TGluZSA9IGhvc3QuZ2V0TmV3TGluZSgpO1xuICBjb25zdCBzcGFuID0gZGlhZ25vc3RpYy5zcGFuO1xuICBpZiAoc3Bhbikge1xuICAgIHJlc3VsdCArPSBgJHtcbiAgICAgICAgZm9ybWF0RGlhZ25vc3RpY1Bvc2l0aW9uKFxuICAgICAgICAgICAge2ZpbGVOYW1lOiBzcGFuLnN0YXJ0LmZpbGUudXJsLCBsaW5lOiBzcGFuLnN0YXJ0LmxpbmUsIGNvbHVtbjogc3Bhbi5zdGFydC5jb2x9LFxuICAgICAgICAgICAgaG9zdCl9OiBgO1xuICB9IGVsc2UgaWYgKGRpYWdub3N0aWMucG9zaXRpb24pIHtcbiAgICByZXN1bHQgKz0gYCR7Zm9ybWF0RGlhZ25vc3RpY1Bvc2l0aW9uKGRpYWdub3N0aWMucG9zaXRpb24sIGhvc3QpfTogYDtcbiAgfVxuICBpZiAoZGlhZ25vc3RpYy5zcGFuICYmIGRpYWdub3N0aWMuc3Bhbi5kZXRhaWxzKSB7XG4gICAgcmVzdWx0ICs9IGAke2RpYWdub3N0aWMuc3Bhbi5kZXRhaWxzfSwgJHtkaWFnbm9zdGljLm1lc3NhZ2VUZXh0fSR7bmV3TGluZX1gO1xuICB9IGVsc2UgaWYgKGRpYWdub3N0aWMuY2hhaW4pIHtcbiAgICByZXN1bHQgKz0gYCR7ZmxhdHRlbkRpYWdub3N0aWNNZXNzYWdlQ2hhaW4oZGlhZ25vc3RpYy5jaGFpbiwgaG9zdCl9LiR7bmV3TGluZX1gO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCArPSBgJHtkaWFnbm9zdGljLm1lc3NhZ2VUZXh0fSR7bmV3TGluZX1gO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREaWFnbm9zdGljcyhcbiAgICBkaWFnczogRGlhZ25vc3RpY3MsIGhvc3Q6IHRzLkZvcm1hdERpYWdub3N0aWNzSG9zdCA9IGRlZmF1bHRGb3JtYXRIb3N0KTogc3RyaW5nIHtcbiAgaWYgKGRpYWdzICYmIGRpYWdzLmxlbmd0aCkge1xuICAgIHJldHVybiBkaWFnc1xuICAgICAgICAubWFwKGRpYWdub3N0aWMgPT4ge1xuICAgICAgICAgIGlmIChhcGkuaXNUc0RpYWdub3N0aWMoZGlhZ25vc3RpYykpIHtcbiAgICAgICAgICAgIHJldHVybiByZXBsYWNlVHNXaXRoTmdJbkVycm9ycyhcbiAgICAgICAgICAgICAgICB0cy5mb3JtYXREaWFnbm9zdGljc1dpdGhDb2xvckFuZENvbnRleHQoW2RpYWdub3N0aWNdLCBob3N0KSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXREaWFnbm9zdGljKGRpYWdub3N0aWMsIGhvc3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oJycpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAnJztcbiAgfVxufVxuXG4vKiogVXNlZCB0byByZWFkIGNvbmZpZ3VyYXRpb24gZmlsZXMuICovXG5leHBvcnQgdHlwZSBDb25maWd1cmF0aW9uSG9zdCA9IFBpY2s8XG4gICAgUmVhZG9ubHlGaWxlU3lzdGVtLCAncmVhZEZpbGUnfCdleGlzdHMnfCdsc3RhdCd8J3Jlc29sdmUnfCdqb2luJ3wnZGlybmFtZSd8J2V4dG5hbWUnfCdwd2QnPjtcblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRDb25maWd1cmF0aW9uIHtcbiAgcHJvamVjdDogc3RyaW5nO1xuICBvcHRpb25zOiBhcGkuQ29tcGlsZXJPcHRpb25zO1xuICByb290TmFtZXM6IHN0cmluZ1tdO1xuICBwcm9qZWN0UmVmZXJlbmNlcz86IHJlYWRvbmx5IHRzLlByb2plY3RSZWZlcmVuY2VbXXx1bmRlZmluZWQ7XG4gIGVtaXRGbGFnczogYXBpLkVtaXRGbGFncztcbiAgZXJyb3JzOiB0cy5EaWFnbm9zdGljW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxjUHJvamVjdEZpbGVBbmRCYXNlUGF0aChcbiAgICBwcm9qZWN0OiBzdHJpbmcsIGhvc3Q6IENvbmZpZ3VyYXRpb25Ib3N0ID0gZ2V0RmlsZVN5c3RlbSgpKTpcbiAgICB7cHJvamVjdEZpbGU6IEFic29sdXRlRnNQYXRoLCBiYXNlUGF0aDogQWJzb2x1dGVGc1BhdGh9IHtcbiAgY29uc3QgYWJzUHJvamVjdCA9IGhvc3QucmVzb2x2ZShwcm9qZWN0KTtcbiAgY29uc3QgcHJvamVjdElzRGlyID0gaG9zdC5sc3RhdChhYnNQcm9qZWN0KS5pc0RpcmVjdG9yeSgpO1xuICBjb25zdCBwcm9qZWN0RmlsZSA9IHByb2plY3RJc0RpciA/IGhvc3Quam9pbihhYnNQcm9qZWN0LCAndHNjb25maWcuanNvbicpIDogYWJzUHJvamVjdDtcbiAgY29uc3QgcHJvamVjdERpciA9IHByb2plY3RJc0RpciA/IGFic1Byb2plY3QgOiBob3N0LmRpcm5hbWUoYWJzUHJvamVjdCk7XG4gIGNvbnN0IGJhc2VQYXRoID0gaG9zdC5yZXNvbHZlKHByb2plY3REaXIpO1xuICByZXR1cm4ge3Byb2plY3RGaWxlLCBiYXNlUGF0aH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkQ29uZmlndXJhdGlvbihcbiAgICBwcm9qZWN0OiBzdHJpbmcsIGV4aXN0aW5nT3B0aW9ucz86IGFwaS5Db21waWxlck9wdGlvbnMsXG4gICAgaG9zdDogQ29uZmlndXJhdGlvbkhvc3QgPSBnZXRGaWxlU3lzdGVtKCkpOiBQYXJzZWRDb25maWd1cmF0aW9uIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBmcyA9IGdldEZpbGVTeXN0ZW0oKTtcblxuICAgIGNvbnN0IHJlYWRDb25maWdGaWxlID0gKGNvbmZpZ0ZpbGU6IHN0cmluZykgPT5cbiAgICAgICAgdHMucmVhZENvbmZpZ0ZpbGUoY29uZmlnRmlsZSwgZmlsZSA9PiBob3N0LnJlYWRGaWxlKGhvc3QucmVzb2x2ZShmaWxlKSkpO1xuICAgIGNvbnN0IHJlYWRBbmd1bGFyQ29tcGlsZXJPcHRpb25zID1cbiAgICAgICAgKGNvbmZpZ0ZpbGU6IHN0cmluZywgcGFyZW50T3B0aW9uczogTmdDb21waWxlck9wdGlvbnMgPSB7fSk6IE5nQ29tcGlsZXJPcHRpb25zID0+IHtcbiAgICAgICAgICBjb25zdCB7Y29uZmlnLCBlcnJvcn0gPSByZWFkQ29uZmlnRmlsZShjb25maWdGaWxlKTtcblxuICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgLy8gRXJyb3JzIGFyZSBoYW5kbGVkIGxhdGVyIG9uIGJ5ICdwYXJzZUpzb25Db25maWdGaWxlQ29udGVudCdcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnRPcHRpb25zO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW50byBtZXJnaW5nICdhbmd1bGFyQ29tcGlsZXJPcHRpb25zJyBhc1xuICAgICAgICAgIC8vIG90aGVyIG9wdGlvbnMgbGlrZSAnY29tcGlsZXJPcHRpb25zJyBhcmUgbWVyZ2VkIGJ5IFRTXG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdOZ0NvbXBpbGVyT3B0aW9ucyA9IHsuLi5jb25maWcuYW5ndWxhckNvbXBpbGVyT3B0aW9ucywgLi4ucGFyZW50T3B0aW9uc307XG5cbiAgICAgICAgICBpZiAoY29uZmlnLmV4dGVuZHMgJiYgdHlwZW9mIGNvbmZpZy5leHRlbmRzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3QgZXh0ZW5kZWRDb25maWdQYXRoID0gZ2V0RXh0ZW5kZWRDb25maWdQYXRoKFxuICAgICAgICAgICAgICAgIGNvbmZpZ0ZpbGUsIGNvbmZpZy5leHRlbmRzLCBob3N0LCBmcyxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChleHRlbmRlZENvbmZpZ1BhdGggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gQ2FsbCByZWFkQW5ndWxhckNvbXBpbGVyT3B0aW9ucyByZWN1cnNpdmVseSB0byBtZXJnZSBORyBDb21waWxlciBvcHRpb25zXG4gICAgICAgICAgICAgIHJldHVybiByZWFkQW5ndWxhckNvbXBpbGVyT3B0aW9ucyhleHRlbmRlZENvbmZpZ1BhdGgsIGV4aXN0aW5nTmdDb21waWxlck9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBleGlzdGluZ05nQ29tcGlsZXJPcHRpb25zO1xuICAgICAgICB9O1xuXG4gICAgY29uc3Qge3Byb2plY3RGaWxlLCBiYXNlUGF0aH0gPSBjYWxjUHJvamVjdEZpbGVBbmRCYXNlUGF0aChwcm9qZWN0LCBob3N0KTtcbiAgICBjb25zdCBjb25maWdGaWxlTmFtZSA9IGhvc3QucmVzb2x2ZShob3N0LnB3ZCgpLCBwcm9qZWN0RmlsZSk7XG4gICAgY29uc3Qge2NvbmZpZywgZXJyb3J9ID0gcmVhZENvbmZpZ0ZpbGUocHJvamVjdEZpbGUpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJvamVjdCxcbiAgICAgICAgZXJyb3JzOiBbZXJyb3JdLFxuICAgICAgICByb290TmFtZXM6IFtdLFxuICAgICAgICBvcHRpb25zOiB7fSxcbiAgICAgICAgZW1pdEZsYWdzOiBhcGkuRW1pdEZsYWdzLkRlZmF1bHRcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGV4aXN0aW5nQ29tcGlsZXJPcHRpb25zOiBhcGkuQ29tcGlsZXJPcHRpb25zID0ge1xuICAgICAgZ2VuRGlyOiBiYXNlUGF0aCxcbiAgICAgIGJhc2VQYXRoLFxuICAgICAgLi4ucmVhZEFuZ3VsYXJDb21waWxlck9wdGlvbnMoY29uZmlnRmlsZU5hbWUpLFxuICAgICAgLi4uZXhpc3RpbmdPcHRpb25zLFxuICAgIH07XG5cbiAgICBjb25zdCBwYXJzZUNvbmZpZ0hvc3QgPSBjcmVhdGVQYXJzZUNvbmZpZ0hvc3QoaG9zdCwgZnMpO1xuICAgIGNvbnN0IHtvcHRpb25zLCBlcnJvcnMsIGZpbGVOYW1lczogcm9vdE5hbWVzLCBwcm9qZWN0UmVmZXJlbmNlc30gPVxuICAgICAgICB0cy5wYXJzZUpzb25Db25maWdGaWxlQ29udGVudChcbiAgICAgICAgICAgIGNvbmZpZywgcGFyc2VDb25maWdIb3N0LCBiYXNlUGF0aCwgZXhpc3RpbmdDb21waWxlck9wdGlvbnMsIGNvbmZpZ0ZpbGVOYW1lKTtcblxuICAgIC8vIENvZXJjZSB0byBib29sZWFuIGFzIGBlbmFibGVJdnlgIGNhbiBiZSBgbmd0c2N8dHJ1ZXxmYWxzZXx1bmRlZmluZWRgIGhlcmUuXG4gICAgb3B0aW9ucy5lbmFibGVJdnkgPSAhIShvcHRpb25zLmVuYWJsZUl2eSA/PyB0cnVlKTtcblxuICAgIGxldCBlbWl0RmxhZ3MgPSBhcGkuRW1pdEZsYWdzLkRlZmF1bHQ7XG4gICAgaWYgKCEob3B0aW9ucy5za2lwTWV0YWRhdGFFbWl0IHx8IG9wdGlvbnMuZmxhdE1vZHVsZU91dEZpbGUpKSB7XG4gICAgICBlbWl0RmxhZ3MgfD0gYXBpLkVtaXRGbGFncy5NZXRhZGF0YTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuc2tpcFRlbXBsYXRlQ29kZWdlbikge1xuICAgICAgZW1pdEZsYWdzID0gZW1pdEZsYWdzICYgfmFwaS5FbWl0RmxhZ3MuQ29kZWdlbjtcbiAgICB9XG4gICAgcmV0dXJuIHtwcm9qZWN0OiBwcm9qZWN0RmlsZSwgcm9vdE5hbWVzLCBwcm9qZWN0UmVmZXJlbmNlcywgb3B0aW9ucywgZXJyb3JzLCBlbWl0RmxhZ3N9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgZXJyb3JzOiB0cy5EaWFnbm9zdGljW10gPSBbe1xuICAgICAgY2F0ZWdvcnk6IHRzLkRpYWdub3N0aWNDYXRlZ29yeS5FcnJvcixcbiAgICAgIG1lc3NhZ2VUZXh0OiBlLnN0YWNrLFxuICAgICAgZmlsZTogdW5kZWZpbmVkLFxuICAgICAgc3RhcnQ6IHVuZGVmaW5lZCxcbiAgICAgIGxlbmd0aDogdW5kZWZpbmVkLFxuICAgICAgc291cmNlOiAnYW5ndWxhcicsXG4gICAgICBjb2RlOiBhcGkuVU5LTk9XTl9FUlJPUl9DT0RFLFxuICAgIH1dO1xuICAgIHJldHVybiB7cHJvamVjdDogJycsIGVycm9ycywgcm9vdE5hbWVzOiBbXSwgb3B0aW9uczoge30sIGVtaXRGbGFnczogYXBpLkVtaXRGbGFncy5EZWZhdWx0fTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVQYXJzZUNvbmZpZ0hvc3QoaG9zdDogQ29uZmlndXJhdGlvbkhvc3QsIGZzID0gZ2V0RmlsZVN5c3RlbSgpKTogdHMuUGFyc2VDb25maWdIb3N0IHtcbiAgcmV0dXJuIHtcbiAgICBmaWxlRXhpc3RzOiBob3N0LmV4aXN0cy5iaW5kKGhvc3QpLFxuICAgIHJlYWREaXJlY3Rvcnk6IHRzLnN5cy5yZWFkRGlyZWN0b3J5LFxuICAgIHJlYWRGaWxlOiBob3N0LnJlYWRGaWxlLmJpbmQoaG9zdCksXG4gICAgdXNlQ2FzZVNlbnNpdGl2ZUZpbGVOYW1lczogZnMuaXNDYXNlU2Vuc2l0aXZlKCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldEV4dGVuZGVkQ29uZmlnUGF0aChcbiAgICBjb25maWdGaWxlOiBzdHJpbmcsIGV4dGVuZHNWYWx1ZTogc3RyaW5nLCBob3N0OiBDb25maWd1cmF0aW9uSG9zdCxcbiAgICBmczogRmlsZVN5c3RlbSk6IEFic29sdXRlRnNQYXRofG51bGwge1xuICBjb25zdCByZXN1bHQgPSBnZXRFeHRlbmRlZENvbmZpZ1BhdGhXb3JrZXIoY29uZmlnRmlsZSwgZXh0ZW5kc1ZhbHVlLCBob3N0LCBmcyk7XG4gIGlmIChyZXN1bHQgIT09IG51bGwpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gVHJ5IHRvIHJlc29sdmUgdGhlIHBhdGhzIHdpdGggYSBqc29uIGV4dGVuc2lvbiBhcHBlbmQgYSBqc29uIGV4dGVuc2lvbiB0byB0aGUgZmlsZSBpbiBjYXNlIGlmXG4gIC8vIGl0IGlzIG1pc3NpbmcgYW5kIHRoZSByZXNvbHV0aW9uIGZhaWxlZC4gVGhpcyBpcyB0byByZXBsaWNhdGUgVHlwZVNjcmlwdCBiZWhhdmlvdXIsIHNlZTpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2Jsb2IvMjk0YTVhN2Q3ODRhNWE5NWE4MDQ4ZWU5OTA0MDA5NzlhNmJjM2ExYy9zcmMvY29tcGlsZXIvY29tbWFuZExpbmVQYXJzZXIudHMjTDI4MDZcbiAgcmV0dXJuIGdldEV4dGVuZGVkQ29uZmlnUGF0aFdvcmtlcihjb25maWdGaWxlLCBgJHtleHRlbmRzVmFsdWV9Lmpzb25gLCBob3N0LCBmcyk7XG59XG5cbmZ1bmN0aW9uIGdldEV4dGVuZGVkQ29uZmlnUGF0aFdvcmtlcihcbiAgICBjb25maWdGaWxlOiBzdHJpbmcsIGV4dGVuZHNWYWx1ZTogc3RyaW5nLCBob3N0OiBDb25maWd1cmF0aW9uSG9zdCxcbiAgICBmczogRmlsZVN5c3RlbSk6IEFic29sdXRlRnNQYXRofG51bGwge1xuICBpZiAoZXh0ZW5kc1ZhbHVlLnN0YXJ0c1dpdGgoJy4nKSB8fCBmcy5pc1Jvb3RlZChleHRlbmRzVmFsdWUpKSB7XG4gICAgY29uc3QgZXh0ZW5kZWRDb25maWdQYXRoID0gaG9zdC5yZXNvbHZlKGhvc3QuZGlybmFtZShjb25maWdGaWxlKSwgZXh0ZW5kc1ZhbHVlKTtcbiAgICBpZiAoaG9zdC5leGlzdHMoZXh0ZW5kZWRDb25maWdQYXRoKSkge1xuICAgICAgcmV0dXJuIGV4dGVuZGVkQ29uZmlnUGF0aDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcGFyc2VDb25maWdIb3N0ID0gY3JlYXRlUGFyc2VDb25maWdIb3N0KGhvc3QsIGZzKTtcblxuICAgIC8vIFBhdGggaXNuJ3QgYSByb290ZWQgb3IgcmVsYXRpdmUgcGF0aCwgcmVzb2x2ZSBsaWtlIGEgbW9kdWxlLlxuICAgIGNvbnN0IHtcbiAgICAgIHJlc29sdmVkTW9kdWxlLFxuICAgIH0gPVxuICAgICAgICB0cy5ub2RlTW9kdWxlTmFtZVJlc29sdmVyKFxuICAgICAgICAgICAgZXh0ZW5kc1ZhbHVlLCBjb25maWdGaWxlLFxuICAgICAgICAgICAge21vZHVsZVJlc29sdXRpb246IHRzLk1vZHVsZVJlc29sdXRpb25LaW5kLk5vZGVKcywgcmVzb2x2ZUpzb25Nb2R1bGU6IHRydWV9LFxuICAgICAgICAgICAgcGFyc2VDb25maWdIb3N0KTtcbiAgICBpZiAocmVzb2x2ZWRNb2R1bGUpIHtcbiAgICAgIHJldHVybiBhYnNvbHV0ZUZyb20ocmVzb2x2ZWRNb2R1bGUucmVzb2x2ZWRGaWxlTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVyZm9ybUNvbXBpbGF0aW9uUmVzdWx0IHtcbiAgZGlhZ25vc3RpY3M6IERpYWdub3N0aWNzO1xuICBwcm9ncmFtPzogYXBpLlByb2dyYW07XG4gIGVtaXRSZXN1bHQ/OiB0cy5FbWl0UmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhpdENvZGVGcm9tUmVzdWx0KGRpYWdzOiBEaWFnbm9zdGljc3x1bmRlZmluZWQpOiBudW1iZXIge1xuICBpZiAoIWRpYWdzIHx8IGZpbHRlckVycm9yc0FuZFdhcm5pbmdzKGRpYWdzKS5sZW5ndGggPT09IDApIHtcbiAgICAvLyBJZiB3ZSBoYXZlIGEgcmVzdWx0IGFuZCBkaWRuJ3QgZ2V0IGFueSBlcnJvcnMsIHdlIHN1Y2NlZWRlZC5cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIC8vIFJldHVybiAyIGlmIGFueSBvZiB0aGUgZXJyb3JzIHdlcmUgdW5rbm93bi5cbiAgcmV0dXJuIGRpYWdzLnNvbWUoZCA9PiBkLnNvdXJjZSA9PT0gJ2FuZ3VsYXInICYmIGQuY29kZSA9PT0gYXBpLlVOS05PV05fRVJST1JfQ09ERSkgPyAyIDogMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBlcmZvcm1Db21waWxhdGlvbih7XG4gIHJvb3ROYW1lcyxcbiAgb3B0aW9ucyxcbiAgaG9zdCxcbiAgb2xkUHJvZ3JhbSxcbiAgZW1pdENhbGxiYWNrLFxuICBtZXJnZUVtaXRSZXN1bHRzQ2FsbGJhY2ssXG4gIGdhdGhlckRpYWdub3N0aWNzID0gZGVmYXVsdEdhdGhlckRpYWdub3N0aWNzLFxuICBjdXN0b21UcmFuc2Zvcm1lcnMsXG4gIGVtaXRGbGFncyA9IGFwaS5FbWl0RmxhZ3MuRGVmYXVsdCxcbiAgbW9kaWZpZWRSZXNvdXJjZUZpbGVzID0gbnVsbFxufToge1xuICByb290TmFtZXM6IHN0cmluZ1tdLFxuICBvcHRpb25zOiBhcGkuQ29tcGlsZXJPcHRpb25zLFxuICBob3N0PzogYXBpLkNvbXBpbGVySG9zdCxcbiAgb2xkUHJvZ3JhbT86IGFwaS5Qcm9ncmFtLFxuICBlbWl0Q2FsbGJhY2s/OiBhcGkuVHNFbWl0Q2FsbGJhY2ssXG4gIG1lcmdlRW1pdFJlc3VsdHNDYWxsYmFjaz86IGFwaS5Uc01lcmdlRW1pdFJlc3VsdHNDYWxsYmFjayxcbiAgZ2F0aGVyRGlhZ25vc3RpY3M/OiAocHJvZ3JhbTogYXBpLlByb2dyYW0pID0+IERpYWdub3N0aWNzLFxuICBjdXN0b21UcmFuc2Zvcm1lcnM/OiBhcGkuQ3VzdG9tVHJhbnNmb3JtZXJzLFxuICBlbWl0RmxhZ3M/OiBhcGkuRW1pdEZsYWdzLFxuICBtb2RpZmllZFJlc291cmNlRmlsZXM/OiBTZXQ8c3RyaW5nPnwgbnVsbCxcbn0pOiBQZXJmb3JtQ29tcGlsYXRpb25SZXN1bHQge1xuICBsZXQgcHJvZ3JhbTogYXBpLlByb2dyYW18dW5kZWZpbmVkO1xuICBsZXQgZW1pdFJlc3VsdDogdHMuRW1pdFJlc3VsdHx1bmRlZmluZWQ7XG4gIGxldCBhbGxEaWFnbm9zdGljczogQXJyYXk8dHMuRGlhZ25vc3RpY3xhcGkuRGlhZ25vc3RpYz4gPSBbXTtcbiAgdHJ5IHtcbiAgICBpZiAoIWhvc3QpIHtcbiAgICAgIGhvc3QgPSBuZy5jcmVhdGVDb21waWxlckhvc3Qoe29wdGlvbnN9KTtcbiAgICB9XG4gICAgaWYgKG1vZGlmaWVkUmVzb3VyY2VGaWxlcykge1xuICAgICAgaG9zdC5nZXRNb2RpZmllZFJlc291cmNlRmlsZXMgPSAoKSA9PiBtb2RpZmllZFJlc291cmNlRmlsZXM7XG4gICAgfVxuXG4gICAgcHJvZ3JhbSA9IG5nLmNyZWF0ZVByb2dyYW0oe3Jvb3ROYW1lcywgaG9zdCwgb3B0aW9ucywgb2xkUHJvZ3JhbX0pO1xuXG4gICAgY29uc3QgYmVmb3JlRGlhZ3MgPSBEYXRlLm5vdygpO1xuICAgIGFsbERpYWdub3N0aWNzLnB1c2goLi4uZ2F0aGVyRGlhZ25vc3RpY3MocHJvZ3JhbSEpKTtcbiAgICBpZiAob3B0aW9ucy5kaWFnbm9zdGljcykge1xuICAgICAgY29uc3QgYWZ0ZXJEaWFncyA9IERhdGUubm93KCk7XG4gICAgICBhbGxEaWFnbm9zdGljcy5wdXNoKFxuICAgICAgICAgIGNyZWF0ZU1lc3NhZ2VEaWFnbm9zdGljKGBUaW1lIGZvciBkaWFnbm9zdGljczogJHthZnRlckRpYWdzIC0gYmVmb3JlRGlhZ3N9bXMuYCkpO1xuICAgIH1cblxuICAgIGlmICghaGFzRXJyb3JzKGFsbERpYWdub3N0aWNzKSkge1xuICAgICAgZW1pdFJlc3VsdCA9XG4gICAgICAgICAgcHJvZ3JhbSEuZW1pdCh7ZW1pdENhbGxiYWNrLCBtZXJnZUVtaXRSZXN1bHRzQ2FsbGJhY2ssIGN1c3RvbVRyYW5zZm9ybWVycywgZW1pdEZsYWdzfSk7XG4gICAgICBhbGxEaWFnbm9zdGljcy5wdXNoKC4uLmVtaXRSZXN1bHQuZGlhZ25vc3RpY3MpO1xuICAgICAgcmV0dXJuIHtkaWFnbm9zdGljczogYWxsRGlhZ25vc3RpY3MsIHByb2dyYW0sIGVtaXRSZXN1bHR9O1xuICAgIH1cbiAgICByZXR1cm4ge2RpYWdub3N0aWNzOiBhbGxEaWFnbm9zdGljcywgcHJvZ3JhbX07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsZXQgZXJyTXNnOiBzdHJpbmc7XG4gICAgbGV0IGNvZGU6IG51bWJlcjtcbiAgICBpZiAoaXNTeW50YXhFcnJvcihlKSkge1xuICAgICAgLy8gZG9uJ3QgcmVwb3J0IHRoZSBzdGFjayBmb3Igc3ludGF4IGVycm9ycyBhcyB0aGV5IGFyZSB3ZWxsIGtub3duIGVycm9ycy5cbiAgICAgIGVyck1zZyA9IGUubWVzc2FnZTtcbiAgICAgIGNvZGUgPSBhcGkuREVGQVVMVF9FUlJPUl9DT0RFO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJNc2cgPSBlLnN0YWNrO1xuICAgICAgLy8gSXQgaXMgbm90IGEgc3ludGF4IGVycm9yIHdlIG1pZ2h0IGhhdmUgYSBwcm9ncmFtIHdpdGggdW5rbm93biBzdGF0ZSwgZGlzY2FyZCBpdC5cbiAgICAgIHByb2dyYW0gPSB1bmRlZmluZWQ7XG4gICAgICBjb2RlID0gYXBpLlVOS05PV05fRVJST1JfQ09ERTtcbiAgICB9XG4gICAgYWxsRGlhZ25vc3RpY3MucHVzaChcbiAgICAgICAge2NhdGVnb3J5OiB0cy5EaWFnbm9zdGljQ2F0ZWdvcnkuRXJyb3IsIG1lc3NhZ2VUZXh0OiBlcnJNc2csIGNvZGUsIHNvdXJjZTogYXBpLlNPVVJDRX0pO1xuICAgIHJldHVybiB7ZGlhZ25vc3RpY3M6IGFsbERpYWdub3N0aWNzLCBwcm9ncmFtfTtcbiAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRHYXRoZXJEaWFnbm9zdGljcyhwcm9ncmFtOiBhcGkuUHJvZ3JhbSk6IERpYWdub3N0aWNzIHtcbiAgY29uc3QgYWxsRGlhZ25vc3RpY3M6IEFycmF5PHRzLkRpYWdub3N0aWN8YXBpLkRpYWdub3N0aWM+ID0gW107XG5cbiAgZnVuY3Rpb24gY2hlY2tEaWFnbm9zdGljcyhkaWFnczogRGlhZ25vc3RpY3N8dW5kZWZpbmVkKSB7XG4gICAgaWYgKGRpYWdzKSB7XG4gICAgICBhbGxEaWFnbm9zdGljcy5wdXNoKC4uLmRpYWdzKTtcbiAgICAgIHJldHVybiAhaGFzRXJyb3JzKGRpYWdzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBsZXQgY2hlY2tPdGhlckRpYWdub3N0aWNzID0gdHJ1ZTtcbiAgLy8gQ2hlY2sgcGFyYW1ldGVyIGRpYWdub3N0aWNzXG4gIGNoZWNrT3RoZXJEaWFnbm9zdGljcyA9IGNoZWNrT3RoZXJEaWFnbm9zdGljcyAmJlxuICAgICAgY2hlY2tEaWFnbm9zdGljcyhbLi4ucHJvZ3JhbS5nZXRUc09wdGlvbkRpYWdub3N0aWNzKCksIC4uLnByb2dyYW0uZ2V0TmdPcHRpb25EaWFnbm9zdGljcygpXSk7XG5cbiAgLy8gQ2hlY2sgc3ludGFjdGljIGRpYWdub3N0aWNzXG4gIGNoZWNrT3RoZXJEaWFnbm9zdGljcyA9XG4gICAgICBjaGVja090aGVyRGlhZ25vc3RpY3MgJiYgY2hlY2tEaWFnbm9zdGljcyhwcm9ncmFtLmdldFRzU3ludGFjdGljRGlhZ25vc3RpY3MoKSBhcyBEaWFnbm9zdGljcyk7XG5cbiAgLy8gQ2hlY2sgVHlwZVNjcmlwdCBzZW1hbnRpYyBhbmQgQW5ndWxhciBzdHJ1Y3R1cmUgZGlhZ25vc3RpY3NcbiAgY2hlY2tPdGhlckRpYWdub3N0aWNzID1cbiAgICAgIGNoZWNrT3RoZXJEaWFnbm9zdGljcyAmJlxuICAgICAgY2hlY2tEaWFnbm9zdGljcyhcbiAgICAgICAgICBbLi4ucHJvZ3JhbS5nZXRUc1NlbWFudGljRGlhZ25vc3RpY3MoKSwgLi4ucHJvZ3JhbS5nZXROZ1N0cnVjdHVyYWxEaWFnbm9zdGljcygpXSk7XG5cbiAgLy8gQ2hlY2sgQW5ndWxhciBzZW1hbnRpYyBkaWFnbm9zdGljc1xuICBjaGVja090aGVyRGlhZ25vc3RpY3MgPVxuICAgICAgY2hlY2tPdGhlckRpYWdub3N0aWNzICYmIGNoZWNrRGlhZ25vc3RpY3MocHJvZ3JhbS5nZXROZ1NlbWFudGljRGlhZ25vc3RpY3MoKSBhcyBEaWFnbm9zdGljcyk7XG5cbiAgcmV0dXJuIGFsbERpYWdub3N0aWNzO1xufVxuXG5mdW5jdGlvbiBoYXNFcnJvcnMoZGlhZ3M6IERpYWdub3N0aWNzKSB7XG4gIHJldHVybiBkaWFncy5zb21lKGQgPT4gZC5jYXRlZ29yeSA9PT0gdHMuRGlhZ25vc3RpY0NhdGVnb3J5LkVycm9yKTtcbn1cbiJdfQ==
|