@angular/core 13.0.0-next.7 → 13.0.0-rc.1
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/core.d.ts +599 -963
- package/esm2020/core.mjs +5 -0
- package/{esm2015/index.js → esm2020/index.mjs} +0 -0
- package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
- package/esm2020/src/application_init.mjs +140 -0
- package/esm2020/src/application_module.mjs +135 -0
- package/esm2020/src/application_ref.mjs +738 -0
- package/{esm2015/src/application_tokens.js → esm2020/src/application_tokens.mjs} +0 -0
- package/esm2020/src/change_detection/change_detection.mjs +31 -0
- package/esm2020/src/change_detection/change_detection_util.mjs +64 -0
- package/esm2020/src/change_detection/change_detector_ref.mjs +89 -0
- package/{esm2015/src/change_detection/constants.js → esm2020/src/change_detection/constants.mjs} +0 -0
- package/esm2020/src/change_detection/differs/default_iterable_differ.mjs +666 -0
- package/{esm2015/src/change_detection/differs/default_keyvalue_differ.js → esm2020/src/change_detection/differs/default_keyvalue_differ.mjs} +0 -0
- package/{esm2015/src/change_detection/differs/iterable_differs.js → esm2020/src/change_detection/differs/iterable_differs.mjs} +0 -0
- package/{esm2015/src/change_detection/differs/keyvalue_differs.js → esm2020/src/change_detection/differs/keyvalue_differs.mjs} +0 -0
- package/{esm2015/src/change_detection/pipe_transform.js → esm2020/src/change_detection/pipe_transform.mjs} +0 -0
- package/esm2020/src/change_detection.mjs +14 -0
- package/esm2020/src/codegen_private_exports.mjs +11 -0
- package/{esm2015/src/compiler/compiler_facade.js → esm2020/src/compiler/compiler_facade.mjs} +0 -0
- package/{esm2015/src/compiler/compiler_facade_interface.js → esm2020/src/compiler/compiler_facade_interface.mjs} +1 -1
- package/esm2020/src/console.mjs +26 -0
- package/esm2020/src/core.mjs +52 -0
- package/esm2020/src/core_private_export.mjs +34 -0
- package/esm2020/src/core_render3_private_export.mjs +46 -0
- package/esm2020/src/debug/debug_node.mjs +625 -0
- package/{esm2015/src/debug/proxy.js → esm2020/src/debug/proxy.mjs} +0 -0
- package/{esm2015/src/di/forward_ref.js → esm2020/src/di/forward_ref.mjs} +0 -0
- package/{esm2015/src/di/index.js → esm2020/src/di/index.mjs} +0 -0
- package/{esm2015/src/di/inject_switch.js → esm2020/src/di/inject_switch.mjs} +0 -0
- package/esm2020/src/di/injectable.mjs +27 -0
- package/esm2020/src/di/injection_token.mjs +82 -0
- package/esm2020/src/di/injector.mjs +323 -0
- package/esm2020/src/di/injector_compatibility.mjs +185 -0
- package/{esm2015/src/di/injector_marker.js → esm2020/src/di/injector_marker.mjs} +0 -0
- package/{esm2015/src/di/injector_token.js → esm2020/src/di/injector_token.mjs} +0 -0
- package/{esm2015/src/di/interface/defs.js → esm2020/src/di/interface/defs.mjs} +0 -0
- package/{esm2015/src/di/interface/injector.js → esm2020/src/di/interface/injector.mjs} +0 -0
- package/{esm2015/src/di/interface/provider.js → esm2020/src/di/interface/provider.mjs} +0 -0
- package/{esm2015/src/di/jit/environment.js → esm2020/src/di/jit/environment.mjs} +0 -0
- package/esm2020/src/di/jit/injectable.mjs +94 -0
- package/{esm2015/src/di/jit/util.js → esm2020/src/di/jit/util.mjs} +0 -0
- package/esm2020/src/di/metadata.mjs +60 -0
- package/esm2020/src/di/metadata_attr.mjs +24 -0
- package/{esm2015/src/di/null_injector.js → esm2020/src/di/null_injector.mjs} +0 -0
- package/{esm2015/src/di/provider_token.js → esm2020/src/di/provider_token.mjs} +0 -0
- package/{esm2015/src/di/r3_injector.js → esm2020/src/di/r3_injector.mjs} +0 -0
- package/{esm2015/src/di/reflective_errors.js → esm2020/src/di/reflective_errors.mjs} +0 -0
- package/{esm2015/src/di/reflective_injector.js → esm2020/src/di/reflective_injector.mjs} +0 -0
- package/{esm2015/src/di/reflective_key.js → esm2020/src/di/reflective_key.mjs} +0 -0
- package/{esm2015/src/di/reflective_provider.js → esm2020/src/di/reflective_provider.mjs} +0 -0
- package/{esm2015/src/di/scope.js → esm2020/src/di/scope.mjs} +0 -0
- package/esm2020/src/di/util.mjs +51 -0
- package/{esm2015/src/di.js → esm2020/src/di.mjs} +0 -0
- package/{esm2015/src/error_handler.js → esm2020/src/error_handler.mjs} +0 -0
- package/{esm2015/src/errors.js → esm2020/src/errors.mjs} +0 -0
- package/esm2020/src/event_emitter.mjs +53 -0
- package/esm2020/src/i18n/locale_data_api.mjs +132 -0
- package/esm2020/src/i18n/locale_en.mjs +17 -0
- package/{esm2015/src/i18n/localization.js → esm2020/src/i18n/localization.mjs} +0 -0
- package/{esm2015/src/i18n/tokens.js → esm2020/src/i18n/tokens.mjs} +6 -6
- package/{esm2015/src/interface/lifecycle_hooks.js → esm2020/src/interface/lifecycle_hooks.mjs} +0 -0
- package/{esm2015/src/interface/simple_change.js → esm2020/src/interface/simple_change.mjs} +0 -0
- package/{esm2015/src/interface/type.js → esm2020/src/interface/type.mjs} +0 -0
- package/{esm2015/src/ivy_switch.js → esm2020/src/ivy_switch.mjs} +2 -2
- package/esm2020/src/linker/compiler.mjs +136 -0
- package/{esm2015/src/linker/component_factory.js → esm2020/src/linker/component_factory.mjs} +0 -0
- package/{esm2015/src/linker/component_factory_resolver.js → esm2020/src/linker/component_factory_resolver.mjs} +0 -0
- package/esm2020/src/linker/element_ref.mjs +59 -0
- package/esm2020/src/linker/ng_module_factory.mjs +29 -0
- package/esm2020/src/linker/ng_module_factory_loader.mjs +42 -0
- package/esm2020/src/linker/ng_module_factory_loader_impl.mjs +10 -0
- package/{esm2015/src/linker/ng_module_factory_registration.js → esm2020/src/linker/ng_module_factory_registration.mjs} +2 -2
- package/{esm2015/src/linker/query_list.js → esm2020/src/linker/query_list.mjs} +0 -0
- package/{esm2015/src/linker/template_ref.js → esm2020/src/linker/template_ref.mjs} +2 -2
- package/esm2020/src/linker/view_container_ref.mjs +283 -0
- package/{esm2015/src/linker/view_ref.js → esm2020/src/linker/view_ref.mjs} +0 -0
- package/esm2020/src/linker.mjs +19 -0
- package/esm2020/src/metadata/di.mjs +108 -0
- package/esm2020/src/metadata/directives.mjs +112 -0
- package/{esm2015/src/metadata/do_boostrap.js → esm2020/src/metadata/do_boostrap.mjs} +0 -0
- package/esm2020/src/metadata/ng_module.mjs +42 -0
- package/{esm2015/src/metadata/ng_module_def.js → esm2020/src/metadata/ng_module_def.mjs} +0 -0
- package/{esm2015/src/metadata/resource_loading.js → esm2020/src/metadata/resource_loading.mjs} +0 -0
- package/{esm2015/src/metadata/schema.js → esm2020/src/metadata/schema.mjs} +0 -0
- package/{esm2015/src/metadata/view.js → esm2020/src/metadata/view.mjs} +0 -0
- package/{esm2015/src/metadata.js → esm2020/src/metadata.mjs} +0 -0
- package/{esm2015/src/platform_core_providers.js → esm2020/src/platform_core_providers.mjs} +0 -0
- package/{esm2015/src/r3_symbols.js → esm2020/src/r3_symbols.mjs} +0 -0
- package/{esm2015/src/reflection/platform_reflection_capabilities.js → esm2020/src/reflection/platform_reflection_capabilities.mjs} +0 -0
- package/{esm2015/src/reflection/reflection.js → esm2020/src/reflection/reflection.mjs} +0 -0
- package/{esm2015/src/reflection/reflection_capabilities.js → esm2020/src/reflection/reflection_capabilities.mjs} +3 -3
- package/{esm2015/src/reflection/reflector.js → esm2020/src/reflection/reflector.mjs} +0 -0
- package/{esm2015/src/reflection/types.js → esm2020/src/reflection/types.mjs} +0 -0
- package/{esm2015/src/render/api.js → esm2020/src/render/api.mjs} +2 -2
- package/{esm2015/src/render/api_flags.js → esm2020/src/render/api_flags.mjs} +0 -0
- package/{esm2015/src/render.js → esm2020/src/render.mjs} +0 -0
- package/{esm2015/src/render3/assert.js → esm2020/src/render3/assert.mjs} +0 -0
- package/{esm2015/src/render3/bindings.js → esm2020/src/render3/bindings.mjs} +0 -0
- package/{esm2015/src/render3/collect_native_nodes.js → esm2020/src/render3/collect_native_nodes.mjs} +0 -0
- package/esm2020/src/render3/component.mjs +204 -0
- package/{esm2015/src/render3/component_ref.js → esm2020/src/render3/component_ref.mjs} +2 -2
- package/{esm2015/src/render3/context_discovery.js → esm2020/src/render3/context_discovery.mjs} +0 -0
- package/{esm2015/src/render3/definition.js → esm2020/src/render3/definition.mjs} +0 -0
- package/{esm2015/src/render3/definition_factory.js → esm2020/src/render3/definition_factory.mjs} +0 -0
- package/{esm2015/src/render3/di.js → esm2020/src/render3/di.mjs} +0 -0
- package/{esm2015/src/render3/di_setup.js → esm2020/src/render3/di_setup.mjs} +0 -0
- package/{esm2015/src/render3/error_code.js → esm2020/src/render3/error_code.mjs} +0 -0
- package/{esm2015/src/render3/errors.js → esm2020/src/render3/errors.mjs} +0 -0
- package/{esm2015/src/render3/errors_di.js → esm2020/src/render3/errors_di.mjs} +0 -0
- package/{esm2015/src/render3/features/copy_definition_feature.js → esm2020/src/render3/features/copy_definition_feature.mjs} +0 -0
- package/{esm2015/src/render3/features/inherit_definition_feature.js → esm2020/src/render3/features/inherit_definition_feature.mjs} +0 -0
- package/esm2020/src/render3/features/ng_onchanges_feature.mjs +92 -0
- package/{esm2015/src/render3/features/providers_feature.js → esm2020/src/render3/features/providers_feature.mjs} +0 -0
- package/{esm2015/src/render3/fields.js → esm2020/src/render3/fields.mjs} +0 -0
- package/{esm2015/src/render3/global_utils_api.js → esm2020/src/render3/global_utils_api.mjs} +0 -0
- package/{esm2015/src/render3/hooks.js → esm2020/src/render3/hooks.mjs} +0 -0
- package/{esm2015/src/render3/i18n/i18n_apply.js → esm2020/src/render3/i18n/i18n_apply.mjs} +0 -0
- package/{esm2015/src/render3/i18n/i18n_debug.js → esm2020/src/render3/i18n/i18n_debug.mjs} +0 -0
- package/{esm2015/src/render3/i18n/i18n_insert_before_index.js → esm2020/src/render3/i18n/i18n_insert_before_index.mjs} +0 -0
- package/{esm2015/src/render3/i18n/i18n_locale_id.js → esm2020/src/render3/i18n/i18n_locale_id.mjs} +0 -0
- package/{esm2015/src/render3/i18n/i18n_parse.js → esm2020/src/render3/i18n/i18n_parse.mjs} +0 -0
- package/{esm2015/src/render3/i18n/i18n_postprocess.js → esm2020/src/render3/i18n/i18n_postprocess.mjs} +0 -0
- package/{esm2015/src/render3/i18n/i18n_tree_shaking.js → esm2020/src/render3/i18n/i18n_tree_shaking.mjs} +0 -0
- package/{esm2015/src/render3/i18n/i18n_util.js → esm2020/src/render3/i18n/i18n_util.mjs} +0 -0
- package/{esm2015/src/render3/index.js → esm2020/src/render3/index.mjs} +0 -0
- package/{esm2015/src/render3/instructions/advance.js → esm2020/src/render3/instructions/advance.mjs} +0 -0
- package/{esm2015/src/render3/instructions/all.js → esm2020/src/render3/instructions/all.mjs} +0 -0
- package/{esm2015/src/render3/instructions/attribute.js → esm2020/src/render3/instructions/attribute.mjs} +0 -0
- package/{esm2015/src/render3/instructions/attribute_interpolation.js → esm2020/src/render3/instructions/attribute_interpolation.mjs} +0 -0
- package/{esm2015/src/render3/instructions/change_detection.js → esm2020/src/render3/instructions/change_detection.mjs} +0 -0
- package/{esm2015/src/render3/instructions/class_map_interpolation.js → esm2020/src/render3/instructions/class_map_interpolation.mjs} +0 -0
- package/{esm2015/src/render3/instructions/di.js → esm2020/src/render3/instructions/di.mjs} +0 -0
- package/{esm2015/src/render3/instructions/di_attr.js → esm2020/src/render3/instructions/di_attr.mjs} +0 -0
- package/{esm2015/src/render3/instructions/element.js → esm2020/src/render3/instructions/element.mjs} +0 -0
- package/{esm2015/src/render3/instructions/element_container.js → esm2020/src/render3/instructions/element_container.mjs} +0 -0
- package/{esm2015/src/render3/instructions/get_current_view.js → esm2020/src/render3/instructions/get_current_view.mjs} +0 -0
- package/{esm2015/src/render3/instructions/host_property.js → esm2020/src/render3/instructions/host_property.mjs} +0 -0
- package/{esm2015/src/render3/instructions/i18n.js → esm2020/src/render3/instructions/i18n.mjs} +0 -0
- package/{esm2015/src/render3/instructions/i18n_icu_container_visitor.js → esm2020/src/render3/instructions/i18n_icu_container_visitor.mjs} +0 -0
- package/{esm2015/src/render3/instructions/interpolation.js → esm2020/src/render3/instructions/interpolation.mjs} +0 -0
- package/{esm2015/src/render3/instructions/listener.js → esm2020/src/render3/instructions/listener.mjs} +0 -0
- package/{esm2015/src/render3/instructions/lview_debug.js → esm2020/src/render3/instructions/lview_debug.mjs} +0 -0
- package/{esm2015/src/render3/instructions/namespace.js → esm2020/src/render3/instructions/namespace.mjs} +0 -0
- package/{esm2015/src/render3/instructions/next_context.js → esm2020/src/render3/instructions/next_context.mjs} +0 -0
- package/{esm2015/src/render3/instructions/projection.js → esm2020/src/render3/instructions/projection.mjs} +0 -0
- package/{esm2015/src/render3/instructions/property.js → esm2020/src/render3/instructions/property.mjs} +0 -0
- package/{esm2015/src/render3/instructions/property_interpolation.js → esm2020/src/render3/instructions/property_interpolation.mjs} +0 -0
- package/esm2020/src/render3/instructions/shared.mjs +1811 -0
- package/{esm2015/src/render3/instructions/storage.js → esm2020/src/render3/instructions/storage.mjs} +0 -0
- package/{esm2015/src/render3/instructions/style_map_interpolation.js → esm2020/src/render3/instructions/style_map_interpolation.mjs} +0 -0
- package/{esm2015/src/render3/instructions/style_prop_interpolation.js → esm2020/src/render3/instructions/style_prop_interpolation.mjs} +0 -0
- package/{esm2015/src/render3/instructions/styling.js → esm2020/src/render3/instructions/styling.mjs} +0 -0
- package/{esm2015/src/render3/instructions/template.js → esm2020/src/render3/instructions/template.mjs} +0 -0
- package/{esm2015/src/render3/instructions/text.js → esm2020/src/render3/instructions/text.mjs} +0 -0
- package/{esm2015/src/render3/instructions/text_interpolation.js → esm2020/src/render3/instructions/text_interpolation.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/container.js → esm2020/src/render3/interfaces/container.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/context.js → esm2020/src/render3/interfaces/context.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/definition.js → esm2020/src/render3/interfaces/definition.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/document.js → esm2020/src/render3/interfaces/document.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/i18n.js → esm2020/src/render3/interfaces/i18n.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/injector.js → esm2020/src/render3/interfaces/injector.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/node.js → esm2020/src/render3/interfaces/node.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/player.js → esm2020/src/render3/interfaces/player.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/projection.js → esm2020/src/render3/interfaces/projection.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/public_definitions.js → esm2020/src/render3/interfaces/public_definitions.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/query.js → esm2020/src/render3/interfaces/query.mjs} +0 -0
- package/esm2020/src/render3/interfaces/renderer.mjs +27 -0
- package/{esm2015/src/render3/interfaces/renderer_dom.js → esm2020/src/render3/interfaces/renderer_dom.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/sanitization.js → esm2020/src/render3/interfaces/sanitization.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/styling.js → esm2020/src/render3/interfaces/styling.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/type_checks.js → esm2020/src/render3/interfaces/type_checks.mjs} +0 -0
- package/{esm2015/src/render3/interfaces/view.js → esm2020/src/render3/interfaces/view.mjs} +0 -0
- package/esm2020/src/render3/jit/directive.mjs +325 -0
- package/esm2020/src/render3/jit/environment.mjs +165 -0
- package/{esm2015/src/render3/jit/jit_options.js → esm2020/src/render3/jit/jit_options.mjs} +0 -0
- package/{esm2015/src/render3/jit/module.js → esm2020/src/render3/jit/module.mjs} +0 -0
- package/esm2020/src/render3/jit/partial.mjs +104 -0
- package/{esm2015/src/render3/jit/pipe.js → esm2020/src/render3/jit/pipe.mjs} +0 -0
- package/esm2020/src/render3/metadata.mjs +49 -0
- package/{esm2015/src/render3/namespaces.js → esm2020/src/render3/namespaces.mjs} +0 -0
- package/esm2020/src/render3/ng_module_ref.mjs +122 -0
- package/{esm2015/src/render3/node_assert.js → esm2020/src/render3/node_assert.mjs} +0 -0
- package/{esm2015/src/render3/node_manipulation.js → esm2020/src/render3/node_manipulation.mjs} +0 -0
- package/{esm2015/src/render3/node_manipulation_i18n.js → esm2020/src/render3/node_manipulation_i18n.mjs} +0 -0
- package/{esm2015/src/render3/node_selector_matcher.js → esm2020/src/render3/node_selector_matcher.mjs} +0 -0
- package/esm2020/src/render3/pipe.mjs +184 -0
- package/{esm2015/src/render3/profiler.js → esm2020/src/render3/profiler.mjs} +0 -0
- package/{esm2015/src/render3/pure_function.js → esm2020/src/render3/pure_function.mjs} +0 -0
- package/{esm2015/src/render3/query.js → esm2020/src/render3/query.mjs} +0 -0
- package/{esm2015/src/render3/state.js → esm2020/src/render3/state.mjs} +0 -0
- package/{esm2015/src/render3/styling/class_differ.js → esm2020/src/render3/styling/class_differ.mjs} +0 -0
- package/{esm2015/src/render3/styling/static_styling.js → esm2020/src/render3/styling/static_styling.mjs} +0 -0
- package/{esm2015/src/render3/styling/style_binding_list.js → esm2020/src/render3/styling/style_binding_list.mjs} +0 -0
- package/{esm2015/src/render3/styling/styling_parser.js → esm2020/src/render3/styling/styling_parser.mjs} +0 -0
- package/{esm2015/src/render3/tokens.js → esm2020/src/render3/tokens.mjs} +0 -0
- package/{esm2015/src/render3/util/attrs_utils.js → esm2020/src/render3/util/attrs_utils.mjs} +0 -0
- package/{esm2015/src/render3/util/change_detection_utils.js → esm2020/src/render3/util/change_detection_utils.mjs} +0 -0
- package/{esm2015/src/render3/util/debug_utils.js → esm2020/src/render3/util/debug_utils.mjs} +0 -0
- package/esm2020/src/render3/util/discovery_utils.mjs +411 -0
- package/esm2020/src/render3/util/global_utils.mjs +77 -0
- package/{esm2015/src/render3/util/injector_utils.js → esm2020/src/render3/util/injector_utils.mjs} +0 -0
- package/esm2020/src/render3/util/misc_utils.mjs +61 -0
- package/{esm2015/src/render3/util/stringify_utils.js → esm2020/src/render3/util/stringify_utils.mjs} +0 -0
- package/{esm2015/src/render3/util/view_traversal_utils.js → esm2020/src/render3/util/view_traversal_utils.mjs} +0 -0
- package/{esm2015/src/render3/util/view_utils.js → esm2020/src/render3/util/view_utils.mjs} +0 -0
- package/{esm2015/src/render3/view_engine_compatibility_prebound.js → esm2020/src/render3/view_engine_compatibility_prebound.mjs} +1 -1
- package/{esm2015/src/render3/view_ref.js → esm2020/src/render3/view_ref.mjs} +0 -0
- package/{esm2015/src/sanitization/bypass.js → esm2020/src/sanitization/bypass.mjs} +0 -0
- package/{esm2015/src/sanitization/html_sanitizer.js → esm2020/src/sanitization/html_sanitizer.mjs} +0 -0
- package/{esm2015/src/sanitization/inert_body.js → esm2020/src/sanitization/inert_body.mjs} +3 -3
- package/{esm2015/src/sanitization/sanitization.js → esm2020/src/sanitization/sanitization.mjs} +0 -0
- package/{esm2015/src/sanitization/sanitizer.js → esm2020/src/sanitization/sanitizer.mjs} +0 -0
- package/{esm2015/src/sanitization/security.js → esm2020/src/sanitization/security.mjs} +0 -0
- package/{esm2015/src/sanitization/url_sanitizer.js → esm2020/src/sanitization/url_sanitizer.mjs} +0 -0
- package/esm2020/src/testability/testability.mjs +258 -0
- package/{esm2015/src/util/array_utils.js → esm2020/src/util/array_utils.mjs} +0 -0
- package/{esm2015/src/util/assert.js → esm2020/src/util/assert.mjs} +0 -0
- package/{esm2015/src/util/char_code.js → esm2020/src/util/char_code.mjs} +0 -0
- package/{esm2015/src/util/closure.js → esm2020/src/util/closure.mjs} +0 -0
- package/{esm2015/src/util/comparison.js → esm2020/src/util/comparison.mjs} +0 -0
- package/{esm2015/src/util/decorators.js → esm2020/src/util/decorators.mjs} +0 -0
- package/{esm2015/src/util/dom.js → esm2020/src/util/dom.mjs} +0 -0
- package/{esm2015/src/util/empty.js → esm2020/src/util/empty.mjs} +0 -0
- package/{esm2015/src/util/errors.js → esm2020/src/util/errors.mjs} +0 -0
- package/{esm2015/src/util/global.js → esm2020/src/util/global.mjs} +0 -0
- package/{esm2015/src/util/is_dev_mode.js → esm2020/src/util/is_dev_mode.mjs} +0 -0
- package/{esm2015/src/util/iterable.js → esm2020/src/util/iterable.mjs} +0 -0
- package/{esm2015/src/util/lang.js → esm2020/src/util/lang.mjs} +0 -0
- package/{esm2015/src/util/microtask.js → esm2020/src/util/microtask.mjs} +0 -0
- package/{esm2015/src/util/named_array_type.js → esm2020/src/util/named_array_type.mjs} +0 -0
- package/{esm2015/src/util/ng_dev_mode.js → esm2020/src/util/ng_dev_mode.mjs} +0 -0
- package/{esm2015/src/util/ng_i18n_closure_mode.js → esm2020/src/util/ng_i18n_closure_mode.mjs} +0 -0
- package/{esm2015/src/util/ng_jit_mode.js → esm2020/src/util/ng_jit_mode.mjs} +0 -0
- package/{esm2015/src/util/ng_reflect.js → esm2020/src/util/ng_reflect.mjs} +0 -0
- package/{esm2015/src/util/noop.js → esm2020/src/util/noop.mjs} +0 -0
- package/{esm2015/src/util/property.js → esm2020/src/util/property.mjs} +0 -0
- package/{esm2015/src/util/raf.js → esm2020/src/util/raf.mjs} +0 -0
- package/{esm2015/src/util/security/trusted_type_defs.js → esm2020/src/util/security/trusted_type_defs.mjs} +0 -0
- package/esm2020/src/util/security/trusted_types.mjs +130 -0
- package/esm2020/src/util/security/trusted_types_bypass.mjs +83 -0
- package/{esm2015/src/util/stringify.js → esm2020/src/util/stringify.mjs} +0 -0
- package/{esm2015/src/util/symbol.js → esm2020/src/util/symbol.mjs} +0 -0
- package/{esm2015/src/version.js → esm2020/src/version.mjs} +1 -1
- package/{esm2015/src/view/element.js → esm2020/src/view/element.mjs} +0 -0
- package/{esm2015/src/view/entrypoint.js → esm2020/src/view/entrypoint.mjs} +0 -0
- package/{esm2015/src/view/errors.js → esm2020/src/view/errors.mjs} +0 -0
- package/{esm2015/src/view/index.js → esm2020/src/view/index.mjs} +2 -2
- package/{esm2015/src/view/ng_content.js → esm2020/src/view/ng_content.mjs} +0 -0
- package/{esm2015/src/view/ng_module.js → esm2020/src/view/ng_module.mjs} +0 -0
- package/esm2020/src/view/provider.mjs +490 -0
- package/esm2020/src/view/provider_flags.mjs +26 -0
- package/{esm2015/src/view/pure_expression.js → esm2020/src/view/pure_expression.mjs} +0 -0
- package/{esm2015/src/view/query.js → esm2020/src/view/query.mjs} +0 -0
- package/esm2020/src/view/refs.mjs +369 -0
- package/{esm2015/src/view/services.js → esm2020/src/view/services.mjs} +0 -0
- package/{esm2015/src/view/text.js → esm2020/src/view/text.mjs} +0 -0
- package/{esm2015/src/view/types.js → esm2020/src/view/types.mjs} +0 -0
- package/esm2020/src/view/util.mjs +369 -0
- package/{esm2015/src/view/view.js → esm2020/src/view/view.mjs} +0 -0
- package/{esm2015/src/view/view_attach.js → esm2020/src/view/view_attach.mjs} +0 -0
- package/{esm2015/src/zone/ng_zone.js → esm2020/src/zone/ng_zone.mjs} +0 -0
- package/{esm2015/src/zone.js → esm2020/src/zone.mjs} +0 -0
- package/{esm2015/testing/index.js → esm2020/testing/index.mjs} +0 -0
- package/{esm2015/testing/public_api.js → esm2020/testing/public_api.mjs} +0 -0
- package/{esm2015/testing/src/async.js → esm2020/testing/src/async.mjs} +0 -0
- package/{esm2015/testing/src/component_fixture.js → esm2020/testing/src/component_fixture.mjs} +0 -0
- package/{esm2015/testing/src/fake_async.js → esm2020/testing/src/fake_async.mjs} +0 -0
- package/{esm2015/testing/src/lang_utils.js → esm2020/testing/src/lang_utils.mjs} +0 -0
- package/esm2020/testing/src/logger.mjs +34 -0
- package/{esm2015/testing/src/metadata_override.js → esm2020/testing/src/metadata_override.mjs} +0 -0
- package/{esm2015/testing/src/metadata_overrider.js → esm2020/testing/src/metadata_overrider.mjs} +0 -0
- package/esm2020/testing/src/ng_zone_mock.mjs +33 -0
- package/{esm2015/testing/src/private_export_testing.js → esm2020/testing/src/private_export_testing.mjs} +0 -0
- package/esm2020/testing/src/r3_test_bed.mjs +397 -0
- package/esm2020/testing/src/r3_test_bed_compiler.mjs +735 -0
- package/{esm2015/testing/src/resolvers.js → esm2020/testing/src/resolvers.mjs} +1 -1
- package/{esm2015/testing/src/styling.js → esm2020/testing/src/styling.mjs} +0 -0
- package/esm2020/testing/src/test_bed.mjs +614 -0
- package/esm2020/testing/src/test_bed_common.mjs +28 -0
- package/esm2020/testing/src/test_compiler.mjs +69 -0
- package/{esm2015/testing/src/test_hooks.js → esm2020/testing/src/test_hooks.mjs} +0 -0
- package/{esm2015/testing/src/testing.js → esm2020/testing/src/testing.mjs} +0 -0
- package/{esm2015/testing/src/testing_internal.js → esm2020/testing/src/testing_internal.mjs} +0 -0
- package/esm2020/testing/testing.mjs +5 -0
- package/fesm2015/{core.js → core.mjs} +8674 -8756
- package/fesm2015/core.mjs.map +1 -0
- package/fesm2015/{testing.js → testing.mjs} +50 -61
- package/fesm2015/testing.mjs.map +1 -0
- package/fesm2020/core.mjs +33107 -0
- package/fesm2020/core.mjs.map +1 -0
- package/fesm2020/testing.mjs +2635 -0
- package/fesm2020/testing.mjs.map +1 -0
- package/package.json +34 -9
- package/schematics/migrations/abstract-control-parent/index.js +6 -6
- package/schematics/migrations/abstract-control-parent/util.d.ts +1 -1
- package/schematics/migrations/abstract-control-parent/util.js +11 -8
- package/schematics/migrations/activated-route-snapshot-fragment/index.js +12 -9
- package/schematics/migrations/activated-route-snapshot-fragment/util.d.ts +1 -1
- package/schematics/migrations/activated-route-snapshot-fragment/util.js +10 -7
- package/schematics/migrations/can-activate-with-redirect-to/index.js +13 -10
- package/schematics/migrations/can-activate-with-redirect-to/util.d.ts +1 -1
- package/schematics/migrations/can-activate-with-redirect-to/util.js +13 -10
- package/schematics/migrations/deep-shadow-piercing-selector/index.js +3 -3
- package/schematics/migrations/dynamic-queries/index.js +13 -10
- package/schematics/migrations/dynamic-queries/util.d.ts +1 -1
- package/schematics/migrations/dynamic-queries/util.js +12 -9
- package/schematics/migrations/initial-navigation/collector.d.ts +1 -1
- package/schematics/migrations/initial-navigation/collector.js +23 -20
- package/schematics/migrations/initial-navigation/index.js +5 -5
- package/schematics/migrations/initial-navigation/transform.d.ts +1 -1
- package/schematics/migrations/initial-navigation/transform.js +11 -8
- package/schematics/migrations/initial-navigation/update_recorder.d.ts +1 -1
- package/schematics/migrations/initial-navigation/update_recorder.js +1 -1
- package/schematics/migrations/initial-navigation/util.d.ts +1 -1
- package/schematics/migrations/initial-navigation/util.js +10 -7
- package/schematics/migrations/missing-injectable/definition_collector.d.ts +1 -1
- package/schematics/migrations/missing-injectable/definition_collector.js +16 -13
- package/schematics/migrations/missing-injectable/index.js +26 -12
- package/schematics/migrations/missing-injectable/providers_evaluator.d.ts +9 -19
- package/schematics/migrations/missing-injectable/providers_evaluator.js +47 -40
- package/schematics/migrations/missing-injectable/transform.d.ts +3 -2
- package/schematics/migrations/missing-injectable/transform.js +18 -16
- package/schematics/migrations/missing-injectable/update_recorder.d.ts +1 -1
- package/schematics/migrations/missing-injectable/update_recorder.js +1 -1
- package/schematics/migrations/module-with-providers/collector.d.ts +1 -1
- package/schematics/migrations/module-with-providers/collector.js +12 -9
- package/schematics/migrations/module-with-providers/index.js +26 -12
- package/schematics/migrations/module-with-providers/transform.d.ts +4 -3
- package/schematics/migrations/module-with-providers/transform.js +23 -22
- package/schematics/migrations/module-with-providers/util.d.ts +1 -1
- package/schematics/migrations/module-with-providers/util.js +10 -7
- package/schematics/migrations/move-document/document_import_visitor.d.ts +1 -1
- package/schematics/migrations/move-document/document_import_visitor.js +7 -4
- package/schematics/migrations/move-document/index.js +8 -8
- package/schematics/migrations/move-document/move-import.d.ts +1 -1
- package/schematics/migrations/move-document/move-import.js +27 -24
- package/schematics/migrations/native-view-encapsulation/index.js +6 -6
- package/schematics/migrations/native-view-encapsulation/util.d.ts +1 -1
- package/schematics/migrations/native-view-encapsulation/util.js +8 -5
- package/schematics/migrations/navigation-extras-omissions/index.js +13 -10
- package/schematics/migrations/navigation-extras-omissions/util.d.ts +1 -1
- package/schematics/migrations/navigation-extras-omissions/util.js +17 -14
- package/schematics/migrations/relative-link-resolution/collector.d.ts +1 -1
- package/schematics/migrations/relative-link-resolution/collector.js +17 -14
- package/schematics/migrations/relative-link-resolution/index.js +5 -5
- package/schematics/migrations/relative-link-resolution/transform.d.ts +1 -1
- package/schematics/migrations/relative-link-resolution/transform.js +12 -9
- package/schematics/migrations/relative-link-resolution/update_recorder.d.ts +1 -1
- package/schematics/migrations/relative-link-resolution/update_recorder.js +1 -1
- package/schematics/migrations/relative-link-resolution/util.d.ts +1 -1
- package/schematics/migrations/relative-link-resolution/util.js +10 -7
- package/schematics/migrations/renderer-to-renderer2/helpers.d.ts +1 -1
- package/schematics/migrations/renderer-to-renderer2/helpers.js +92 -89
- package/schematics/migrations/renderer-to-renderer2/index.js +20 -17
- package/schematics/migrations/renderer-to-renderer2/migration.d.ts +1 -1
- package/schematics/migrations/renderer-to-renderer2/migration.js +33 -30
- package/schematics/migrations/renderer-to-renderer2/util.d.ts +1 -1
- package/schematics/migrations/renderer-to-renderer2/util.js +23 -20
- package/schematics/migrations/router-link-empty-expression/analyze_template.d.ts +2 -2
- package/schematics/migrations/router-link-empty-expression/analyze_template.js +6 -7
- package/schematics/migrations/router-link-empty-expression/angular/html_routerlink_empty_expr_visitor.d.ts +7 -6
- package/schematics/migrations/router-link-empty-expression/angular/html_routerlink_empty_expr_visitor.js +10 -11
- package/schematics/migrations/router-link-empty-expression/index.js +27 -16
- package/schematics/migrations/router-preserve-query-params/index.js +13 -10
- package/schematics/migrations/router-preserve-query-params/util.d.ts +1 -1
- package/schematics/migrations/router-preserve-query-params/util.js +19 -16
- package/schematics/migrations/static-queries/angular/directive_inputs.d.ts +1 -1
- package/schematics/migrations/static-queries/angular/directive_inputs.js +14 -11
- package/schematics/migrations/static-queries/angular/ng_query_visitor.d.ts +1 -1
- package/schematics/migrations/static-queries/angular/ng_query_visitor.js +17 -14
- package/schematics/migrations/static-queries/angular/query-definition.d.ts +1 -1
- package/schematics/migrations/static-queries/angular/query-definition.js +1 -1
- package/schematics/migrations/static-queries/angular/super_class.d.ts +1 -1
- package/schematics/migrations/static-queries/angular/super_class.js +1 -1
- package/schematics/migrations/static-queries/index.js +43 -18
- package/schematics/migrations/static-queries/strategies/template_strategy/template_strategy.d.ts +6 -3
- package/schematics/migrations/static-queries/strategies/template_strategy/template_strategy.js +44 -48
- package/schematics/migrations/static-queries/strategies/usage_strategy/declaration_usage_visitor.d.ts +1 -1
- package/schematics/migrations/static-queries/strategies/usage_strategy/declaration_usage_visitor.js +41 -38
- package/schematics/migrations/static-queries/strategies/usage_strategy/super_class_context.d.ts +1 -1
- package/schematics/migrations/static-queries/strategies/usage_strategy/super_class_context.js +10 -7
- package/schematics/migrations/static-queries/strategies/usage_strategy/template_usage_visitor.d.ts +10 -9
- package/schematics/migrations/static-queries/strategies/usage_strategy/template_usage_visitor.js +35 -36
- package/schematics/migrations/static-queries/strategies/usage_strategy/usage_strategy.d.ts +3 -2
- package/schematics/migrations/static-queries/strategies/usage_strategy/usage_strategy.js +14 -10
- package/schematics/migrations/static-queries/transform.d.ts +1 -1
- package/schematics/migrations/static-queries/transform.js +14 -11
- package/schematics/migrations/template-var-assignment/analyze_template.d.ts +2 -2
- package/schematics/migrations/template-var-assignment/analyze_template.js +6 -7
- package/schematics/migrations/template-var-assignment/angular/html_variable_assignment_visitor.d.ts +7 -6
- package/schematics/migrations/template-var-assignment/angular/html_variable_assignment_visitor.js +31 -30
- package/schematics/migrations/template-var-assignment/index.js +20 -9
- package/schematics/migrations/testbed-teardown/index.d.ts +11 -0
- package/schematics/migrations/testbed-teardown/index.js +92 -0
- package/schematics/migrations/testbed-teardown/util.d.ts +35 -0
- package/schematics/migrations/testbed-teardown/util.js +188 -0
- package/schematics/migrations/undecorated-classes-with-decorated-fields/index.js +26 -12
- package/schematics/migrations/undecorated-classes-with-decorated-fields/transform.d.ts +3 -2
- package/schematics/migrations/undecorated-classes-with-decorated-fields/transform.js +23 -21
- package/schematics/migrations/undecorated-classes-with-decorated-fields/update_recorder.d.ts +1 -1
- package/schematics/migrations/undecorated-classes-with-decorated-fields/update_recorder.js +1 -1
- package/schematics/migrations/undecorated-classes-with-di/create_ngc_program.d.ts +4 -4
- package/schematics/migrations/undecorated-classes-with-di/create_ngc_program.js +5 -6
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/convert_directive_metadata.d.ts +3 -3
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/convert_directive_metadata.js +18 -16
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/decorator_rewriter.d.ts +3 -5
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/decorator_rewriter.js +13 -11
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/import_rewrite_visitor.d.ts +2 -2
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/import_rewrite_visitor.js +18 -15
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/path_format.js +2 -2
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/source_file_exports.d.ts +1 -1
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/source_file_exports.js +16 -13
- package/schematics/migrations/undecorated-classes-with-di/index.js +64 -22
- package/schematics/migrations/undecorated-classes-with-di/ng_declaration_collector.d.ts +4 -4
- package/schematics/migrations/undecorated-classes-with-di/ng_declaration_collector.js +28 -35
- package/schematics/migrations/undecorated-classes-with-di/transform.d.ts +5 -5
- package/schematics/migrations/undecorated-classes-with-di/transform.js +29 -26
- package/schematics/migrations/undecorated-classes-with-di/update_recorder.d.ts +1 -1
- package/schematics/migrations/undecorated-classes-with-di/update_recorder.js +1 -1
- package/schematics/migrations/wait-for-async/index.js +16 -13
- package/schematics/migrations/wait-for-async/util.d.ts +1 -1
- package/schematics/migrations/wait-for-async/util.js +9 -6
- package/schematics/migrations/xhr-factory/index.js +13 -10
- package/schematics/migrations.json +6 -1
- package/schematics/package.json +3 -0
- package/schematics/utils/import_manager.d.ts +1 -1
- package/schematics/utils/import_manager.js +24 -21
- package/schematics/utils/load_esm.d.ts +32 -0
- package/schematics/utils/load_esm.js +79 -0
- package/schematics/utils/ng_component_template.d.ts +1 -1
- package/schematics/utils/ng_component_template.js +21 -18
- package/schematics/utils/ng_decorators.d.ts +1 -1
- package/schematics/utils/ng_decorators.js +2 -2
- package/schematics/utils/parse_html.d.ts +2 -2
- package/schematics/utils/parse_html.js +4 -5
- package/schematics/utils/project_tsconfig_paths.js +3 -3
- package/schematics/utils/template_ast_visitor.d.ts +55 -0
- package/schematics/utils/template_ast_visitor.js +73 -0
- package/schematics/utils/typescript/class_declaration.d.ts +1 -1
- package/schematics/utils/typescript/class_declaration.js +10 -7
- package/schematics/utils/typescript/compiler_host.d.ts +1 -1
- package/schematics/utils/typescript/compiler_host.js +11 -8
- package/schematics/utils/typescript/decorators.d.ts +1 -1
- package/schematics/utils/typescript/decorators.js +8 -5
- package/schematics/utils/typescript/find_base_classes.d.ts +1 -1
- package/schematics/utils/typescript/find_base_classes.js +7 -4
- package/schematics/utils/typescript/functions.d.ts +1 -1
- package/schematics/utils/typescript/functions.js +9 -6
- package/schematics/utils/typescript/imports.d.ts +1 -1
- package/schematics/utils/typescript/imports.js +12 -9
- package/schematics/utils/typescript/nodes.d.ts +1 -1
- package/schematics/utils/typescript/nodes.js +11 -8
- package/schematics/utils/typescript/parse_tsconfig.d.ts +1 -1
- package/schematics/utils/typescript/parse_tsconfig.js +31 -9
- package/schematics/utils/typescript/property_name.d.ts +1 -1
- package/schematics/utils/typescript/property_name.js +7 -4
- package/schematics/utils/typescript/symbol.d.ts +1 -1
- package/schematics/utils/typescript/symbol.js +15 -12
- package/testing/package.json +5 -5
- package/testing/testing.d.ts +57 -339
- package/bundles/core-testing.umd.js +0 -3179
- package/bundles/core-testing.umd.js.map +0 -1
- package/bundles/core.umd.js +0 -34488
- package/bundles/core.umd.js.map +0 -1
- package/core.metadata.json +0 -1
- package/esm2015/core.externs.js +0 -6
- package/esm2015/core.js +0 -38
- package/esm2015/src/application_init.js +0 -142
- package/esm2015/src/application_module.js +0 -134
- package/esm2015/src/application_ref.js +0 -735
- package/esm2015/src/change_detection/change_detection.js +0 -31
- package/esm2015/src/change_detection/change_detection_util.js +0 -105
- package/esm2015/src/change_detection/change_detector_ref.js +0 -96
- package/esm2015/src/change_detection/differs/default_iterable_differ.js +0 -668
- package/esm2015/src/change_detection.js +0 -14
- package/esm2015/src/codegen_private_exports.js +0 -11
- package/esm2015/src/compiler/compiler.externs.js +0 -0
- package/esm2015/src/console.js +0 -23
- package/esm2015/src/core.js +0 -50
- package/esm2015/src/core_private_export.js +0 -35
- package/esm2015/src/core_render3_private_export.js +0 -45
- package/esm2015/src/debug/debug_node.js +0 -632
- package/esm2015/src/di/injectable.js +0 -36
- package/esm2015/src/di/injection_token.js +0 -75
- package/esm2015/src/di/injector.js +0 -326
- package/esm2015/src/di/injector_compatibility.js +0 -187
- package/esm2015/src/di/interface/interface.externs.js +0 -0
- package/esm2015/src/di/jit/injectable.js +0 -96
- package/esm2015/src/di/metadata.js +0 -62
- package/esm2015/src/di/metadata_attr.js +0 -24
- package/esm2015/src/di/util.js +0 -53
- package/esm2015/src/event_emitter.js +0 -54
- package/esm2015/src/i18n/locale_data_api.js +0 -131
- package/esm2015/src/i18n/locale_en.js +0 -17
- package/esm2015/src/interface/interface.externs.js +0 -0
- package/esm2015/src/linker/compiler.js +0 -118
- package/esm2015/src/linker/element_ref.js +0 -66
- package/esm2015/src/linker/ng_module_factory.js +0 -21
- package/esm2015/src/linker/ng_module_factory_loader.js +0 -41
- package/esm2015/src/linker/system_js_ng_module_factory_loader.js +0 -77
- package/esm2015/src/linker/view_container_ref.js +0 -252
- package/esm2015/src/linker.js +0 -20
- package/esm2015/src/metadata/di.js +0 -99
- package/esm2015/src/metadata/directives.js +0 -120
- package/esm2015/src/metadata/ng_module.js +0 -44
- package/esm2015/src/reflection/reflection.externs.js +0 -0
- package/esm2015/src/render3/component.js +0 -206
- package/esm2015/src/render3/features/ng_onchanges_feature.js +0 -92
- package/esm2015/src/render3/instructions/shared.js +0 -1813
- package/esm2015/src/render3/interfaces/renderer.js +0 -29
- package/esm2015/src/render3/jit/directive.js +0 -312
- package/esm2015/src/render3/jit/environment.js +0 -167
- package/esm2015/src/render3/jit/partial.js +0 -105
- package/esm2015/src/render3/metadata.js +0 -49
- package/esm2015/src/render3/ng_module_ref.js +0 -108
- package/esm2015/src/render3/pipe.js +0 -202
- package/esm2015/src/render3/util/discovery_utils.js +0 -411
- package/esm2015/src/render3/util/global_utils.js +0 -78
- package/esm2015/src/render3/util/misc_utils.js +0 -63
- package/esm2015/src/testability/testability.js +0 -256
- package/esm2015/src/util/security/trusted_types.js +0 -133
- package/esm2015/src/util/security/trusted_types_bypass.js +0 -86
- package/esm2015/src/util/util.externs.js +0 -0
- package/esm2015/src/view/provider.js +0 -507
- package/esm2015/src/view/refs.js +0 -362
- package/esm2015/src/view/util.js +0 -378
- package/esm2015/testing/src/logger.js +0 -32
- package/esm2015/testing/src/ng_zone_mock.js +0 -31
- package/esm2015/testing/src/r3_test_bed.js +0 -397
- package/esm2015/testing/src/r3_test_bed_compiler.js +0 -744
- package/esm2015/testing/src/test_bed.js +0 -608
- package/esm2015/testing/src/test_bed_common.js +0 -31
- package/esm2015/testing/src/test_compiler.js +0 -66
- package/esm2015/testing/testing.externs.js +0 -6
- package/esm2015/testing/testing.js +0 -7
- package/fesm2015/core.js.map +0 -1
- package/fesm2015/testing.js.map +0 -1
- package/src/r3_symbols.d.ts +0 -1025
- package/testing/testing.metadata.json +0 -1
- package/testing.d.ts +0 -7
- package/testing.metadata.json +0 -1
package/schematics/migrations/template-var-assignment/angular/html_variable_assignment_visitor.js
CHANGED
|
@@ -11,28 +11,48 @@
|
|
|
11
11
|
if (v !== undefined) module.exports = v;
|
|
12
12
|
}
|
|
13
13
|
else if (typeof define === "function" && define.amd) {
|
|
14
|
-
define("@angular/core/schematics/migrations/template-var-assignment/angular/html_variable_assignment_visitor", ["require", "exports", "@angular/
|
|
14
|
+
define("@angular/core/schematics/migrations/template-var-assignment/angular/html_variable_assignment_visitor", ["require", "exports", "@angular/core/schematics/utils/template_ast_visitor"], factory);
|
|
15
15
|
}
|
|
16
16
|
})(function (require, exports) {
|
|
17
17
|
"use strict";
|
|
18
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
19
|
exports.HtmlVariableAssignmentVisitor = void 0;
|
|
20
|
-
const
|
|
21
|
-
const r3_ast_1 = require("@angular/compiler/src/render3/r3_ast");
|
|
20
|
+
const template_ast_visitor_1 = require("@angular/core/schematics/utils/template_ast_visitor");
|
|
22
21
|
/**
|
|
23
22
|
* HTML AST visitor that traverses the Render3 HTML AST in order to find all
|
|
24
23
|
* expressions that write to local template variables within bound events.
|
|
25
24
|
*/
|
|
26
|
-
class HtmlVariableAssignmentVisitor extends
|
|
27
|
-
constructor() {
|
|
28
|
-
super(
|
|
25
|
+
class HtmlVariableAssignmentVisitor extends template_ast_visitor_1.TemplateAstVisitor {
|
|
26
|
+
constructor(compilerModule) {
|
|
27
|
+
super(compilerModule);
|
|
29
28
|
this.variableAssignments = [];
|
|
30
29
|
this.currentVariables = [];
|
|
31
|
-
|
|
30
|
+
// AST visitor that resolves all variable assignments within a given expression AST.
|
|
31
|
+
// This class must be defined within the template visitor due to the need to extend from a class
|
|
32
|
+
// value found within `@angular/compiler` which is dynamically imported and provided to the
|
|
33
|
+
// visitor.
|
|
34
|
+
this.expressionAstVisitor = new (class extends compilerModule.RecursiveAstVisitor {
|
|
35
|
+
constructor(variableAssignments, currentVariables) {
|
|
36
|
+
super();
|
|
37
|
+
this.variableAssignments = variableAssignments;
|
|
38
|
+
this.currentVariables = currentVariables;
|
|
39
|
+
}
|
|
40
|
+
visitPropertyWrite(node, span) {
|
|
41
|
+
if (node.receiver instanceof compilerModule.ImplicitReceiver &&
|
|
42
|
+
this.currentVariables.some(v => v.name === node.name)) {
|
|
43
|
+
this.variableAssignments.push({
|
|
44
|
+
node: node,
|
|
45
|
+
start: span.start.offset,
|
|
46
|
+
end: span.end.offset,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
super.visitPropertyWrite(node, span);
|
|
50
|
+
}
|
|
51
|
+
})(this.variableAssignments, this.currentVariables);
|
|
32
52
|
}
|
|
33
53
|
visitElement(element) {
|
|
34
|
-
|
|
35
|
-
|
|
54
|
+
this.visitAll(element.outputs);
|
|
55
|
+
this.visitAll(element.children);
|
|
36
56
|
}
|
|
37
57
|
visitTemplate(template) {
|
|
38
58
|
// Keep track of the template variables which can be accessed by the template
|
|
@@ -41,7 +61,7 @@
|
|
|
41
61
|
// Visit all children of the template. The template proxies the outputs of the
|
|
42
62
|
// immediate child elements, so we just ignore outputs on the "Template" in order
|
|
43
63
|
// to not visit similar bound events twice.
|
|
44
|
-
|
|
64
|
+
this.visitAll(template.children);
|
|
45
65
|
// Remove all previously added variables since all children that could access
|
|
46
66
|
// these have been visited already.
|
|
47
67
|
template.variables.forEach(v => {
|
|
@@ -56,24 +76,5 @@
|
|
|
56
76
|
}
|
|
57
77
|
}
|
|
58
78
|
exports.HtmlVariableAssignmentVisitor = HtmlVariableAssignmentVisitor;
|
|
59
|
-
/** AST visitor that resolves all variable assignments within a given expression AST. */
|
|
60
|
-
class ExpressionAstVisitor extends compiler_1.RecursiveAstVisitor {
|
|
61
|
-
constructor(variableAssignments, currentVariables) {
|
|
62
|
-
super();
|
|
63
|
-
this.variableAssignments = variableAssignments;
|
|
64
|
-
this.currentVariables = currentVariables;
|
|
65
|
-
}
|
|
66
|
-
visitPropertyWrite(node, span) {
|
|
67
|
-
if (node.receiver instanceof compiler_1.ImplicitReceiver &&
|
|
68
|
-
this.currentVariables.some(v => v.name === node.name)) {
|
|
69
|
-
this.variableAssignments.push({
|
|
70
|
-
node: node,
|
|
71
|
-
start: span.start.offset,
|
|
72
|
-
end: span.end.offset,
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
super.visitPropertyWrite(node, span);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
79
|
});
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbF92YXJpYWJsZV9hc3NpZ25tZW50X3Zpc2l0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NjaGVtYXRpY3MvbWlncmF0aW9ucy90ZW1wbGF0ZS12YXItYXNzaWdubWVudC9hbmd1bGFyL2h0bWxfdmFyaWFibGVfYXNzaWdubWVudF92aXNpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7OztJQUdILDhGQUF1RTtJQVN2RTs7O09BR0c7SUFDSCxNQUFhLDZCQUE4QixTQUFRLHlDQUFrQjtRQU1uRSxZQUFZLGNBQWtEO1lBQzVELEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztZQU54Qix3QkFBbUIsR0FBaUMsRUFBRSxDQUFDO1lBRS9DLHFCQUFnQixHQUFzQixFQUFFLENBQUM7WUFNL0Msb0ZBQW9GO1lBQ3BGLGdHQUFnRztZQUNoRywyRkFBMkY7WUFDM0YsV0FBVztZQUNYLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsS0FBTSxTQUFRLGNBQWMsQ0FBQyxtQkFBbUI7Z0JBQy9FLFlBQ1ksbUJBQWlELEVBQ2pELGdCQUFtQztvQkFDN0MsS0FBSyxFQUFFLENBQUM7b0JBRkUsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUE4QjtvQkFDakQscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFtQjtnQkFFL0MsQ0FBQztnQkFFUSxrQkFBa0IsQ0FBQyxJQUFtQixFQUFFLElBQXFCO29CQUNwRSxJQUFJLElBQUksQ0FBQyxRQUFRLFlBQVksY0FBYyxDQUFDLGdCQUFnQjt3QkFDeEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO3dCQUN6RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDOzRCQUM1QixJQUFJLEVBQUUsSUFBSTs0QkFDVixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNOzRCQUN4QixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNO3lCQUNyQixDQUFDLENBQUM7cUJBQ0o7b0JBQ0QsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDdkMsQ0FBQzthQUNGLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVRLFlBQVksQ0FBQyxPQUF1QjtZQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBRVEsYUFBYSxDQUFDLFFBQXlCO1lBQzlDLDZFQUE2RTtZQUM3RSw2Q0FBNkM7WUFDN0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUVsRCw4RUFBOEU7WUFDOUUsaUZBQWlGO1lBQ2pGLDJDQUEyQztZQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUVqQyw2RUFBNkU7WUFDN0UsbUNBQW1DO1lBQ25DLFFBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM3QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUVyRCxJQUFJLFdBQVcsS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFDdEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQzlDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRVEsZUFBZSxDQUFDLElBQXVCO1lBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEUsQ0FBQztLQUNGO0lBL0RELHNFQStEQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgdHlwZSB7SW1wbGljaXRSZWNlaXZlciwgUGFyc2VTb3VyY2VTcGFuLCBQcm9wZXJ0eVdyaXRlLCBSZWN1cnNpdmVBc3RWaXNpdG9yLCBUbXBsQXN0Qm91bmRFdmVudCwgVG1wbEFzdEVsZW1lbnQsIFRtcGxBc3RUZW1wbGF0ZSwgVG1wbEFzdFZhcmlhYmxlfSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XG5pbXBvcnQge1RlbXBsYXRlQXN0VmlzaXRvcn0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdGVtcGxhdGVfYXN0X3Zpc2l0b3InO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVtcGxhdGVWYXJpYWJsZUFzc2lnbm1lbnQge1xuICBzdGFydDogbnVtYmVyO1xuICBlbmQ6IG51bWJlcjtcbiAgbm9kZTogUHJvcGVydHlXcml0ZTtcbn1cblxuLyoqXG4gKiBIVE1MIEFTVCB2aXNpdG9yIHRoYXQgdHJhdmVyc2VzIHRoZSBSZW5kZXIzIEhUTUwgQVNUIGluIG9yZGVyIHRvIGZpbmQgYWxsXG4gKiBleHByZXNzaW9ucyB0aGF0IHdyaXRlIHRvIGxvY2FsIHRlbXBsYXRlIHZhcmlhYmxlcyB3aXRoaW4gYm91bmQgZXZlbnRzLlxuICovXG5leHBvcnQgY2xhc3MgSHRtbFZhcmlhYmxlQXNzaWdubWVudFZpc2l0b3IgZXh0ZW5kcyBUZW1wbGF0ZUFzdFZpc2l0b3Ige1xuICB2YXJpYWJsZUFzc2lnbm1lbnRzOiBUZW1wbGF0ZVZhcmlhYmxlQXNzaWdubWVudFtdID0gW107XG5cbiAgcHJpdmF0ZSBjdXJyZW50VmFyaWFibGVzOiBUbXBsQXN0VmFyaWFibGVbXSA9IFtdO1xuICBwcml2YXRlIGV4cHJlc3Npb25Bc3RWaXNpdG9yO1xuXG4gIGNvbnN0cnVjdG9yKGNvbXBpbGVyTW9kdWxlOiB0eXBlb2YgaW1wb3J0KCdAYW5ndWxhci9jb21waWxlcicpKSB7XG4gICAgc3VwZXIoY29tcGlsZXJNb2R1bGUpO1xuXG4gICAgLy8gQVNUIHZpc2l0b3IgdGhhdCByZXNvbHZlcyBhbGwgdmFyaWFibGUgYXNzaWdubWVudHMgd2l0aGluIGEgZ2l2ZW4gZXhwcmVzc2lvbiBBU1QuXG4gICAgLy8gVGhpcyBjbGFzcyBtdXN0IGJlIGRlZmluZWQgd2l0aGluIHRoZSB0ZW1wbGF0ZSB2aXNpdG9yIGR1ZSB0byB0aGUgbmVlZCB0byBleHRlbmQgZnJvbSBhIGNsYXNzXG4gICAgLy8gdmFsdWUgZm91bmQgd2l0aGluIGBAYW5ndWxhci9jb21waWxlcmAgd2hpY2ggaXMgZHluYW1pY2FsbHkgaW1wb3J0ZWQgYW5kIHByb3ZpZGVkIHRvIHRoZVxuICAgIC8vIHZpc2l0b3IuXG4gICAgdGhpcy5leHByZXNzaW9uQXN0VmlzaXRvciA9IG5ldyAoY2xhc3MgZXh0ZW5kcyBjb21waWxlck1vZHVsZS5SZWN1cnNpdmVBc3RWaXNpdG9yIHtcbiAgICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICAgIHByaXZhdGUgdmFyaWFibGVBc3NpZ25tZW50czogVGVtcGxhdGVWYXJpYWJsZUFzc2lnbm1lbnRbXSxcbiAgICAgICAgICBwcml2YXRlIGN1cnJlbnRWYXJpYWJsZXM6IFRtcGxBc3RWYXJpYWJsZVtdKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICB9XG5cbiAgICAgIG92ZXJyaWRlIHZpc2l0UHJvcGVydHlXcml0ZShub2RlOiBQcm9wZXJ0eVdyaXRlLCBzcGFuOiBQYXJzZVNvdXJjZVNwYW4pIHtcbiAgICAgICAgaWYgKG5vZGUucmVjZWl2ZXIgaW5zdGFuY2VvZiBjb21waWxlck1vZHVsZS5JbXBsaWNpdFJlY2VpdmVyICYmXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRWYXJpYWJsZXMuc29tZSh2ID0+IHYubmFtZSA9PT0gbm9kZS5uYW1lKSkge1xuICAgICAgICAgIHRoaXMudmFyaWFibGVBc3NpZ25tZW50cy5wdXNoKHtcbiAgICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgICBzdGFydDogc3Bhbi5zdGFydC5vZmZzZXQsXG4gICAgICAgICAgICBlbmQ6IHNwYW4uZW5kLm9mZnNldCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci52aXNpdFByb3BlcnR5V3JpdGUobm9kZSwgc3Bhbik7XG4gICAgICB9XG4gICAgfSkodGhpcy52YXJpYWJsZUFzc2lnbm1lbnRzLCB0aGlzLmN1cnJlbnRWYXJpYWJsZXMpO1xuICB9XG5cbiAgb3ZlcnJpZGUgdmlzaXRFbGVtZW50KGVsZW1lbnQ6IFRtcGxBc3RFbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy52aXNpdEFsbChlbGVtZW50Lm91dHB1dHMpO1xuICAgIHRoaXMudmlzaXRBbGwoZWxlbWVudC5jaGlsZHJlbik7XG4gIH1cblxuICBvdmVycmlkZSB2aXNpdFRlbXBsYXRlKHRlbXBsYXRlOiBUbXBsQXN0VGVtcGxhdGUpOiB2b2lkIHtcbiAgICAvLyBLZWVwIHRyYWNrIG9mIHRoZSB0ZW1wbGF0ZSB2YXJpYWJsZXMgd2hpY2ggY2FuIGJlIGFjY2Vzc2VkIGJ5IHRoZSB0ZW1wbGF0ZVxuICAgIC8vIGNoaWxkIG5vZGVzIHRocm91Z2ggdGhlIGltcGxpY2l0IHJlY2VpdmVyLlxuICAgIHRoaXMuY3VycmVudFZhcmlhYmxlcy5wdXNoKC4uLnRlbXBsYXRlLnZhcmlhYmxlcyk7XG5cbiAgICAvLyBWaXNpdCBhbGwgY2hpbGRyZW4gb2YgdGhlIHRlbXBsYXRlLiBUaGUgdGVtcGxhdGUgcHJveGllcyB0aGUgb3V0cHV0cyBvZiB0aGVcbiAgICAvLyBpbW1lZGlhdGUgY2hpbGQgZWxlbWVudHMsIHNvIHdlIGp1c3QgaWdub3JlIG91dHB1dHMgb24gdGhlIFwiVGVtcGxhdGVcIiBpbiBvcmRlclxuICAgIC8vIHRvIG5vdCB2aXNpdCBzaW1pbGFyIGJvdW5kIGV2ZW50cyB0d2ljZS5cbiAgICB0aGlzLnZpc2l0QWxsKHRlbXBsYXRlLmNoaWxkcmVuKTtcblxuICAgIC8vIFJlbW92ZSBhbGwgcHJldmlvdXNseSBhZGRlZCB2YXJpYWJsZXMgc2luY2UgYWxsIGNoaWxkcmVuIHRoYXQgY291bGQgYWNjZXNzXG4gICAgLy8gdGhlc2UgaGF2ZSBiZWVuIHZpc2l0ZWQgYWxyZWFkeS5cbiAgICB0ZW1wbGF0ZS52YXJpYWJsZXMuZm9yRWFjaCh2ID0+IHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlSWR4ID0gdGhpcy5jdXJyZW50VmFyaWFibGVzLmluZGV4T2Yodik7XG5cbiAgICAgIGlmICh2YXJpYWJsZUlkeCAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFyaWFibGVzLnNwbGljZSh2YXJpYWJsZUlkeCwgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSB2aXNpdEJvdW5kRXZlbnQobm9kZTogVG1wbEFzdEJvdW5kRXZlbnQpIHtcbiAgICBub2RlLmhhbmRsZXIudmlzaXQodGhpcy5leHByZXNzaW9uQXN0VmlzaXRvciwgbm9kZS5oYW5kbGVyU3Bhbik7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -20,7 +20,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
20
20
|
if (v !== undefined) module.exports = v;
|
|
21
21
|
}
|
|
22
22
|
else if (typeof define === "function" && define.amd) {
|
|
23
|
-
define("@angular/core/schematics/migrations/template-var-assignment", ["require", "exports", "@angular-devkit/core", "@angular-devkit/schematics", "path", "@angular/core/schematics/utils/ng_component_template", "@angular/core/schematics/utils/project_tsconfig_paths", "@angular/core/schematics/utils/typescript/compiler_host", "@angular/core/schematics/migrations/template-var-assignment/analyze_template"], factory);
|
|
23
|
+
define("@angular/core/schematics/migrations/template-var-assignment", ["require", "exports", "@angular-devkit/core", "@angular-devkit/schematics", "path", "@angular/core/schematics/utils/load_esm", "@angular/core/schematics/utils/ng_component_template", "@angular/core/schematics/utils/project_tsconfig_paths", "@angular/core/schematics/utils/typescript/compiler_host", "@angular/core/schematics/migrations/template-var-assignment/analyze_template"], factory);
|
|
24
24
|
}
|
|
25
25
|
})(function (require, exports) {
|
|
26
26
|
"use strict";
|
|
@@ -28,6 +28,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
28
28
|
const core_1 = require("@angular-devkit/core");
|
|
29
29
|
const schematics_1 = require("@angular-devkit/schematics");
|
|
30
30
|
const path_1 = require("path");
|
|
31
|
+
const load_esm_1 = require("@angular/core/schematics/utils/load_esm");
|
|
31
32
|
const ng_component_template_1 = require("@angular/core/schematics/utils/ng_component_template");
|
|
32
33
|
const project_tsconfig_paths_1 = require("@angular/core/schematics/utils/project_tsconfig_paths");
|
|
33
34
|
const compiler_host_1 = require("@angular/core/schematics/utils/typescript/compiler_host");
|
|
@@ -37,14 +38,24 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
37
38
|
/** Entry point for the V8 template variable assignment schematic. */
|
|
38
39
|
function default_1() {
|
|
39
40
|
return (tree, context) => __awaiter(this, void 0, void 0, function* () {
|
|
40
|
-
const { buildPaths, testPaths } = yield project_tsconfig_paths_1.getProjectTsConfigPaths(tree);
|
|
41
|
+
const { buildPaths, testPaths } = yield (0, project_tsconfig_paths_1.getProjectTsConfigPaths)(tree);
|
|
41
42
|
const basePath = process.cwd();
|
|
42
43
|
if (!buildPaths.length && !testPaths.length) {
|
|
43
44
|
throw new schematics_1.SchematicsException('Could not find any tsconfig file. Cannot check templates for template variable ' +
|
|
44
45
|
'assignments.');
|
|
45
46
|
}
|
|
47
|
+
let compilerModule;
|
|
48
|
+
try {
|
|
49
|
+
// Load ESM `@angular/compiler` using the TypeScript dynamic import workaround.
|
|
50
|
+
// Once TypeScript provides support for keeping the dynamic import this workaround can be
|
|
51
|
+
// changed to a direct dynamic import.
|
|
52
|
+
compilerModule = yield (0, load_esm_1.loadEsmModule)('@angular/compiler');
|
|
53
|
+
}
|
|
54
|
+
catch (e) {
|
|
55
|
+
throw new schematics_1.SchematicsException(`Unable to load the '@angular/compiler' package. Details: ${e.message}`);
|
|
56
|
+
}
|
|
46
57
|
for (const tsconfigPath of [...buildPaths, ...testPaths]) {
|
|
47
|
-
runTemplateVariableAssignmentCheck(tree, tsconfigPath, basePath, context.logger);
|
|
58
|
+
runTemplateVariableAssignmentCheck(tree, tsconfigPath, basePath, context.logger, compilerModule);
|
|
48
59
|
}
|
|
49
60
|
});
|
|
50
61
|
}
|
|
@@ -53,11 +64,11 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
53
64
|
* Runs the template variable assignment check. Warns developers
|
|
54
65
|
* if values are assigned to template variables within output bindings.
|
|
55
66
|
*/
|
|
56
|
-
function runTemplateVariableAssignmentCheck(tree, tsconfigPath, basePath, logger) {
|
|
57
|
-
const { program } = compiler_host_1.createMigrationProgram(tree, tsconfigPath, basePath);
|
|
67
|
+
function runTemplateVariableAssignmentCheck(tree, tsconfigPath, basePath, logger, compilerModule) {
|
|
68
|
+
const { program } = (0, compiler_host_1.createMigrationProgram)(tree, tsconfigPath, basePath);
|
|
58
69
|
const typeChecker = program.getTypeChecker();
|
|
59
70
|
const templateVisitor = new ng_component_template_1.NgComponentTemplateVisitor(typeChecker);
|
|
60
|
-
const sourceFiles = program.getSourceFiles().filter(sourceFile => compiler_host_1.canMigrateFile(basePath, sourceFile, program));
|
|
71
|
+
const sourceFiles = program.getSourceFiles().filter(sourceFile => (0, compiler_host_1.canMigrateFile)(basePath, sourceFile, program));
|
|
61
72
|
// Analyze source files by detecting HTML templates.
|
|
62
73
|
sourceFiles.forEach(sourceFile => templateVisitor.visitNode(sourceFile));
|
|
63
74
|
const { resolvedTemplates } = templateVisitor;
|
|
@@ -66,11 +77,11 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
66
77
|
// template variables.
|
|
67
78
|
resolvedTemplates.forEach(template => {
|
|
68
79
|
const filePath = template.filePath;
|
|
69
|
-
const nodes = analyze_template_1.analyzeResolvedTemplate(template);
|
|
80
|
+
const nodes = (0, analyze_template_1.analyzeResolvedTemplate)(template, compilerModule);
|
|
70
81
|
if (!nodes) {
|
|
71
82
|
return;
|
|
72
83
|
}
|
|
73
|
-
const displayFilePath = core_1.normalize(path_1.relative(basePath, filePath));
|
|
84
|
+
const displayFilePath = (0, core_1.normalize)((0, path_1.relative)(basePath, filePath));
|
|
74
85
|
nodes.forEach(n => {
|
|
75
86
|
const { line, character } = template.getCharacterAndLineOfPosition(n.start);
|
|
76
87
|
collectedFailures.push(`${displayFilePath}@${line + 1}:${character + 1}: ${FAILURE_MESSAGE}`);
|
|
@@ -87,4 +98,4 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
87
98
|
}
|
|
88
99
|
}
|
|
89
100
|
});
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NjaGVtYXRpY3MvbWlncmF0aW9ucy90ZW1wbGF0ZS12YXItYXNzaWdubWVudC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUVILCtDQUF3RDtJQUN4RCwyREFBNkY7SUFDN0YsK0JBQThCO0lBRTlCLHNFQUFtRDtJQUNuRCxnR0FBNkU7SUFDN0Usa0dBQTJFO0lBQzNFLDJGQUE0RjtJQUU1RixtSEFBMkQ7SUFJM0QsTUFBTSxVQUFVLEdBQUcsOEVBQThFLENBQUM7SUFDbEcsTUFBTSxlQUFlLEdBQUcsd0NBQXdDLENBQUM7SUFFakUscUVBQXFFO0lBQ3JFO1FBQ0UsT0FBTyxDQUFPLElBQVUsRUFBRSxPQUF5QixFQUFFLEVBQUU7WUFDckQsTUFBTSxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUMsR0FBRyxNQUFNLElBQUEsZ0RBQXVCLEVBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEUsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBRS9CLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTtnQkFDM0MsTUFBTSxJQUFJLGdDQUFtQixDQUN6QixpRkFBaUY7b0JBQ2pGLGNBQWMsQ0FBQyxDQUFDO2FBQ3JCO1lBRUQsSUFBSSxjQUFjLENBQUM7WUFDbkIsSUFBSTtnQkFDRiwrRUFBK0U7Z0JBQy9FLHlGQUF5RjtnQkFDekYsc0NBQXNDO2dCQUN0QyxjQUFjLEdBQUcsTUFBTSxJQUFBLHdCQUFhLEVBQXFDLG1CQUFtQixDQUFDLENBQUM7YUFDL0Y7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDVixNQUFNLElBQUksZ0NBQW1CLENBQ3pCLDREQUE0RCxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQzthQUM5RTtZQUVELEtBQUssTUFBTSxZQUFZLElBQUksQ0FBQyxHQUFHLFVBQVUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxFQUFFO2dCQUN4RCxrQ0FBa0MsQ0FDOUIsSUFBSSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQzthQUNuRTtRQUNILENBQUMsQ0FBQSxDQUFDO0lBQ0osQ0FBQztJQTNCRCw0QkEyQkM7SUFFRDs7O09BR0c7SUFDSCxTQUFTLGtDQUFrQyxDQUN2QyxJQUFVLEVBQUUsWUFBb0IsRUFBRSxRQUFnQixFQUFFLE1BQWMsRUFDbEUsY0FBa0Q7UUFDcEQsTUFBTSxFQUFDLE9BQU8sRUFBQyxHQUFHLElBQUEsc0NBQXNCLEVBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN2RSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDN0MsTUFBTSxlQUFlLEdBQUcsSUFBSSxrREFBMEIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwRSxNQUFNLFdBQVcsR0FDYixPQUFPLENBQUMsY0FBYyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBQSw4QkFBYyxFQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUVqRyxvREFBb0Q7UUFDcEQsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUV6RSxNQUFNLEVBQUMsaUJBQWlCLEVBQUMsR0FBRyxlQUFlLENBQUM7UUFDNUMsTUFBTSxpQkFBaUIsR0FBYSxFQUFFLENBQUM7UUFFdkMsNEVBQTRFO1FBQzVFLHNCQUFzQjtRQUN0QixpQkFBaUIsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDbkMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUNuQyxNQUFNLEtBQUssR0FBRyxJQUFBLDBDQUF1QixFQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUVoRSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNWLE9BQU87YUFDUjtZQUVELE1BQU0sZUFBZSxHQUFHLElBQUEsZ0JBQVMsRUFBQyxJQUFBLGVBQVEsRUFBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUVoRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNoQixNQUFNLEVBQUMsSUFBSSxFQUFFLFNBQVMsRUFBQyxHQUFHLFFBQVEsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFFLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLGVBQWUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLFNBQVMsR0FBRyxDQUFDLEtBQUssZUFBZSxFQUFFLENBQUMsQ0FBQztZQUNoRyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUU7WUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUVBQW1FLENBQUMsQ0FBQztZQUNqRixNQUFNLENBQUMsSUFBSSxDQUFDLHNFQUFzRSxDQUFDLENBQUM7WUFDcEYsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUMvQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0RBQWdELENBQUMsQ0FBQztZQUM5RCxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3JFO0lBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge2xvZ2dpbmcsIG5vcm1hbGl6ZX0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L2NvcmUnO1xuaW1wb3J0IHtSdWxlLCBTY2hlbWF0aWNDb250ZXh0LCBTY2hlbWF0aWNzRXhjZXB0aW9uLCBUcmVlfSBmcm9tICdAYW5ndWxhci1kZXZraXQvc2NoZW1hdGljcyc7XG5pbXBvcnQge3JlbGF0aXZlfSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtsb2FkRXNtTW9kdWxlfSBmcm9tICcuLi8uLi91dGlscy9sb2FkX2VzbSc7XG5pbXBvcnQge05nQ29tcG9uZW50VGVtcGxhdGVWaXNpdG9yfSBmcm9tICcuLi8uLi91dGlscy9uZ19jb21wb25lbnRfdGVtcGxhdGUnO1xuaW1wb3J0IHtnZXRQcm9qZWN0VHNDb25maWdQYXRoc30gZnJvbSAnLi4vLi4vdXRpbHMvcHJvamVjdF90c2NvbmZpZ19wYXRocyc7XG5pbXBvcnQge2Nhbk1pZ3JhdGVGaWxlLCBjcmVhdGVNaWdyYXRpb25Qcm9ncmFtfSBmcm9tICcuLi8uLi91dGlscy90eXBlc2NyaXB0L2NvbXBpbGVyX2hvc3QnO1xuXG5pbXBvcnQge2FuYWx5emVSZXNvbHZlZFRlbXBsYXRlfSBmcm9tICcuL2FuYWx5emVfdGVtcGxhdGUnO1xuXG50eXBlIExvZ2dlciA9IGxvZ2dpbmcuTG9nZ2VyQXBpO1xuXG5jb25zdCBSRUFETUVfVVJMID0gJ2h0dHBzOi8vdjguYW5ndWxhci5pby9ndWlkZS9kZXByZWNhdGlvbnMjY2Fubm90LWFzc2lnbi10by10ZW1wbGF0ZS12YXJpYWJsZXMnO1xuY29uc3QgRkFJTFVSRV9NRVNTQUdFID0gYEZvdW5kIGFzc2lnbm1lbnQgdG8gdGVtcGxhdGUgdmFyaWFibGUuYDtcblxuLyoqIEVudHJ5IHBvaW50IGZvciB0aGUgVjggdGVtcGxhdGUgdmFyaWFibGUgYXNzaWdubWVudCBzY2hlbWF0aWMuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpOiBSdWxlIHtcbiAgcmV0dXJuIGFzeW5jICh0cmVlOiBUcmVlLCBjb250ZXh0OiBTY2hlbWF0aWNDb250ZXh0KSA9PiB7XG4gICAgY29uc3Qge2J1aWxkUGF0aHMsIHRlc3RQYXRoc30gPSBhd2FpdCBnZXRQcm9qZWN0VHNDb25maWdQYXRocyh0cmVlKTtcbiAgICBjb25zdCBiYXNlUGF0aCA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgICBpZiAoIWJ1aWxkUGF0aHMubGVuZ3RoICYmICF0ZXN0UGF0aHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hdGljc0V4Y2VwdGlvbihcbiAgICAgICAgICAnQ291bGQgbm90IGZpbmQgYW55IHRzY29uZmlnIGZpbGUuIENhbm5vdCBjaGVjayB0ZW1wbGF0ZXMgZm9yIHRlbXBsYXRlIHZhcmlhYmxlICcgK1xuICAgICAgICAgICdhc3NpZ25tZW50cy4nKTtcbiAgICB9XG5cbiAgICBsZXQgY29tcGlsZXJNb2R1bGU7XG4gICAgdHJ5IHtcbiAgICAgIC8vIExvYWQgRVNNIGBAYW5ndWxhci9jb21waWxlcmAgdXNpbmcgdGhlIFR5cGVTY3JpcHQgZHluYW1pYyBpbXBvcnQgd29ya2Fyb3VuZC5cbiAgICAgIC8vIE9uY2UgVHlwZVNjcmlwdCBwcm92aWRlcyBzdXBwb3J0IGZvciBrZWVwaW5nIHRoZSBkeW5hbWljIGltcG9ydCB0aGlzIHdvcmthcm91bmQgY2FuIGJlXG4gICAgICAvLyBjaGFuZ2VkIHRvIGEgZGlyZWN0IGR5bmFtaWMgaW1wb3J0LlxuICAgICAgY29tcGlsZXJNb2R1bGUgPSBhd2FpdCBsb2FkRXNtTW9kdWxlPHR5cGVvZiBpbXBvcnQoJ0Bhbmd1bGFyL2NvbXBpbGVyJyk+KCdAYW5ndWxhci9jb21waWxlcicpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBTY2hlbWF0aWNzRXhjZXB0aW9uKFxuICAgICAgICAgIGBVbmFibGUgdG8gbG9hZCB0aGUgJ0Bhbmd1bGFyL2NvbXBpbGVyJyBwYWNrYWdlLiBEZXRhaWxzOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRzY29uZmlnUGF0aCBvZiBbLi4uYnVpbGRQYXRocywgLi4udGVzdFBhdGhzXSkge1xuICAgICAgcnVuVGVtcGxhdGVWYXJpYWJsZUFzc2lnbm1lbnRDaGVjayhcbiAgICAgICAgICB0cmVlLCB0c2NvbmZpZ1BhdGgsIGJhc2VQYXRoLCBjb250ZXh0LmxvZ2dlciwgY29tcGlsZXJNb2R1bGUpO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBSdW5zIHRoZSB0ZW1wbGF0ZSB2YXJpYWJsZSBhc3NpZ25tZW50IGNoZWNrLiBXYXJucyBkZXZlbG9wZXJzXG4gKiBpZiB2YWx1ZXMgYXJlIGFzc2lnbmVkIHRvIHRlbXBsYXRlIHZhcmlhYmxlcyB3aXRoaW4gb3V0cHV0IGJpbmRpbmdzLlxuICovXG5mdW5jdGlvbiBydW5UZW1wbGF0ZVZhcmlhYmxlQXNzaWdubWVudENoZWNrKFxuICAgIHRyZWU6IFRyZWUsIHRzY29uZmlnUGF0aDogc3RyaW5nLCBiYXNlUGF0aDogc3RyaW5nLCBsb2dnZXI6IExvZ2dlcixcbiAgICBjb21waWxlck1vZHVsZTogdHlwZW9mIGltcG9ydCgnQGFuZ3VsYXIvY29tcGlsZXInKSkge1xuICBjb25zdCB7cHJvZ3JhbX0gPSBjcmVhdGVNaWdyYXRpb25Qcm9ncmFtKHRyZWUsIHRzY29uZmlnUGF0aCwgYmFzZVBhdGgpO1xuICBjb25zdCB0eXBlQ2hlY2tlciA9IHByb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKTtcbiAgY29uc3QgdGVtcGxhdGVWaXNpdG9yID0gbmV3IE5nQ29tcG9uZW50VGVtcGxhdGVWaXNpdG9yKHR5cGVDaGVja2VyKTtcbiAgY29uc3Qgc291cmNlRmlsZXMgPVxuICAgICAgcHJvZ3JhbS5nZXRTb3VyY2VGaWxlcygpLmZpbHRlcihzb3VyY2VGaWxlID0+IGNhbk1pZ3JhdGVGaWxlKGJhc2VQYXRoLCBzb3VyY2VGaWxlLCBwcm9ncmFtKSk7XG5cbiAgLy8gQW5hbHl6ZSBzb3VyY2UgZmlsZXMgYnkgZGV0ZWN0aW5nIEhUTUwgdGVtcGxhdGVzLlxuICBzb3VyY2VGaWxlcy5mb3JFYWNoKHNvdXJjZUZpbGUgPT4gdGVtcGxhdGVWaXNpdG9yLnZpc2l0Tm9kZShzb3VyY2VGaWxlKSk7XG5cbiAgY29uc3Qge3Jlc29sdmVkVGVtcGxhdGVzfSA9IHRlbXBsYXRlVmlzaXRvcjtcbiAgY29uc3QgY29sbGVjdGVkRmFpbHVyZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLy8gQW5hbHl6ZSBlYWNoIHJlc29sdmVkIHRlbXBsYXRlIGFuZCBwcmludCBhIHdhcm5pbmcgZm9yIHByb3BlcnR5IHdyaXRlcyB0b1xuICAvLyB0ZW1wbGF0ZSB2YXJpYWJsZXMuXG4gIHJlc29sdmVkVGVtcGxhdGVzLmZvckVhY2godGVtcGxhdGUgPT4ge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gdGVtcGxhdGUuZmlsZVBhdGg7XG4gICAgY29uc3Qgbm9kZXMgPSBhbmFseXplUmVzb2x2ZWRUZW1wbGF0ZSh0ZW1wbGF0ZSwgY29tcGlsZXJNb2R1bGUpO1xuXG4gICAgaWYgKCFub2Rlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRpc3BsYXlGaWxlUGF0aCA9IG5vcm1hbGl6ZShyZWxhdGl2ZShiYXNlUGF0aCwgZmlsZVBhdGgpKTtcblxuICAgIG5vZGVzLmZvckVhY2gobiA9PiB7XG4gICAgICBjb25zdCB7bGluZSwgY2hhcmFjdGVyfSA9IHRlbXBsYXRlLmdldENoYXJhY3RlckFuZExpbmVPZlBvc2l0aW9uKG4uc3RhcnQpO1xuICAgICAgY29sbGVjdGVkRmFpbHVyZXMucHVzaChgJHtkaXNwbGF5RmlsZVBhdGh9QCR7bGluZSArIDF9OiR7Y2hhcmFjdGVyICsgMX06ICR7RkFJTFVSRV9NRVNTQUdFfWApO1xuICAgIH0pO1xuICB9KTtcblxuICBpZiAoY29sbGVjdGVkRmFpbHVyZXMubGVuZ3RoKSB7XG4gICAgbG9nZ2VyLmluZm8oJy0tLS0gVGVtcGxhdGUgVmFyaWFibGUgQXNzaWdubWVudCBzY2hlbWF0aWMgLS0tLScpO1xuICAgIGxvZ2dlci5pbmZvKCdBc3NpZ25tZW50cyB0byB0ZW1wbGF0ZSB2YXJpYWJsZXMgd2lsbCBubyBsb25nZXIgd29yayB3aXRoIEl2eSBhcycpO1xuICAgIGxvZ2dlci5pbmZvKCd0ZW1wbGF0ZSB2YXJpYWJsZXMgYXJlIGVmZmVjdGl2ZWx5IGNvbnN0YW50cyBpbiBJdnkuIFJlYWQgbW9yZSBhYm91dCcpO1xuICAgIGxvZ2dlci5pbmZvKGB0aGlzIGNoYW5nZSBoZXJlOiAke1JFQURNRV9VUkx9YCk7XG4gICAgbG9nZ2VyLmluZm8oJycpO1xuICAgIGxvZ2dlci5pbmZvKCdUaGUgZm9sbG93aW5nIHRlbXBsYXRlIGFzc2lnbm1lbnRzIHdlcmUgZm91bmQ6Jyk7XG4gICAgY29sbGVjdGVkRmFpbHVyZXMuZm9yRWFjaChmYWlsdXJlID0+IGxvZ2dlci53YXJuKGDirpEgICAke2ZhaWx1cmV9YCkpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,11 @@
|
|
|
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
|
+
/// <amd-module name="@angular/core/schematics/migrations/testbed-teardown" />
|
|
9
|
+
import { Rule } from '@angular-devkit/schematics';
|
|
10
|
+
/** Migration that adds the `teardown` flag to `TestBed` calls. */
|
|
11
|
+
export default function (): Rule;
|
|
@@ -0,0 +1,92 @@
|
|
|
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
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
9
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
10
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
11
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
12
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
13
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
14
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
18
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
19
|
+
};
|
|
20
|
+
(function (factory) {
|
|
21
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
22
|
+
var v = factory(require, exports);
|
|
23
|
+
if (v !== undefined) module.exports = v;
|
|
24
|
+
}
|
|
25
|
+
else if (typeof define === "function" && define.amd) {
|
|
26
|
+
define("@angular/core/schematics/migrations/testbed-teardown", ["require", "exports", "@angular-devkit/schematics", "path", "typescript", "@angular/core/schematics/utils/project_tsconfig_paths", "@angular/core/schematics/utils/typescript/compiler_host", "@angular/core/schematics/migrations/testbed-teardown/util"], factory);
|
|
27
|
+
}
|
|
28
|
+
})(function (require, exports) {
|
|
29
|
+
"use strict";
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
const schematics_1 = require("@angular-devkit/schematics");
|
|
32
|
+
const path_1 = require("path");
|
|
33
|
+
const typescript_1 = __importDefault(require("typescript"));
|
|
34
|
+
const project_tsconfig_paths_1 = require("@angular/core/schematics/utils/project_tsconfig_paths");
|
|
35
|
+
const compiler_host_1 = require("@angular/core/schematics/utils/typescript/compiler_host");
|
|
36
|
+
const util_1 = require("@angular/core/schematics/migrations/testbed-teardown/util");
|
|
37
|
+
/** Migration that adds the `teardown` flag to `TestBed` calls. */
|
|
38
|
+
function default_1() {
|
|
39
|
+
return (tree) => __awaiter(this, void 0, void 0, function* () {
|
|
40
|
+
const { buildPaths, testPaths } = yield (0, project_tsconfig_paths_1.getProjectTsConfigPaths)(tree);
|
|
41
|
+
const basePath = process.cwd();
|
|
42
|
+
const allPaths = [...buildPaths, ...testPaths];
|
|
43
|
+
if (!allPaths.length) {
|
|
44
|
+
throw new schematics_1.SchematicsException('Could not find any tsconfig file. Cannot add `teardown` flag to `TestBed`.');
|
|
45
|
+
}
|
|
46
|
+
for (const tsconfigPath of allPaths) {
|
|
47
|
+
runTestbedTeardownMigration(tree, tsconfigPath, basePath);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
exports.default = default_1;
|
|
52
|
+
function runTestbedTeardownMigration(tree, tsconfigPath, basePath) {
|
|
53
|
+
const { program } = (0, compiler_host_1.createMigrationProgram)(tree, tsconfigPath, basePath);
|
|
54
|
+
const typeChecker = program.getTypeChecker();
|
|
55
|
+
const sourceFiles = program.getSourceFiles().filter(sourceFile => (0, compiler_host_1.canMigrateFile)(basePath, sourceFile, program));
|
|
56
|
+
const initTestEnvironmentResult = (0, util_1.findInitTestEnvironmentCalls)(typeChecker, sourceFiles);
|
|
57
|
+
const printer = typescript_1.default.createPrinter();
|
|
58
|
+
// If we identified at least one call to `initTestEnvironment` (can be migrated or unmigrated),
|
|
59
|
+
// we don't need to migrate `configureTestingModule` or `withModule` calls, because they'll take
|
|
60
|
+
// the default teardown behavior from the environment. This is preferrable, because it'll result
|
|
61
|
+
// in the least number of changes to users' code.
|
|
62
|
+
if (initTestEnvironmentResult.totalCalls > 0) {
|
|
63
|
+
// Migrate all of the unmigrated calls `initTestEnvironment`. This could be zero
|
|
64
|
+
// if the user has already opted into the new teardown behavior themselves.
|
|
65
|
+
initTestEnvironmentResult.callsToMigrate.forEach(node => {
|
|
66
|
+
const { span, text } = (0, util_1.getInitTestEnvironmentLiteralReplacement)(node, printer);
|
|
67
|
+
const update = tree.beginUpdate((0, path_1.relative)(basePath, node.getSourceFile().fileName));
|
|
68
|
+
// The update appears to break if we try to call `remove` with a zero length.
|
|
69
|
+
if (span.length > 0) {
|
|
70
|
+
update.remove(span.start, span.length);
|
|
71
|
+
}
|
|
72
|
+
update.insertRight(span.start, text);
|
|
73
|
+
tree.commitUpdate(update);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
// Otherwise migrate the metadata passed into the `configureTestingModule` and `withModule`
|
|
78
|
+
// calls. This scenario is less likely, but it could happen if `initTestEnvironment` has been
|
|
79
|
+
// abstracted away or is inside a .js file.
|
|
80
|
+
sourceFiles.forEach(sourceFile => {
|
|
81
|
+
(0, util_1.findTestModuleMetadataNodes)(typeChecker, sourceFile).forEach(node => {
|
|
82
|
+
const migrated = (0, util_1.migrateTestModuleMetadataLiteral)(node);
|
|
83
|
+
const update = tree.beginUpdate((0, path_1.relative)(basePath, node.getSourceFile().fileName));
|
|
84
|
+
update.remove(node.getStart(), node.getWidth());
|
|
85
|
+
update.insertRight(node.getStart(), printer.printNode(typescript_1.default.EmitHint.Unspecified, migrated, node.getSourceFile()));
|
|
86
|
+
tree.commitUpdate(update);
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NjaGVtYXRpY3MvbWlncmF0aW9ucy90ZXN0YmVkLXRlYXJkb3duL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBRUgsMkRBQTJFO0lBQzNFLCtCQUE4QjtJQUM5Qiw0REFBNEI7SUFFNUIsa0dBQTJFO0lBQzNFLDJGQUE0RjtJQUM1RixvRkFBNko7SUFHN0osa0VBQWtFO0lBQ2xFO1FBQ0UsT0FBTyxDQUFPLElBQVUsRUFBRSxFQUFFO1lBQzFCLE1BQU0sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFDLEdBQUcsTUFBTSxJQUFBLGdEQUF1QixFQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BFLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMvQixNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsVUFBVSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUM7WUFFL0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3BCLE1BQU0sSUFBSSxnQ0FBbUIsQ0FDekIsNEVBQTRFLENBQUMsQ0FBQzthQUNuRjtZQUVELEtBQUssTUFBTSxZQUFZLElBQUksUUFBUSxFQUFFO2dCQUNuQywyQkFBMkIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQzNEO1FBQ0gsQ0FBQyxDQUFBLENBQUM7SUFDSixDQUFDO0lBZkQsNEJBZUM7SUFFRCxTQUFTLDJCQUEyQixDQUFDLElBQVUsRUFBRSxZQUFvQixFQUFFLFFBQWdCO1FBQ3JGLE1BQU0sRUFBQyxPQUFPLEVBQUMsR0FBRyxJQUFBLHNDQUFzQixFQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdkUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzdDLE1BQU0sV0FBVyxHQUNiLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFBLDhCQUFjLEVBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2pHLE1BQU0seUJBQXlCLEdBQUcsSUFBQSxtQ0FBNEIsRUFBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDekYsTUFBTSxPQUFPLEdBQUcsb0JBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVuQywrRkFBK0Y7UUFDL0YsZ0dBQWdHO1FBQ2hHLGdHQUFnRztRQUNoRyxpREFBaUQ7UUFDakQsSUFBSSx5QkFBeUIsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFO1lBQzVDLGdGQUFnRjtZQUNoRiwyRUFBMkU7WUFDM0UseUJBQXlCLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDdEQsTUFBTSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsR0FBRyxJQUFBLCtDQUF3QyxFQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDN0UsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFBLGVBQVEsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ25GLDZFQUE2RTtnQkFDN0UsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDbkIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDeEM7Z0JBQ0QsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLDJGQUEyRjtZQUMzRiw2RkFBNkY7WUFDN0YsMkNBQTJDO1lBQzNDLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQy9CLElBQUEsa0NBQTJCLEVBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDbEUsTUFBTSxRQUFRLEdBQUcsSUFBQSx1Q0FBZ0MsRUFBQyxJQUFJLENBQUMsQ0FBQztvQkFDeEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFBLGVBQVEsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7b0JBQ25GLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO29CQUNoRCxNQUFNLENBQUMsV0FBVyxDQUNkLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFDZixPQUFPLENBQUMsU0FBUyxDQUFDLG9CQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDaEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDNUIsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1J1bGUsIFNjaGVtYXRpY3NFeGNlcHRpb24sIFRyZWV9IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9zY2hlbWF0aWNzJztcbmltcG9ydCB7cmVsYXRpdmV9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge2dldFByb2plY3RUc0NvbmZpZ1BhdGhzfSBmcm9tICcuLi8uLi91dGlscy9wcm9qZWN0X3RzY29uZmlnX3BhdGhzJztcbmltcG9ydCB7Y2FuTWlncmF0ZUZpbGUsIGNyZWF0ZU1pZ3JhdGlvblByb2dyYW19IGZyb20gJy4uLy4uL3V0aWxzL3R5cGVzY3JpcHQvY29tcGlsZXJfaG9zdCc7XG5pbXBvcnQge2ZpbmRJbml0VGVzdEVudmlyb25tZW50Q2FsbHMsIGZpbmRUZXN0TW9kdWxlTWV0YWRhdGFOb2RlcywgZ2V0SW5pdFRlc3RFbnZpcm9ubWVudExpdGVyYWxSZXBsYWNlbWVudCwgbWlncmF0ZVRlc3RNb2R1bGVNZXRhZGF0YUxpdGVyYWx9IGZyb20gJy4vdXRpbCc7XG5cblxuLyoqIE1pZ3JhdGlvbiB0aGF0IGFkZHMgdGhlIGB0ZWFyZG93bmAgZmxhZyB0byBgVGVzdEJlZGAgY2FsbHMuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpOiBSdWxlIHtcbiAgcmV0dXJuIGFzeW5jICh0cmVlOiBUcmVlKSA9PiB7XG4gICAgY29uc3Qge2J1aWxkUGF0aHMsIHRlc3RQYXRoc30gPSBhd2FpdCBnZXRQcm9qZWN0VHNDb25maWdQYXRocyh0cmVlKTtcbiAgICBjb25zdCBiYXNlUGF0aCA9IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3QgYWxsUGF0aHMgPSBbLi4uYnVpbGRQYXRocywgLi4udGVzdFBhdGhzXTtcblxuICAgIGlmICghYWxsUGF0aHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hdGljc0V4Y2VwdGlvbihcbiAgICAgICAgICAnQ291bGQgbm90IGZpbmQgYW55IHRzY29uZmlnIGZpbGUuIENhbm5vdCBhZGQgYHRlYXJkb3duYCBmbGFnIHRvIGBUZXN0QmVkYC4nKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRzY29uZmlnUGF0aCBvZiBhbGxQYXRocykge1xuICAgICAgcnVuVGVzdGJlZFRlYXJkb3duTWlncmF0aW9uKHRyZWUsIHRzY29uZmlnUGF0aCwgYmFzZVBhdGgpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gcnVuVGVzdGJlZFRlYXJkb3duTWlncmF0aW9uKHRyZWU6IFRyZWUsIHRzY29uZmlnUGF0aDogc3RyaW5nLCBiYXNlUGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IHtwcm9ncmFtfSA9IGNyZWF0ZU1pZ3JhdGlvblByb2dyYW0odHJlZSwgdHNjb25maWdQYXRoLCBiYXNlUGF0aCk7XG4gIGNvbnN0IHR5cGVDaGVja2VyID0gcHJvZ3JhbS5nZXRUeXBlQ2hlY2tlcigpO1xuICBjb25zdCBzb3VyY2VGaWxlcyA9XG4gICAgICBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkuZmlsdGVyKHNvdXJjZUZpbGUgPT4gY2FuTWlncmF0ZUZpbGUoYmFzZVBhdGgsIHNvdXJjZUZpbGUsIHByb2dyYW0pKTtcbiAgY29uc3QgaW5pdFRlc3RFbnZpcm9ubWVudFJlc3VsdCA9IGZpbmRJbml0VGVzdEVudmlyb25tZW50Q2FsbHModHlwZUNoZWNrZXIsIHNvdXJjZUZpbGVzKTtcbiAgY29uc3QgcHJpbnRlciA9IHRzLmNyZWF0ZVByaW50ZXIoKTtcblxuICAvLyBJZiB3ZSBpZGVudGlmaWVkIGF0IGxlYXN0IG9uZSBjYWxsIHRvIGBpbml0VGVzdEVudmlyb25tZW50YCAoY2FuIGJlIG1pZ3JhdGVkIG9yIHVubWlncmF0ZWQpLFxuICAvLyB3ZSBkb24ndCBuZWVkIHRvIG1pZ3JhdGUgYGNvbmZpZ3VyZVRlc3RpbmdNb2R1bGVgIG9yIGB3aXRoTW9kdWxlYCBjYWxscywgYmVjYXVzZSB0aGV5J2xsIHRha2VcbiAgLy8gdGhlIGRlZmF1bHQgdGVhcmRvd24gYmVoYXZpb3IgZnJvbSB0aGUgZW52aXJvbm1lbnQuIFRoaXMgaXMgcHJlZmVycmFibGUsIGJlY2F1c2UgaXQnbGwgcmVzdWx0XG4gIC8vIGluIHRoZSBsZWFzdCBudW1iZXIgb2YgY2hhbmdlcyB0byB1c2VycycgY29kZS5cbiAgaWYgKGluaXRUZXN0RW52aXJvbm1lbnRSZXN1bHQudG90YWxDYWxscyA+IDApIHtcbiAgICAvLyBNaWdyYXRlIGFsbCBvZiB0aGUgdW5taWdyYXRlZCBjYWxscyBgaW5pdFRlc3RFbnZpcm9ubWVudGAuIFRoaXMgY291bGQgYmUgemVyb1xuICAgIC8vIGlmIHRoZSB1c2VyIGhhcyBhbHJlYWR5IG9wdGVkIGludG8gdGhlIG5ldyB0ZWFyZG93biBiZWhhdmlvciB0aGVtc2VsdmVzLlxuICAgIGluaXRUZXN0RW52aXJvbm1lbnRSZXN1bHQuY2FsbHNUb01pZ3JhdGUuZm9yRWFjaChub2RlID0+IHtcbiAgICAgIGNvbnN0IHtzcGFuLCB0ZXh0fSA9IGdldEluaXRUZXN0RW52aXJvbm1lbnRMaXRlcmFsUmVwbGFjZW1lbnQobm9kZSwgcHJpbnRlcik7XG4gICAgICBjb25zdCB1cGRhdGUgPSB0cmVlLmJlZ2luVXBkYXRlKHJlbGF0aXZlKGJhc2VQYXRoLCBub2RlLmdldFNvdXJjZUZpbGUoKS5maWxlTmFtZSkpO1xuICAgICAgLy8gVGhlIHVwZGF0ZSBhcHBlYXJzIHRvIGJyZWFrIGlmIHdlIHRyeSB0byBjYWxsIGByZW1vdmVgIHdpdGggYSB6ZXJvIGxlbmd0aC5cbiAgICAgIGlmIChzcGFuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdXBkYXRlLnJlbW92ZShzcGFuLnN0YXJ0LCBzcGFuLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICB1cGRhdGUuaW5zZXJ0UmlnaHQoc3Bhbi5zdGFydCwgdGV4dCk7XG4gICAgICB0cmVlLmNvbW1pdFVwZGF0ZSh1cGRhdGUpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZSBtaWdyYXRlIHRoZSBtZXRhZGF0YSBwYXNzZWQgaW50byB0aGUgYGNvbmZpZ3VyZVRlc3RpbmdNb2R1bGVgIGFuZCBgd2l0aE1vZHVsZWBcbiAgICAvLyBjYWxscy4gVGhpcyBzY2VuYXJpbyBpcyBsZXNzIGxpa2VseSwgYnV0IGl0IGNvdWxkIGhhcHBlbiBpZiBgaW5pdFRlc3RFbnZpcm9ubWVudGAgaGFzIGJlZW5cbiAgICAvLyBhYnN0cmFjdGVkIGF3YXkgb3IgaXMgaW5zaWRlIGEgLmpzIGZpbGUuXG4gICAgc291cmNlRmlsZXMuZm9yRWFjaChzb3VyY2VGaWxlID0+IHtcbiAgICAgIGZpbmRUZXN0TW9kdWxlTWV0YWRhdGFOb2Rlcyh0eXBlQ2hlY2tlciwgc291cmNlRmlsZSkuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgY29uc3QgbWlncmF0ZWQgPSBtaWdyYXRlVGVzdE1vZHVsZU1ldGFkYXRhTGl0ZXJhbChub2RlKTtcbiAgICAgICAgY29uc3QgdXBkYXRlID0gdHJlZS5iZWdpblVwZGF0ZShyZWxhdGl2ZShiYXNlUGF0aCwgbm9kZS5nZXRTb3VyY2VGaWxlKCkuZmlsZU5hbWUpKTtcbiAgICAgICAgdXBkYXRlLnJlbW92ZShub2RlLmdldFN0YXJ0KCksIG5vZGUuZ2V0V2lkdGgoKSk7XG4gICAgICAgIHVwZGF0ZS5pbnNlcnRSaWdodChcbiAgICAgICAgICAgIG5vZGUuZ2V0U3RhcnQoKSxcbiAgICAgICAgICAgIHByaW50ZXIucHJpbnROb2RlKHRzLkVtaXRIaW50LlVuc3BlY2lmaWVkLCBtaWdyYXRlZCwgbm9kZS5nZXRTb3VyY2VGaWxlKCkpKTtcbiAgICAgICAgdHJlZS5jb21taXRVcGRhdGUodXBkYXRlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,35 @@
|
|
|
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
|
+
/// <amd-module name="@angular/core/schematics/migrations/testbed-teardown/util" />
|
|
9
|
+
import ts from 'typescript';
|
|
10
|
+
/** Result of a full-program analysis looking for `initTestEnvironment` calls. */
|
|
11
|
+
export interface InitTestEnvironmentAnalysis {
|
|
12
|
+
/** Total number of calls that were found. */
|
|
13
|
+
totalCalls: number;
|
|
14
|
+
/** Calls that need to be migrated. */
|
|
15
|
+
callsToMigrate: ts.CallExpression[];
|
|
16
|
+
}
|
|
17
|
+
/** Finds the `initTestEnvironment` calls that need to be migrated. */
|
|
18
|
+
export declare function findInitTestEnvironmentCalls(typeChecker: ts.TypeChecker, allSourceFiles: ts.SourceFile[]): InitTestEnvironmentAnalysis;
|
|
19
|
+
/** Finds the `configureTestingModule` and `withModule` calls that need to be migrated. */
|
|
20
|
+
export declare function findTestModuleMetadataNodes(typeChecker: ts.TypeChecker, sourceFile: ts.SourceFile): ts.ObjectLiteralExpression[];
|
|
21
|
+
/**
|
|
22
|
+
* Gets data that can be used to migrate a call to `TestBed.initTestEnvironment`.
|
|
23
|
+
* The returned `span` is used to mark the text that should be replaced while the `text`
|
|
24
|
+
* is the code that should be inserted instead.
|
|
25
|
+
*/
|
|
26
|
+
export declare function getInitTestEnvironmentLiteralReplacement(node: ts.CallExpression, printer: ts.Printer): {
|
|
27
|
+
span: {
|
|
28
|
+
start: number;
|
|
29
|
+
end: number;
|
|
30
|
+
length: number;
|
|
31
|
+
};
|
|
32
|
+
text: string;
|
|
33
|
+
};
|
|
34
|
+
/** Migrates an object literal that is passed into `configureTestingModule` or `withModule`. */
|
|
35
|
+
export declare function migrateTestModuleMetadataLiteral(node: ts.ObjectLiteralExpression): ts.ObjectLiteralExpression;
|
|
@@ -0,0 +1,188 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
(function (factory) {
|
|
12
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
13
|
+
var v = factory(require, exports);
|
|
14
|
+
if (v !== undefined) module.exports = v;
|
|
15
|
+
}
|
|
16
|
+
else if (typeof define === "function" && define.amd) {
|
|
17
|
+
define("@angular/core/schematics/migrations/testbed-teardown/util", ["require", "exports", "typescript", "@angular/core/schematics/utils/typescript/imports", "@angular/core/schematics/utils/typescript/symbol"], factory);
|
|
18
|
+
}
|
|
19
|
+
})(function (require, exports) {
|
|
20
|
+
"use strict";
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.migrateTestModuleMetadataLiteral = exports.getInitTestEnvironmentLiteralReplacement = exports.findTestModuleMetadataNodes = exports.findInitTestEnvironmentCalls = void 0;
|
|
23
|
+
const typescript_1 = __importDefault(require("typescript"));
|
|
24
|
+
const imports_1 = require("@angular/core/schematics/utils/typescript/imports");
|
|
25
|
+
const symbol_1 = require("@angular/core/schematics/utils/typescript/symbol");
|
|
26
|
+
/** Finds the `initTestEnvironment` calls that need to be migrated. */
|
|
27
|
+
function findInitTestEnvironmentCalls(typeChecker, allSourceFiles) {
|
|
28
|
+
const callsToMigrate = new Set();
|
|
29
|
+
let totalCalls = 0;
|
|
30
|
+
allSourceFiles.forEach(sourceFile => {
|
|
31
|
+
sourceFile.forEachChild(function walk(node) {
|
|
32
|
+
if (typescript_1.default.isCallExpression(node) && typescript_1.default.isPropertyAccessExpression(node.expression) &&
|
|
33
|
+
typescript_1.default.isIdentifier(node.expression.name) &&
|
|
34
|
+
node.expression.name.text === 'initTestEnvironment' &&
|
|
35
|
+
isTestBedAccess(typeChecker, node.expression)) {
|
|
36
|
+
totalCalls++;
|
|
37
|
+
if (shouldMigrateInitTestEnvironment(node)) {
|
|
38
|
+
callsToMigrate.add(node);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
node.forEachChild(walk);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
return {
|
|
45
|
+
// Sort the nodes so that they will be migrated in reverse source order (nodes at the end of
|
|
46
|
+
// the file are migrated first). This avoids issues where a migrated node will offset the
|
|
47
|
+
// bounds of all nodes that come after it. Note that the nodes here are from all of the
|
|
48
|
+
// passed in source files, but that doesn't matter since the later nodes will still appear
|
|
49
|
+
// after the earlier ones.
|
|
50
|
+
callsToMigrate: sortInReverseSourceOrder(Array.from(callsToMigrate)),
|
|
51
|
+
totalCalls
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
exports.findInitTestEnvironmentCalls = findInitTestEnvironmentCalls;
|
|
55
|
+
/** Finds the `configureTestingModule` and `withModule` calls that need to be migrated. */
|
|
56
|
+
function findTestModuleMetadataNodes(typeChecker, sourceFile) {
|
|
57
|
+
const testModuleMetadataLiterals = new Set();
|
|
58
|
+
const withModuleImport = (0, imports_1.getImportSpecifier)(sourceFile, '@angular/core/testing', 'withModule');
|
|
59
|
+
sourceFile.forEachChild(function walk(node) {
|
|
60
|
+
if (typescript_1.default.isCallExpression(node)) {
|
|
61
|
+
const isConfigureTestingModuleCall = typescript_1.default.isPropertyAccessExpression(node.expression) &&
|
|
62
|
+
typescript_1.default.isIdentifier(node.expression.name) &&
|
|
63
|
+
node.expression.name.text === 'configureTestingModule' &&
|
|
64
|
+
isTestBedAccess(typeChecker, node.expression) && shouldMigrateModuleConfigCall(node);
|
|
65
|
+
const isWithModuleCall = withModuleImport && typescript_1.default.isIdentifier(node.expression) &&
|
|
66
|
+
(0, symbol_1.isReferenceToImport)(typeChecker, node.expression, withModuleImport) &&
|
|
67
|
+
shouldMigrateModuleConfigCall(node);
|
|
68
|
+
if (isConfigureTestingModuleCall || isWithModuleCall) {
|
|
69
|
+
testModuleMetadataLiterals.add(node.arguments[0]);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
node.forEachChild(walk);
|
|
73
|
+
});
|
|
74
|
+
// Sort the nodes so that they will be migrated in reverse source order (nodes at the end of
|
|
75
|
+
// the file are migrated first). This avoids issues where a migrated node will offset the
|
|
76
|
+
// bounds of all nodes that come after it.
|
|
77
|
+
return sortInReverseSourceOrder(Array.from(testModuleMetadataLiterals));
|
|
78
|
+
}
|
|
79
|
+
exports.findTestModuleMetadataNodes = findTestModuleMetadataNodes;
|
|
80
|
+
/**
|
|
81
|
+
* Gets data that can be used to migrate a call to `TestBed.initTestEnvironment`.
|
|
82
|
+
* The returned `span` is used to mark the text that should be replaced while the `text`
|
|
83
|
+
* is the code that should be inserted instead.
|
|
84
|
+
*/
|
|
85
|
+
function getInitTestEnvironmentLiteralReplacement(node, printer) {
|
|
86
|
+
const literalProperties = [];
|
|
87
|
+
const lastArg = node.arguments[node.arguments.length - 1];
|
|
88
|
+
let span;
|
|
89
|
+
let prefix;
|
|
90
|
+
if (node.arguments.length > 2) {
|
|
91
|
+
if (isFunction(lastArg)) {
|
|
92
|
+
// If the last argument is a function, add the function as the `aotSummaries` property.
|
|
93
|
+
literalProperties.push(typescript_1.default.createPropertyAssignment('aotSummaries', lastArg));
|
|
94
|
+
}
|
|
95
|
+
else if (typescript_1.default.isObjectLiteralExpression(lastArg)) {
|
|
96
|
+
// If the property is an object literal, copy over all the properties.
|
|
97
|
+
literalProperties.push(...lastArg.properties);
|
|
98
|
+
}
|
|
99
|
+
prefix = '';
|
|
100
|
+
span = { start: lastArg.getStart(), end: lastArg.getEnd(), length: lastArg.getWidth() };
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
const start = lastArg.getEnd();
|
|
104
|
+
prefix = ', ';
|
|
105
|
+
span = { start, end: start, length: 0 };
|
|
106
|
+
}
|
|
107
|
+
// Finally push the teardown object so that it appears last.
|
|
108
|
+
literalProperties.push(createTeardownAssignment());
|
|
109
|
+
return {
|
|
110
|
+
span,
|
|
111
|
+
text: prefix +
|
|
112
|
+
printer.printNode(typescript_1.default.EmitHint.Unspecified, typescript_1.default.createObjectLiteral(literalProperties, true), node.getSourceFile())
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
exports.getInitTestEnvironmentLiteralReplacement = getInitTestEnvironmentLiteralReplacement;
|
|
116
|
+
/** Migrates an object literal that is passed into `configureTestingModule` or `withModule`. */
|
|
117
|
+
function migrateTestModuleMetadataLiteral(node) {
|
|
118
|
+
return typescript_1.default.createObjectLiteral([...node.properties, createTeardownAssignment()], node.properties.length > 0);
|
|
119
|
+
}
|
|
120
|
+
exports.migrateTestModuleMetadataLiteral = migrateTestModuleMetadataLiteral;
|
|
121
|
+
/** Returns whether a property access points to `TestBed`. */
|
|
122
|
+
function isTestBedAccess(typeChecker, node) {
|
|
123
|
+
var _a, _b;
|
|
124
|
+
const symbolName = (_b = (_a = typeChecker.getTypeAtLocation(node.expression)) === null || _a === void 0 ? void 0 : _a.getSymbol()) === null || _b === void 0 ? void 0 : _b.getName();
|
|
125
|
+
return symbolName === 'TestBed' || symbolName === 'TestBedStatic';
|
|
126
|
+
}
|
|
127
|
+
/** Whether a call to `initTestEnvironment` should be migrated. */
|
|
128
|
+
function shouldMigrateInitTestEnvironment(node) {
|
|
129
|
+
// If there is no third argument, we definitely have to migrate it.
|
|
130
|
+
if (node.arguments.length === 2) {
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
// This is technically a type error so we shouldn't mess with it.
|
|
134
|
+
if (node.arguments.length < 2) {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
// Otherwise we need to figure out if the `teardown` flag is set on the last argument.
|
|
138
|
+
const lastArg = node.arguments[2];
|
|
139
|
+
// Note: the checks below will identify something like `initTestEnvironment(..., ..., {})`,
|
|
140
|
+
// but they'll ignore a variable being passed in as the last argument like `const config = {};
|
|
141
|
+
// initTestEnvironment(..., ..., config)`. While we can resolve the variable to its declaration
|
|
142
|
+
// using `typeChecker.getTypeAtLocation(lastArg).getSymbol()?.valueDeclaration`, we deliberately
|
|
143
|
+
// don't, because it introduces some complexity and we may end up breaking user code. E.g.
|
|
144
|
+
// the `config` from the example above may be passed in to other functions or the `teardown`
|
|
145
|
+
// flag could be added later on by a function call.
|
|
146
|
+
// If the argument is an object literal and there are no
|
|
147
|
+
// properties called `teardown`, we have to migrate it.
|
|
148
|
+
if (isObjectLiteralWithoutTeardown(lastArg)) {
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
// If the last argument is an `aotSummaries` function, we also have to migrate.
|
|
152
|
+
if (isFunction(lastArg)) {
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
// Otherwise don't migrate if we couldn't identify the last argument.
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Whether a call to a module configuration function should be migrated. This covers
|
|
160
|
+
* `TestBed.configureTestingModule` and `withModule` since they both accept `TestModuleMetadata`
|
|
161
|
+
* as their first argument.
|
|
162
|
+
*/
|
|
163
|
+
function shouldMigrateModuleConfigCall(node) {
|
|
164
|
+
return node.arguments.length > 0 && isObjectLiteralWithoutTeardown(node.arguments[0]);
|
|
165
|
+
}
|
|
166
|
+
/** Returns whether a node is a function literal. */
|
|
167
|
+
function isFunction(node) {
|
|
168
|
+
return typescript_1.default.isArrowFunction(node) || typescript_1.default.isFunctionExpression(node) ||
|
|
169
|
+
typescript_1.default.isFunctionDeclaration(node);
|
|
170
|
+
}
|
|
171
|
+
/** Checks whether a node is an object literal that doesn't contain a property called `teardown`. */
|
|
172
|
+
function isObjectLiteralWithoutTeardown(node) {
|
|
173
|
+
return typescript_1.default.isObjectLiteralExpression(node) && !node.properties.find(prop => {
|
|
174
|
+
var _a;
|
|
175
|
+
return ((_a = prop.name) === null || _a === void 0 ? void 0 : _a.getText()) === 'teardown';
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
/** Creates a teardown configuration property assignment. */
|
|
179
|
+
function createTeardownAssignment() {
|
|
180
|
+
// `teardown: {destroyAfterEach: false}`
|
|
181
|
+
return typescript_1.default.createPropertyAssignment('teardown', typescript_1.default.createObjectLiteral([typescript_1.default.createPropertyAssignment('destroyAfterEach', typescript_1.default.createFalse())]));
|
|
182
|
+
}
|
|
183
|
+
/** Sorts an array of AST nodes in reverse source order. */
|
|
184
|
+
function sortInReverseSourceOrder(nodes) {
|
|
185
|
+
return nodes.sort((a, b) => b.getEnd() - a.getEnd());
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy9taWdyYXRpb25zL3Rlc3RiZWQtdGVhcmRvd24vdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7Ozs7SUFFSCw0REFBNEI7SUFFNUIsK0VBQWtFO0lBQ2xFLDZFQUFrRTtJQVVsRSxzRUFBc0U7SUFDdEUsU0FBZ0IsNEJBQTRCLENBQ3hDLFdBQTJCLEVBQUUsY0FBK0I7UUFDOUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQXFCLENBQUM7UUFDcEQsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBRW5CLGNBQWMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDbEMsVUFBVSxDQUFDLFlBQVksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFhO2dCQUNqRCxJQUFJLG9CQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksb0JBQUUsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO29CQUMzRSxvQkFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztvQkFDckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLHFCQUFxQjtvQkFDbkQsZUFBZSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7b0JBQ2pELFVBQVUsRUFBRSxDQUFDO29CQUNiLElBQUksZ0NBQWdDLENBQUMsSUFBSSxDQUFDLEVBQUU7d0JBQzFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQzFCO2lCQUNGO2dCQUVELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMs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NUQsb0JBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsb0dBQW9HO0lBQ3BHLFNBQVMsOEJBQThCLENBQUMsSUFBYTtRQUNuRCxPQUFPLG9CQUFFLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTs7WUFDeEUsT0FBTyxDQUFBLE1BQUEsSUFBSSxDQUFDLElBQUksMENBQUUsT0FBTyxFQUFFLE1BQUssVUFBVSxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDREQUE0RDtJQUM1RCxTQUFTLHdCQUF3QjtRQUMvQix3Q0FBd0M7UUFDeEMsT0FBTyxvQkFBRSxDQUFDLHdCQUF3QixDQUM5QixVQUFVLEVBQ1Ysb0JBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLG9CQUFFLENBQUMsd0JBQXdCLENBQUMsa0JBQWtCLEVBQUUsb0JBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25HLENBQUM7SUFFRCwyREFBMkQ7SUFDM0QsU0FBUyx3QkFBd0IsQ0FBb0IsS0FBVTtRQUM3RCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7Z2V0SW1wb3J0U3BlY2lmaWVyfSBmcm9tICcuLi8uLi91dGlscy90eXBlc2NyaXB0L2ltcG9ydHMnO1xuaW1wb3J0IHtpc1JlZmVyZW5jZVRvSW1wb3J0fSBmcm9tICcuLi8uLi91dGlscy90eXBlc2NyaXB0L3N5bWJvbCc7XG5cbi8qKiBSZXN1bHQgb2YgYSBmdWxsLXByb2dyYW0gYW5hbHlzaXMgbG9va2luZyBmb3IgYGluaXRUZXN0RW52aXJvbm1lbnRgIGNhbGxzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbml0VGVzdEVudmlyb25tZW50QW5hbHlzaXMge1xuICAvKiogVG90YWwgbnVtYmVyIG9mIGNhbGxzIHRoYXQgd2VyZSBmb3VuZC4gKi9cbiAgdG90YWxDYWxsczogbnVtYmVyO1xuICAvKiogQ2FsbHMgdGhhdCBuZWVkIHRvIGJlIG1pZ3JhdGVkLiAqL1xuICBjYWxsc1RvTWlncmF0ZTogdHMuQ2FsbEV4cHJlc3Npb25bXTtcbn1cblxuLyoqIEZpbmRzIHRoZSBgaW5pdFRlc3RFbnZpcm9ubWVudGAgY2FsbHMgdGhhdCBuZWVkIHRvIGJlIG1pZ3JhdGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRJbml0VGVzdEVudmlyb25tZW50Q2FsbHMoXG4gICAgdHlwZUNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLCBhbGxTb3VyY2VGaWxlczogdHMuU291cmNlRmlsZVtdKTogSW5pdFRlc3RFbnZpcm9ubWVudEFuYWx5c2lzIHtcbiAgY29uc3QgY2FsbHNUb01pZ3JhdGUgPSBuZXcgU2V0PHRzLkNhbGxFeHByZXNzaW9uPigpO1xuICBsZXQgdG90YWxDYWxscyA9IDA7XG5cbiAgYWxsU291cmNlRmlsZXMuZm9yRWFjaChzb3VyY2VGaWxlID0+IHtcbiAgICBzb3VyY2VGaWxlLmZvckVhY2hDaGlsZChmdW5jdGlvbiB3YWxrKG5vZGU6IHRzLk5vZGUpIHtcbiAgICAgIGlmICh0cy5pc0NhbGxFeHByZXNzaW9uKG5vZGUpICYmIHRzLmlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKG5vZGUuZXhwcmVzc2lvbikgJiZcbiAgICAgICAgICB0cy5pc0lkZW50aWZpZXIobm9kZS5leHByZXNzaW9uLm5hbWUpICYmXG4gICAgICAgICAgbm9kZS5leHByZXNzaW9uLm5hbWUudGV4dCA9PT0gJ2luaXRUZXN0RW52aXJvbm1lbnQnICYmXG4gICAgICAgICAgaXNUZXN0QmVkQWNjZXNzKHR5cGVDaGVja2VyLCBub2RlLmV4cHJlc3Npb24pKSB7XG4gICAgICAgIHRvdGFsQ2FsbHMrKztcbiAgICAgICAgaWYgKHNob3VsZE1pZ3JhdGVJbml0VGVzdEVudmlyb25tZW50KG5vZGUpKSB7XG4gICAgICAgICAgY2FsbHNUb01pZ3JhdGUuYWRkKG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5vZGUuZm9yRWFjaENoaWxkKHdhbGspO1xuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIC8vIFNvcnQgdGhlIG5vZGVzIHNvIHRoYXQgdGhleSB3aWxsIGJlIG1pZ3JhdGVkIGluIHJldmVyc2Ugc291cmNlIG9yZGVyIChub2RlcyBhdCB0aGUgZW5kIG9mXG4gICAgLy8gdGhlIGZpbGUgYXJlIG1pZ3JhdGVkIGZpcnN0KS4gVGhpcyBhdm9pZHMgaXNzdWVzIHdoZXJlIGEgbWlncmF0ZWQgbm9kZSB3aWxsIG9mZnNldCB0aGVcbiAgICAvLyBib3VuZHMgb2YgYWxsIG5vZGVzIHRoYXQgY29tZSBhZnRlciBpdC4gTm90ZSB0aGF0IHRoZSBub2RlcyBoZXJlIGFyZSBmcm9tIGFsbCBvZiB0aGVcbiAgICAvLyBwYXNzZWQgaW4gc291cmNlIGZpbGVzLCBidXQgdGhhdCBkb2Vzbid0IG1hdHRlciBzaW5jZSB0aGUgbGF0ZXIgbm9kZXMgd2lsbCBzdGlsbCBhcHBlYXJcbiAgICAvLyBhZnRlciB0aGUgZWFybGllciBvbmVzLlxuICAgIGNhbGxzVG9NaWdyYXRlOiBzb3J0SW5SZXZlcnNlU291cmNlT3JkZXIoQXJyYXkuZnJvbShjYWxsc1RvTWlncmF0ZSkpLFxuICAgIHRvdGFsQ2FsbHNcbiAgfTtcbn1cblxuLyoqIEZpbmRzIHRoZSBgY29uZmlndXJlVGVzdGluZ01vZHVsZWAgYW5kIGB3aXRoTW9kdWxlYCBjYWxscyB0aGF0IG5lZWQgdG8gYmUgbWlncmF0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZFRlc3RNb2R1bGVNZXRhZGF0YU5vZGVzKFxuICAgIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlciwgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSkge1xuICBjb25zdCB0ZXN0TW9kdWxlTWV0YWRhdGFMaXRlcmFscyA9IG5ldyBTZXQ8dHMuT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24+KCk7XG4gIGNvbnN0IHdpdGhNb2R1bGVJbXBvcnQgPSBnZXRJbXBvcnRTcGVjaWZpZXIoc291cmNlRmlsZSwgJ0Bhbmd1bGFyL2NvcmUvdGVzdGluZycsICd3aXRoTW9kdWxlJyk7XG5cbiAgc291cmNlRmlsZS5mb3JFYWNoQ2hpbGQoZnVuY3Rpb24gd2Fsayhub2RlOiB0cy5Ob2RlKSB7XG4gICAgaWYgKHRzLmlzQ2FsbEV4cHJlc3Npb24obm9kZSkpIHtcbiAgICAgIGNvbnN0IGlzQ29uZmlndXJlVGVzdGluZ01vZHVsZUNhbGwgPSB0cy5pc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24pICYmXG4gICAgICAgICAgdHMuaXNJZGVudGlmaWVyKG5vZGUuZXhwcmVzc2lvbi5uYW1lKSAmJlxuICAgICAgICAgIG5vZGUuZXhwcmVzc2lvbi5uYW1lLnRleHQgPT09ICdjb25maWd1cmVUZXN0aW5nTW9kdWxlJyAmJlxuICAgICAgICAgIGlzVGVzdEJlZEFjY2Vzcyh0eXBlQ2hlY2tlciwgbm9kZS5leHByZXNzaW9uKSAmJiBzaG91bGRNaWdyYXRlTW9kdWxlQ29uZmlnQ2FsbChub2RlKTtcbiAgICAgIGNvbnN0IGlzV2l0aE1vZHVsZUNhbGwgPSB3aXRoTW9kdWxlSW1wb3J0ICYmIHRzLmlzSWRlbnRpZmllcihub2RlLmV4cHJlc3Npb24pICYmXG4gICAgICAgICAgaXNSZWZlcmVuY2VUb0ltcG9ydCh0eXBlQ2hlY2tlciwgbm9kZS5leHByZXNzaW9uLCB3aXRoTW9kdWxlSW1wb3J0KSAmJlxuICAgICAgICAgIHNob3VsZE1pZ3JhdGVNb2R1bGVDb25maWdDYWxsKG5vZGUpO1xuXG4gICAgICBpZiAoaXNDb25maWd1cmVUZXN0aW5nTW9kdWxlQ2FsbCB8fCBpc1dpdGhNb2R1bGVDYWxsKSB7XG4gICAgICAgIHRlc3RNb2R1bGVNZXRhZGF0YUxpdGVyYWxzLmFkZChub2RlLmFyZ3VtZW50c1swXSBhcyB0cy5PYmplY3RMaXRlcmFsRXhwcmVzc2lvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZS5mb3JFYWNoQ2hpbGQod2Fsayk7XG4gIH0pO1xuXG4gIC8vIFNvcnQgdGhlIG5vZGVzIHNvIHRoYXQgdGhleSB3aWxsIGJlIG1pZ3JhdGVkIGluIHJldmVyc2Ugc291cmNlIG9yZGVyIChub2RlcyBhdCB0aGUgZW5kIG9mXG4gIC8vIHRoZSBmaWxlIGFyZSBtaWdyYXRlZCBmaXJzdCkuIFRoaXMgYXZvaWRzIGlzc3VlcyB3aGVyZSBhIG1pZ3JhdGVkIG5vZGUgd2lsbCBvZmZzZXQgdGhlXG4gIC8vIGJvdW5kcyBvZiBhbGwgbm9kZXMgdGhhdCBjb21lIGFmdGVyIGl0LlxuICByZXR1cm4gc29ydEluUmV2ZXJzZVNvdXJjZU9yZGVyKEFycmF5LmZyb20odGVzdE1vZHVsZU1ldGFkYXRhTGl0ZXJhbHMpKTtcbn1cblxuLyoqXG4gKiBHZXRzIGRhdGEgdGhhdCBjYW4gYmUgdXNlZCB0byBtaWdyYXRlIGEgY2FsbCB0byBgVGVzdEJlZC5pbml0VGVzdEVudmlyb25tZW50YC5cbiAqIFRoZSByZXR1cm5lZCBgc3BhbmAgaXMgdXNlZCB0byBtYXJrIHRoZSB0ZXh0IHRoYXQgc2hvdWxkIGJlIHJlcGxhY2VkIHdoaWxlIHRoZSBgdGV4dGBcbiAqIGlzIHRoZSBjb2RlIHRoYXQgc2hvdWxkIGJlIGluc2VydGVkIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbml0VGVzdEVudmlyb25tZW50TGl0ZXJhbFJlcGxhY2VtZW50KFxuICAgIG5vZGU6IHRzLkNhbGxFeHByZXNzaW9uLCBwcmludGVyOiB0cy5QcmludGVyKSB7XG4gIGNvbnN0IGxpdGVyYWxQcm9wZXJ0aWVzOiB0cy5PYmplY3RMaXRlcmFsRWxlbWVudExpa2VbXSA9IFtdO1xuICBjb25zdCBsYXN0QXJnID0gbm9kZS5hcmd1bWVudHNbbm9kZS5hcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gIGxldCBzcGFuOiB7c3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIGxlbmd0aDogbnVtYmVyfTtcbiAgbGV0IHByZWZpeDogc3RyaW5nO1xuXG4gIGlmIChub2RlLmFyZ3VtZW50cy5sZW5ndGggPiAyKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24obGFzdEFyZykpIHtcbiAgICAgIC8vIElmIHRoZSBsYXN0IGFyZ3VtZW50IGlzIGEgZnVuY3Rpb24sIGFkZCB0aGUgZnVuY3Rpb24gYXMgdGhlIGBhb3RTdW1tYXJpZXNgIHByb3BlcnR5LlxuICAgICAgbGl0ZXJhbFByb3BlcnRpZXMucHVzaCh0cy5jcmVhdGVQcm9wZXJ0eUFzc2lnbm1lbnQoJ2FvdFN1bW1hcmllcycsIGxhc3RBcmcpKTtcbiAgICB9IGVsc2UgaWYgKHRzLmlzT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24obGFzdEFyZykpIHtcbiAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBhbiBvYmplY3QgbGl0ZXJhbCwgY29weSBvdmVyIGFsbCB0aGUgcHJvcGVydGllcy5cbiAgICAgIGxpdGVyYWxQcm9wZXJ0aWVzLnB1c2goLi4ubGFzdEFyZy5wcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBwcmVmaXggPSAnJztcbiAgICBzcGFuID0ge3N0YXJ0OiBsYXN0QXJnLmdldFN0YXJ0KCksIGVuZDogbGFzdEFyZy5nZXRFbmQoKSwgbGVuZ3RoOiBsYXN0QXJnLmdldFdpZHRoKCl9O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHN0YXJ0ID0gbGFzdEFyZy5nZXRFbmQoKTtcbiAgICBwcmVmaXggPSAnLCAnO1xuICAgIHNwYW4gPSB7c3RhcnQsIGVuZDogc3RhcnQsIGxlbmd0aDogMH07XG4gIH1cblxuICAvLyBGaW5hbGx5IHB1c2ggdGhlIHRlYXJkb3duIG9iamVjdCBzbyB0aGF0IGl0IGFwcGVhcnMgbGFzdC5cbiAgbGl0ZXJhbFByb3BlcnRpZXMucHVzaChjcmVhdGVUZWFyZG93bkFzc2lnbm1lbnQoKSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzcGFuLFxuICAgIHRleHQ6IHByZWZpeCArXG4gICAgICAgIHByaW50ZXIucHJpbnROb2RlKFxuICAgICAgICAgICAgdHMuRW1pdEhpbnQuVW5zcGVjaWZpZWQsIHRzLmNyZWF0ZU9iamVjdExpdGVyYWwobGl0ZXJhbFByb3BlcnRpZXMsIHRydWUpLFxuICAgICAgICAgICAgbm9kZS5nZXRTb3VyY2VGaWxlKCkpXG4gIH07XG59XG5cbi8qKiBNaWdyYXRlcyBhbiBvYmplY3QgbGl0ZXJhbCB0aGF0IGlzIHBhc3NlZCBpbnRvIGBjb25maWd1cmVUZXN0aW5nTW9kdWxlYCBvciBgd2l0aE1vZHVsZWAuICovXG5leHBvcnQgZnVuY3Rpb24gbWlncmF0ZVRlc3RNb2R1bGVNZXRhZGF0YUxpdGVyYWwobm9kZTogdHMuT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24pOlxuICAgIHRzLk9iamVjdExpdGVyYWxFeHByZXNzaW9uIHtcbiAgcmV0dXJuIHRzLmNyZWF0ZU9iamVjdExpdGVyYWwoXG4gICAgICBbLi4ubm9kZS5wcm9wZXJ0aWVzLCBjcmVhdGVUZWFyZG93bkFzc2lnbm1lbnQoKV0sIG5vZGUucHJvcGVydGllcy5sZW5ndGggPiAwKTtcbn1cblxuLyoqIFJldHVybnMgd2hldGhlciBhIHByb3BlcnR5IGFjY2VzcyBwb2ludHMgdG8gYFRlc3RCZWRgLiAqL1xuZnVuY3Rpb24gaXNUZXN0QmVkQWNjZXNzKHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlciwgbm9kZTogdHMuUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKTogYm9vbGVhbiB7XG4gIGNvbnN0IHN5bWJvbE5hbWUgPSB0eXBlQ2hlY2tlci5nZXRUeXBlQXRMb2NhdGlvbihub2RlLmV4cHJlc3Npb24pPy5nZXRTeW1ib2woKT8uZ2V0TmFtZSgpO1xuICByZXR1cm4gc3ltYm9sTmFtZSA9PT0gJ1Rlc3RCZWQnIHx8IHN5bWJvbE5hbWUgPT09ICdUZXN0QmVkU3RhdGljJztcbn1cblxuLyoqIFdoZXRoZXIgYSBjYWxsIHRvIGBpbml0VGVzdEVudmlyb25tZW50YCBzaG91bGQgYmUgbWlncmF0ZWQuICovXG5mdW5jdGlvbiBzaG91bGRNaWdyYXRlSW5pdFRlc3RFbnZpcm9ubWVudChub2RlOiB0cy5DYWxsRXhwcmVzc2lvbik6IGJvb2xlYW4ge1xuICAvLyBJZiB0aGVyZSBpcyBubyB0aGlyZCBhcmd1bWVudCwgd2UgZGVmaW5pdGVseSBoYXZlIHRvIG1pZ3JhdGUgaXQuXG4gIGlmIChub2RlLmFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYSB0eXBlIGVycm9yIHNvIHdlIHNob3VsZG4ndCBtZXNzIHdpdGggaXQuXG4gIGlmIChub2RlLmFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gT3RoZXJ3aXNlIHdlIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGUgYHRlYXJkb3duYCBmbGFnIGlzIHNldCBvbiB0aGUgbGFzdCBhcmd1bWVudC5cbiAgY29uc3QgbGFzdEFyZyA9IG5vZGUuYXJndW1lbnRzWzJdO1xuXG4gIC8vIE5vdGU6IHRoZSBjaGVja3MgYmVsb3cgd2lsbCBpZGVudGlmeSBzb21ldGhpbmcgbGlrZSBgaW5pdFRlc3RFbnZpcm9ubWVudCguLi4sIC4uLiwge30pYCxcbiAgLy8gYnV0IHRoZXknbGwgaWdub3JlIGEgdmFyaWFibGUgYmVpbmcgcGFzc2VkIGluIGFzIHRoZSBsYXN0IGFyZ3VtZW50IGxpa2UgYGNvbnN0IGNvbmZpZyA9IHt9O1xuICAvLyBpbml0VGVzdEVudmlyb25tZW50KC4uLiwgLi4uLCBjb25maWcpYC4gV2hpbGUgd2UgY2FuIHJlc29sdmUgdGhlIHZhcmlhYmxlIHRvIGl0cyBkZWNsYXJhdGlvblxuICAvLyB1c2luZyBgdHlwZUNoZWNrZXIuZ2V0VHlwZUF0TG9jYXRpb24obGFzdEFyZykuZ2V0U3ltYm9sKCk/LnZhbHVlRGVjbGFyYXRpb25gLCB3ZSBkZWxpYmVyYXRlbHlcbiAgLy8gZG9uJ3QsIGJlY2F1c2UgaXQgaW50cm9kdWNlcyBzb21lIGNvbXBsZXhpdHkgYW5kIHdlIG1heSBlbmQgdXAgYnJlYWtpbmcgdXNlciBjb2RlLiBFLmcuXG4gIC8vIHRoZSBgY29uZmlnYCBmcm9tIHRoZSBleGFtcGxlIGFib3ZlIG1heSBiZSBwYXNzZWQgaW4gdG8gb3RoZXIgZnVuY3Rpb25zIG9yIHRoZSBgdGVhcmRvd25gXG4gIC8vIGZsYWcgY291bGQgYmUgYWRkZWQgbGF0ZXIgb24gYnkgYSBmdW5jdGlvbiBjYWxsLlxuXG4gIC8vIElmIHRoZSBhcmd1bWVudCBpcyBhbiBvYmplY3QgbGl0ZXJhbCBhbmQgdGhlcmUgYXJlIG5vXG4gIC8vIHByb3BlcnRpZXMgY2FsbGVkIGB0ZWFyZG93bmAsIHdlIGhhdmUgdG8gbWlncmF0ZSBpdC5cbiAgaWYgKGlzT2JqZWN0TGl0ZXJhbFdpdGhvdXRUZWFyZG93bihsYXN0QXJnKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gSWYgdGhlIGxhc3QgYXJndW1lbnQgaXMgYW4gYGFvdFN1bW1hcmllc2AgZnVuY3Rpb24sIHdlIGFsc28gaGF2ZSB0byBtaWdyYXRlLlxuICBpZiAoaXNGdW5jdGlvbihsYXN0QXJnKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gT3RoZXJ3aXNlIGRvbid0IG1pZ3JhdGUgaWYgd2UgY291bGRuJ3QgaWRlbnRpZnkgdGhlIGxhc3QgYXJndW1lbnQuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGEgY2FsbCB0byBhIG1vZHVsZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9uIHNob3VsZCBiZSBtaWdyYXRlZC4gVGhpcyBjb3ZlcnNcbiAqIGBUZXN0QmVkLmNvbmZpZ3VyZVRlc3RpbmdNb2R1bGVgIGFuZCBgd2l0aE1vZHVsZWAgc2luY2UgdGhleSBib3RoIGFjY2VwdCBgVGVzdE1vZHVsZU1ldGFkYXRhYFxuICogYXMgdGhlaXIgZmlyc3QgYXJndW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHNob3VsZE1pZ3JhdGVNb2R1bGVDb25maWdDYWxsKG5vZGU6IHRzLkNhbGxFeHByZXNzaW9uKTogbm9kZSBpcyB0cy5DYWxsRXhwcmVzc2lvbiZcbiAgICB7YXJndW1lbnRzOiBbdHMuT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24sIC4uLnRzLkV4cHJlc3Npb25bXV19IHtcbiAgcmV0dXJuIG5vZGUuYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgaXNPYmplY3RMaXRlcmFsV2l0aG91dFRlYXJkb3duKG5vZGUuYXJndW1lbnRzWzBdKTtcbn1cblxuLyoqIFJldHVybnMgd2hldGhlciBhIG5vZGUgaXMgYSBmdW5jdGlvbiBsaXRlcmFsLiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbihub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyB0cy5BcnJvd0Z1bmN0aW9ufHRzLkZ1bmN0aW9uRXhwcmVzc2lvbnxcbiAgICB0cy5GdW5jdGlvbkRlY2xhcmF0aW9uIHtcbiAgcmV0dXJuIHRzLmlzQXJyb3dGdW5jdGlvbihub2RlKSB8fCB0cy5pc0Z1bmN0aW9uRXhwcmVzc2lvbihub2RlKSB8fFxuICAgICAgdHMuaXNGdW5jdGlvbkRlY2xhcmF0aW9uKG5vZGUpO1xufVxuXG4vKiogQ2hlY2tzIHdoZXRoZXIgYSBub2RlIGlzIGFuIG9iamVjdCBsaXRlcmFsIHRoYXQgZG9lc24ndCBjb250YWluIGEgcHJvcGVydHkgY2FsbGVkIGB0ZWFyZG93bmAuICovXG5mdW5jdGlvbiBpc09iamVjdExpdGVyYWxXaXRob3V0VGVhcmRvd24obm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgdHMuT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24ge1xuICByZXR1cm4gdHMuaXNPYmplY3RMaXRlcmFsRXhwcmVzc2lvbihub2RlKSAmJiAhbm9kZS5wcm9wZXJ0aWVzLmZpbmQocHJvcCA9PiB7XG4gICAgcmV0dXJuIHByb3AubmFtZT8uZ2V0VGV4dCgpID09PSAndGVhcmRvd24nO1xuICB9KTtcbn1cblxuLyoqIENyZWF0ZXMgYSB0ZWFyZG93biBjb25maWd1cmF0aW9uIHByb3BlcnR5IGFzc2lnbm1lbnQuICovXG5mdW5jdGlvbiBjcmVhdGVUZWFyZG93bkFzc2lnbm1lbnQoKTogdHMuUHJvcGVydHlBc3NpZ25tZW50IHtcbiAgLy8gYHRlYXJkb3duOiB7ZGVzdHJveUFmdGVyRWFjaDogZmFsc2V9YFxuICByZXR1cm4gdHMuY3JlYXRlUHJvcGVydHlBc3NpZ25tZW50KFxuICAgICAgJ3RlYXJkb3duJyxcbiAgICAgIHRzLmNyZWF0ZU9iamVjdExpdGVyYWwoW3RzLmNyZWF0ZVByb3BlcnR5QXNzaWdubWVudCgnZGVzdHJveUFmdGVyRWFjaCcsIHRzLmNyZWF0ZUZhbHNlKCkpXSkpO1xufVxuXG4vKiogU29ydHMgYW4gYXJyYXkgb2YgQVNUIG5vZGVzIGluIHJldmVyc2Ugc291cmNlIG9yZGVyLiAqL1xuZnVuY3Rpb24gc29ydEluUmV2ZXJzZVNvdXJjZU9yZGVyPFQgZXh0ZW5kcyB0cy5Ob2RlPihub2RlczogVFtdKTogVFtdIHtcbiAgcmV0dXJuIG5vZGVzLnNvcnQoKGEsIGIpID0+IGIuZ2V0RW5kKCkgLSBhLmdldEVuZCgpKTtcbn1cbiJdfQ==
|