@angular/compiler-cli 13.0.0-next.9 → 13.0.0-rc.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/bundles/index.js +20413 -0
- package/bundles/index.js.map +6 -0
- package/bundles/linker/babel/index.js +2384 -0
- package/bundles/linker/babel/index.js.map +6 -0
- package/bundles/linker/index.js +1849 -0
- package/bundles/linker/index.js.map +6 -0
- package/bundles/ngcc/index.js +16038 -0
- package/bundles/ngcc/index.js.map +6 -0
- package/bundles/ngcc/main-ngcc.js +16126 -0
- package/bundles/ngcc/main-ngcc.js.map +6 -0
- package/bundles/ngcc/src/execution/cluster/ngcc_cluster_worker.js +13850 -0
- package/bundles/ngcc/src/execution/cluster/ngcc_cluster_worker.js.map +6 -0
- package/bundles/ngcc/src/locking/lock_file_with_child_process/ngcc_lock_unlocker.js +334 -0
- package/bundles/ngcc/src/locking/lock_file_with_child_process/ngcc_lock_unlocker.js.map +6 -0
- package/bundles/private/bazel.js +97 -0
- package/bundles/private/bazel.js.map +6 -0
- package/bundles/private/localize.js +911 -0
- package/bundles/private/localize.js.map +6 -0
- package/bundles/private/migrations.js +2183 -0
- package/bundles/private/migrations.js.map +6 -0
- package/bundles/private/tooling.js +942 -0
- package/bundles/private/tooling.js.map +6 -0
- package/bundles/src/bin/ng_xi18n.js +20463 -0
- package/bundles/src/bin/ng_xi18n.js.map +6 -0
- package/bundles/src/bin/ngc.js +20465 -0
- package/bundles/src/bin/ngc.js.map +6 -0
- package/bundles_metadata.json +1 -0
- package/import_meta_url.d.ts +14 -0
- package/index.d.ts +4 -1
- package/linker/babel/src/ast/babel_ast_factory.d.ts +1 -8
- package/linker/babel/src/ast/babel_ast_host.d.ts +1 -1
- package/linker/babel/src/babel_core.d.ts +36 -0
- package/linker/babel/src/babel_declaration_scope.d.ts +1 -1
- package/linker/babel/src/babel_plugin.d.ts +1 -8
- package/linker/babel/src/es2015_linker_plugin.d.ts +2 -2
- package/linker/src/ast/typescript/typescript_ast_host.d.ts +1 -1
- package/linker/src/file_linker/emit_scopes/emit_scope.d.ts +1 -2
- package/linker/src/file_linker/emit_scopes/iife_emit_scope.d.ts +1 -1
- package/linker/src/file_linker/partial_linkers/partial_class_metadata_linker_1.d.ts +1 -2
- package/linker/src/file_linker/partial_linkers/partial_component_linker_1.d.ts +1 -2
- package/linker/src/file_linker/partial_linkers/partial_directive_linker_1.d.ts +1 -2
- package/linker/src/file_linker/partial_linkers/partial_factory_linker_1.d.ts +1 -2
- package/linker/src/file_linker/partial_linkers/partial_injectable_linker_1.d.ts +1 -2
- package/linker/src/file_linker/partial_linkers/partial_injector_linker_1.d.ts +1 -2
- package/linker/src/file_linker/partial_linkers/partial_linker.d.ts +1 -2
- package/linker/src/file_linker/partial_linkers/partial_linker_selector.d.ts +2 -2
- package/linker/src/file_linker/partial_linkers/partial_ng_module_linker_1.d.ts +1 -2
- package/linker/src/file_linker/partial_linkers/partial_pipe_linker_1.d.ts +1 -2
- package/linker/src/file_linker/partial_linkers/util.d.ts +1 -2
- package/ngcc/index.d.ts +15 -0
- package/ngcc/src/analysis/decoration_analyzer.d.ts +1 -1
- package/ngcc/src/analysis/module_with_providers_analyzer.d.ts +1 -1
- package/ngcc/src/analysis/ngcc_references_registry.d.ts +1 -1
- package/ngcc/src/analysis/ngcc_trait_compiler.d.ts +1 -1
- package/ngcc/src/analysis/private_declarations_analyzer.d.ts +1 -1
- package/ngcc/src/analysis/switch_marker_analyzer.d.ts +1 -1
- package/ngcc/src/analysis/types.d.ts +1 -1
- package/ngcc/src/dependencies/esm_dependency_host.d.ts +1 -1
- package/ngcc/src/execution/cluster/api.d.ts +5 -1
- package/ngcc/src/execution/cluster/master.d.ts +5 -3
- package/{src/ngtsc/logging/testing/index.d.ts → ngcc/src/execution/cluster/ngcc_cluster_worker.d.ts} +2 -2
- package/ngcc/src/host/commonjs_host.d.ts +1 -1
- package/ngcc/src/host/commonjs_umd_utils.d.ts +1 -1
- package/ngcc/src/host/delegating_host.d.ts +1 -1
- package/ngcc/src/host/esm2015_host.d.ts +1 -1
- package/ngcc/src/host/esm5_host.d.ts +1 -1
- package/ngcc/src/host/ngcc_host.d.ts +1 -1
- package/ngcc/src/host/umd_host.d.ts +1 -1
- package/ngcc/src/host/utils.d.ts +1 -1
- package/ngcc/src/locking/lock_file.d.ts +1 -1
- package/ngcc/src/locking/lock_file_with_child_process/index.d.ts +2 -0
- package/ngcc/src/locking/lock_file_with_child_process/{unlocker.d.ts → ngcc_lock_unlocker.d.ts} +1 -1
- package/ngcc/src/migrations/migration.d.ts +1 -1
- package/ngcc/src/migrations/missing_injectable_migration.d.ts +1 -1
- package/ngcc/src/migrations/undecorated_child_migration.d.ts +1 -1
- package/ngcc/src/migrations/undecorated_parent_migration.d.ts +1 -1
- package/ngcc/src/migrations/utils.d.ts +1 -1
- package/ngcc/src/packages/build_marker.d.ts +1 -1
- package/ngcc/src/packages/bundle_program.d.ts +1 -1
- package/ngcc/src/packages/entry_point_bundle.d.ts +1 -1
- package/ngcc/src/packages/ngcc_compiler_host.d.ts +1 -1
- package/ngcc/src/packages/source_file_cache.d.ts +1 -1
- package/ngcc/src/packages/transformer.d.ts +1 -1
- package/ngcc/src/rendering/commonjs_rendering_formatter.d.ts +1 -1
- package/ngcc/src/rendering/dts_renderer.d.ts +1 -1
- package/ngcc/src/rendering/esm5_rendering_formatter.d.ts +1 -1
- package/ngcc/src/rendering/esm_rendering_formatter.d.ts +1 -1
- package/ngcc/src/rendering/renderer.d.ts +1 -1
- package/ngcc/src/rendering/rendering_formatter.d.ts +1 -1
- package/ngcc/src/rendering/source_maps.d.ts +3 -3
- package/ngcc/src/rendering/umd_rendering_formatter.d.ts +1 -1
- package/ngcc/src/rendering/utils.d.ts +1 -1
- package/ngcc/src/utils.d.ts +1 -1
- package/package.json +52 -13
- package/private/bazel.d.ts +13 -0
- package/private/localize.d.ts +15 -0
- package/private/migrations.d.ts +16 -0
- package/{src → private}/tooling.d.ts +2 -2
- package/src/bin/ng_xi18n.d.ts +10 -0
- package/{ngcc/main-ivy-ngcc.d.ts → src/bin/ngc.d.ts} +2 -1
- package/src/diagnostics/translate_diagnostics.d.ts +1 -1
- package/src/extract_i18n.d.ts +0 -5
- package/src/main.d.ts +9 -6
- package/src/metadata/bundle_index_host.d.ts +1 -1
- package/src/metadata/bundler.d.ts +1 -1
- package/src/metadata/collector.d.ts +1 -1
- package/src/metadata/evaluator.d.ts +1 -1
- package/src/metadata/symbols.d.ts +1 -1
- package/src/ngtsc/annotations/src/component.d.ts +1 -1
- package/src/ngtsc/annotations/src/diagnostics.d.ts +1 -1
- package/src/ngtsc/annotations/src/directive.d.ts +1 -1
- package/src/ngtsc/annotations/src/ng_module.d.ts +2 -3
- package/src/ngtsc/annotations/src/pipe.d.ts +1 -1
- package/src/ngtsc/annotations/src/util.d.ts +2 -4
- package/src/ngtsc/core/api/src/adapter.d.ts +1 -1
- package/src/ngtsc/core/api/src/interfaces.d.ts +1 -1
- package/src/ngtsc/core/api/src/options.d.ts +1 -1
- package/src/ngtsc/core/api/src/public_options.d.ts +5 -1
- package/src/ngtsc/core/src/compiler.d.ts +1 -1
- package/src/ngtsc/core/src/host.d.ts +1 -1
- package/src/ngtsc/cycles/src/analyzer.d.ts +1 -1
- package/src/ngtsc/cycles/src/imports.d.ts +1 -1
- package/src/ngtsc/diagnostics/index.d.ts +4 -2
- package/src/ngtsc/diagnostics/src/docs.d.ts +14 -0
- package/src/ngtsc/diagnostics/src/error.d.ts +1 -1
- package/src/ngtsc/diagnostics/src/error_details_base_url.d.ts +16 -0
- package/src/ngtsc/diagnostics/src/util.d.ts +2 -0
- package/src/ngtsc/entry_point/src/generator.d.ts +1 -1
- package/src/ngtsc/entry_point/src/private_export_checker.d.ts +1 -1
- package/src/ngtsc/file_system/src/compiler_host.d.ts +1 -1
- package/src/ngtsc/file_system/src/logical.d.ts +1 -1
- package/src/ngtsc/file_system/src/util.d.ts +1 -1
- package/src/ngtsc/imports/src/alias.d.ts +1 -1
- package/src/ngtsc/imports/src/default.d.ts +1 -1
- package/src/ngtsc/imports/src/emitter.d.ts +1 -1
- package/src/ngtsc/imports/src/find_export.d.ts +1 -1
- package/src/ngtsc/imports/src/references.d.ts +1 -1
- package/src/ngtsc/imports/src/resolver.d.ts +1 -1
- package/src/ngtsc/incremental/api.d.ts +1 -1
- package/src/ngtsc/incremental/src/dependency_tracking.d.ts +1 -1
- package/src/ngtsc/incremental/src/incremental.d.ts +1 -1
- package/src/ngtsc/incremental/src/state.d.ts +1 -1
- package/src/ngtsc/incremental/src/strategy.d.ts +1 -1
- package/src/ngtsc/metadata/src/api.d.ts +1 -1
- package/src/ngtsc/metadata/src/dts.d.ts +1 -1
- package/src/ngtsc/metadata/src/resource_registry.d.ts +1 -1
- package/src/ngtsc/metadata/src/util.d.ts +1 -1
- package/src/ngtsc/partial_evaluator/index.d.ts +1 -0
- package/src/ngtsc/partial_evaluator/src/builtin.d.ts +1 -1
- package/src/ngtsc/partial_evaluator/src/diagnostics.d.ts +1 -1
- package/src/ngtsc/partial_evaluator/src/dynamic.d.ts +1 -1
- package/src/ngtsc/partial_evaluator/src/interface.d.ts +1 -1
- package/src/ngtsc/partial_evaluator/src/interpreter.d.ts +1 -1
- package/src/ngtsc/partial_evaluator/src/result.d.ts +1 -1
- package/src/ngtsc/partial_evaluator/src/ts_helpers.d.ts +1 -1
- package/src/ngtsc/program.d.ts +1 -1
- package/src/ngtsc/program_driver/src/api.d.ts +1 -1
- package/src/ngtsc/program_driver/src/ts_create_program_driver.d.ts +1 -1
- package/src/ngtsc/reflection/src/host.d.ts +1 -1
- package/src/ngtsc/reflection/src/type_to_value.d.ts +1 -1
- package/src/ngtsc/reflection/src/typescript.d.ts +1 -1
- package/src/ngtsc/reflection/src/util.d.ts +1 -1
- package/src/ngtsc/resource/src/loader.d.ts +1 -1
- package/src/ngtsc/scope/src/local.d.ts +1 -1
- package/src/ngtsc/scope/src/typecheck.d.ts +1 -1
- package/src/ngtsc/shims/api.d.ts +1 -1
- package/src/ngtsc/shims/src/adapter.d.ts +1 -1
- package/src/ngtsc/shims/src/expando.d.ts +1 -1
- package/src/ngtsc/shims/src/factory_generator.d.ts +1 -1
- package/src/ngtsc/shims/src/reference_tagger.d.ts +1 -1
- package/src/ngtsc/shims/src/summary_generator.d.ts +1 -1
- package/src/ngtsc/switch/src/switch.d.ts +1 -1
- package/src/ngtsc/transform/src/alias.d.ts +1 -1
- package/src/ngtsc/transform/src/api.d.ts +1 -1
- package/src/ngtsc/transform/src/compilation.d.ts +1 -1
- package/src/ngtsc/transform/src/declaration.d.ts +1 -1
- package/src/ngtsc/transform/src/trait.d.ts +1 -1
- package/src/ngtsc/transform/src/transform.d.ts +1 -1
- package/src/ngtsc/transform/src/utils.d.ts +1 -1
- package/src/ngtsc/translator/src/import_manager.d.ts +1 -1
- package/src/ngtsc/translator/src/type_translator.d.ts +1 -1
- package/src/ngtsc/translator/src/typescript_ast_factory.d.ts +1 -1
- package/src/ngtsc/translator/src/typescript_translator.d.ts +1 -1
- package/src/ngtsc/tsc_plugin.d.ts +1 -1
- package/src/ngtsc/typecheck/api/api.d.ts +1 -1
- package/src/ngtsc/typecheck/api/checker.d.ts +3 -4
- package/src/ngtsc/typecheck/api/context.d.ts +1 -1
- package/src/ngtsc/typecheck/api/scope.d.ts +1 -1
- package/src/ngtsc/typecheck/api/symbols.d.ts +1 -1
- package/src/ngtsc/typecheck/diagnostics/src/diagnostic.d.ts +1 -1
- package/src/ngtsc/typecheck/extended/api/api.d.ts +1 -1
- package/src/ngtsc/typecheck/extended/api/extended_template_checker.d.ts +1 -1
- package/src/ngtsc/typecheck/extended/checks/invalid_banana_in_box/index.d.ts +1 -1
- package/src/ngtsc/typecheck/extended/checks/nullish_coalescing_not_nullable/index.d.ts +1 -1
- package/src/ngtsc/typecheck/extended/src/extended_template_checker.d.ts +1 -1
- package/src/ngtsc/typecheck/src/checker.d.ts +3 -4
- package/src/ngtsc/typecheck/src/comments.d.ts +1 -1
- package/src/ngtsc/typecheck/src/completion.d.ts +3 -5
- package/src/ngtsc/typecheck/src/context.d.ts +1 -1
- package/src/ngtsc/typecheck/src/diagnostics.d.ts +1 -1
- package/src/ngtsc/typecheck/src/environment.d.ts +1 -1
- package/src/ngtsc/typecheck/src/expression.d.ts +1 -1
- package/src/ngtsc/typecheck/src/oob.d.ts +3 -4
- package/src/ngtsc/typecheck/src/shim.d.ts +1 -1
- package/src/ngtsc/typecheck/src/source.d.ts +1 -1
- package/src/ngtsc/typecheck/src/tcb_util.d.ts +1 -1
- package/src/ngtsc/typecheck/src/template_symbol_builder.d.ts +1 -1
- package/src/ngtsc/typecheck/src/ts_util.d.ts +1 -1
- package/src/ngtsc/typecheck/src/type_check_block.d.ts +1 -1
- package/src/ngtsc/typecheck/src/type_check_file.d.ts +1 -1
- package/src/ngtsc/typecheck/src/type_constructor.d.ts +1 -1
- package/src/ngtsc/typecheck/src/type_emitter.d.ts +1 -1
- package/src/ngtsc/typecheck/src/type_parameter_emitter.d.ts +1 -1
- package/src/ngtsc/util/src/typescript.d.ts +1 -1
- package/src/ngtsc/util/src/visitor.d.ts +1 -1
- package/src/perform_compile.d.ts +1 -2
- package/src/perform_watch.d.ts +1 -1
- package/src/transformers/api.d.ts +1 -1
- package/src/transformers/compiler_host.d.ts +1 -1
- package/src/transformers/{downlevel_decorators_transform.d.ts → downlevel_decorators_transform/downlevel_decorators_transform.d.ts} +3 -3
- package/src/transformers/downlevel_decorators_transform/index.d.ts +9 -0
- package/src/transformers/{patch_alias_reference_resolution.d.ts → downlevel_decorators_transform/patch_alias_reference_resolution.d.ts} +2 -2
- package/src/transformers/i18n.d.ts +1 -1
- package/src/transformers/inline_resources.d.ts +1 -1
- package/src/transformers/lower_expressions.d.ts +1 -1
- package/src/transformers/metadata_cache.d.ts +1 -1
- package/src/transformers/node_emitter.d.ts +1 -1
- package/src/transformers/node_emitter_transform.d.ts +1 -1
- package/src/transformers/program.d.ts +1 -1
- package/src/transformers/r3_metadata_transform.d.ts +1 -1
- package/src/transformers/r3_transform.d.ts +1 -1
- package/src/transformers/util.d.ts +1 -1
- package/index.js +0 -40
- package/linker/babel/index.js +0 -25
- package/linker/babel/src/ast/babel_ast_factory.js +0 -153
- package/linker/babel/src/ast/babel_ast_host.js +0 -181
- package/linker/babel/src/babel_declaration_scope.js +0 -67
- package/linker/babel/src/babel_plugin.js +0 -38
- package/linker/babel/src/es2015_linker_plugin.js +0 -183
- package/linker/babel/src/linker_plugin_options.js +0 -13
- package/linker/index.js +0 -27
- package/linker/src/ast/ast_host.js +0 -20
- package/linker/src/ast/ast_value.js +0 -299
- package/linker/src/ast/typescript/typescript_ast_host.js +0 -183
- package/linker/src/ast/utils.js +0 -31
- package/linker/src/fatal_linker_error.js +0 -49
- package/linker/src/file_linker/declaration_scope.js +0 -20
- package/linker/src/file_linker/emit_scopes/emit_scope.js +0 -57
- package/linker/src/file_linker/emit_scopes/iife_emit_scope.js +0 -51
- package/linker/src/file_linker/file_linker.js +0 -97
- package/linker/src/file_linker/get_source_file.js +0 -42
- package/linker/src/file_linker/linker_environment.js +0 -38
- package/linker/src/file_linker/linker_options.js +0 -29
- package/linker/src/file_linker/needs_linking.js +0 -41
- package/linker/src/file_linker/partial_linkers/partial_class_metadata_linker_1.js +0 -47
- package/linker/src/file_linker/partial_linkers/partial_component_linker_1.js +0 -210
- package/linker/src/file_linker/partial_linkers/partial_directive_linker_1.js +0 -154
- package/linker/src/file_linker/partial_linkers/partial_factory_linker_1.js +0 -70
- package/linker/src/file_linker/partial_linkers/partial_injectable_linker_1.js +0 -74
- package/linker/src/file_linker/partial_linkers/partial_injector_linker_1.js +0 -56
- package/linker/src/file_linker/partial_linkers/partial_linker.js +0 -13
- package/linker/src/file_linker/partial_linkers/partial_linker_selector.js +0 -194
- package/linker/src/file_linker/partial_linkers/partial_ng_module_linker_1.js +0 -126
- package/linker/src/file_linker/partial_linkers/partial_pipe_linker_1.js +0 -59
- package/linker/src/file_linker/partial_linkers/util.js +0 -95
- package/linker/src/file_linker/translator.js +0 -40
- package/linker/src/linker_import_generator.js +0 -43
- package/ngcc/index.js +0 -33
- package/ngcc/main-ivy-ngcc.js +0 -12
- package/ngcc/main-ngcc.js +0 -54
- package/ngcc/src/analysis/decoration_analyzer.js +0 -268
- package/ngcc/src/analysis/migration_host.js +0 -108
- package/ngcc/src/analysis/module_with_providers_analyzer.js +0 -197
- package/ngcc/src/analysis/ngcc_references_registry.js +0 -65
- package/ngcc/src/analysis/ngcc_trait_compiler.js +0 -117
- package/ngcc/src/analysis/private_declarations_analyzer.js +0 -63
- package/ngcc/src/analysis/switch_marker_analyzer.js +0 -50
- package/ngcc/src/analysis/types.js +0 -15
- package/ngcc/src/analysis/util.js +0 -36
- package/ngcc/src/command_line_options.js +0 -156
- package/ngcc/src/constants.js +0 -23
- package/ngcc/src/dependencies/commonjs_dependency_host.js +0 -129
- package/ngcc/src/dependencies/dependency_host.js +0 -143
- package/ngcc/src/dependencies/dependency_resolver.js +0 -180
- package/ngcc/src/dependencies/dts_dependency_host.js +0 -35
- package/ngcc/src/dependencies/esm_dependency_host.js +0 -307
- package/ngcc/src/dependencies/module_resolver.js +0 -269
- package/ngcc/src/dependencies/umd_dependency_host.js +0 -53
- package/ngcc/src/entry_point_finder/directory_walker_entry_point_finder.js +0 -70
- package/ngcc/src/entry_point_finder/entry_point_collector.js +0 -157
- package/ngcc/src/entry_point_finder/interface.js +0 -13
- package/ngcc/src/entry_point_finder/program_based_entry_point_finder.js +0 -132
- package/ngcc/src/entry_point_finder/targeted_entry_point_finder.js +0 -268
- package/ngcc/src/entry_point_finder/tracing_entry_point_finder.js +0 -78
- package/ngcc/src/entry_point_finder/utils.js +0 -234
- package/ngcc/src/execution/analyze_entry_points.js +0 -197
- package/ngcc/src/execution/api.js +0 -13
- package/ngcc/src/execution/cluster/api.js +0 -20
- package/ngcc/src/execution/cluster/executor.js +0 -52
- package/ngcc/src/execution/cluster/master.js +0 -311
- package/ngcc/src/execution/cluster/package_json_updater.js +0 -79
- package/ngcc/src/execution/cluster/utils.js +0 -77
- package/ngcc/src/execution/cluster/worker.js +0 -123
- package/ngcc/src/execution/create_compile_function.js +0 -76
- package/ngcc/src/execution/single_process_executor.js +0 -91
- package/ngcc/src/execution/tasks/api.js +0 -35
- package/ngcc/src/execution/tasks/completion.js +0 -79
- package/ngcc/src/execution/tasks/queues/base_task_queue.js +0 -120
- package/ngcc/src/execution/tasks/queues/parallel_task_queue.js +0 -87
- package/ngcc/src/execution/tasks/queues/serial_task_queue.js +0 -49
- package/ngcc/src/execution/tasks/utils.js +0 -167
- package/ngcc/src/host/commonjs_host.js +0 -261
- package/ngcc/src/host/commonjs_umd_utils.js +0 -210
- package/ngcc/src/host/delegating_host.js +0 -156
- package/ngcc/src/host/esm2015_host.js +0 -2441
- package/ngcc/src/host/esm5_host.js +0 -745
- package/ngcc/src/host/ngcc_host.js +0 -29
- package/ngcc/src/host/umd_host.js +0 -539
- package/ngcc/src/host/utils.js +0 -26
- package/ngcc/src/locking/async_locker.js +0 -121
- package/ngcc/src/locking/lock_file.js +0 -18
- package/ngcc/src/locking/lock_file_with_child_process/index.js +0 -93
- package/ngcc/src/locking/lock_file_with_child_process/unlocker.js +0 -46
- package/ngcc/src/locking/lock_file_with_child_process/util.js +0 -43
- package/ngcc/src/locking/sync_locker.js +0 -67
- package/ngcc/src/main.js +0 -163
- package/ngcc/src/migrations/migration.js +0 -13
- package/ngcc/src/migrations/missing_injectable_migration.js +0 -227
- package/ngcc/src/migrations/undecorated_child_migration.js +0 -90
- package/ngcc/src/migrations/undecorated_parent_migration.js +0 -103
- package/ngcc/src/migrations/utils.js +0 -137
- package/ngcc/src/ngcc_options.js +0 -135
- package/ngcc/src/packages/build_marker.js +0 -124
- package/ngcc/src/packages/bundle_program.js +0 -80
- package/ngcc/src/packages/configuration.js +0 -334
- package/ngcc/src/packages/entry_point.js +0 -267
- package/ngcc/src/packages/entry_point_bundle.js +0 -96
- package/ngcc/src/packages/entry_point_manifest.js +0 -207
- package/ngcc/src/packages/ngcc_compiler_host.js +0 -101
- package/ngcc/src/packages/patch_ts_expando_initializer.js +0 -174
- package/ngcc/src/packages/source_file_cache.js +0 -207
- package/ngcc/src/packages/transformer.js +0 -157
- package/ngcc/src/path_mappings.js +0 -27
- package/ngcc/src/rendering/commonjs_rendering_formatter.js +0 -106
- package/ngcc/src/rendering/dts_renderer.js +0 -170
- package/ngcc/src/rendering/esm5_rendering_formatter.js +0 -70
- package/ngcc/src/rendering/esm_rendering_formatter.js +0 -291
- package/ngcc/src/rendering/ngcc_import_rewriter.js +0 -49
- package/ngcc/src/rendering/renderer.js +0 -204
- package/ngcc/src/rendering/rendering_formatter.js +0 -15
- package/ngcc/src/rendering/source_maps.js +0 -68
- package/ngcc/src/rendering/umd_rendering_formatter.js +0 -326
- package/ngcc/src/rendering/utils.js +0 -35
- package/ngcc/src/utils.js +0 -182
- package/ngcc/src/writing/cleaning/cleaning_strategies.js +0 -80
- package/ngcc/src/writing/cleaning/package_cleaner.js +0 -126
- package/ngcc/src/writing/cleaning/utils.js +0 -30
- package/ngcc/src/writing/file_writer.js +0 -13
- package/ngcc/src/writing/in_place_file_writer.js +0 -90
- package/ngcc/src/writing/new_entry_point_file_writer.js +0 -214
- package/ngcc/src/writing/package_json_updater.js +0 -182
- package/src/diagnostics/translate_diagnostics.js +0 -61
- package/src/diagnostics/typescript_version.js +0 -96
- package/src/extract_i18n.js +0 -62
- package/src/language_services.js +0 -34
- package/src/main.js +0 -210
- package/src/metadata/bundle_index_host.js +0 -133
- package/src/metadata/bundler.js +0 -624
- package/src/metadata/collector.js +0 -799
- package/src/metadata/evaluator.js +0 -677
- package/src/metadata/index.js +0 -24
- package/src/metadata/index_writer.js +0 -80
- package/src/metadata/schema.js +0 -136
- package/src/metadata/symbols.js +0 -149
- package/src/ngtsc/annotations/index.js +0 -35
- package/src/ngtsc/annotations/src/api.js +0 -20
- package/src/ngtsc/annotations/src/component.js +0 -1338
- package/src/ngtsc/annotations/src/diagnostics.js +0 -174
- package/src/ngtsc/annotations/src/directive.js +0 -724
- package/src/ngtsc/annotations/src/factory.js +0 -32
- package/src/ngtsc/annotations/src/injectable.js +0 -284
- package/src/ngtsc/annotations/src/metadata.js +0 -160
- package/src/ngtsc/annotations/src/ng_module.js +0 -671
- package/src/ngtsc/annotations/src/pipe.js +0 -171
- package/src/ngtsc/annotations/src/references_registry.js +0 -38
- package/src/ngtsc/annotations/src/util.js +0 -566
- package/src/ngtsc/core/api/index.js +0 -25
- package/src/ngtsc/core/api/src/adapter.js +0 -20
- package/src/ngtsc/core/api/src/interfaces.js +0 -20
- package/src/ngtsc/core/api/src/options.js +0 -20
- package/src/ngtsc/core/api/src/public_options.js +0 -20
- package/src/ngtsc/core/index.js +0 -25
- package/src/ngtsc/core/src/compiler.js +0 -1105
- package/src/ngtsc/core/src/host.js +0 -273
- package/src/ngtsc/cycles/index.js +0 -26
- package/src/ngtsc/cycles/src/analyzer.js +0 -163
- package/src/ngtsc/cycles/src/imports.js +0 -175
- package/src/ngtsc/diagnostics/index.js +0 -33
- package/src/ngtsc/diagnostics/src/error.js +0 -69
- package/src/ngtsc/diagnostics/src/error_code.js +0 -235
- package/src/ngtsc/diagnostics/src/util.js +0 -35
- package/src/ngtsc/entry_point/index.js +0 -29
- package/src/ngtsc/entry_point/src/generator.js +0 -45
- package/src/ngtsc/entry_point/src/logic.js +0 -61
- package/src/ngtsc/entry_point/src/private_export_checker.js +0 -137
- package/src/ngtsc/entry_point/src/reference_graph.js +0 -91
- package/src/ngtsc/file_system/index.js +0 -45
- package/src/ngtsc/file_system/src/compiler_host.js +0 -80
- package/src/ngtsc/file_system/src/helpers.js +0 -135
- package/src/ngtsc/file_system/src/invalid_file_system.js +0 -120
- package/src/ngtsc/file_system/src/logical.js +0 -100
- package/src/ngtsc/file_system/src/node_js_file_system.js +0 -179
- package/src/ngtsc/file_system/src/types.js +0 -20
- package/src/ngtsc/file_system/src/util.js +0 -38
- package/src/ngtsc/file_system/testing/index.d.ts +0 -13
- package/src/ngtsc/file_system/testing/index.js +0 -32
- package/src/ngtsc/file_system/testing/src/mock_file_system.d.ts +0 -72
- package/src/ngtsc/file_system/testing/src/mock_file_system.js +0 -333
- package/src/ngtsc/file_system/testing/src/mock_file_system_native.d.ts +0 -16
- package/src/ngtsc/file_system/testing/src/mock_file_system_native.js +0 -85
- package/src/ngtsc/file_system/testing/src/mock_file_system_posix.d.ts +0 -13
- package/src/ngtsc/file_system/testing/src/mock_file_system_posix.js +0 -68
- package/src/ngtsc/file_system/testing/src/mock_file_system_windows.d.ts +0 -13
- package/src/ngtsc/file_system/testing/src/mock_file_system_windows.js +0 -68
- package/src/ngtsc/file_system/testing/src/test_helper.d.ts +0 -17
- package/src/ngtsc/file_system/testing/src/test_helper.js +0 -143
- package/src/ngtsc/imports/index.js +0 -43
- package/src/ngtsc/imports/src/alias.js +0 -158
- package/src/ngtsc/imports/src/core.js +0 -98
- package/src/ngtsc/imports/src/default.js +0 -153
- package/src/ngtsc/imports/src/emitter.js +0 -317
- package/src/ngtsc/imports/src/find_export.js +0 -82
- package/src/ngtsc/imports/src/reexport.js +0 -20
- package/src/ngtsc/imports/src/references.js +0 -171
- package/src/ngtsc/imports/src/resolver.js +0 -39
- package/src/ngtsc/incremental/api.js +0 -20
- package/src/ngtsc/incremental/index.js +0 -29
- package/src/ngtsc/incremental/semantic_graph/index.js +0 -34
- package/src/ngtsc/incremental/semantic_graph/src/api.js +0 -51
- package/src/ngtsc/incremental/semantic_graph/src/graph.js +0 -302
- package/src/ngtsc/incremental/semantic_graph/src/type_parameters.js +0 -55
- package/src/ngtsc/incremental/semantic_graph/src/util.js +0 -111
- package/src/ngtsc/incremental/src/dependency_tracking.js +0 -165
- package/src/ngtsc/incremental/src/incremental.js +0 -393
- package/src/ngtsc/incremental/src/noop.js +0 -26
- package/src/ngtsc/incremental/src/state.js +0 -30
- package/src/ngtsc/incremental/src/strategy.js +0 -99
- package/src/ngtsc/indexer/index.js +0 -27
- package/src/ngtsc/indexer/src/api.js +0 -45
- package/src/ngtsc/indexer/src/context.js +0 -40
- package/src/ngtsc/indexer/src/template.js +0 -324
- package/src/ngtsc/indexer/src/transform.js +0 -66
- package/src/ngtsc/logging/index.js +0 -25
- package/src/ngtsc/logging/src/console_logger.js +0 -75
- package/src/ngtsc/logging/src/logger.js +0 -28
- package/src/ngtsc/logging/testing/index.js +0 -23
- package/src/ngtsc/logging/testing/src/mock_logger.d.ts +0 -20
- package/src/ngtsc/logging/testing/src/mock_logger.js +0 -64
- package/src/ngtsc/metadata/index.js +0 -39
- package/src/ngtsc/metadata/src/api.js +0 -26
- package/src/ngtsc/metadata/src/dts.js +0 -168
- package/src/ngtsc/metadata/src/inheritance.js +0 -122
- package/src/ngtsc/metadata/src/property_mapping.js +0 -244
- package/src/ngtsc/metadata/src/registry.js +0 -133
- package/src/ngtsc/metadata/src/resource_registry.js +0 -109
- package/src/ngtsc/metadata/src/util.js +0 -275
- package/src/ngtsc/partial_evaluator/index.js +0 -31
- package/src/ngtsc/partial_evaluator/src/builtin.js +0 -125
- package/src/ngtsc/partial_evaluator/src/diagnostics.js +0 -193
- package/src/ngtsc/partial_evaluator/src/dynamic.js +0 -109
- package/src/ngtsc/partial_evaluator/src/interface.js +0 -42
- package/src/ngtsc/partial_evaluator/src/interpreter.js +0 -780
- package/src/ngtsc/partial_evaluator/src/known_declaration.js +0 -57
- package/src/ngtsc/partial_evaluator/src/result.js +0 -72
- package/src/ngtsc/partial_evaluator/src/ts_helpers.js +0 -121
- package/src/ngtsc/perf/index.js +0 -28
- package/src/ngtsc/perf/src/api.js +0 -291
- package/src/ngtsc/perf/src/clock.js +0 -31
- package/src/ngtsc/perf/src/noop.js +0 -37
- package/src/ngtsc/perf/src/recorder.js +0 -143
- package/src/ngtsc/program.js +0 -360
- package/src/ngtsc/program_driver/index.js +0 -25
- package/src/ngtsc/program_driver/src/api.js +0 -36
- package/src/ngtsc/program_driver/src/ts_create_program_driver.js +0 -200
- package/src/ngtsc/reflection/index.js +0 -36
- package/src/ngtsc/reflection/src/host.js +0 -88
- package/src/ngtsc/reflection/src/type_to_value.js +0 -259
- package/src/ngtsc/reflection/src/typescript.js +0 -640
- package/src/ngtsc/reflection/src/util.js +0 -37
- package/src/ngtsc/resource/index.js +0 -23
- package/src/ngtsc/resource/src/loader.js +0 -285
- package/src/ngtsc/scope/index.js +0 -29
- package/src/ngtsc/scope/src/api.js +0 -20
- package/src/ngtsc/scope/src/component_scope.js +0 -69
- package/src/ngtsc/scope/src/dependency.js +0 -201
- package/src/ngtsc/scope/src/local.js +0 -665
- package/src/ngtsc/scope/src/typecheck.js +0 -120
- package/src/ngtsc/shims/api.js +0 -13
- package/src/ngtsc/shims/index.js +0 -39
- package/src/ngtsc/shims/src/adapter.js +0 -266
- package/src/ngtsc/shims/src/expando.js +0 -147
- package/src/ngtsc/shims/src/factory_generator.js +0 -292
- package/src/ngtsc/shims/src/reference_tagger.js +0 -94
- package/src/ngtsc/shims/src/summary_generator.js +0 -101
- package/src/ngtsc/shims/src/util.js +0 -41
- package/src/ngtsc/sourcemaps/index.js +0 -27
- package/src/ngtsc/sourcemaps/src/content_origin.js +0 -48
- package/src/ngtsc/sourcemaps/src/raw_source_map.js +0 -13
- package/src/ngtsc/sourcemaps/src/segment_marker.js +0 -55
- package/src/ngtsc/sourcemaps/src/source_file.js +0 -519
- package/src/ngtsc/sourcemaps/src/source_file_loader.js +0 -234
- package/src/ngtsc/switch/index.js +0 -23
- package/src/ngtsc/switch/src/switch.js +0 -141
- package/src/ngtsc/transform/index.js +0 -36
- package/src/ngtsc/transform/src/alias.js +0 -46
- package/src/ngtsc/transform/src/api.js +0 -76
- package/src/ngtsc/transform/src/compilation.js +0 -862
- package/src/ngtsc/transform/src/declaration.js +0 -234
- package/src/ngtsc/transform/src/trait.js +0 -111
- package/src/ngtsc/transform/src/transform.js +0 -333
- package/src/ngtsc/transform/src/utils.js +0 -73
- package/src/ngtsc/translator/index.js +0 -37
- package/src/ngtsc/translator/src/api/ast_factory.js +0 -20
- package/src/ngtsc/translator/src/api/import_generator.js +0 -20
- package/src/ngtsc/translator/src/context.js +0 -47
- package/src/ngtsc/translator/src/import_manager.js +0 -77
- package/src/ngtsc/translator/src/translator.js +0 -347
- package/src/ngtsc/translator/src/type_translator.js +0 -220
- package/src/ngtsc/translator/src/typescript_ast_factory.js +0 -251
- package/src/ngtsc/translator/src/typescript_translator.js +0 -34
- package/src/ngtsc/tsc_plugin.js +0 -129
- package/src/ngtsc/typecheck/api/api.js +0 -20
- package/src/ngtsc/typecheck/api/checker.js +0 -44
- package/src/ngtsc/typecheck/api/completion.js +0 -29
- package/src/ngtsc/typecheck/api/context.js +0 -20
- package/src/ngtsc/typecheck/api/index.js +0 -27
- package/src/ngtsc/typecheck/api/scope.js +0 -20
- package/src/ngtsc/typecheck/api/symbols.js +0 -35
- package/src/ngtsc/typecheck/diagnostics/index.js +0 -23
- package/src/ngtsc/typecheck/diagnostics/src/diagnostic.js +0 -141
- package/src/ngtsc/typecheck/diagnostics/src/id.js +0 -37
- package/src/ngtsc/typecheck/extended/api/api.js +0 -124
- package/src/ngtsc/typecheck/extended/api/extended_template_checker.js +0 -20
- package/src/ngtsc/typecheck/extended/api/index.js +0 -23
- package/src/ngtsc/typecheck/extended/checks/invalid_banana_in_box/index.js +0 -52
- package/src/ngtsc/typecheck/extended/checks/nullish_coalescing_not_nullable/index.js +0 -64
- package/src/ngtsc/typecheck/extended/index.js +0 -23
- package/src/ngtsc/typecheck/extended/src/extended_template_checker.js +0 -55
- package/src/ngtsc/typecheck/index.js +0 -29
- package/src/ngtsc/typecheck/src/checker.js +0 -767
- package/src/ngtsc/typecheck/src/comments.js +0 -181
- package/src/ngtsc/typecheck/src/completion.js +0 -230
- package/src/ngtsc/typecheck/src/context.js +0 -424
- package/src/ngtsc/typecheck/src/diagnostics.js +0 -114
- package/src/ngtsc/typecheck/src/dom.js +0 -87
- package/src/ngtsc/typecheck/src/environment.js +0 -160
- package/src/ngtsc/typecheck/src/expression.js +0 -417
- package/src/ngtsc/typecheck/src/line_mappings.js +0 -77
- package/src/ngtsc/typecheck/src/oob.js +0 -181
- package/src/ngtsc/typecheck/src/shim.js +0 -52
- package/src/ngtsc/typecheck/src/source.js +0 -91
- package/src/ngtsc/typecheck/src/tcb_util.js +0 -165
- package/src/ngtsc/typecheck/src/template_semantics.js +0 -52
- package/src/ngtsc/typecheck/src/template_symbol_builder.js +0 -551
- package/src/ngtsc/typecheck/src/ts_util.js +0 -202
- package/src/ngtsc/typecheck/src/type_check_block.js +0 -2212
- package/src/ngtsc/typecheck/src/type_check_file.js +0 -115
- package/src/ngtsc/typecheck/src/type_constructor.js +0 -255
- package/src/ngtsc/typecheck/src/type_emitter.js +0 -164
- package/src/ngtsc/typecheck/src/type_parameter_emitter.js +0 -115
- package/src/ngtsc/util/src/path.js +0 -33
- package/src/ngtsc/util/src/typescript.js +0 -176
- package/src/ngtsc/util/src/visitor.js +0 -119
- package/src/ngtsc/xi18n/index.js +0 -22
- package/src/ngtsc/xi18n/src/context.js +0 -20
- package/src/perform_compile.js +0 -322
- package/src/perform_watch.js +0 -263
- package/src/tooling.js +0 -47
- package/src/transformers/api.js +0 -42
- package/src/transformers/compiler_host.js +0 -623
- package/src/transformers/downlevel_decorators_transform.js +0 -611
- package/src/transformers/entry_points.js +0 -25
- package/src/transformers/i18n.js +0 -76
- package/src/transformers/inline_resources.js +0 -287
- package/src/transformers/lower_expressions.js +0 -365
- package/src/transformers/metadata_cache.js +0 -96
- package/src/transformers/metadata_reader.js +0 -120
- package/src/transformers/node_emitter.js +0 -637
- package/src/transformers/node_emitter_transform.js +0 -88
- package/src/transformers/patch_alias_reference_resolution.js +0 -129
- package/src/transformers/program.js +0 -998
- package/src/transformers/r3_metadata_transform.js +0 -73
- package/src/transformers/r3_transform.js +0 -44
- package/src/transformers/util.js +0 -122
- package/src/typescript_support.js +0 -74
- package/src/version.js +0 -28
|
@@ -1,551 +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
|
-
(function (factory) {
|
|
9
|
-
if (typeof module === "object" && typeof module.exports === "object") {
|
|
10
|
-
var v = factory(require, exports);
|
|
11
|
-
if (v !== undefined) module.exports = v;
|
|
12
|
-
}
|
|
13
|
-
else if (typeof define === "function" && define.amd) {
|
|
14
|
-
define("@angular/compiler-cli/src/ngtsc/typecheck/src/template_symbol_builder", ["require", "exports", "tslib", "@angular/compiler", "typescript", "@angular/compiler-cli/src/ngtsc/util/src/typescript", "@angular/compiler-cli/src/ngtsc/typecheck/api", "@angular/compiler-cli/src/ngtsc/typecheck/src/comments", "@angular/compiler-cli/src/ngtsc/typecheck/src/ts_util"], factory);
|
|
15
|
-
}
|
|
16
|
-
})(function (require, exports) {
|
|
17
|
-
"use strict";
|
|
18
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
-
exports.SymbolBuilder = void 0;
|
|
20
|
-
var tslib_1 = require("tslib");
|
|
21
|
-
var compiler_1 = require("@angular/compiler");
|
|
22
|
-
var ts = require("typescript");
|
|
23
|
-
var typescript_1 = require("@angular/compiler-cli/src/ngtsc/util/src/typescript");
|
|
24
|
-
var api_1 = require("@angular/compiler-cli/src/ngtsc/typecheck/api");
|
|
25
|
-
var comments_1 = require("@angular/compiler-cli/src/ngtsc/typecheck/src/comments");
|
|
26
|
-
var ts_util_1 = require("@angular/compiler-cli/src/ngtsc/typecheck/src/ts_util");
|
|
27
|
-
/**
|
|
28
|
-
* Generates and caches `Symbol`s for various template structures for a given component.
|
|
29
|
-
*
|
|
30
|
-
* The `SymbolBuilder` internally caches the `Symbol`s it creates, and must be destroyed and
|
|
31
|
-
* replaced if the component's template changes.
|
|
32
|
-
*/
|
|
33
|
-
var SymbolBuilder = /** @class */ (function () {
|
|
34
|
-
function SymbolBuilder(shimPath, typeCheckBlock, templateData, componentScopeReader,
|
|
35
|
-
// The `ts.TypeChecker` depends on the current type-checking program, and so must be requested
|
|
36
|
-
// on-demand instead of cached.
|
|
37
|
-
getTypeChecker) {
|
|
38
|
-
this.shimPath = shimPath;
|
|
39
|
-
this.typeCheckBlock = typeCheckBlock;
|
|
40
|
-
this.templateData = templateData;
|
|
41
|
-
this.componentScopeReader = componentScopeReader;
|
|
42
|
-
this.getTypeChecker = getTypeChecker;
|
|
43
|
-
this.symbolCache = new Map();
|
|
44
|
-
}
|
|
45
|
-
SymbolBuilder.prototype.getSymbol = function (node) {
|
|
46
|
-
if (this.symbolCache.has(node)) {
|
|
47
|
-
return this.symbolCache.get(node);
|
|
48
|
-
}
|
|
49
|
-
var symbol = null;
|
|
50
|
-
if (node instanceof compiler_1.TmplAstBoundAttribute || node instanceof compiler_1.TmplAstTextAttribute) {
|
|
51
|
-
// TODO(atscott): input and output bindings only return the first directive match but should
|
|
52
|
-
// return a list of bindings for all of them.
|
|
53
|
-
symbol = this.getSymbolOfInputBinding(node);
|
|
54
|
-
}
|
|
55
|
-
else if (node instanceof compiler_1.TmplAstBoundEvent) {
|
|
56
|
-
symbol = this.getSymbolOfBoundEvent(node);
|
|
57
|
-
}
|
|
58
|
-
else if (node instanceof compiler_1.TmplAstElement) {
|
|
59
|
-
symbol = this.getSymbolOfElement(node);
|
|
60
|
-
}
|
|
61
|
-
else if (node instanceof compiler_1.TmplAstTemplate) {
|
|
62
|
-
symbol = this.getSymbolOfAstTemplate(node);
|
|
63
|
-
}
|
|
64
|
-
else if (node instanceof compiler_1.TmplAstVariable) {
|
|
65
|
-
symbol = this.getSymbolOfVariable(node);
|
|
66
|
-
}
|
|
67
|
-
else if (node instanceof compiler_1.TmplAstReference) {
|
|
68
|
-
symbol = this.getSymbolOfReference(node);
|
|
69
|
-
}
|
|
70
|
-
else if (node instanceof compiler_1.BindingPipe) {
|
|
71
|
-
symbol = this.getSymbolOfPipe(node);
|
|
72
|
-
}
|
|
73
|
-
else if (node instanceof compiler_1.AST) {
|
|
74
|
-
symbol = this.getSymbolOfTemplateExpression(node);
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
// TODO(atscott): TmplAstContent, TmplAstIcu
|
|
78
|
-
}
|
|
79
|
-
this.symbolCache.set(node, symbol);
|
|
80
|
-
return symbol;
|
|
81
|
-
};
|
|
82
|
-
SymbolBuilder.prototype.getSymbolOfAstTemplate = function (template) {
|
|
83
|
-
var directives = this.getDirectivesOfNode(template);
|
|
84
|
-
return { kind: api_1.SymbolKind.Template, directives: directives, templateNode: template };
|
|
85
|
-
};
|
|
86
|
-
SymbolBuilder.prototype.getSymbolOfElement = function (element) {
|
|
87
|
-
var _a;
|
|
88
|
-
var elementSourceSpan = (_a = element.startSourceSpan) !== null && _a !== void 0 ? _a : element.sourceSpan;
|
|
89
|
-
var node = (0, comments_1.findFirstMatchingNode)(this.typeCheckBlock, { withSpan: elementSourceSpan, filter: ts.isVariableDeclaration });
|
|
90
|
-
if (node === null) {
|
|
91
|
-
return null;
|
|
92
|
-
}
|
|
93
|
-
var symbolFromDeclaration = this.getSymbolOfTsNode(node);
|
|
94
|
-
if (symbolFromDeclaration === null || symbolFromDeclaration.tsSymbol === null) {
|
|
95
|
-
return null;
|
|
96
|
-
}
|
|
97
|
-
var directives = this.getDirectivesOfNode(element);
|
|
98
|
-
// All statements in the TCB are `Expression`s that optionally include more information.
|
|
99
|
-
// An `ElementSymbol` uses the information returned for the variable declaration expression,
|
|
100
|
-
// adds the directives for the element, and updates the `kind` to be `SymbolKind.Element`.
|
|
101
|
-
return (0, tslib_1.__assign)((0, tslib_1.__assign)({}, symbolFromDeclaration), { kind: api_1.SymbolKind.Element, directives: directives, templateNode: element });
|
|
102
|
-
};
|
|
103
|
-
SymbolBuilder.prototype.getDirectivesOfNode = function (element) {
|
|
104
|
-
var _this = this;
|
|
105
|
-
var _a;
|
|
106
|
-
var elementSourceSpan = (_a = element.startSourceSpan) !== null && _a !== void 0 ? _a : element.sourceSpan;
|
|
107
|
-
var tcbSourceFile = this.typeCheckBlock.getSourceFile();
|
|
108
|
-
// directives could be either:
|
|
109
|
-
// - var _t1: TestDir /*T:D*/ = (null!);
|
|
110
|
-
// - var _t1 /*T:D*/ = _ctor1({});
|
|
111
|
-
var isDirectiveDeclaration = function (node) {
|
|
112
|
-
return (ts.isTypeNode(node) || ts.isIdentifier(node)) && ts.isVariableDeclaration(node.parent) &&
|
|
113
|
-
(0, comments_1.hasExpressionIdentifier)(tcbSourceFile, node, comments_1.ExpressionIdentifier.DIRECTIVE);
|
|
114
|
-
};
|
|
115
|
-
var nodes = (0, comments_1.findAllMatchingNodes)(this.typeCheckBlock, { withSpan: elementSourceSpan, filter: isDirectiveDeclaration });
|
|
116
|
-
return nodes
|
|
117
|
-
.map(function (node) {
|
|
118
|
-
var _a;
|
|
119
|
-
var symbol = _this.getSymbolOfTsNode(node.parent);
|
|
120
|
-
if (symbol === null || !(0, typescript_1.isSymbolWithValueDeclaration)(symbol.tsSymbol) ||
|
|
121
|
-
!ts.isClassDeclaration(symbol.tsSymbol.valueDeclaration)) {
|
|
122
|
-
return null;
|
|
123
|
-
}
|
|
124
|
-
var meta = _this.getDirectiveMeta(element, symbol.tsSymbol.valueDeclaration);
|
|
125
|
-
if (meta === null) {
|
|
126
|
-
return null;
|
|
127
|
-
}
|
|
128
|
-
var ngModule = _this.getDirectiveModule(symbol.tsSymbol.valueDeclaration);
|
|
129
|
-
if (meta.selector === null) {
|
|
130
|
-
return null;
|
|
131
|
-
}
|
|
132
|
-
var isComponent = (_a = meta.isComponent) !== null && _a !== void 0 ? _a : null;
|
|
133
|
-
var directiveSymbol = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, symbol), { tsSymbol: symbol.tsSymbol, selector: meta.selector, isComponent: isComponent, ngModule: ngModule, kind: api_1.SymbolKind.Directive, isStructural: meta.isStructural });
|
|
134
|
-
return directiveSymbol;
|
|
135
|
-
})
|
|
136
|
-
.filter(function (d) { return d !== null; });
|
|
137
|
-
};
|
|
138
|
-
SymbolBuilder.prototype.getDirectiveMeta = function (host, directiveDeclaration) {
|
|
139
|
-
var _a;
|
|
140
|
-
var directives = this.templateData.boundTarget.getDirectivesOfNode(host);
|
|
141
|
-
// `getDirectivesOfNode` will not return the directives intended for an element
|
|
142
|
-
// on a microsyntax template, for example `<div *ngFor="let user of users;" dir>`,
|
|
143
|
-
// the `dir` will be skipped, but it's needed in language service.
|
|
144
|
-
var firstChild = host.children[0];
|
|
145
|
-
if (firstChild instanceof compiler_1.TmplAstElement) {
|
|
146
|
-
var isMicrosyntaxTemplate = host instanceof compiler_1.TmplAstTemplate &&
|
|
147
|
-
sourceSpanEqual(firstChild.sourceSpan, host.sourceSpan);
|
|
148
|
-
if (isMicrosyntaxTemplate) {
|
|
149
|
-
var firstChildDirectives = this.templateData.boundTarget.getDirectivesOfNode(firstChild);
|
|
150
|
-
if (firstChildDirectives !== null && directives !== null) {
|
|
151
|
-
directives = directives.concat(firstChildDirectives);
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
directives = directives !== null && directives !== void 0 ? directives : firstChildDirectives;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
if (directives === null) {
|
|
159
|
-
return null;
|
|
160
|
-
}
|
|
161
|
-
return (_a = directives.find(function (m) { return m.ref.node === directiveDeclaration; })) !== null && _a !== void 0 ? _a : null;
|
|
162
|
-
};
|
|
163
|
-
SymbolBuilder.prototype.getDirectiveModule = function (declaration) {
|
|
164
|
-
var scope = this.componentScopeReader.getScopeForComponent(declaration);
|
|
165
|
-
if (scope === null) {
|
|
166
|
-
return null;
|
|
167
|
-
}
|
|
168
|
-
return scope.ngModule;
|
|
169
|
-
};
|
|
170
|
-
SymbolBuilder.prototype.getSymbolOfBoundEvent = function (eventBinding) {
|
|
171
|
-
var e_1, _a;
|
|
172
|
-
var consumer = this.templateData.boundTarget.getConsumerOfBinding(eventBinding);
|
|
173
|
-
if (consumer === null) {
|
|
174
|
-
return null;
|
|
175
|
-
}
|
|
176
|
-
// Outputs in the TCB look like one of the two:
|
|
177
|
-
// * _t1["outputField"].subscribe(handler);
|
|
178
|
-
// * _t1.addEventListener(handler);
|
|
179
|
-
// Even with strict null checks disabled, we still produce the access as a separate statement
|
|
180
|
-
// so that it can be found here.
|
|
181
|
-
var expectedAccess;
|
|
182
|
-
if (consumer instanceof compiler_1.TmplAstTemplate || consumer instanceof compiler_1.TmplAstElement) {
|
|
183
|
-
expectedAccess = 'addEventListener';
|
|
184
|
-
}
|
|
185
|
-
else {
|
|
186
|
-
var bindingPropertyNames = consumer.outputs.getByBindingPropertyName(eventBinding.name);
|
|
187
|
-
if (bindingPropertyNames === null || bindingPropertyNames.length === 0) {
|
|
188
|
-
return null;
|
|
189
|
-
}
|
|
190
|
-
// Note that we only get the expectedAccess text from a single consumer of the binding. If
|
|
191
|
-
// there are multiple consumers (not supported in the `boundTarget` API) and one of them has
|
|
192
|
-
// an alias, it will not get matched here.
|
|
193
|
-
expectedAccess = bindingPropertyNames[0].classPropertyName;
|
|
194
|
-
}
|
|
195
|
-
function filter(n) {
|
|
196
|
-
if (!(0, ts_util_1.isAccessExpression)(n)) {
|
|
197
|
-
return false;
|
|
198
|
-
}
|
|
199
|
-
if (ts.isPropertyAccessExpression(n)) {
|
|
200
|
-
return n.name.getText() === expectedAccess;
|
|
201
|
-
}
|
|
202
|
-
else {
|
|
203
|
-
return ts.isStringLiteral(n.argumentExpression) &&
|
|
204
|
-
n.argumentExpression.text === expectedAccess;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
var outputFieldAccesses = (0, comments_1.findAllMatchingNodes)(this.typeCheckBlock, { withSpan: eventBinding.keySpan, filter: filter });
|
|
208
|
-
var bindings = [];
|
|
209
|
-
try {
|
|
210
|
-
for (var outputFieldAccesses_1 = (0, tslib_1.__values)(outputFieldAccesses), outputFieldAccesses_1_1 = outputFieldAccesses_1.next(); !outputFieldAccesses_1_1.done; outputFieldAccesses_1_1 = outputFieldAccesses_1.next()) {
|
|
211
|
-
var outputFieldAccess = outputFieldAccesses_1_1.value;
|
|
212
|
-
if (consumer instanceof compiler_1.TmplAstTemplate || consumer instanceof compiler_1.TmplAstElement) {
|
|
213
|
-
if (!ts.isPropertyAccessExpression(outputFieldAccess)) {
|
|
214
|
-
continue;
|
|
215
|
-
}
|
|
216
|
-
var addEventListener_1 = outputFieldAccess.name;
|
|
217
|
-
var tsSymbol = this.getTypeChecker().getSymbolAtLocation(addEventListener_1);
|
|
218
|
-
var tsType = this.getTypeChecker().getTypeAtLocation(addEventListener_1);
|
|
219
|
-
var positionInShimFile = this.getShimPositionForNode(addEventListener_1);
|
|
220
|
-
var target = this.getSymbol(consumer);
|
|
221
|
-
if (target === null || tsSymbol === undefined) {
|
|
222
|
-
continue;
|
|
223
|
-
}
|
|
224
|
-
bindings.push({
|
|
225
|
-
kind: api_1.SymbolKind.Binding,
|
|
226
|
-
tsSymbol: tsSymbol,
|
|
227
|
-
tsType: tsType,
|
|
228
|
-
target: target,
|
|
229
|
-
shimLocation: { shimPath: this.shimPath, positionInShimFile: positionInShimFile },
|
|
230
|
-
});
|
|
231
|
-
}
|
|
232
|
-
else {
|
|
233
|
-
if (!ts.isElementAccessExpression(outputFieldAccess)) {
|
|
234
|
-
continue;
|
|
235
|
-
}
|
|
236
|
-
var tsSymbol = this.getTypeChecker().getSymbolAtLocation(outputFieldAccess.argumentExpression);
|
|
237
|
-
if (tsSymbol === undefined) {
|
|
238
|
-
continue;
|
|
239
|
-
}
|
|
240
|
-
var target = this.getDirectiveSymbolForAccessExpression(outputFieldAccess, consumer);
|
|
241
|
-
if (target === null) {
|
|
242
|
-
continue;
|
|
243
|
-
}
|
|
244
|
-
var positionInShimFile = this.getShimPositionForNode(outputFieldAccess);
|
|
245
|
-
var tsType = this.getTypeChecker().getTypeAtLocation(outputFieldAccess);
|
|
246
|
-
bindings.push({
|
|
247
|
-
kind: api_1.SymbolKind.Binding,
|
|
248
|
-
tsSymbol: tsSymbol,
|
|
249
|
-
tsType: tsType,
|
|
250
|
-
target: target,
|
|
251
|
-
shimLocation: { shimPath: this.shimPath, positionInShimFile: positionInShimFile },
|
|
252
|
-
});
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
257
|
-
finally {
|
|
258
|
-
try {
|
|
259
|
-
if (outputFieldAccesses_1_1 && !outputFieldAccesses_1_1.done && (_a = outputFieldAccesses_1.return)) _a.call(outputFieldAccesses_1);
|
|
260
|
-
}
|
|
261
|
-
finally { if (e_1) throw e_1.error; }
|
|
262
|
-
}
|
|
263
|
-
if (bindings.length === 0) {
|
|
264
|
-
return null;
|
|
265
|
-
}
|
|
266
|
-
return { kind: api_1.SymbolKind.Output, bindings: bindings };
|
|
267
|
-
};
|
|
268
|
-
SymbolBuilder.prototype.getSymbolOfInputBinding = function (binding) {
|
|
269
|
-
var e_2, _a;
|
|
270
|
-
var consumer = this.templateData.boundTarget.getConsumerOfBinding(binding);
|
|
271
|
-
if (consumer === null) {
|
|
272
|
-
return null;
|
|
273
|
-
}
|
|
274
|
-
if (consumer instanceof compiler_1.TmplAstElement || consumer instanceof compiler_1.TmplAstTemplate) {
|
|
275
|
-
var host = this.getSymbol(consumer);
|
|
276
|
-
return host !== null ? { kind: api_1.SymbolKind.DomBinding, host: host } : null;
|
|
277
|
-
}
|
|
278
|
-
var nodes = (0, comments_1.findAllMatchingNodes)(this.typeCheckBlock, { withSpan: binding.sourceSpan, filter: typescript_1.isAssignment });
|
|
279
|
-
var bindings = [];
|
|
280
|
-
try {
|
|
281
|
-
for (var nodes_1 = (0, tslib_1.__values)(nodes), nodes_1_1 = nodes_1.next(); !nodes_1_1.done; nodes_1_1 = nodes_1.next()) {
|
|
282
|
-
var node = nodes_1_1.value;
|
|
283
|
-
if (!(0, ts_util_1.isAccessExpression)(node.left)) {
|
|
284
|
-
continue;
|
|
285
|
-
}
|
|
286
|
-
var symbolInfo = this.getSymbolOfTsNode(node.left);
|
|
287
|
-
if (symbolInfo === null || symbolInfo.tsSymbol === null) {
|
|
288
|
-
continue;
|
|
289
|
-
}
|
|
290
|
-
var target = this.getDirectiveSymbolForAccessExpression(node.left, consumer);
|
|
291
|
-
if (target === null) {
|
|
292
|
-
continue;
|
|
293
|
-
}
|
|
294
|
-
bindings.push((0, tslib_1.__assign)((0, tslib_1.__assign)({}, symbolInfo), { tsSymbol: symbolInfo.tsSymbol, kind: api_1.SymbolKind.Binding, target: target }));
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
298
|
-
finally {
|
|
299
|
-
try {
|
|
300
|
-
if (nodes_1_1 && !nodes_1_1.done && (_a = nodes_1.return)) _a.call(nodes_1);
|
|
301
|
-
}
|
|
302
|
-
finally { if (e_2) throw e_2.error; }
|
|
303
|
-
}
|
|
304
|
-
if (bindings.length === 0) {
|
|
305
|
-
return null;
|
|
306
|
-
}
|
|
307
|
-
return { kind: api_1.SymbolKind.Input, bindings: bindings };
|
|
308
|
-
};
|
|
309
|
-
SymbolBuilder.prototype.getDirectiveSymbolForAccessExpression = function (node, _a) {
|
|
310
|
-
var _b;
|
|
311
|
-
var isComponent = _a.isComponent, selector = _a.selector, isStructural = _a.isStructural;
|
|
312
|
-
// In either case, `_t1["index"]` or `_t1.index`, `node.expression` is _t1.
|
|
313
|
-
// The retrieved symbol for _t1 will be the variable declaration.
|
|
314
|
-
var tsSymbol = this.getTypeChecker().getSymbolAtLocation(node.expression);
|
|
315
|
-
if ((tsSymbol === null || tsSymbol === void 0 ? void 0 : tsSymbol.declarations) === undefined || tsSymbol.declarations.length === 0 ||
|
|
316
|
-
selector === null) {
|
|
317
|
-
return null;
|
|
318
|
-
}
|
|
319
|
-
var _c = (0, tslib_1.__read)(tsSymbol.declarations, 1), declaration = _c[0];
|
|
320
|
-
if (!ts.isVariableDeclaration(declaration) ||
|
|
321
|
-
!(0, comments_1.hasExpressionIdentifier)(
|
|
322
|
-
// The expression identifier could be on the type (for regular directives) or the name
|
|
323
|
-
// (for generic directives and the ctor op).
|
|
324
|
-
declaration.getSourceFile(), (_b = declaration.type) !== null && _b !== void 0 ? _b : declaration.name, comments_1.ExpressionIdentifier.DIRECTIVE)) {
|
|
325
|
-
return null;
|
|
326
|
-
}
|
|
327
|
-
var symbol = this.getSymbolOfTsNode(declaration);
|
|
328
|
-
if (symbol === null || !(0, typescript_1.isSymbolWithValueDeclaration)(symbol.tsSymbol) ||
|
|
329
|
-
!ts.isClassDeclaration(symbol.tsSymbol.valueDeclaration)) {
|
|
330
|
-
return null;
|
|
331
|
-
}
|
|
332
|
-
var ngModule = this.getDirectiveModule(symbol.tsSymbol.valueDeclaration);
|
|
333
|
-
return {
|
|
334
|
-
kind: api_1.SymbolKind.Directive,
|
|
335
|
-
tsSymbol: symbol.tsSymbol,
|
|
336
|
-
tsType: symbol.tsType,
|
|
337
|
-
shimLocation: symbol.shimLocation,
|
|
338
|
-
isComponent: isComponent,
|
|
339
|
-
isStructural: isStructural,
|
|
340
|
-
selector: selector,
|
|
341
|
-
ngModule: ngModule,
|
|
342
|
-
};
|
|
343
|
-
};
|
|
344
|
-
SymbolBuilder.prototype.getSymbolOfVariable = function (variable) {
|
|
345
|
-
var node = (0, comments_1.findFirstMatchingNode)(this.typeCheckBlock, { withSpan: variable.sourceSpan, filter: ts.isVariableDeclaration });
|
|
346
|
-
if (node === null || node.initializer === undefined) {
|
|
347
|
-
return null;
|
|
348
|
-
}
|
|
349
|
-
var expressionSymbol = this.getSymbolOfTsNode(node.initializer);
|
|
350
|
-
if (expressionSymbol === null) {
|
|
351
|
-
return null;
|
|
352
|
-
}
|
|
353
|
-
return {
|
|
354
|
-
tsType: expressionSymbol.tsType,
|
|
355
|
-
tsSymbol: expressionSymbol.tsSymbol,
|
|
356
|
-
initializerLocation: expressionSymbol.shimLocation,
|
|
357
|
-
kind: api_1.SymbolKind.Variable,
|
|
358
|
-
declaration: variable,
|
|
359
|
-
localVarLocation: {
|
|
360
|
-
shimPath: this.shimPath,
|
|
361
|
-
positionInShimFile: this.getShimPositionForNode(node.name),
|
|
362
|
-
}
|
|
363
|
-
};
|
|
364
|
-
};
|
|
365
|
-
SymbolBuilder.prototype.getSymbolOfReference = function (ref) {
|
|
366
|
-
var target = this.templateData.boundTarget.getReferenceTarget(ref);
|
|
367
|
-
// Find the node for the reference declaration, i.e. `var _t2 = _t1;`
|
|
368
|
-
var node = (0, comments_1.findFirstMatchingNode)(this.typeCheckBlock, { withSpan: ref.sourceSpan, filter: ts.isVariableDeclaration });
|
|
369
|
-
if (node === null || target === null || node.initializer === undefined) {
|
|
370
|
-
return null;
|
|
371
|
-
}
|
|
372
|
-
// Get the original declaration for the references variable, with the exception of template refs
|
|
373
|
-
// which are of the form var _t3 = (_t2 as any as i2.TemplateRef<any>)
|
|
374
|
-
// TODO(atscott): Consider adding an `ExpressionIdentifier` to tag variable declaration
|
|
375
|
-
// initializers as invalid for symbol retrieval.
|
|
376
|
-
var originalDeclaration = ts.isParenthesizedExpression(node.initializer) &&
|
|
377
|
-
ts.isAsExpression(node.initializer.expression) ?
|
|
378
|
-
this.getTypeChecker().getSymbolAtLocation(node.name) :
|
|
379
|
-
this.getTypeChecker().getSymbolAtLocation(node.initializer);
|
|
380
|
-
if (originalDeclaration === undefined || originalDeclaration.valueDeclaration === undefined) {
|
|
381
|
-
return null;
|
|
382
|
-
}
|
|
383
|
-
var symbol = this.getSymbolOfTsNode(originalDeclaration.valueDeclaration);
|
|
384
|
-
if (symbol === null || symbol.tsSymbol === null) {
|
|
385
|
-
return null;
|
|
386
|
-
}
|
|
387
|
-
var referenceVarShimLocation = {
|
|
388
|
-
shimPath: this.shimPath,
|
|
389
|
-
positionInShimFile: this.getShimPositionForNode(node),
|
|
390
|
-
};
|
|
391
|
-
if (target instanceof compiler_1.TmplAstTemplate || target instanceof compiler_1.TmplAstElement) {
|
|
392
|
-
return {
|
|
393
|
-
kind: api_1.SymbolKind.Reference,
|
|
394
|
-
tsSymbol: symbol.tsSymbol,
|
|
395
|
-
tsType: symbol.tsType,
|
|
396
|
-
target: target,
|
|
397
|
-
declaration: ref,
|
|
398
|
-
targetLocation: symbol.shimLocation,
|
|
399
|
-
referenceVarLocation: referenceVarShimLocation,
|
|
400
|
-
};
|
|
401
|
-
}
|
|
402
|
-
else {
|
|
403
|
-
if (!ts.isClassDeclaration(target.directive.ref.node)) {
|
|
404
|
-
return null;
|
|
405
|
-
}
|
|
406
|
-
return {
|
|
407
|
-
kind: api_1.SymbolKind.Reference,
|
|
408
|
-
tsSymbol: symbol.tsSymbol,
|
|
409
|
-
tsType: symbol.tsType,
|
|
410
|
-
declaration: ref,
|
|
411
|
-
target: target.directive.ref.node,
|
|
412
|
-
targetLocation: symbol.shimLocation,
|
|
413
|
-
referenceVarLocation: referenceVarShimLocation,
|
|
414
|
-
};
|
|
415
|
-
}
|
|
416
|
-
};
|
|
417
|
-
SymbolBuilder.prototype.getSymbolOfPipe = function (expression) {
|
|
418
|
-
var methodAccess = (0, comments_1.findFirstMatchingNode)(this.typeCheckBlock, { withSpan: expression.nameSpan, filter: ts.isPropertyAccessExpression });
|
|
419
|
-
if (methodAccess === null) {
|
|
420
|
-
return null;
|
|
421
|
-
}
|
|
422
|
-
var pipeVariableNode = methodAccess.expression;
|
|
423
|
-
var pipeDeclaration = this.getTypeChecker().getSymbolAtLocation(pipeVariableNode);
|
|
424
|
-
if (pipeDeclaration === undefined || pipeDeclaration.valueDeclaration === undefined) {
|
|
425
|
-
return null;
|
|
426
|
-
}
|
|
427
|
-
var pipeInstance = this.getSymbolOfTsNode(pipeDeclaration.valueDeclaration);
|
|
428
|
-
// The instance should never be null, nor should the symbol lack a value declaration. This
|
|
429
|
-
// is because the node used to look for the `pipeInstance` symbol info is a value
|
|
430
|
-
// declaration of another symbol (i.e. the `pipeDeclaration` symbol).
|
|
431
|
-
if (pipeInstance === null || !(0, typescript_1.isSymbolWithValueDeclaration)(pipeInstance.tsSymbol)) {
|
|
432
|
-
return null;
|
|
433
|
-
}
|
|
434
|
-
var symbolInfo = this.getSymbolOfTsNode(methodAccess);
|
|
435
|
-
if (symbolInfo === null) {
|
|
436
|
-
return null;
|
|
437
|
-
}
|
|
438
|
-
return (0, tslib_1.__assign)((0, tslib_1.__assign)({ kind: api_1.SymbolKind.Pipe }, symbolInfo), { classSymbol: (0, tslib_1.__assign)((0, tslib_1.__assign)({}, pipeInstance), { tsSymbol: pipeInstance.tsSymbol }) });
|
|
439
|
-
};
|
|
440
|
-
SymbolBuilder.prototype.getSymbolOfTemplateExpression = function (expression) {
|
|
441
|
-
if (expression instanceof compiler_1.ASTWithSource) {
|
|
442
|
-
expression = expression.ast;
|
|
443
|
-
}
|
|
444
|
-
var expressionTarget = this.templateData.boundTarget.getExpressionTarget(expression);
|
|
445
|
-
if (expressionTarget !== null) {
|
|
446
|
-
return this.getSymbol(expressionTarget);
|
|
447
|
-
}
|
|
448
|
-
var withSpan = expression.sourceSpan;
|
|
449
|
-
// The `name` part of a `PropertyWrite` and a non-safe `Call` does not have its own
|
|
450
|
-
// AST so there is no way to retrieve a `Symbol` for just the `name` via a specific node.
|
|
451
|
-
if (expression instanceof compiler_1.PropertyWrite) {
|
|
452
|
-
withSpan = expression.nameSpan;
|
|
453
|
-
}
|
|
454
|
-
else if (expression instanceof compiler_1.Call && expression.receiver instanceof compiler_1.PropertyRead) {
|
|
455
|
-
withSpan = expression.receiver.nameSpan;
|
|
456
|
-
}
|
|
457
|
-
var node = null;
|
|
458
|
-
// Property reads in templates usually map to a `PropertyAccessExpression`
|
|
459
|
-
// (e.g. `ctx.foo`) so try looking for one first.
|
|
460
|
-
if (expression instanceof compiler_1.PropertyRead) {
|
|
461
|
-
node = (0, comments_1.findFirstMatchingNode)(this.typeCheckBlock, { withSpan: withSpan, filter: ts.isPropertyAccessExpression });
|
|
462
|
-
}
|
|
463
|
-
// Otherwise fall back to searching for any AST node.
|
|
464
|
-
if (node === null) {
|
|
465
|
-
node = (0, comments_1.findFirstMatchingNode)(this.typeCheckBlock, { withSpan: withSpan, filter: anyNodeFilter });
|
|
466
|
-
}
|
|
467
|
-
if (node === null) {
|
|
468
|
-
return null;
|
|
469
|
-
}
|
|
470
|
-
while (ts.isParenthesizedExpression(node)) {
|
|
471
|
-
node = node.expression;
|
|
472
|
-
}
|
|
473
|
-
// - If we have safe property read ("a?.b") we want to get the Symbol for b, the `whenTrue`
|
|
474
|
-
// expression.
|
|
475
|
-
// - If our expression is a pipe binding ("a | test:b:c"), we want the Symbol for the
|
|
476
|
-
// `transform` on the pipe.
|
|
477
|
-
// - Otherwise, we retrieve the symbol for the node itself with no special considerations
|
|
478
|
-
if ((expression instanceof compiler_1.SafePropertyRead ||
|
|
479
|
-
(expression instanceof compiler_1.Call && expression.receiver instanceof compiler_1.SafePropertyRead)) &&
|
|
480
|
-
ts.isConditionalExpression(node)) {
|
|
481
|
-
var whenTrueSymbol = (expression instanceof compiler_1.Call && ts.isCallExpression(node.whenTrue)) ?
|
|
482
|
-
this.getSymbolOfTsNode(node.whenTrue.expression) :
|
|
483
|
-
this.getSymbolOfTsNode(node.whenTrue);
|
|
484
|
-
if (whenTrueSymbol === null) {
|
|
485
|
-
return null;
|
|
486
|
-
}
|
|
487
|
-
return (0, tslib_1.__assign)((0, tslib_1.__assign)({}, whenTrueSymbol), { kind: api_1.SymbolKind.Expression,
|
|
488
|
-
// Rather than using the type of only the `whenTrue` part of the expression, we should
|
|
489
|
-
// still get the type of the whole conditional expression to include `|undefined`.
|
|
490
|
-
tsType: this.getTypeChecker().getTypeAtLocation(node) });
|
|
491
|
-
}
|
|
492
|
-
else {
|
|
493
|
-
var symbolInfo = this.getSymbolOfTsNode(node);
|
|
494
|
-
return symbolInfo === null ? null : (0, tslib_1.__assign)((0, tslib_1.__assign)({}, symbolInfo), { kind: api_1.SymbolKind.Expression });
|
|
495
|
-
}
|
|
496
|
-
};
|
|
497
|
-
SymbolBuilder.prototype.getSymbolOfTsNode = function (node) {
|
|
498
|
-
var _a;
|
|
499
|
-
while (ts.isParenthesizedExpression(node)) {
|
|
500
|
-
node = node.expression;
|
|
501
|
-
}
|
|
502
|
-
var tsSymbol;
|
|
503
|
-
if (ts.isPropertyAccessExpression(node)) {
|
|
504
|
-
tsSymbol = this.getTypeChecker().getSymbolAtLocation(node.name);
|
|
505
|
-
}
|
|
506
|
-
else if (ts.isElementAccessExpression(node)) {
|
|
507
|
-
tsSymbol = this.getTypeChecker().getSymbolAtLocation(node.argumentExpression);
|
|
508
|
-
}
|
|
509
|
-
else {
|
|
510
|
-
tsSymbol = this.getTypeChecker().getSymbolAtLocation(node);
|
|
511
|
-
}
|
|
512
|
-
var positionInShimFile = this.getShimPositionForNode(node);
|
|
513
|
-
var type = this.getTypeChecker().getTypeAtLocation(node);
|
|
514
|
-
return {
|
|
515
|
-
// If we could not find a symbol, fall back to the symbol on the type for the node.
|
|
516
|
-
// Some nodes won't have a "symbol at location" but will have a symbol for the type.
|
|
517
|
-
// Examples of this would be literals and `document.createElement('div')`.
|
|
518
|
-
tsSymbol: (_a = tsSymbol !== null && tsSymbol !== void 0 ? tsSymbol : type.symbol) !== null && _a !== void 0 ? _a : null,
|
|
519
|
-
tsType: type,
|
|
520
|
-
shimLocation: { shimPath: this.shimPath, positionInShimFile: positionInShimFile },
|
|
521
|
-
};
|
|
522
|
-
};
|
|
523
|
-
SymbolBuilder.prototype.getShimPositionForNode = function (node) {
|
|
524
|
-
if (ts.isTypeReferenceNode(node)) {
|
|
525
|
-
return this.getShimPositionForNode(node.typeName);
|
|
526
|
-
}
|
|
527
|
-
else if (ts.isQualifiedName(node)) {
|
|
528
|
-
return node.right.getStart();
|
|
529
|
-
}
|
|
530
|
-
else if (ts.isPropertyAccessExpression(node)) {
|
|
531
|
-
return node.name.getStart();
|
|
532
|
-
}
|
|
533
|
-
else if (ts.isElementAccessExpression(node)) {
|
|
534
|
-
return node.argumentExpression.getStart();
|
|
535
|
-
}
|
|
536
|
-
else {
|
|
537
|
-
return node.getStart();
|
|
538
|
-
}
|
|
539
|
-
};
|
|
540
|
-
return SymbolBuilder;
|
|
541
|
-
}());
|
|
542
|
-
exports.SymbolBuilder = SymbolBuilder;
|
|
543
|
-
/** Filter predicate function that matches any AST node. */
|
|
544
|
-
function anyNodeFilter(n) {
|
|
545
|
-
return true;
|
|
546
|
-
}
|
|
547
|
-
function sourceSpanEqual(a, b) {
|
|
548
|
-
return a.start.offset === b.start.offset && a.end.offset === b.end.offset;
|
|
549
|
-
}
|
|
550
|
-
});
|
|
551
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVfc3ltYm9sX2J1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL3R5cGVjaGVjay9zcmMvdGVtcGxhdGVfc3ltYm9sX2J1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7OztJQUVILDhDQUF5UjtJQUN6UiwrQkFBaUM7SUFLakMsa0ZBQXFGO0lBQ3JGLHFFQUErUjtJQUUvUixtRkFBc0g7SUFFdEgsaUZBQTZDO0lBRTdDOzs7OztPQUtHO0lBQ0g7UUFHRSx1QkFDcUIsUUFBd0IsRUFDeEIsY0FBdUIsRUFDdkIsWUFBMEIsRUFDMUIsb0JBQTBDO1FBQzNELDhGQUE4RjtRQUM5RiwrQkFBK0I7UUFDZCxjQUFvQztZQU5wQyxhQUFRLEdBQVIsUUFBUSxDQUFnQjtZQUN4QixtQkFBYyxHQUFkLGNBQWMsQ0FBUztZQUN2QixpQkFBWSxHQUFaLFlBQVksQ0FBYztZQUMxQix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1lBRzFDLG1CQUFjLEdBQWQsY0FBYyxDQUFzQjtZQVRqRCxnQkFBVyxHQUFHLElBQUksR0FBRyxFQUFnQyxDQUFDO1FBVTNELENBQUM7UUFLSixpQ0FBUyxHQUFULFVBQVUsSUFBcUI7WUFDN0IsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDOUIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUUsQ0FBQzthQUNwQztZQUVELElBQUksTUFBTSxHQUFnQixJQUFJLENBQUM7WUFDL0IsSUFBSSxJQUFJLFlBQVksZ0NBQXFCLElBQUksSUFBSSxZQUFZLCtCQUFvQixFQUFFO2dCQUNqRiw0RkFBNEY7Z0JBQzVGLDZDQUE2QztnQkFDN0MsTUFBTSxHQUFHLElBQUksQ0FBQyx1QkFB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Y2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtBU1QsIEFTVFdpdGhTb3VyY2UsIEJpbmRpbmdQaXBlLCBDYWxsLCBQYXJzZVNvdXJjZVNwYW4sIFByb3BlcnR5UmVhZCwgUHJvcGVydHlXcml0ZSwgU2FmZVByb3BlcnR5UmVhZCwgVG1wbEFzdEJvdW5kQXR0cmlidXRlLCBUbXBsQXN0Qm91bmRFdmVudCwgVG1wbEFzdEVsZW1lbnQsIFRtcGxBc3ROb2RlLCBUbXBsQXN0UmVmZXJlbmNlLCBUbXBsQXN0VGVtcGxhdGUsIFRtcGxBc3RUZXh0QXR0cmlidXRlLCBUbXBsQXN0VmFyaWFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge0Fic29sdXRlRnNQYXRofSBmcm9tICcuLi8uLi9maWxlX3N5c3RlbSc7XG5pbXBvcnQge0NsYXNzRGVjbGFyYXRpb259IGZyb20gJy4uLy4uL3JlZmxlY3Rpb24nO1xuaW1wb3J0IHtDb21wb25lbnRTY29wZVJlYWRlcn0gZnJvbSAnLi4vLi4vc2NvcGUnO1xuaW1wb3J0IHtpc0Fzc2lnbm1lbnQsIGlzU3ltYm9sV2l0aFZhbHVlRGVjbGFyYXRpb259IGZyb20gJy4uLy4uL3V0aWwvc3JjL3R5cGVzY3JpcHQnO1xuaW1wb3J0IHtCaW5kaW5nU3ltYm9sLCBEaXJlY3RpdmVTeW1ib2wsIERvbUJpbmRpbmdTeW1ib2wsIEVsZW1lbnRTeW1ib2wsIEV4cHJlc3Npb25TeW1ib2wsIElucHV0QmluZGluZ1N5bWJvbCwgT3V0cHV0QmluZGluZ1N5bWJvbCwgUGlwZVN5bWJvbCwgUmVmZXJlbmNlU3ltYm9sLCBTaGltTG9jYXRpb24sIFN5bWJvbCwgU3ltYm9sS2luZCwgVGVtcGxhdGVTeW1ib2wsIFRzTm9kZVN5bWJvbEluZm8sIFR5cGVDaGVja2FibGVEaXJlY3RpdmVNZXRhLCBWYXJpYWJsZVN5bWJvbH0gZnJvbSAnLi4vYXBpJztcblxuaW1wb3J0IHtFeHByZXNzaW9uSWRlbnRpZmllciwgZmluZEFsbE1hdGNoaW5nTm9kZXMsIGZpbmRGaXJzdE1hdGNoaW5nTm9kZSwgaGFzRXhwcmVzc2lvbklkZW50aWZpZXJ9IGZyb20gJy4vY29tbWVudHMnO1xuaW1wb3J0IHtUZW1wbGF0ZURhdGF9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQge2lzQWNjZXNzRXhwcmVzc2lvbn0gZnJvbSAnLi90c191dGlsJztcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYW5kIGNhY2hlcyBgU3ltYm9sYHMgZm9yIHZhcmlvdXMgdGVtcGxhdGUgc3RydWN0dXJlcyBmb3IgYSBnaXZlbiBjb21wb25lbnQuXG4gKlxuICogVGhlIGBTeW1ib2xCdWlsZGVyYCBpbnRlcm5hbGx5IGNhY2hlcyB0aGUgYFN5bWJvbGBzIGl0IGNyZWF0ZXMsIGFuZCBtdXN0IGJlIGRlc3Ryb3llZCBhbmRcbiAqIHJlcGxhY2VkIGlmIHRoZSBjb21wb25lbnQncyB0ZW1wbGF0ZSBjaGFuZ2VzLlxuICovXG5leHBvcnQgY2xhc3MgU3ltYm9sQnVpbGRlciB7XG4gIHByaXZhdGUgc3ltYm9sQ2FjaGUgPSBuZXcgTWFwPEFTVHxUbXBsQXN0Tm9kZSwgU3ltYm9sfG51bGw+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IHNoaW1QYXRoOiBBYnNvbHV0ZUZzUGF0aCxcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgdHlwZUNoZWNrQmxvY2s6IHRzLk5vZGUsXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IHRlbXBsYXRlRGF0YTogVGVtcGxhdGVEYXRhLFxuICAgICAgcHJpdmF0ZSByZWFkb25seSBjb21wb25lbnRTY29wZVJlYWRlcjogQ29tcG9uZW50U2NvcGVSZWFkZXIsXG4gICAgICAvLyBUaGUgYHRzLlR5cGVDaGVja2VyYCBkZXBlbmRzIG9uIHRoZSBjdXJyZW50IHR5cGUtY2hlY2tpbmcgcHJvZ3JhbSwgYW5kIHNvIG11c3QgYmUgcmVxdWVzdGVkXG4gICAgICAvLyBvbi1kZW1hbmQgaW5zdGVhZCBvZiBjYWNoZWQuXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGdldFR5cGVDaGVja2VyOiAoKSA9PiB0cy5UeXBlQ2hlY2tlcixcbiAgKSB7fVxuXG4gIGdldFN5bWJvbChub2RlOiBUbXBsQXN0VGVtcGxhdGV8VG1wbEFzdEVsZW1lbnQpOiBUZW1wbGF0ZVN5bWJvbHxFbGVtZW50U3ltYm9sfG51bGw7XG4gIGdldFN5bWJvbChub2RlOiBUbXBsQXN0UmVmZXJlbmNlfFRtcGxBc3RWYXJpYWJsZSk6IFJlZmVyZW5jZVN5bWJvbHxWYXJpYWJsZVN5bWJvbHxudWxsO1xuICBnZXRTeW1ib2wobm9kZTogQVNUfFRtcGxBc3ROb2RlKTogU3ltYm9sfG51bGw7XG4gIGdldFN5bWJvbChub2RlOiBBU1R8VG1wbEFzdE5vZGUpOiBTeW1ib2x8bnVsbCB7XG4gICAgaWYgKHRoaXMuc3ltYm9sQ2FjaGUuaGFzKG5vZGUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5zeW1ib2xDYWNoZS5nZXQobm9kZSkhO1xuICAgIH1cblxuICAgIGxldCBzeW1ib2w6IFN5bWJvbHxudWxsID0gbnVsbDtcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIFRtcGxBc3RCb3VuZEF0dHJpYnV0ZSB8fCBub2RlIGluc3RhbmNlb2YgVG1wbEFzdFRleHRBdHRyaWJ1dGUpIHtcbiAgICAgIC8vIFRPRE8oYXRzY290dCk6IGlucHV0IGFuZCBvdXRwdXQgYmluZGluZ3Mgb25seSByZXR1cm4gdGhlIGZpcnN0IGRpcmVjdGl2ZSBtYXRjaCBidXQgc2hvdWxkXG4gICAgICAvLyByZXR1cm4gYSBsaXN0IG9mIGJpbmRpbmdzIGZvciBhbGwgb2YgdGhlbS5cbiAgICAgIHN5bWJvbCA9IHRoaXMuZ2V0U3ltYm9sT2ZJbnB1dEJpbmRpbmcobm9kZSk7XG4gICAgfSBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgVG1wbEFzdEJvdW5kRXZlbnQpIHtcbiAgICAgIHN5bWJvbCA9IHRoaXMuZ2V0U3ltYm9sT2ZCb3VuZEV2ZW50KG5vZGUpO1xuICAgIH0gZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIFRtcGxBc3RFbGVtZW50KSB7XG4gICAgICBzeW1ib2wgPSB0aGlzLmdldFN5bWJvbE9mRWxlbWVudChub2RlKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBUbXBsQXN0VGVtcGxhdGUpIHtcbiAgICAgIHN5bWJvbCA9IHRoaXMuZ2V0U3ltYm9sT2ZBc3RUZW1wbGF0ZShub2RlKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBUbXBsQXN0VmFyaWFibGUpIHtcbiAgICAgIHN5bWJvbCA9IHRoaXMuZ2V0U3ltYm9sT2ZWYXJpYWJsZShub2RlKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBUbXBsQXN0UmVmZXJlbmNlKSB7XG4gICAgICBzeW1ib2wgPSB0aGlzLmdldFN5bWJvbE9mUmVmZXJlbmNlKG5vZGUpO1xuICAgIH0gZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIEJpbmRpbmdQaXBlKSB7XG4gICAgICBzeW1ib2wgPSB0aGlzLmdldFN5bWJvbE9mUGlwZShub2RlKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBBU1QpIHtcbiAgICAgIHN5bWJvbCA9IHRoaXMuZ2V0U3ltYm9sT2ZUZW1wbGF0ZUV4cHJlc3Npb24obm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRPRE8oYXRzY290dCk6IFRtcGxBc3RDb250ZW50LCBUbXBsQXN0SWN1XG4gICAgfVxuXG4gICAgdGhpcy5zeW1ib2xDYWNoZS5zZXQobm9kZSwgc3ltYm9sKTtcbiAgICByZXR1cm4gc3ltYm9sO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTeW1ib2xPZkFzdFRlbXBsYXRlKHRlbXBsYXRlOiBUbXBsQXN0VGVtcGxhdGUpOiBUZW1wbGF0ZVN5bWJvbHxudWxsIHtcbiAgICBjb25zdCBkaXJlY3RpdmVzID0gdGhpcy5nZXREaXJlY3RpdmVzT2ZOb2RlKHRlbXBsYXRlKTtcbiAgICByZXR1cm4ge2tpbmQ6IFN5bWJvbEtpbmQuVGVtcGxhdGUsIGRpcmVjdGl2ZXMsIHRlbXBsYXRlTm9kZTogdGVtcGxhdGV9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTeW1ib2xPZkVsZW1lbnQoZWxlbWVudDogVG1wbEFzdEVsZW1lbnQpOiBFbGVtZW50U3ltYm9sfG51bGwge1xuICAgIGNvbnN0IGVsZW1lbnRTb3VyY2VTcGFuID0gZWxlbWVudC5zdGFydFNvdXJjZVNwYW4gPz8gZWxlbWVudC5zb3VyY2VTcGFuO1xuXG4gICAgY29uc3Qgbm9kZSA9IGZpbmRGaXJzdE1hdGNoaW5nTm9kZShcbiAgICAgICAgdGhpcy50eXBlQ2hlY2tCbG9jaywge3dpdGhTcGFuOiBlbGVtZW50U291cmNlU3BhbiwgZmlsdGVyOiB0cy5pc1ZhcmlhYmxlRGVjbGFyYXRpb259KTtcbiAgICBpZiAobm9kZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgc3ltYm9sRnJvbURlY2xhcmF0aW9uID0gdGhpcy5nZXRTeW1ib2xPZlRzTm9kZShub2RlKTtcbiAgICBpZiAoc3ltYm9sRnJvbURlY2xhcmF0aW9uID09PSBudWxsIHx8IHN5bWJvbEZyb21EZWNsYXJhdGlvbi50c1N5bWJvbCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZGlyZWN0aXZlcyA9IHRoaXMuZ2V0RGlyZWN0aXZlc09mTm9kZShlbGVtZW50KTtcbiAgICAvLyBBbGwgc3RhdGVtZW50cyBpbiB0aGUgVENCIGFyZSBgRXhwcmVzc2lvbmBzIHRoYXQgb3B0aW9uYWxseSBpbmNsdWRlIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgLy8gQW4gYEVsZW1lbnRTeW1ib2xgIHVzZXMgdGhlIGluZm9ybWF0aW9uIHJldHVybmVkIGZvciB0aGUgdmFyaWFibGUgZGVjbGFyYXRpb24gZXhwcmVzc2lvbixcbiAgICAvLyBhZGRzIHRoZSBkaXJlY3RpdmVzIGZvciB0aGUgZWxlbWVudCwgYW5kIHVwZGF0ZXMgdGhlIGBraW5kYCB0byBiZSBgU3ltYm9sS2luZC5FbGVtZW50YC5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3ltYm9sRnJvbURlY2xhcmF0aW9uLFxuICAgICAga2luZDogU3ltYm9sS2luZC5FbGVtZW50LFxuICAgICAgZGlyZWN0aXZlcyxcbiAgICAgIHRlbXBsYXRlTm9kZTogZWxlbWVudCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREaXJlY3RpdmVzT2ZOb2RlKGVsZW1lbnQ6IFRtcGxBc3RFbGVtZW50fFRtcGxBc3RUZW1wbGF0ZSk6IERpcmVjdGl2ZVN5bWJvbFtdIHtcbiAgICBjb25zdCBlbGVtZW50U291cmNlU3BhbiA9IGVsZW1lbnQuc3RhcnRTb3VyY2VTcGFuID8/IGVsZW1lbnQuc291cmNlU3BhbjtcbiAgICBjb25zdCB0Y2JTb3VyY2VGaWxlID0gdGhpcy50eXBlQ2hlY2tCbG9jay5nZXRTb3VyY2VGaWxlKCk7XG4gICAgLy8gZGlyZWN0aXZlcyBjb3VsZCBiZSBlaXRoZXI6XG4gICAgLy8gLSB2YXIgX3QxOiBUZXN0RGlyIC8qVDpEKi8gPSAobnVsbCEpO1xuICAgIC8vIC0gdmFyIF90MSAvKlQ6RCovID0gX2N0b3IxKHt9KTtcbiAgICBjb25zdCBpc0RpcmVjdGl2ZURlY2xhcmF0aW9uID0gKG5vZGU6IHRzLk5vZGUpOiBub2RlIGlzIHRzLlR5cGVOb2RlfHRzLklkZW50aWZpZXIgPT5cbiAgICAgICAgKHRzLmlzVHlwZU5vZGUobm9kZSkgfHwgdHMuaXNJZGVudGlmaWVyKG5vZGUpKSAmJiB0cy5pc1ZhcmlhYmxlRGVjbGFyYXRpb24obm9kZS5wYXJlbnQpICYmXG4gICAgICAgIGhhc0V4cHJlc3Npb25JZGVudGlmaWVyKHRjYlNvdXJjZUZpbGUsIG5vZGUsIEV4cHJlc3Npb25JZGVudGlmaWVyLkRJUkVDVElWRSk7XG5cbiAgICBjb25zdCBub2RlcyA9IGZpbmRBbGxNYXRjaGluZ05vZGVzKFxuICAgICAgICB0aGlzLnR5cGVDaGVja0Jsb2NrLCB7d2l0aFNwYW46IGVsZW1lbnRTb3VyY2VTcGFuLCBmaWx0ZXI6IGlzRGlyZWN0aXZlRGVjbGFyYXRpb259KTtcbiAgICByZXR1cm4gbm9kZXNcbiAgICAgICAgLm1hcChub2RlID0+IHtcbiAgICAgICAgICBjb25zdCBzeW1ib2wgPSB0aGlzLmdldFN5bWJvbE9mVHNOb2RlKG5vZGUucGFyZW50KTtcbiAgICAgICAgICBpZiAoc3ltYm9sID09PSBudWxsIHx8ICFpc1N5bWJvbFdpdGhWYWx1ZURlY2xhcmF0aW9uKHN5bWJvbC50c1N5bWJvbCkgfHxcbiAgICAgICAgICAgICAgIXRzLmlzQ2xhc3NEZWNsYXJhdGlvbihzeW1ib2wudHNTeW1ib2wudmFsdWVEZWNsYXJhdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5nZXREaXJlY3RpdmVNZXRhKGVsZW1lbnQsIHN5bWJvbC50c1N5bWJvbC52YWx1ZURlY2xhcmF0aW9uKTtcbiAgICAgICAgICBpZiAobWV0YSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgbmdNb2R1bGUgPSB0aGlzLmdldERpcmVjdGl2ZU1vZHVsZShzeW1ib2wudHNTeW1ib2wudmFsdWVEZWNsYXJhdGlvbik7XG4gICAgICAgICAgaWYgKG1ldGEuc2VsZWN0b3IgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBpc0NvbXBvbmVudCA9IG1ldGEuaXNDb21wb25lbnQgPz8gbnVsbDtcbiAgICAgICAgICBjb25zdCBkaXJlY3RpdmVTeW1ib2w6IERpcmVjdGl2ZVN5bWJvbCA9IHtcbiAgICAgICAgICAgIC4uLnN5bWJvbCxcbiAgICAgICAgICAgIHRzU3ltYm9sOiBzeW1ib2wudHNTeW1ib2wsXG4gICAgICAgICAgICBzZWxlY3RvcjogbWV0YS5zZWxlY3RvcixcbiAgICAgICAgICAgIGlzQ29tcG9uZW50LFxuICAgICAgICAgICAgbmdNb2R1bGUsXG4gICAgICAgICAgICBraW5kOiBTeW1ib2xLaW5kLkRpcmVjdGl2ZSxcbiAgICAgICAgICAgIGlzU3RydWN0dXJhbDogbWV0YS5pc1N0cnVjdHVyYWwsXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gZGlyZWN0aXZlU3ltYm9sO1xuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKChkKTogZCBpcyBEaXJlY3RpdmVTeW1ib2wgPT4gZCAhPT0gbnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGdldERpcmVjdGl2ZU1ldGEoXG4gICAgICBob3N0OiBUbXBsQXN0VGVtcGxhdGV8VG1wbEFzdEVsZW1lbnQsXG4gICAgICBkaXJlY3RpdmVEZWNsYXJhdGlvbjogdHMuRGVjbGFyYXRpb24pOiBUeXBlQ2hlY2thYmxlRGlyZWN0aXZlTWV0YXxudWxsIHtcbiAgICBsZXQgZGlyZWN0aXZlcyA9IHRoaXMudGVtcGxhdGVEYXRhLmJvdW5kVGFyZ2V0LmdldERpcmVjdGl2ZXNPZk5vZGUoaG9zdCk7XG5cbiAgICAvLyBgZ2V0RGlyZWN0aXZlc09mTm9kZWAgd2lsbCBub3QgcmV0dXJuIHRoZSBkaXJlY3RpdmVzIGludGVuZGVkIGZvciBhbiBlbGVtZW50XG4gICAgLy8gb24gYSBtaWNyb3N5bnRheCB0ZW1wbGF0ZSwgZm9yIGV4YW1wbGUgYDxkaXYgKm5nRm9yPVwibGV0IHVzZXIgb2YgdXNlcnM7XCIgZGlyPmAsXG4gICAgLy8gdGhlIGBkaXJgIHdpbGwgYmUgc2tpcHBlZCwgYnV0IGl0J3MgbmVlZGVkIGluIGxhbmd1YWdlIHNlcnZpY2UuXG4gICAgY29uc3QgZmlyc3RDaGlsZCA9IGhvc3QuY2hpbGRyZW5bMF07XG4gICAgaWYgKGZpcnN0Q2hpbGQgaW5zdGFuY2VvZiBUbXBsQXN0RWxlbWVudCkge1xuICAgICAgY29uc3QgaXNNaWNyb3N5bnRheFRlbXBsYXRlID0gaG9zdCBpbnN0YW5jZW9mIFRtcGxBc3RUZW1wbGF0ZSAmJlxuICAgICAgICAgIHNvdXJjZVNwYW5FcXVhbChmaXJzdENoaWxkLnNvdXJjZVNwYW4sIGhvc3Quc291cmNlU3Bhbik7XG4gICAgICBpZiAoaXNNaWNyb3N5bnRheFRlbXBsYXRlKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0Q2hpbGREaXJlY3RpdmVzID0gdGhpcy50ZW1wbGF0ZURhdGEuYm91bmRUYXJnZXQuZ2V0RGlyZWN0aXZlc09mTm9kZShmaXJzdENoaWxkKTtcbiAgICAgICAgaWYgKGZpcnN0Q2hpbGREaXJlY3RpdmVzICE9PSBudWxsICYmIGRpcmVjdGl2ZXMgIT09IG51bGwpIHtcbiAgICAgICAgICBkaXJlY3RpdmVzID0gZGlyZWN0aXZlcy5jb25jYXQoZmlyc3RDaGlsZERpcmVjdGl2ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRpcmVjdGl2ZXMgPSBkaXJlY3RpdmVzID8/IGZpcnN0Q2hpbGREaXJlY3RpdmVzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkaXJlY3RpdmVzID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlyZWN0aXZlcy5maW5kKG0gPT4gbS5yZWYubm9kZSA9PT0gZGlyZWN0aXZlRGVjbGFyYXRpb24pID8/IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldERpcmVjdGl2ZU1vZHVsZShkZWNsYXJhdGlvbjogdHMuQ2xhc3NEZWNsYXJhdGlvbik6IENsYXNzRGVjbGFyYXRpb258bnVsbCB7XG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLmNvbXBvbmVudFNjb3BlUmVhZGVyLmdldFNjb3BlRm9yQ29tcG9uZW50KGRlY2xhcmF0aW9uIGFzIENsYXNzRGVjbGFyYXRpb24pO1xuICAgIGlmIChzY29wZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBzY29wZS5uZ01vZHVsZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3ltYm9sT2ZCb3VuZEV2ZW50KGV2ZW50QmluZGluZzogVG1wbEFzdEJvdW5kRXZlbnQpOiBPdXRwdXRCaW5kaW5nU3ltYm9sfG51bGwge1xuICAgIGNvbnN0IGNvbnN1bWVyID0gdGhpcy50ZW1wbGF0ZURhdGEuYm91bmRUYXJnZXQuZ2V0Q29uc3VtZXJPZkJpbmRpbmcoZXZlbnRCaW5kaW5nKTtcbiAgICBpZiAoY29uc3VtZXIgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIE91dHB1dHMgaW4gdGhlIFRDQiBsb29rIGxpa2Ugb25lIG9mIHRoZSB0d286XG4gICAgLy8gKiBfdDFbXCJvdXRwdXRGaWVsZFwiXS5zdWJzY3JpYmUoaGFuZGxlcik7XG4gICAgLy8gKiBfdDEuYWRkRXZlbnRMaXN0ZW5lcihoYW5kbGVyKTtcbiAgICAvLyBFdmVuIHdpdGggc3RyaWN0IG51bGwgY2hlY2tzIGRpc2FibGVkLCB3ZSBzdGlsbCBwcm9kdWNlIHRoZSBhY2Nlc3MgYXMgYSBzZXBhcmF0ZSBzdGF0ZW1lbnRcbiAgICAvLyBzbyB0aGF0IGl0IGNhbiBiZSBmb3VuZCBoZXJlLlxuICAgIGxldCBleHBlY3RlZEFjY2Vzczogc3RyaW5nO1xuICAgIGlmIChjb25zdW1lciBpbnN0YW5jZW9mIFRtcGxBc3RUZW1wbGF0ZSB8fCBjb25zdW1lciBpbnN0YW5jZW9mIFRtcGxBc3RFbGVtZW50KSB7XG4gICAgICBleHBlY3RlZEFjY2VzcyA9ICdhZGRFdmVudExpc3RlbmVyJztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYmluZGluZ1Byb3BlcnR5TmFtZXMgPSBjb25zdW1lci5vdXRwdXRzLmdldEJ5QmluZGluZ1Byb3BlcnR5TmFtZShldmVudEJpbmRpbmcubmFtZSk7XG4gICAgICBpZiAoYmluZGluZ1Byb3BlcnR5TmFtZXMgPT09IG51bGwgfHwgYmluZGluZ1Byb3BlcnR5TmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgLy8gTm90ZSB0aGF0IHdlIG9ubHkgZ2V0IHRoZSBleHBlY3RlZEFjY2VzcyB0ZXh0IGZyb20gYSBzaW5nbGUgY29uc3VtZXIgb2YgdGhlIGJpbmRpbmcuIElmXG4gICAgICAvLyB0aGVyZSBhcmUgbXVsdGlwbGUgY29uc3VtZXJzIChub3Qgc3VwcG9ydGVkIGluIHRoZSBgYm91bmRUYXJnZXRgIEFQSSkgYW5kIG9uZSBvZiB0aGVtIGhhc1xuICAgICAgLy8gYW4gYWxpYXMsIGl0IHdpbGwgbm90IGdldCBtYXRjaGVkIGhlcmUuXG4gICAgICBleHBlY3RlZEFjY2VzcyA9IGJpbmRpbmdQcm9wZXJ0eU5hbWVzWzBdLmNsYXNzUHJvcGVydHlOYW1lO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbHRlcihuOiB0cy5Ob2RlKTogbiBpcyB0cy5Qcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb258dHMuRWxlbWVudEFjY2Vzc0V4cHJlc3Npb24ge1xuICAgICAgaWYgKCFpc0FjY2Vzc0V4cHJlc3Npb24obikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAodHMuaXNQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24obikpIHtcbiAgICAgICAgcmV0dXJuIG4ubmFtZS5nZXRUZXh0KCkgPT09IGV4cGVjdGVkQWNjZXNzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRzLmlzU3RyaW5nTGl0ZXJhbChuLmFyZ3VtZW50RXhwcmVzc2lvbikgJiZcbiAgICAgICAgICAgIG4uYXJndW1lbnRFeHByZXNzaW9uLnRleHQgPT09IGV4cGVjdGVkQWNjZXNzO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBvdXRwdXRGaWVsZEFjY2Vzc2VzID1cbiAgICAgICAgZmluZEFsbE1hdGNoaW5nTm9kZXModGhpcy50eXBlQ2hlY2tCbG9jaywge3dpdGhTcGFuOiBldmVudEJpbmRpbmcua2V5U3BhbiwgZmlsdGVyfSk7XG5cbiAgICBjb25zdCBiaW5kaW5nczogQmluZGluZ1N5bWJvbFtdID0gW107XG4gICAgZm9yIChjb25zdCBvdXRwdXRGaWVsZEFjY2VzcyBvZiBvdXRwdXRGaWVsZEFjY2Vzc2VzKSB7XG4gICAgICBpZiAoY29uc3VtZXIgaW5zdGFuY2VvZiBUbXBsQXN0VGVtcGxhdGUgfHwgY29uc3VtZXIgaW5zdGFuY2VvZiBUbXBsQXN0RWxlbWVudCkge1xuICAgICAgICBpZiAoIXRzLmlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKG91dHB1dEZpZWxkQWNjZXNzKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWRkRXZlbnRMaXN0ZW5lciA9IG91dHB1dEZpZWxkQWNjZXNzLm5hbWU7XG4gICAgICAgIGNvbnN0IHRzU3ltYm9sID0gdGhpcy5nZXRUeXBlQ2hlY2tlcigpLmdldFN5bWJvbEF0TG9jYXRpb24oYWRkRXZlbnRMaXN0ZW5lcik7XG4gICAgICAgIGNvbnN0IHRzVHlwZSA9IHRoaXMuZ2V0VHlwZUNoZWNrZXIoKS5nZXRUeXBlQXRMb2NhdGlvbihhZGRFdmVudExpc3RlbmVyKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb25JblNoaW1GaWxlID0gdGhpcy5nZXRTaGltUG9zaXRpb25Gb3JOb2RlKGFkZEV2ZW50TGlzdGVuZXIpO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmdldFN5bWJvbChjb25zdW1lcik7XG5cbiAgICAgICAgaWYgKHRhcmdldCA9PT0gbnVsbCB8fCB0c1N5bWJvbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBiaW5kaW5ncy5wdXNoKHtcbiAgICAgICAgICBraW5kOiBTeW1ib2xLaW5kLkJpbmRpbmcsXG4gICAgICAgICAgdHNTeW1ib2wsXG4gICAgICAgICAgdHNUeXBlLFxuICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICBzaGltTG9jYXRpb246IHtzaGltUGF0aDogdGhpcy5zaGltUGF0aCwgcG9zaXRpb25JblNoaW1GaWxlfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRzLmlzRWxlbWVudEFjY2Vzc0V4cHJlc3Npb24ob3V0cHV0RmllbGRBY2Nlc3MpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHNTeW1ib2wgPVxuICAgICAgICAgICAgdGhpcy5nZXRUeXBlQ2hlY2tlcigpLmdldFN5bWJvbEF0TG9jYXRpb24ob3V0cHV0RmllbGRBY2Nlc3MuYXJndW1lbnRFeHByZXNzaW9uKTtcbiAgICAgICAgaWYgKHRzU3ltYm9sID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5nZXREaXJlY3RpdmVTeW1ib2xGb3JBY2Nlc3NFeHByZXNzaW9uKG91dHB1dEZpZWxkQWNjZXNzLCBjb25zdW1lcik7XG4gICAgICAgIGlmICh0YXJnZXQgPT09IG51bGwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uSW5TaGltRmlsZSA9IHRoaXMuZ2V0U2hpbVBvc2l0aW9uRm9yTm9kZShvdXRwdXRGaWVsZEFjY2Vzcyk7XG4gICAgICAgIGNvbnN0IHRzVHlwZSA9IHRoaXMuZ2V0VHlwZUNoZWNrZXIoKS5nZXRUeXBlQXRMb2NhdGlvbihvdXRwdXRGaWVsZEFjY2Vzcyk7XG4gICAgICAgIGJpbmRpbmdzLnB1c2goe1xuICAgICAgICAgIGtpbmQ6IFN5bWJvbEtpbmQuQmluZGluZyxcbiAgICAgICAgICB0c1N5bWJvbCxcbiAgICAgICAgICB0c1R5cGUsXG4gICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgIHNoaW1Mb2NhdGlvbjoge3NoaW1QYXRoOiB0aGlzLnNoaW1QYXRoLCBwb3NpdGlvbkluU2hpbUZpbGV9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYmluZGluZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHtraW5kOiBTeW1ib2xLaW5kLk91dHB1dCwgYmluZGluZ3N9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTeW1ib2xPZklucHV0QmluZGluZyhiaW5kaW5nOiBUbXBsQXN0Qm91bmRBdHRyaWJ1dGV8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG1wbEFzdFRleHRBdHRyaWJ1dGUpOiBJbnB1dEJpbmRpbmdTeW1ib2x8RG9tQmluZGluZ1N5bWJvbHxudWxsIHtcbiAgICBjb25zdCBjb25zdW1lciA9IHRoaXMudGVtcGxhdGVEYXRhLmJvdW5kVGFyZ2V0LmdldENvbnN1bWVyT2ZCaW5kaW5nKGJpbmRpbmcpO1xuICAgIGlmIChjb25zdW1lciA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGNvbnN1bWVyIGluc3RhbmNlb2YgVG1wbEFzdEVsZW1lbnQgfHwgY29uc3VtZXIgaW5zdGFuY2VvZiBUbXBsQXN0VGVtcGxhdGUpIHtcbiAgICAgIGNvbnN0IGhvc3QgPSB0aGlzLmdldFN5bWJvbChjb25zdW1lcik7XG4gICAgICByZXR1cm4gaG9zdCAhPT0gbnVsbCA/IHtraW5kOiBTeW1ib2xLaW5kLkRvbUJpbmRpbmcsIGhvc3R9IDogbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlcyA9IGZpbmRBbGxNYXRjaGluZ05vZGVzKFxuICAgICAgICB0aGlzLnR5cGVDaGVja0Jsb2NrLCB7d2l0aFNwYW46IGJpbmRpbmcuc291cmNlU3BhbiwgZmlsdGVyOiBpc0Fzc2lnbm1lbnR9KTtcbiAgICBjb25zdCBiaW5kaW5nczogQmluZGluZ1N5bWJvbFtdID0gW107XG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICBpZiAoIWlzQWNjZXNzRXhwcmVzc2lvbihub2RlLmxlZnQpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzeW1ib2xJbmZvID0gdGhpcy5nZXRTeW1ib2xPZlRzTm9kZShub2RlLmxlZnQpO1xuICAgICAgaWYgKHN5bWJvbEluZm8gPT09IG51bGwgfHwgc3ltYm9sSW5mby50c1N5bWJvbCA9PT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5nZXREaXJlY3RpdmVTeW1ib2xGb3JBY2Nlc3NFeHByZXNzaW9uKG5vZGUubGVmdCwgY29uc3VtZXIpO1xuICAgICAgaWYgKHRhcmdldCA9PT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGJpbmRpbmdzLnB1c2goe1xuICAgICAgICAuLi5zeW1ib2xJbmZvLFxuICAgICAgICB0c1N5bWJvbDogc3ltYm9sSW5mby50c1N5bWJvbCxcbiAgICAgICAga2luZDogU3ltYm9sS2luZC5CaW5kaW5nLFxuICAgICAgICB0YXJnZXQsXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGJpbmRpbmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtraW5kOiBTeW1ib2xLaW5kLklucHV0LCBiaW5kaW5nc307XG4gIH1cblxuICBwcml2YXRlIGdldERpcmVjdGl2ZVN5bWJvbEZvckFjY2Vzc0V4cHJlc3Npb24oXG4gICAgICBub2RlOiB0cy5FbGVtZW50QWNjZXNzRXhwcmVzc2lvbnx0cy5Qcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sXG4gICAgICB7aXNDb21wb25lbnQsIHNlbGVjdG9yLCBpc1N0cnVjdHVyYWx9OiBUeXBlQ2hlY2thYmxlRGlyZWN0aXZlTWV0YSk6IERpcmVjdGl2ZVN5bWJvbHxudWxsIHtcbiAgICAvLyBJbiBlaXRoZXIgY2FzZSwgYF90MVtcImluZGV4XCJdYCBvciBgX3QxLmluZGV4YCwgYG5vZGUuZXhwcmVzc2lvbmAgaXMgX3QxLlxuICAgIC8vIFRoZSByZXRyaWV2ZWQgc3ltYm9sIGZvciBfdDEgd2lsbCBiZSB0aGUgdmFyaWFibGUgZGVjbGFyYXRpb24uXG4gICAgY29uc3QgdHNTeW1ib2wgPSB0aGlzLmdldFR5cGVDaGVja2VyKCkuZ2V0U3ltYm9sQXRMb2NhdGlvbihub2RlLmV4cHJlc3Npb24pO1xuICAgIGlmICh0c1N5bWJvbD8uZGVjbGFyYXRpb25zID09PSB1bmRlZmluZWQgfHwgdHNTeW1ib2wuZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICBzZWxlY3RvciA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgW2RlY2xhcmF0aW9uXSA9IHRzU3ltYm9sLmRlY2xhcmF0aW9ucztcbiAgICBpZiAoIXRzLmlzVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbikgfHxcbiAgICAgICAgIWhhc0V4cHJlc3Npb25JZGVudGlmaWVyKFxuICAgICAgICAgICAgLy8gVGhlIGV4cHJlc3Npb24gaWRlbnRpZmllciBjb3VsZCBiZSBvbiB0aGUgdHlwZSAoZm9yIHJlZ3VsYXIgZGlyZWN0aXZlcykgb3IgdGhlIG5hbWVcbiAgICAgICAgICAgIC8vIChmb3IgZ2VuZXJpYyBkaXJlY3RpdmVzIGFuZCB0aGUgY3RvciBvcCkuXG4gICAgICAgICAgICBkZWNsYXJhdGlvbi5nZXRTb3VyY2VGaWxlKCksIGRlY2xhcmF0aW9uLnR5cGUgPz8gZGVjbGFyYXRpb24ubmFtZSxcbiAgICAgICAgICAgIEV4cHJlc3Npb25JZGVudGlmaWVyLkRJUkVDVElWRSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHN5bWJvbCA9IHRoaXMuZ2V0U3ltYm9sT2ZUc05vZGUoZGVjbGFyYXRpb24pO1xuICAgIGlmIChzeW1ib2wgPT09IG51bGwgfHwgIWlzU3ltYm9sV2l0aFZhbHVlRGVjbGFyYXRpb24oc3ltYm9sLnRzU3ltYm9sKSB8fFxuICAgICAgICAhdHMuaXNDbGFzc0RlY2xhcmF0aW9uKHN5bWJvbC50c1N5bWJvbC52YWx1ZURlY2xhcmF0aW9uKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbmdNb2R1bGUgPSB0aGlzLmdldERpcmVjdGl2ZU1vZHVsZShzeW1ib2wudHNTeW1ib2wudmFsdWVEZWNsYXJhdGlvbik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtpbmQ6IFN5bWJvbEtpbmQuRGlyZWN0aXZlLFxuICAgICAgdHNTeW1ib2w6IHN5bWJvbC50c1N5bWJvbCxcbiAgICAgIHRzVHlwZTogc3ltYm9sLnRzVHlwZSxcbiAgICAgIHNoaW1Mb2NhdGlvbjogc3ltYm9sLnNoaW1Mb2NhdGlvbixcbiAgICAgIGlzQ29tcG9uZW50LFxuICAgICAgaXNTdHJ1Y3R1cmFsLFxuICAgICAgc2VsZWN0b3IsXG4gICAgICBuZ01vZHVsZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTeW1ib2xPZlZhcmlhYmxlKHZhcmlhYmxlOiBUbXBsQXN0VmFyaWFibGUpOiBWYXJpYWJsZVN5bWJvbHxudWxsIHtcbiAgICBjb25zdCBub2RlID0gZmluZEZpcnN0TWF0Y2hpbmdOb2RlKFxuICAgICAgICB0aGlzLnR5cGVDaGVja0Jsb2NrLCB7d2l0aFNwYW46IHZhcmlhYmxlLnNvdXJjZVNwYW4sIGZpbHRlcjogdHMuaXNWYXJpYWJsZURlY2xhcmF0aW9ufSk7XG4gICAgaWYgKG5vZGUgPT09IG51bGwgfHwgbm9kZS5pbml0aWFsaXplciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBleHByZXNzaW9uU3ltYm9sID0gdGhpcy5nZXRTeW1ib2xPZlRzTm9kZShub2RlLmluaXRpYWxpemVyKTtcbiAgICBpZiAoZXhwcmVzc2lvblN5bWJvbCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRzVHlwZTogZXhwcmVzc2lvblN5bWJvbC50c1R5cGUsXG4gICAgICB0c1N5bWJvbDogZXhwcmVzc2lvblN5bWJvbC50c1N5bWJvbCxcbiAgICAgIGluaXRpYWxpemVyTG9jYXRpb246IGV4cHJlc3Npb25TeW1ib2wuc2hpbUxvY2F0aW9uLFxuICAgICAga2luZDogU3ltYm9sS2luZC5WYXJpYWJsZSxcbiAgICAgIGRlY2xhcmF0aW9uOiB2YXJpYWJsZSxcbiAgICAgIGxvY2FsVmFyTG9jYXRpb246IHtcbiAgICAgICAgc2hpbVBhdGg6IHRoaXMuc2hpbVBhdGgsXG4gICAgICAgIHBvc2l0aW9uSW5TaGltRmlsZTogdGhpcy5nZXRTaGltUG9zaXRpb25Gb3JOb2RlKG5vZGUubmFtZSksXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3ltYm9sT2ZSZWZlcmVuY2UocmVmOiBUbXBsQXN0UmVmZXJlbmNlKTogUmVmZXJlbmNlU3ltYm9sfG51bGwge1xuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMudGVtcGxhdGVEYXRhLmJvdW5kVGFyZ2V0LmdldFJlZmVyZW5jZVRhcmdldChyZWYpO1xuICAgIC8vIEZpbmQgdGhlIG5vZGUgZm9yIHRoZSByZWZlcmVuY2UgZGVjbGFyYXRpb24sIGkuZS4gYHZhciBfdDIgPSBfdDE7YFxuICAgIGxldCBub2RlID0gZmluZEZpcnN0TWF0Y2hpbmdOb2RlKFxuICAgICAgICB0aGlzLnR5cGVDaGVja0Jsb2NrLCB7d2l0aFNwYW46IHJlZi5zb3VyY2VTcGFuLCBmaWx0ZXI6IHRzLmlzVmFyaWFibGVEZWNsYXJhdGlvbn0pO1xuICAgIGlmIChub2RlID09PSBudWxsIHx8IHRhcmdldCA9PT0gbnVsbCB8fCBub2RlLmluaXRpYWxpemVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEdldCB0aGUgb3JpZ2luYWwgZGVjbGFyYXRpb24gZm9yIHRoZSByZWZlcmVuY2VzIHZhcmlhYmxlLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGVtcGxhdGUgcmVmc1xuICAgIC8vIHdoaWNoIGFyZSBvZiB0aGUgZm9ybSB2YXIgX3QzID0gKF90MiBhcyBhbnkgYXMgaTIuVGVtcGxhdGVSZWY8YW55PilcbiAgICAvLyBUT0RPKGF0c2NvdHQpOiBDb25zaWRlciBhZGRpbmcgYW4gYEV4cHJlc3Npb25JZGVudGlmaWVyYCB0byB0YWcgdmFyaWFibGUgZGVjbGFyYXRpb25cbiAgICAvLyBpbml0aWFsaXplcnMgYXMgaW52YWxpZCBmb3Igc3ltYm9sIHJldHJpZXZhbC5cbiAgICBjb25zdCBvcmlnaW5hbERlY2xhcmF0aW9uID0gdHMuaXNQYXJlbnRoZXNpemVkRXhwcmVzc2lvbihub2RlLmluaXRpYWxpemVyKSAmJlxuICAgICAgICAgICAgdHMuaXNBc0V4cHJlc3Npb24obm9kZS5pbml0aWFsaXplci5leHByZXNzaW9uKSA/XG4gICAgICAgIHRoaXMuZ2V0VHlwZUNoZWNrZXIoKS5nZXRTeW1ib2xBdExvY2F0aW9uKG5vZGUubmFtZSkgOlxuICAgICAgICB0aGlzLmdldFR5cGVDaGVja2VyKCkuZ2V0U3ltYm9sQXRMb2NhdGlvbihub2RlLmluaXRpYWxpemVyKTtcbiAgICBpZiAob3JpZ2luYWxEZWNsYXJhdGlvbiA9PT0gdW5kZWZpbmVkIHx8IG9yaWdpbmFsRGVjbGFyYXRpb24udmFsdWVEZWNsYXJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgc3ltYm9sID0gdGhpcy5nZXRTeW1ib2xPZlRzTm9kZShvcmlnaW5hbERlY2xhcmF0aW9uLnZhbHVlRGVjbGFyYXRpb24pO1xuICAgIGlmIChzeW1ib2wgPT09IG51bGwgfHwgc3ltYm9sLnRzU3ltYm9sID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByZWZlcmVuY2VWYXJTaGltTG9jYXRpb246IFNoaW1Mb2NhdGlvbiA9IHtcbiAgICAgIHNoaW1QYXRoOiB0aGlzLnNoaW1QYXRoLFxuICAgICAgcG9zaXRpb25JblNoaW1GaWxlOiB0aGlzLmdldFNoaW1Qb3NpdGlvbkZvck5vZGUobm9kZSksXG4gICAgfTtcbiAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgVG1wbEFzdFRlbXBsYXRlIHx8IHRhcmdldCBpbnN0YW5jZW9mIFRtcGxBc3RFbGVtZW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBraW5kOiBTeW1ib2xLaW5kLlJlZmVyZW5jZSxcbiAgICAgICAgdHNTeW1ib2w6IHN5bWJvbC50c1N5bWJvbCxcbiAgICAgICAgdHNUeXBlOiBzeW1ib2wudHNUeXBlLFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIGRlY2xhcmF0aW9uOiByZWYsXG4gICAgICAgIHRhcmdldExvY2F0aW9uOiBzeW1ib2wuc2hpbUxvY2F0aW9uLFxuICAgICAgICByZWZlcmVuY2VWYXJMb2NhdGlvbjogcmVmZXJlbmNlVmFyU2hpbUxvY2F0aW9uLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0cy5pc0NsYXNzRGVjbGFyYXRpb24odGFyZ2V0LmRpcmVjdGl2ZS5yZWYubm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtpbmQ6IFN5bWJvbEtpbmQuUmVmZXJlbmNlLFxuICAgICAgICB0c1N5bWJvbDogc3ltYm9sLnRzU3ltYm9sLFxuICAgICAgICB0c1R5cGU6IHN5bWJvbC50c1R5cGUsXG4gICAgICAgIGRlY2xhcmF0aW9uOiByZWYsXG4gICAgICAgIHRhcmdldDogdGFyZ2V0LmRpcmVjdGl2ZS5yZWYubm9kZSxcbiAgICAgICAgdGFyZ2V0TG9jYXRpb246IHN5bWJvbC5zaGltTG9jYXRpb24sXG4gICAgICAgIHJlZmVyZW5jZVZhckxvY2F0aW9uOiByZWZlcmVuY2VWYXJTaGltTG9jYXRpb24sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3ltYm9sT2ZQaXBlKGV4cHJlc3Npb246IEJpbmRpbmdQaXBlKTogUGlwZVN5bWJvbHxudWxsIHtcbiAgICBjb25zdCBtZXRob2RBY2Nlc3MgPSBmaW5kRmlyc3RNYXRjaGluZ05vZGUoXG4gICAgICAgIHRoaXMudHlwZUNoZWNrQmxvY2ssXG4gICAgICAgIHt3aXRoU3BhbjogZXhwcmVzc2lvbi5uYW1lU3BhbiwgZmlsdGVyOiB0cy5pc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbn0pO1xuICAgIGlmIChtZXRob2RBY2Nlc3MgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHBpcGVWYXJpYWJsZU5vZGUgPSBtZXRob2RBY2Nlc3MuZXhwcmVzc2lvbjtcbiAgICBjb25zdCBwaXBlRGVjbGFyYXRpb24gPSB0aGlzLmdldFR5cGVDaGVja2VyKCkuZ2V0U3ltYm9sQXRMb2NhdGlvbihwaXBlVmFyaWFibGVOb2RlKTtcbiAgICBpZiAocGlwZURlY2xhcmF0aW9uID09PSB1bmRlZmluZWQgfHwgcGlwZURlY2xhcmF0aW9uLnZhbHVlRGVjbGFyYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcGlwZUluc3RhbmNlID0gdGhpcy5nZXRTeW1ib2xPZlRzTm9kZShwaXBlRGVjbGFyYXRpb24udmFsdWVEZWNsYXJhdGlvbik7XG4gICAgLy8gVGhlIGluc3RhbmNlIHNob3VsZCBuZXZlciBiZSBudWxsLCBub3Igc2hvdWxkIHRoZSBzeW1ib2wgbGFjayBhIHZhbHVlIGRlY2xhcmF0aW9uLiBUaGlzXG4gICAgLy8gaXMgYmVjYXVzZSB0aGUgbm9kZSB1c2VkIHRvIGxvb2sgZm9yIHRoZSBgcGlwZUluc3RhbmNlYCBzeW1ib2wgaW5mbyBpcyBhIHZhbHVlXG4gICAgLy8gZGVjbGFyYXRpb24gb2YgYW5vdGhlciBzeW1ib2wgKGkuZS4gdGhlIGBwaXBlRGVjbGFyYXRpb25gIHN5bWJvbCkuXG4gICAgaWYgKHBpcGVJbnN0YW5jZSA9PT0gbnVsbCB8fCAhaXNTeW1ib2xXaXRoVmFsdWVEZWNsYXJhdGlvbihwaXBlSW5zdGFuY2UudHNTeW1ib2wpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzeW1ib2xJbmZvID0gdGhpcy5nZXRTeW1ib2xPZlRzTm9kZShtZXRob2RBY2Nlc3MpO1xuICAgIGlmIChzeW1ib2xJbmZvID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAga2luZDogU3ltYm9sS2luZC5QaXBlLFxuICAgICAgLi4uc3ltYm9sSW5mbyxcbiAgICAgIGNsYXNzU3ltYm9sOiB7XG4gICAgICAgIC4uLnBpcGVJbnN0YW5jZSxcbiAgICAgICAgdHNTeW1ib2w6IHBpcGVJbnN0YW5jZS50c1N5bWJvbCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3ltYm9sT2ZUZW1wbGF0ZUV4cHJlc3Npb24oZXhwcmVzc2lvbjogQVNUKTogVmFyaWFibGVTeW1ib2x8UmVmZXJlbmNlU3ltYm9sXG4gICAgICB8RXhwcmVzc2lvblN5bWJvbHxudWxsIHtcbiAgICBpZiAoZXhwcmVzc2lvbiBpbnN0YW5jZW9mIEFTVFdpdGhTb3VyY2UpIHtcbiAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLmFzdDtcbiAgICB9XG5cbiAgICBjb25zdCBleHByZXNzaW9uVGFyZ2V0ID0gdGhpcy50ZW1wbGF0ZURhdGEuYm91bmRUYXJnZXQuZ2V0RXhwcmVzc2lvblRhcmdldChleHByZXNzaW9uKTtcbiAgICBpZiAoZXhwcmVzc2lvblRhcmdldCAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U3ltYm9sKGV4cHJlc3Npb25UYXJnZXQpO1xuICAgIH1cblxuICAgIGxldCB3aXRoU3BhbiA9IGV4cHJlc3Npb24uc291cmNlU3BhbjtcblxuICAgIC8vIFRoZSBgbmFtZWAgcGFydCBvZiBhIGBQcm9wZXJ0eVdyaXRlYCBhbmQgYSBub24tc2FmZSBgQ2FsbGAgZG9lcyBub3QgaGF2ZSBpdHMgb3duXG4gICAgLy8gQVNUIHNvIHRoZXJlIGlzIG5vIHdheSB0byByZXRyaWV2ZSBhIGBTeW1ib2xgIGZvciBqdXN0IHRoZSBgbmFtZWAgdmlhIGEgc3BlY2lmaWMgbm9kZS5cbiAgICBpZiAoZXhwcmVzc2lvbiBpbnN0YW5jZW9mIFByb3BlcnR5V3JpdGUpIHtcbiAgICAgIHdpdGhTcGFuID0gZXhwcmVzc2lvbi5uYW1lU3BhbjtcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24gaW5zdGFuY2VvZiBDYWxsICYmIGV4cHJlc3Npb24ucmVjZWl2ZXIgaW5zdGFuY2VvZiBQcm9wZXJ0eVJlYWQpIHtcbiAgICAgIHdpdGhTcGFuID0gZXhwcmVzc2lvbi5yZWNlaXZlci5uYW1lU3BhbjtcbiAgICB9XG5cbiAgICBsZXQgbm9kZTogdHMuTm9kZXxudWxsID0gbnVsbDtcblxuICAgIC8vIFByb3BlcnR5IHJlYWRzIGluIHRlbXBsYXRlcyB1c3VhbGx5IG1hcCB0byBhIGBQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb25gXG4gICAgLy8gKGUuZy4gYGN0eC5mb29gKSBzbyB0cnkgbG9va2luZyBmb3Igb25lIGZpcnN0LlxuICAgIGlmIChleHByZXNzaW9uIGluc3RhbmNlb2YgUHJvcGVydHlSZWFkKSB7XG4gICAgICBub2RlID0gZmluZEZpcnN0TWF0Y2hpbmdOb2RlKFxuICAgICAgICAgIHRoaXMudHlwZUNoZWNrQmxvY2ssIHt3aXRoU3BhbiwgZmlsdGVyOiB0cy5pc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbn0pO1xuICAgIH1cblxuICAgIC8vIE90aGVyd2lzZSBmYWxsIGJhY2sgdG8gc2VhcmNoaW5nIGZvciBhbnkgQVNUIG5vZGUuXG4gICAgaWYgKG5vZGUgPT09IG51bGwpIHtcbiAgICAgIG5vZGUgPSBmaW5kRmlyc3RNYXRjaGluZ05vZGUodGhpcy50eXBlQ2hlY2tCbG9jaywge3dpdGhTcGFuLCBmaWx0ZXI6IGFueU5vZGVGaWx0ZXJ9KTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgd2hpbGUgKHRzLmlzUGFyZW50aGVzaXplZEV4cHJlc3Npb24obm9kZSkpIHtcbiAgICAgIG5vZGUgPSBub2RlLmV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgLy8gLSBJZiB3ZSBoYXZlIHNhZmUgcHJvcGVydHkgcmVhZCAoXCJhPy5iXCIpIHdlIHdhbnQgdG8gZ2V0IHRoZSBTeW1ib2wgZm9yIGIsIHRoZSBgd2hlblRydWVgXG4gICAgLy8gZXhwcmVzc2lvbi5cbiAgICAvLyAtIElmIG91ciBleHByZXNzaW9uIGlzIGEgcGlwZSBiaW5kaW5nIChcImEgfCB0ZXN0OmI6Y1wiKSwgd2Ugd2FudCB0aGUgU3ltYm9sIGZvciB0aGVcbiAgICAvLyBgdHJhbnNmb3JtYCBvbiB0aGUgcGlwZS5cbiAgICAvLyAtIE90aGVyd2lzZSwgd2UgcmV0cmlldmUgdGhlIHN5bWJvbCBmb3IgdGhlIG5vZGUgaXRzZWxmIHdpdGggbm8gc3BlY2lhbCBjb25zaWRlcmF0aW9uc1xuICAgIGlmICgoZXhwcmVzc2lvbiBpbnN0YW5jZW9mIFNhZmVQcm9wZXJ0eVJlYWQgfHxcbiAgICAgICAgIChleHByZXNzaW9uIGluc3RhbmNlb2YgQ2FsbCAmJiBleHByZXNzaW9uLnJlY2VpdmVyIGluc3RhbmNlb2YgU2FmZVByb3BlcnR5UmVhZCkpICYmXG4gICAgICAgIHRzLmlzQ29uZGl0aW9uYWxFeHByZXNzaW9uKG5vZGUpKSB7XG4gICAgICBjb25zdCB3aGVuVHJ1ZVN5bWJvbCA9IChleHByZXNzaW9uIGluc3RhbmNlb2YgQ2FsbCAmJiB0cy5pc0NhbGxFeHByZXNzaW9uKG5vZGUud2hlblRydWUpKSA/XG4gICAgICAgICAgdGhpcy5nZXRTeW1ib2xPZlRzTm9kZShub2RlLndoZW5UcnVlLmV4cHJlc3Npb24pIDpcbiAgICAgICAgICB0aGlzLmdldFN5bWJvbE9mVHNOb2RlKG5vZGUud2hlblRydWUpO1xuICAgICAgaWYgKHdoZW5UcnVlU3ltYm9sID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi53aGVuVHJ1ZVN5bWJvbCxcbiAgICAgICAga2luZDogU3ltYm9sS2luZC5FeHByZXNzaW9uLFxuICAgICAgICAvLyBSYXRoZXIgdGhhbiB1c2luZyB0aGUgdHlwZSBvZiBvbmx5IHRoZSBgd2hlblRydWVgIHBhcnQgb2YgdGhlIGV4cHJlc3Npb24sIHdlIHNob3VsZFxuICAgICAgICAvLyBzdGlsbCBnZXQgdGhlIHR5cGUgb2YgdGhlIHdob2xlIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gdG8gaW5jbHVkZSBgfHVuZGVmaW5lZGAuXG4gICAgICAgIHRzVHlwZTogdGhpcy5nZXRUeXBlQ2hlY2tlcigpLmdldFR5cGVBdExvY2F0aW9uKG5vZGUpXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzeW1ib2xJbmZvID0gdGhpcy5nZXRTeW1ib2xPZlRzTm9kZShub2RlKTtcbiAgICAgIHJldHVybiBzeW1ib2xJbmZvID09PSBudWxsID8gbnVsbCA6IHsuLi5zeW1ib2xJbmZvLCBraW5kOiBTeW1ib2xLaW5kLkV4cHJlc3Npb259O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3ltYm9sT2ZUc05vZGUobm9kZTogdHMuTm9kZSk6IFRzTm9kZVN5bWJvbEluZm98bnVsbCB7XG4gICAgd2hpbGUgKHRzLmlzUGFyZW50aGVzaXplZEV4cHJlc3Npb24obm9kZSkpIHtcbiAgICAgIG5vZGUgPSBub2RlLmV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgbGV0IHRzU3ltYm9sOiB0cy5TeW1ib2x8dW5kZWZpbmVkO1xuICAgIGlmICh0cy5pc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihub2RlKSkge1xuICAgICAgdHNTeW1ib2wgPSB0aGlzLmdldFR5cGVDaGVja2VyKCkuZ2V0U3ltYm9sQXRMb2NhdGlvbihub2RlLm5hbWUpO1xuICAgIH0gZWxzZSBpZiAodHMuaXNFbGVtZW50QWNjZXNzRXhwcmVzc2lvbihub2RlKSkge1xuICAgICAgdHNTeW1ib2wgPSB0aGlzLmdldFR5cGVDaGVja2VyKCkuZ2V0U3ltYm9sQXRMb2NhdGlvbihub2RlLmFyZ3VtZW50RXhwcmVzc2lvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRzU3ltYm9sID0gdGhpcy5nZXRUeXBlQ2hlY2tlcigpLmdldFN5bWJvbEF0TG9jYXRpb24obm9kZSk7XG4gICAgfVxuXG4gICAgY29uc3QgcG9zaXRpb25JblNoaW1GaWxlID0gdGhpcy5nZXRTaGltUG9zaXRpb25Gb3JOb2RlKG5vZGUpO1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmdldFR5cGVDaGVja2VyKCkuZ2V0VHlwZUF0TG9jYXRpb24obm9kZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIElmIHdlIGNvdWxkIG5vdCBmaW5kIGEgc3ltYm9sLCBmYWxsIGJhY2sgdG8gdGhlIHN5bWJvbCBvbiB0aGUgdHlwZSBmb3IgdGhlIG5vZGUuXG4gICAgICAvLyBTb21lIG5vZGVzIHdvbid0IGhhdmUgYSBcInN5bWJvbCBhdCBsb2NhdGlvblwiIGJ1dCB3aWxsIGhhdmUgYSBzeW1ib2wgZm9yIHRoZSB0eXBlLlxuICAgICAgLy8gRXhhbXBsZXMgb2YgdGhpcyB3b3VsZCBiZSBsaXRlcmFscyBhbmQgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpYC5cbiAgICAgIHRzU3ltYm9sOiB0c1N5bWJvbCA/PyB0eXBlLnN5bWJvbCA/PyBudWxsLFxuICAgICAgdHNUeXBlOiB0eXBlLFxuICAgICAgc2hpbUxvY2F0aW9uOiB7c2hpbVBhdGg6IHRoaXMuc2hpbVBhdGgsIHBvc2l0aW9uSW5TaGltRmlsZX0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2hpbVBvc2l0aW9uRm9yTm9kZShub2RlOiB0cy5Ob2RlKTogbnVtYmVyIHtcbiAgICBpZiAodHMuaXNUeXBlUmVmZXJlbmNlTm9kZShub2RlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2hpbVBvc2l0aW9uRm9yTm9kZShub2RlLnR5cGVOYW1lKTtcbiAgICB9IGVsc2UgaWYgKHRzLmlzUXVhbGlmaWVkTmFtZShub2RlKSkge1xuICAgICAgcmV0dXJuIG5vZGUucmlnaHQuZ2V0U3RhcnQoKTtcbiAgICB9IGVsc2UgaWYgKHRzLmlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKG5vZGUpKSB7XG4gICAgICByZXR1cm4gbm9kZS5uYW1lLmdldFN0YXJ0KCk7XG4gICAgfSBlbHNlIGlmICh0cy5pc0VsZW1lbnRBY2Nlc3NFeHByZXNzaW9uKG5vZGUpKSB7XG4gICAgICByZXR1cm4gbm9kZS5hcmd1bWVudEV4cHJlc3Npb24uZ2V0U3RhcnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vZGUuZ2V0U3RhcnQoKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqIEZpbHRlciBwcmVkaWNhdGUgZnVuY3Rpb24gdGhhdCBtYXRjaGVzIGFueSBBU1Qgbm9kZS4gKi9cbmZ1bmN0aW9uIGFueU5vZGVGaWx0ZXIobjogdHMuTm9kZSk6IG4gaXMgdHMuTm9kZSB7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzb3VyY2VTcGFuRXF1YWwoYTogUGFyc2VTb3VyY2VTcGFuLCBiOiBQYXJzZVNvdXJjZVNwYW4pIHtcbiAgcmV0dXJuIGEuc3RhcnQub2Zmc2V0ID09PSBiLnN0YXJ0Lm9mZnNldCAmJiBhLmVuZC5vZmZzZXQgPT09IGIuZW5kLm9mZnNldDtcbn1cbiJdfQ==
|