@angular/core 16.0.0-next.4 → 16.0.0-next.5
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/{esm2020 → esm2022}/src/application_init.mjs +3 -3
- package/{esm2020 → esm2022}/src/application_module.mjs +4 -4
- package/esm2022/src/application_ref.mjs +908 -0
- package/{esm2020 → esm2022}/src/change_detection/change_detector_ref.mjs +6 -6
- package/esm2022/src/change_detection/differs/iterable_differs.mjs +81 -0
- package/esm2022/src/change_detection/differs/keyvalue_differs.mjs +74 -0
- package/{esm2020 → esm2022}/src/console.mjs +3 -3
- package/{esm2020 → esm2022}/src/core.mjs +2 -1
- package/esm2022/src/core_private_export.mjs +39 -0
- package/esm2022/src/core_reactivity_export_internal.mjs +12 -0
- package/esm2022/src/di/contextual.mjs +54 -0
- package/esm2022/src/di/index.mjs +29 -0
- package/esm2022/src/di/injector.mjs +62 -0
- package/esm2022/src/di/injector_compatibility.mjs +239 -0
- package/esm2022/src/di/provider_collection.mjs +279 -0
- package/esm2022/src/di/reflective_injector.mjs +311 -0
- package/esm2022/src/hydration/annotate.mjs +426 -0
- package/esm2022/src/hydration/api.mjs +143 -0
- package/esm2022/src/hydration/cleanup.mjs +103 -0
- package/esm2022/src/hydration/node_lookup_utils.mjs +273 -0
- package/esm2022/src/hydration/utils.mjs +219 -0
- package/esm2022/src/initial_render_pending_tasks.mjs +75 -0
- package/{esm2020 → esm2022}/src/linker/compiler.mjs +5 -5
- package/esm2022/src/linker/component_factory_resolver.mjs +42 -0
- package/{esm2020 → esm2022}/src/linker/destroy_ref.mjs +11 -11
- package/{esm2020 → esm2022}/src/linker/element_ref.mjs +6 -6
- package/esm2022/src/linker/query_list.mjs +169 -0
- package/{esm2020 → esm2022}/src/linker/template_ref.mjs +6 -6
- package/{esm2020 → esm2022}/src/linker/view_container_ref.mjs +6 -6
- package/esm2022/src/metadata/di.mjs +69 -0
- package/{esm2020 → esm2022}/src/metadata/directives.mjs +1 -1
- package/{esm2020 → esm2022}/src/metadata/do_boostrap.mjs +1 -1
- package/{esm2020 → esm2022}/src/metadata/ng_module.mjs +2 -2
- package/esm2022/src/metadata.mjs +18 -0
- package/{esm2020 → esm2022}/src/render/api.mjs +6 -6
- package/esm2022/src/render3/component_ref.mjs +386 -0
- package/{esm2020 → esm2022}/src/render3/context_discovery.mjs +1 -1
- package/esm2022/src/render3/features/standalone_feature.mjs +70 -0
- package/{esm2020 → esm2022}/src/render3/instructions/element.mjs +2 -2
- package/esm2022/src/render3/instructions/listener.mjs +244 -0
- package/esm2022/src/render3/instructions/mark_view_dirty.mjs +35 -0
- package/esm2022/src/render3/instructions/shared.mjs +1681 -0
- package/{esm2020 → esm2022}/src/render3/instructions/styling.mjs +5 -2
- package/esm2022/src/render3/interfaces/view.mjs +49 -0
- package/esm2022/src/render3/jit/module.mjs +531 -0
- package/esm2022/src/render3/node_manipulation.mjs +960 -0
- package/esm2022/src/render3/reactive_lview_consumer.mjs +80 -0
- package/esm2022/src/render3/reactivity/effect.mjs +67 -0
- package/{esm2020 → esm2022}/src/render3/util/change_detection_utils.mjs +2 -2
- package/esm2022/src/render3/view_ref.mjs +307 -0
- package/{esm2020 → esm2022}/src/sanitization/sanitizer.mjs +7 -7
- package/esm2022/src/signals/index.mjs +15 -0
- package/esm2022/src/signals/src/api.mjs +47 -0
- package/esm2022/src/signals/src/computed.mjs +139 -0
- package/esm2022/src/signals/src/graph.mjs +165 -0
- package/esm2022/src/signals/src/signal.mjs +75 -0
- package/esm2022/src/signals/src/watch.mjs +62 -0
- package/esm2022/src/signals/src/weak_ref.mjs +35 -0
- package/{esm2020 → esm2022}/src/testability/testability.mjs +5 -5
- package/esm2022/src/transfer_state.mjs +153 -0
- package/{esm2020 → esm2022}/src/version.mjs +1 -1
- package/{esm2020 → esm2022}/testing/src/logger.mjs +4 -4
- package/{esm2020 → esm2022}/testing/src/ng_zone_mock.mjs +4 -4
- package/{esm2020 → esm2022}/testing/src/test_bed.mjs +2 -2
- package/{fesm2020 → fesm2022}/core.mjs +869 -639
- package/fesm2022/core.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/testing.mjs +406 -124
- package/fesm2022/testing.mjs.map +1 -0
- package/index.d.ts +334 -187
- package/package.json +8 -16
- package/schematics/migrations/guard-and-resolve-interfaces/bundle.js +694 -0
- package/schematics/migrations/guard-and-resolve-interfaces/bundle.js.map +7 -0
- package/schematics/migrations/{router-link-with-href → remove-module-id}/bundle.js +149 -151
- package/schematics/migrations/remove-module-id/bundle.js.map +7 -0
- package/schematics/migrations.json +8 -8
- package/schematics/ng-generate/standalone-migration/bundle.js +617 -251
- package/schematics/ng-generate/standalone-migration/bundle.js.map +2 -2
- package/testing/index.d.ts +1 -1
- package/esm2020/src/application_ref.mjs +0 -907
- package/esm2020/src/change_detection/differs/iterable_differs.mjs +0 -81
- package/esm2020/src/change_detection/differs/keyvalue_differs.mjs +0 -74
- package/esm2020/src/core_private_export.mjs +0 -38
- package/esm2020/src/core_reactivity_export_internal.mjs +0 -9
- package/esm2020/src/di/contextual.mjs +0 -37
- package/esm2020/src/di/index.mjs +0 -29
- package/esm2020/src/di/injector.mjs +0 -62
- package/esm2020/src/di/injector_compatibility.mjs +0 -236
- package/esm2020/src/di/provider_collection.mjs +0 -279
- package/esm2020/src/di/reflective_injector.mjs +0 -311
- package/esm2020/src/hydration/annotate.mjs +0 -384
- package/esm2020/src/hydration/api.mjs +0 -141
- package/esm2020/src/hydration/cleanup.mjs +0 -101
- package/esm2020/src/hydration/node_lookup_utils.mjs +0 -275
- package/esm2020/src/hydration/utils.mjs +0 -219
- package/esm2020/src/linker/component_factory_resolver.mjs +0 -42
- package/esm2020/src/linker/query_list.mjs +0 -169
- package/esm2020/src/metadata/di.mjs +0 -108
- package/esm2020/src/metadata.mjs +0 -18
- package/esm2020/src/render3/component_ref.mjs +0 -377
- package/esm2020/src/render3/features/standalone_feature.mjs +0 -70
- package/esm2020/src/render3/instructions/listener.mjs +0 -243
- package/esm2020/src/render3/instructions/shared.mjs +0 -1696
- package/esm2020/src/render3/interfaces/view.mjs +0 -47
- package/esm2020/src/render3/jit/module.mjs +0 -544
- package/esm2020/src/render3/node_manipulation.mjs +0 -961
- package/esm2020/src/render3/view_ref.mjs +0 -306
- package/esm2020/src/signals/index.mjs +0 -16
- package/esm2020/src/signals/src/api.mjs +0 -46
- package/esm2020/src/signals/src/computed.mjs +0 -142
- package/esm2020/src/signals/src/effect.mjs +0 -67
- package/esm2020/src/signals/src/graph.mjs +0 -114
- package/esm2020/src/signals/src/signal.mjs +0 -78
- package/esm2020/src/signals/src/watch.mjs +0 -54
- package/esm2020/src/signals/src/weak_ref.mjs +0 -27
- package/esm2020/src/transfer_state.mjs +0 -153
- package/fesm2015/core.mjs +0 -30473
- package/fesm2015/core.mjs.map +0 -1
- package/fesm2015/testing.mjs +0 -26417
- package/fesm2015/testing.mjs.map +0 -1
- package/fesm2020/core.mjs.map +0 -1
- package/fesm2020/testing.mjs.map +0 -1
- package/schematics/migrations/relative-link-resolution/bundle.js +0 -283
- package/schematics/migrations/relative-link-resolution/bundle.js.map +0 -7
- package/schematics/migrations/router-link-with-href/bundle.js.map +0 -7
- /package/{esm2020 → esm2022}/core.mjs +0 -0
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/src/application_config.mjs +0 -0
- /package/{esm2020 → esm2022}/src/application_tokens.mjs +0 -0
- /package/{esm2020 → esm2022}/src/change_detection/change_detection.mjs +0 -0
- /package/{esm2020 → esm2022}/src/change_detection/constants.mjs +0 -0
- /package/{esm2020 → esm2022}/src/change_detection/differs/default_iterable_differ.mjs +0 -0
- /package/{esm2020 → esm2022}/src/change_detection/differs/default_keyvalue_differ.mjs +0 -0
- /package/{esm2020 → esm2022}/src/change_detection/pipe_transform.mjs +0 -0
- /package/{esm2020 → esm2022}/src/change_detection.mjs +0 -0
- /package/{esm2020 → esm2022}/src/compiler/compiler_facade.mjs +0 -0
- /package/{esm2020 → esm2022}/src/compiler/compiler_facade_interface.mjs +0 -0
- /package/{esm2020 → esm2022}/src/core_reactivity_export.mjs +0 -0
- /package/{esm2020 → esm2022}/src/core_render3_private_export.mjs +0 -0
- /package/{esm2020 → esm2022}/src/debug/debug_node.mjs +0 -0
- /package/{esm2020 → esm2022}/src/di/create_injector.mjs +0 -0
- /package/{esm2020 → esm2022}/src/di/forward_ref.mjs +0 -0
- /package/{esm2020 → esm2022}/src/di/initializer_token.mjs +0 -0
- /package/{esm2020 → esm2022}/src/di/inject_switch.mjs +0 -0
- /package/{esm2020 → esm2022}/src/di/injectable.mjs +0 -0
- /package/{esm2020 → esm2022}/src/di/injection_token.mjs +0 -0
- /package/{esm2020 → esm2022}/src/di/injector_marker.mjs +0 -0
- /package/{esm2020 → esm2022}/src/di/injector_token.mjs +0 -0
- /package/{esm2020 → esm2022}/src/di/interface/defs.mjs +0 -0
- /package/{esm2020 → esm2022}/src/di/interface/injector.mjs +0 -0
- /package/{esm2020 → esm2022}/src/di/interface/provider.mjs +0 -0
- /package/{esm2020 → esm2022}/src/di/internal_tokens.mjs +0 -0
- /package/{esm2020 → esm2022}/src/di/jit/environment.mjs +0 -0
- /package/{esm2020 → esm2022}/src/di/jit/injectable.mjs +0 -0
- /package/{esm2020 → esm2022}/src/di/jit/util.mjs +0 -0
- /package/{esm2020 → esm2022}/src/di/metadata.mjs +0 -0
- /package/{esm2020 → esm2022}/src/di/metadata_attr.mjs +0 -0
- /package/{esm2020 → esm2022}/src/di/null_injector.mjs +0 -0
- /package/{esm2020 → esm2022}/src/di/provider_token.mjs +0 -0
- /package/{esm2020 → esm2022}/src/di/r3_injector.mjs +0 -0
- /package/{esm2020 → esm2022}/src/di/reflective_errors.mjs +0 -0
- /package/{esm2020 → esm2022}/src/di/reflective_key.mjs +0 -0
- /package/{esm2020 → esm2022}/src/di/reflective_provider.mjs +0 -0
- /package/{esm2020 → esm2022}/src/di/scope.mjs +0 -0
- /package/{esm2020 → esm2022}/src/di.mjs +0 -0
- /package/{esm2020 → esm2022}/src/error_details_base_url.mjs +0 -0
- /package/{esm2020 → esm2022}/src/error_handler.mjs +0 -0
- /package/{esm2020 → esm2022}/src/errors.mjs +0 -0
- /package/{esm2020 → esm2022}/src/event_emitter.mjs +0 -0
- /package/{esm2020 → esm2022}/src/hydration/compression.mjs +0 -0
- /package/{esm2020 → esm2022}/src/hydration/error_handling.mjs +0 -0
- /package/{esm2020 → esm2022}/src/hydration/interfaces.mjs +0 -0
- /package/{esm2020 → esm2022}/src/hydration/skip_hydration.mjs +0 -0
- /package/{esm2020 → esm2022}/src/hydration/tokens.mjs +0 -0
- /package/{esm2020 → esm2022}/src/hydration/views.mjs +0 -0
- /package/{esm2020 → esm2022}/src/i18n/locale_data_api.mjs +0 -0
- /package/{esm2020 → esm2022}/src/i18n/locale_en.mjs +0 -0
- /package/{esm2020 → esm2022}/src/i18n/localization.mjs +0 -0
- /package/{esm2020 → esm2022}/src/i18n/tokens.mjs +0 -0
- /package/{esm2020 → esm2022}/src/interface/lifecycle_hooks.mjs +0 -0
- /package/{esm2020 → esm2022}/src/interface/simple_change.mjs +0 -0
- /package/{esm2020 → esm2022}/src/interface/type.mjs +0 -0
- /package/{esm2020 → esm2022}/src/linker/component_factory.mjs +0 -0
- /package/{esm2020 → esm2022}/src/linker/ng_module_factory.mjs +0 -0
- /package/{esm2020 → esm2022}/src/linker/ng_module_factory_loader.mjs +0 -0
- /package/{esm2020 → esm2022}/src/linker/ng_module_factory_loader_impl.mjs +0 -0
- /package/{esm2020 → esm2022}/src/linker/ng_module_registration.mjs +0 -0
- /package/{esm2020 → esm2022}/src/linker/view_ref.mjs +0 -0
- /package/{esm2020 → esm2022}/src/linker.mjs +0 -0
- /package/{esm2020 → esm2022}/src/metadata/ng_module_def.mjs +0 -0
- /package/{esm2020 → esm2022}/src/metadata/resource_loading.mjs +0 -0
- /package/{esm2020 → esm2022}/src/metadata/schema.mjs +0 -0
- /package/{esm2020 → esm2022}/src/metadata/view.mjs +0 -0
- /package/{esm2020 → esm2022}/src/platform_core_providers.mjs +0 -0
- /package/{esm2020 → esm2022}/src/r3_symbols.mjs +0 -0
- /package/{esm2020 → esm2022}/src/reflection/platform_reflection_capabilities.mjs +0 -0
- /package/{esm2020 → esm2022}/src/reflection/reflection_capabilities.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render/api_flags.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/assert.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/bindings.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/collect_native_nodes.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/component.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/definition.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/definition_factory.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/di.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/di_setup.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/errors.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/errors_di.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/features/copy_definition_feature.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/features/host_directives_feature.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/features/inherit_definition_feature.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/features/ng_onchanges_feature.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/features/providers_feature.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/fields.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/global_utils_api.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/hooks.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/i18n/i18n_apply.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/i18n/i18n_debug.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/i18n/i18n_insert_before_index.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/i18n/i18n_locale_id.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/i18n/i18n_parse.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/i18n/i18n_postprocess.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/i18n/i18n_tree_shaking.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/i18n/i18n_util.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/index.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/instructions/advance.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/instructions/all.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/instructions/attribute.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/instructions/attribute_interpolation.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/instructions/change_detection.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/instructions/class_map_interpolation.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/instructions/di.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/instructions/di_attr.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/instructions/element_container.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/instructions/element_validation.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/instructions/get_current_view.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/instructions/host_property.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/instructions/i18n.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/instructions/i18n_icu_container_visitor.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/instructions/interpolation.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/instructions/namespace.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/instructions/next_context.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/instructions/projection.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/instructions/property.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/instructions/property_interpolation.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/instructions/storage.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/instructions/style_map_interpolation.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/instructions/style_prop_interpolation.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/instructions/template.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/instructions/text.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/instructions/text_interpolation.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/interfaces/container.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/interfaces/context.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/interfaces/definition.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/interfaces/document.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/interfaces/i18n.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/interfaces/injector.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/interfaces/lview_tracking.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/interfaces/node.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/interfaces/projection.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/interfaces/public_definitions.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/interfaces/query.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/interfaces/renderer.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/interfaces/renderer_dom.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/interfaces/sanitization.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/interfaces/styling.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/interfaces/type_checks.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/jit/directive.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/jit/environment.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/jit/jit_options.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/jit/module_patch.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/jit/partial.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/jit/pipe.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/jit/util.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/metadata.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/namespaces.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/ng_module_ref.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/node_assert.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/node_manipulation_i18n.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/node_selector_matcher.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/pipe.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/profiler.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/pure_function.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/query.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/state.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/styling/class_differ.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/styling/static_styling.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/styling/style_binding_list.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/styling/styling_parser.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/tokens.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/util/attrs_utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/util/discovery_utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/util/global_utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/util/injector_utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/util/misc_utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/util/stringify_utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/util/view_traversal_utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/util/view_utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/render3/view_engine_compatibility_prebound.mjs +0 -0
- /package/{esm2020 → esm2022}/src/sanitization/bypass.mjs +0 -0
- /package/{esm2020 → esm2022}/src/sanitization/html_sanitizer.mjs +0 -0
- /package/{esm2020 → esm2022}/src/sanitization/iframe_attrs_validation.mjs +0 -0
- /package/{esm2020 → esm2022}/src/sanitization/inert_body.mjs +0 -0
- /package/{esm2020 → esm2022}/src/sanitization/sanitization.mjs +0 -0
- /package/{esm2020 → esm2022}/src/sanitization/security.mjs +0 -0
- /package/{esm2020 → esm2022}/src/sanitization/url_sanitizer.mjs +0 -0
- /package/{esm2020 → esm2022}/src/signals/src/untracked.mjs +0 -0
- /package/{esm2020 → esm2022}/src/util/array_utils.mjs +0 -0
- /package/{esm2020 → esm2022}/src/util/assert.mjs +0 -0
- /package/{esm2020 → esm2022}/src/util/char_code.mjs +0 -0
- /package/{esm2020 → esm2022}/src/util/closure.mjs +0 -0
- /package/{esm2020 → esm2022}/src/util/coercion.mjs +0 -0
- /package/{esm2020 → esm2022}/src/util/comparison.mjs +0 -0
- /package/{esm2020 → esm2022}/src/util/decorators.mjs +0 -0
- /package/{esm2020 → esm2022}/src/util/dom.mjs +0 -0
- /package/{esm2020 → esm2022}/src/util/empty.mjs +0 -0
- /package/{esm2020 → esm2022}/src/util/errors.mjs +0 -0
- /package/{esm2020 → esm2022}/src/util/global.mjs +0 -0
- /package/{esm2020 → esm2022}/src/util/is_dev_mode.mjs +0 -0
- /package/{esm2020 → esm2022}/src/util/iterable.mjs +0 -0
- /package/{esm2020 → esm2022}/src/util/lang.mjs +0 -0
- /package/{esm2020 → esm2022}/src/util/microtask.mjs +0 -0
- /package/{esm2020 → esm2022}/src/util/ng_dev_mode.mjs +0 -0
- /package/{esm2020 → esm2022}/src/util/ng_i18n_closure_mode.mjs +0 -0
- /package/{esm2020 → esm2022}/src/util/ng_jit_mode.mjs +0 -0
- /package/{esm2020 → esm2022}/src/util/ng_reflect.mjs +0 -0
- /package/{esm2020 → esm2022}/src/util/noop.mjs +0 -0
- /package/{esm2020 → esm2022}/src/util/property.mjs +0 -0
- /package/{esm2020 → esm2022}/src/util/raf.mjs +0 -0
- /package/{esm2020 → esm2022}/src/util/security/trusted_type_defs.mjs +0 -0
- /package/{esm2020 → esm2022}/src/util/security/trusted_types.mjs +0 -0
- /package/{esm2020 → esm2022}/src/util/security/trusted_types_bypass.mjs +0 -0
- /package/{esm2020 → esm2022}/src/util/stringify.mjs +0 -0
- /package/{esm2020 → esm2022}/src/view/provider_flags.mjs +0 -0
- /package/{esm2020 → esm2022}/src/zone/async-stack-tagging.mjs +0 -0
- /package/{esm2020 → esm2022}/src/zone/ng_zone.mjs +0 -0
- /package/{esm2020 → esm2022}/src/zone.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/index.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/src/async.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/src/component_fixture.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/src/fake_async.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/src/metadata_override.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/src/metadata_overrider.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/src/resolvers.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/src/styling.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/src/test_bed_common.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/src/test_bed_compiler.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/src/test_hooks.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/src/testing.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/src/testing_internal.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/testing.mjs +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Angular v16.0.0-next.
|
|
2
|
+
* @license Angular v16.0.0-next.5
|
|
3
3
|
* (c) 2010-2022 Google LLC. https://angular.io/
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -620,6 +620,9 @@ const SOURCE = '__source';
|
|
|
620
620
|
* - Injector instance: Use the injector for resolution.
|
|
621
621
|
*/
|
|
622
622
|
let _currentInjector = undefined;
|
|
623
|
+
function getCurrentInjector() {
|
|
624
|
+
return _currentInjector;
|
|
625
|
+
}
|
|
623
626
|
function setCurrentInjector(injector) {
|
|
624
627
|
const former = _currentInjector;
|
|
625
628
|
_currentInjector = injector;
|
|
@@ -628,7 +631,7 @@ function setCurrentInjector(injector) {
|
|
|
628
631
|
function injectInjectorOnly(token, flags = InjectFlags.Default) {
|
|
629
632
|
if (_currentInjector === undefined) {
|
|
630
633
|
throw new RuntimeError(-203 /* RuntimeErrorCode.MISSING_INJECTION_CONTEXT */, ngDevMode &&
|
|
631
|
-
`inject() must be called from an injection context such as a constructor, a factory function, a field initializer, or a function used with \`
|
|
634
|
+
`inject() must be called from an injection context such as a constructor, a factory function, a field initializer, or a function used with \`runInInjectionContext\`.`);
|
|
632
635
|
}
|
|
633
636
|
else if (_currentInjector === null) {
|
|
634
637
|
return injectRootLimpMode(token, undefined, flags);
|
|
@@ -1971,6 +1974,8 @@ const ID = 20;
|
|
|
1971
1974
|
const EMBEDDED_VIEW_INJECTOR = 21;
|
|
1972
1975
|
const ON_DESTROY_HOOKS = 22;
|
|
1973
1976
|
const HYDRATION = 23;
|
|
1977
|
+
const REACTIVE_TEMPLATE_CONSUMER = 24;
|
|
1978
|
+
const REACTIVE_HOST_BINDING_CONSUMER = 25;
|
|
1974
1979
|
/**
|
|
1975
1980
|
* Size of LView's header. Necessary to adjust for it when setting slots.
|
|
1976
1981
|
*
|
|
@@ -1978,7 +1983,7 @@ const HYDRATION = 23;
|
|
|
1978
1983
|
* instruction index into `LView` index. All other indexes should be in the `LView` index space and
|
|
1979
1984
|
* there should be no need to refer to `HEADER_OFFSET` anywhere else.
|
|
1980
1985
|
*/
|
|
1981
|
-
const HEADER_OFFSET =
|
|
1986
|
+
const HEADER_OFFSET = 26;
|
|
1982
1987
|
// Note: This hack is necessary so we don't erroneously get a circular dependency
|
|
1983
1988
|
// failure based on types.
|
|
1984
1989
|
const unusedValueExportToPlacateAjd$4 = 1;
|
|
@@ -4354,126 +4359,6 @@ function makePropDecorator(name, props, parentClass, additionalProcessing) {
|
|
|
4354
4359
|
*/
|
|
4355
4360
|
const Attribute = makeParamDecorator('Attribute', (attributeName) => ({ attributeName, __NG_ELEMENT_ID__: () => ɵɵinjectAttribute(attributeName) }));
|
|
4356
4361
|
|
|
4357
|
-
/**
|
|
4358
|
-
* Creates a token that can be used in a DI Provider.
|
|
4359
|
-
*
|
|
4360
|
-
* Use an `InjectionToken` whenever the type you are injecting is not reified (does not have a
|
|
4361
|
-
* runtime representation) such as when injecting an interface, callable type, array or
|
|
4362
|
-
* parameterized type.
|
|
4363
|
-
*
|
|
4364
|
-
* `InjectionToken` is parameterized on `T` which is the type of object which will be returned by
|
|
4365
|
-
* the `Injector`. This provides an additional level of type safety.
|
|
4366
|
-
*
|
|
4367
|
-
* ```
|
|
4368
|
-
* interface MyInterface {...}
|
|
4369
|
-
* const myInterface = injector.get(new InjectionToken<MyInterface>('SomeToken'));
|
|
4370
|
-
* // myInterface is inferred to be MyInterface.
|
|
4371
|
-
* ```
|
|
4372
|
-
*
|
|
4373
|
-
* When creating an `InjectionToken`, you can optionally specify a factory function which returns
|
|
4374
|
-
* (possibly by creating) a default value of the parameterized type `T`. This sets up the
|
|
4375
|
-
* `InjectionToken` using this factory as a provider as if it was defined explicitly in the
|
|
4376
|
-
* application's root injector. If the factory function, which takes zero arguments, needs to inject
|
|
4377
|
-
* dependencies, it can do so using the `inject` function.
|
|
4378
|
-
* As you can see in the Tree-shakable InjectionToken example below.
|
|
4379
|
-
*
|
|
4380
|
-
* Additionally, if a `factory` is specified you can also specify the `providedIn` option, which
|
|
4381
|
-
* overrides the above behavior and marks the token as belonging to a particular `@NgModule` (note:
|
|
4382
|
-
* this option is now deprecated). As mentioned above, `'root'` is the default value for
|
|
4383
|
-
* `providedIn`.
|
|
4384
|
-
*
|
|
4385
|
-
* The `providedIn: NgModule` and `providedIn: 'any'` options are deprecated.
|
|
4386
|
-
*
|
|
4387
|
-
* @usageNotes
|
|
4388
|
-
* ### Basic Examples
|
|
4389
|
-
*
|
|
4390
|
-
* ### Plain InjectionToken
|
|
4391
|
-
*
|
|
4392
|
-
* {@example core/di/ts/injector_spec.ts region='InjectionToken'}
|
|
4393
|
-
*
|
|
4394
|
-
* ### Tree-shakable InjectionToken
|
|
4395
|
-
*
|
|
4396
|
-
* {@example core/di/ts/injector_spec.ts region='ShakableInjectionToken'}
|
|
4397
|
-
*
|
|
4398
|
-
*
|
|
4399
|
-
* @publicApi
|
|
4400
|
-
*/
|
|
4401
|
-
class InjectionToken {
|
|
4402
|
-
/**
|
|
4403
|
-
* @param _desc Description for the token,
|
|
4404
|
-
* used only for debugging purposes,
|
|
4405
|
-
* it should but does not need to be unique
|
|
4406
|
-
* @param options Options for the token's usage, as described above
|
|
4407
|
-
*/
|
|
4408
|
-
constructor(_desc, options) {
|
|
4409
|
-
this._desc = _desc;
|
|
4410
|
-
/** @internal */
|
|
4411
|
-
this.ngMetadataName = 'InjectionToken';
|
|
4412
|
-
this.ɵprov = undefined;
|
|
4413
|
-
if (typeof options == 'number') {
|
|
4414
|
-
(typeof ngDevMode === 'undefined' || ngDevMode) &&
|
|
4415
|
-
assertLessThan(options, 0, 'Only negative numbers are supported here');
|
|
4416
|
-
// This is a special hack to assign __NG_ELEMENT_ID__ to this instance.
|
|
4417
|
-
// See `InjectorMarkers`
|
|
4418
|
-
this.__NG_ELEMENT_ID__ = options;
|
|
4419
|
-
}
|
|
4420
|
-
else if (options !== undefined) {
|
|
4421
|
-
this.ɵprov = ɵɵdefineInjectable({
|
|
4422
|
-
token: this,
|
|
4423
|
-
providedIn: options.providedIn || 'root',
|
|
4424
|
-
factory: options.factory,
|
|
4425
|
-
});
|
|
4426
|
-
}
|
|
4427
|
-
}
|
|
4428
|
-
/**
|
|
4429
|
-
* @internal
|
|
4430
|
-
*/
|
|
4431
|
-
get multi() {
|
|
4432
|
-
return this;
|
|
4433
|
-
}
|
|
4434
|
-
toString() {
|
|
4435
|
-
return `InjectionToken ${this._desc}`;
|
|
4436
|
-
}
|
|
4437
|
-
}
|
|
4438
|
-
|
|
4439
|
-
/**
|
|
4440
|
-
* A DI token that you can use to create a virtual [provider](guide/glossary#provider)
|
|
4441
|
-
* that will populate the `entryComponents` field of components and NgModules
|
|
4442
|
-
* based on its `useValue` property value.
|
|
4443
|
-
* All components that are referenced in the `useValue` value (either directly
|
|
4444
|
-
* or in a nested array or map) are added to the `entryComponents` property.
|
|
4445
|
-
*
|
|
4446
|
-
* @usageNotes
|
|
4447
|
-
*
|
|
4448
|
-
* The following example shows how the router can populate the `entryComponents`
|
|
4449
|
-
* field of an NgModule based on a router configuration that refers
|
|
4450
|
-
* to components.
|
|
4451
|
-
*
|
|
4452
|
-
* ```typescript
|
|
4453
|
-
* // helper function inside the router
|
|
4454
|
-
* function provideRoutes(routes) {
|
|
4455
|
-
* return [
|
|
4456
|
-
* {provide: ROUTES, useValue: routes},
|
|
4457
|
-
* {provide: ANALYZE_FOR_ENTRY_COMPONENTS, useValue: routes, multi: true}
|
|
4458
|
-
* ];
|
|
4459
|
-
* }
|
|
4460
|
-
*
|
|
4461
|
-
* // user code
|
|
4462
|
-
* let routes = [
|
|
4463
|
-
* {path: '/root', component: RootComp},
|
|
4464
|
-
* {path: '/teams', component: TeamsComp}
|
|
4465
|
-
* ];
|
|
4466
|
-
*
|
|
4467
|
-
* @NgModule({
|
|
4468
|
-
* providers: [provideRoutes(routes)]
|
|
4469
|
-
* })
|
|
4470
|
-
* class ModuleWithRoutes {}
|
|
4471
|
-
* ```
|
|
4472
|
-
*
|
|
4473
|
-
* @publicApi
|
|
4474
|
-
* @deprecated Since 9.0.0. With Ivy, this property is no longer necessary.
|
|
4475
|
-
*/
|
|
4476
|
-
const ANALYZE_FOR_ENTRY_COMPONENTS = new InjectionToken('AnalyzeForEntryComponents');
|
|
4477
4362
|
// Stores the default value of `emitDistinctChangesOnly` when the `emitDistinctChangesOnly` is not
|
|
4478
4363
|
// explicitly set.
|
|
4479
4364
|
const emitDistinctChangesOnlyDefaultValue = true;
|
|
@@ -6462,6 +6347,8 @@ function detachView(lContainer, removeIndex) {
|
|
|
6462
6347
|
function destroyLView(tView, lView) {
|
|
6463
6348
|
if (!(lView[FLAGS] & 128 /* LViewFlags.Destroyed */)) {
|
|
6464
6349
|
const renderer = lView[RENDERER];
|
|
6350
|
+
lView[REACTIVE_TEMPLATE_CONSUMER]?.destroy();
|
|
6351
|
+
lView[REACTIVE_HOST_BINDING_CONSUMER]?.destroy();
|
|
6465
6352
|
if (renderer.destroyNode) {
|
|
6466
6353
|
applyView(tView, lView, renderer, 3 /* WalkTNodeTreeAction.Destroy */, null, null);
|
|
6467
6354
|
}
|
|
@@ -6862,15 +6749,12 @@ function nativeRemoveNode(renderer, rNode, isHostElement) {
|
|
|
6862
6749
|
}
|
|
6863
6750
|
}
|
|
6864
6751
|
/**
|
|
6865
|
-
*
|
|
6752
|
+
* Clears the contents of a given RElement.
|
|
6866
6753
|
*
|
|
6867
|
-
* @param renderer A renderer to be used
|
|
6868
6754
|
* @param rElement the native RElement to be cleared
|
|
6869
6755
|
*/
|
|
6870
|
-
function clearElementContents(
|
|
6871
|
-
|
|
6872
|
-
nativeRemoveChild(renderer, rElement, rElement.firstChild, false);
|
|
6873
|
-
}
|
|
6756
|
+
function clearElementContents(rElement) {
|
|
6757
|
+
rElement.textContent = '';
|
|
6874
6758
|
}
|
|
6875
6759
|
/**
|
|
6876
6760
|
* Performs the operation of `action` on the node. Typically this involves inserting or removing
|
|
@@ -8078,6 +7962,88 @@ function getSanitizer() {
|
|
|
8078
7962
|
return lView && lView[SANITIZER];
|
|
8079
7963
|
}
|
|
8080
7964
|
|
|
7965
|
+
/**
|
|
7966
|
+
* Creates a token that can be used in a DI Provider.
|
|
7967
|
+
*
|
|
7968
|
+
* Use an `InjectionToken` whenever the type you are injecting is not reified (does not have a
|
|
7969
|
+
* runtime representation) such as when injecting an interface, callable type, array or
|
|
7970
|
+
* parameterized type.
|
|
7971
|
+
*
|
|
7972
|
+
* `InjectionToken` is parameterized on `T` which is the type of object which will be returned by
|
|
7973
|
+
* the `Injector`. This provides an additional level of type safety.
|
|
7974
|
+
*
|
|
7975
|
+
* ```
|
|
7976
|
+
* interface MyInterface {...}
|
|
7977
|
+
* const myInterface = injector.get(new InjectionToken<MyInterface>('SomeToken'));
|
|
7978
|
+
* // myInterface is inferred to be MyInterface.
|
|
7979
|
+
* ```
|
|
7980
|
+
*
|
|
7981
|
+
* When creating an `InjectionToken`, you can optionally specify a factory function which returns
|
|
7982
|
+
* (possibly by creating) a default value of the parameterized type `T`. This sets up the
|
|
7983
|
+
* `InjectionToken` using this factory as a provider as if it was defined explicitly in the
|
|
7984
|
+
* application's root injector. If the factory function, which takes zero arguments, needs to inject
|
|
7985
|
+
* dependencies, it can do so using the `inject` function.
|
|
7986
|
+
* As you can see in the Tree-shakable InjectionToken example below.
|
|
7987
|
+
*
|
|
7988
|
+
* Additionally, if a `factory` is specified you can also specify the `providedIn` option, which
|
|
7989
|
+
* overrides the above behavior and marks the token as belonging to a particular `@NgModule` (note:
|
|
7990
|
+
* this option is now deprecated). As mentioned above, `'root'` is the default value for
|
|
7991
|
+
* `providedIn`.
|
|
7992
|
+
*
|
|
7993
|
+
* The `providedIn: NgModule` and `providedIn: 'any'` options are deprecated.
|
|
7994
|
+
*
|
|
7995
|
+
* @usageNotes
|
|
7996
|
+
* ### Basic Examples
|
|
7997
|
+
*
|
|
7998
|
+
* ### Plain InjectionToken
|
|
7999
|
+
*
|
|
8000
|
+
* {@example core/di/ts/injector_spec.ts region='InjectionToken'}
|
|
8001
|
+
*
|
|
8002
|
+
* ### Tree-shakable InjectionToken
|
|
8003
|
+
*
|
|
8004
|
+
* {@example core/di/ts/injector_spec.ts region='ShakableInjectionToken'}
|
|
8005
|
+
*
|
|
8006
|
+
*
|
|
8007
|
+
* @publicApi
|
|
8008
|
+
*/
|
|
8009
|
+
class InjectionToken {
|
|
8010
|
+
/**
|
|
8011
|
+
* @param _desc Description for the token,
|
|
8012
|
+
* used only for debugging purposes,
|
|
8013
|
+
* it should but does not need to be unique
|
|
8014
|
+
* @param options Options for the token's usage, as described above
|
|
8015
|
+
*/
|
|
8016
|
+
constructor(_desc, options) {
|
|
8017
|
+
this._desc = _desc;
|
|
8018
|
+
/** @internal */
|
|
8019
|
+
this.ngMetadataName = 'InjectionToken';
|
|
8020
|
+
this.ɵprov = undefined;
|
|
8021
|
+
if (typeof options == 'number') {
|
|
8022
|
+
(typeof ngDevMode === 'undefined' || ngDevMode) &&
|
|
8023
|
+
assertLessThan(options, 0, 'Only negative numbers are supported here');
|
|
8024
|
+
// This is a special hack to assign __NG_ELEMENT_ID__ to this instance.
|
|
8025
|
+
// See `InjectorMarkers`
|
|
8026
|
+
this.__NG_ELEMENT_ID__ = options;
|
|
8027
|
+
}
|
|
8028
|
+
else if (options !== undefined) {
|
|
8029
|
+
this.ɵprov = ɵɵdefineInjectable({
|
|
8030
|
+
token: this,
|
|
8031
|
+
providedIn: options.providedIn || 'root',
|
|
8032
|
+
factory: options.factory,
|
|
8033
|
+
});
|
|
8034
|
+
}
|
|
8035
|
+
}
|
|
8036
|
+
/**
|
|
8037
|
+
* @internal
|
|
8038
|
+
*/
|
|
8039
|
+
get multi() {
|
|
8040
|
+
return this;
|
|
8041
|
+
}
|
|
8042
|
+
toString() {
|
|
8043
|
+
return `InjectionToken ${this._desc}`;
|
|
8044
|
+
}
|
|
8045
|
+
}
|
|
8046
|
+
|
|
8081
8047
|
/**
|
|
8082
8048
|
* A multi-provider token for initialization functions that will run upon construction of an
|
|
8083
8049
|
* environment injector.
|
|
@@ -8181,7 +8147,7 @@ function internalImportProvidersFrom(checkForStandaloneCmp, ...sources) {
|
|
|
8181
8147
|
// Narrow `source` to access the internal type analogue for `ModuleWithProviders`.
|
|
8182
8148
|
const internalSource = source;
|
|
8183
8149
|
if (walkProviderTree(internalSource, providersOut, [], dedup)) {
|
|
8184
|
-
injectorTypesWithProviders
|
|
8150
|
+
injectorTypesWithProviders ||= [];
|
|
8185
8151
|
injectorTypesWithProviders.push(internalSource);
|
|
8186
8152
|
}
|
|
8187
8153
|
});
|
|
@@ -8277,7 +8243,7 @@ function walkProviderTree(container, providersOut, parents, dedup) {
|
|
|
8277
8243
|
try {
|
|
8278
8244
|
deepForEach(injDef.imports, imported => {
|
|
8279
8245
|
if (walkProviderTree(imported, providersOut, parents, dedup)) {
|
|
8280
|
-
importTypesWithProviders
|
|
8246
|
+
importTypesWithProviders ||= [];
|
|
8281
8247
|
// If the processed import is an injector type with providers, we store it in the
|
|
8282
8248
|
// list of import types with providers, so that we can process those afterwards.
|
|
8283
8249
|
importTypesWithProviders.push(imported);
|
|
@@ -8935,6 +8901,13 @@ class TransferState {
|
|
|
8935
8901
|
this.store = {};
|
|
8936
8902
|
this.onSerializeCallbacks = {};
|
|
8937
8903
|
}
|
|
8904
|
+
/** @nocollapse */
|
|
8905
|
+
static { this.ɵprov =
|
|
8906
|
+
/** @pureOrBreakMyCode */ ɵɵdefineInjectable({
|
|
8907
|
+
token: TransferState,
|
|
8908
|
+
providedIn: 'root',
|
|
8909
|
+
factory: initTransferState,
|
|
8910
|
+
}); }
|
|
8938
8911
|
/**
|
|
8939
8912
|
* Get the value corresponding to a key. Return `defaultValue` if key is not found.
|
|
8940
8913
|
*/
|
|
@@ -8989,13 +8962,6 @@ class TransferState {
|
|
|
8989
8962
|
return JSON.stringify(this.store);
|
|
8990
8963
|
}
|
|
8991
8964
|
}
|
|
8992
|
-
/** @nocollapse */
|
|
8993
|
-
TransferState.ɵprov =
|
|
8994
|
-
/** @pureOrBreakMyCode */ ɵɵdefineInjectable({
|
|
8995
|
-
token: TransferState,
|
|
8996
|
-
providedIn: 'root',
|
|
8997
|
-
factory: initTransferState,
|
|
8998
|
-
});
|
|
8999
8965
|
function retrieveTransferredState(doc, appId) {
|
|
9000
8966
|
// Locate the script tag with the JSON data transferred from the server.
|
|
9001
8967
|
// The id of the script tag is set to the Angular appId + 'state'.
|
|
@@ -9191,7 +9157,7 @@ function isRNodeClaimedForHydration(node) {
|
|
|
9191
9157
|
return !!node.__claimed;
|
|
9192
9158
|
}
|
|
9193
9159
|
function setSegmentHead(hydrationInfo, index, node) {
|
|
9194
|
-
hydrationInfo.segmentHeads
|
|
9160
|
+
hydrationInfo.segmentHeads ??= {};
|
|
9195
9161
|
hydrationInfo.segmentHeads[index] = node;
|
|
9196
9162
|
}
|
|
9197
9163
|
function getSegmentHead(hydrationInfo, index) {
|
|
@@ -9236,7 +9202,7 @@ function calcSerializedContainerSize(hydrationInfo, index) {
|
|
|
9236
9202
|
* in the DOM at serialization time. We should not attempt hydration for
|
|
9237
9203
|
* such nodes and instead, use a regular "creation mode".
|
|
9238
9204
|
*/
|
|
9239
|
-
function isDisconnectedNode(hydrationInfo, index) {
|
|
9205
|
+
function isDisconnectedNode$1(hydrationInfo, index) {
|
|
9240
9206
|
// Check if we are processing disconnected info for the first time.
|
|
9241
9207
|
if (typeof hydrationInfo.disconnectedNodes === 'undefined') {
|
|
9242
9208
|
const nodeIds = hydrationInfo.data[DISCONNECTED_NODES];
|
|
@@ -9270,7 +9236,7 @@ class ComponentFactory$1 {
|
|
|
9270
9236
|
}
|
|
9271
9237
|
|
|
9272
9238
|
function noComponentFactoryError(component) {
|
|
9273
|
-
const error = Error(`No component factory found for ${stringify(component)}
|
|
9239
|
+
const error = Error(`No component factory found for ${stringify(component)}.`);
|
|
9274
9240
|
error[ERROR_COMPONENT] = component;
|
|
9275
9241
|
return error;
|
|
9276
9242
|
}
|
|
@@ -9299,8 +9265,8 @@ class _NullComponentFactoryResolver {
|
|
|
9299
9265
|
* Component class can be used directly.
|
|
9300
9266
|
*/
|
|
9301
9267
|
class ComponentFactoryResolver$1 {
|
|
9268
|
+
static { this.NULL = ( /* @__PURE__ */new _NullComponentFactoryResolver()); }
|
|
9302
9269
|
}
|
|
9303
|
-
ComponentFactoryResolver$1.NULL = ( /* @__PURE__ */new _NullComponentFactoryResolver());
|
|
9304
9270
|
|
|
9305
9271
|
/**
|
|
9306
9272
|
* Creates an ElementRef from the most recent node.
|
|
@@ -9339,12 +9305,12 @@ class ElementRef {
|
|
|
9339
9305
|
constructor(nativeElement) {
|
|
9340
9306
|
this.nativeElement = nativeElement;
|
|
9341
9307
|
}
|
|
9308
|
+
/**
|
|
9309
|
+
* @internal
|
|
9310
|
+
* @nocollapse
|
|
9311
|
+
*/
|
|
9312
|
+
static { this.__NG_ELEMENT_ID__ = injectElementRef; }
|
|
9342
9313
|
}
|
|
9343
|
-
/**
|
|
9344
|
-
* @internal
|
|
9345
|
-
* @nocollapse
|
|
9346
|
-
*/
|
|
9347
|
-
ElementRef.__NG_ELEMENT_ID__ = injectElementRef;
|
|
9348
9314
|
/**
|
|
9349
9315
|
* Unwraps `ElementRef` and return the `nativeElement`.
|
|
9350
9316
|
*
|
|
@@ -9378,12 +9344,12 @@ class RendererFactory2 {
|
|
|
9378
9344
|
* @publicApi
|
|
9379
9345
|
*/
|
|
9380
9346
|
class Renderer2 {
|
|
9347
|
+
/**
|
|
9348
|
+
* @internal
|
|
9349
|
+
* @nocollapse
|
|
9350
|
+
*/
|
|
9351
|
+
static { this.__NG_ELEMENT_ID__ = () => injectRenderer2(); }
|
|
9381
9352
|
}
|
|
9382
|
-
/**
|
|
9383
|
-
* @internal
|
|
9384
|
-
* @nocollapse
|
|
9385
|
-
*/
|
|
9386
|
-
Renderer2.__NG_ELEMENT_ID__ = () => injectRenderer2();
|
|
9387
9353
|
/** Injects a Renderer2 for the current component. */
|
|
9388
9354
|
function injectRenderer2() {
|
|
9389
9355
|
// We need the Renderer to be based on the component that it's being injected into, however since
|
|
@@ -9400,13 +9366,13 @@ function injectRenderer2() {
|
|
|
9400
9366
|
* @publicApi
|
|
9401
9367
|
*/
|
|
9402
9368
|
class Sanitizer {
|
|
9369
|
+
/** @nocollapse */
|
|
9370
|
+
static { this.ɵprov = ɵɵdefineInjectable({
|
|
9371
|
+
token: Sanitizer,
|
|
9372
|
+
providedIn: 'root',
|
|
9373
|
+
factory: () => null,
|
|
9374
|
+
}); }
|
|
9403
9375
|
}
|
|
9404
|
-
/** @nocollapse */
|
|
9405
|
-
Sanitizer.ɵprov = ɵɵdefineInjectable({
|
|
9406
|
-
token: Sanitizer,
|
|
9407
|
-
providedIn: 'root',
|
|
9408
|
-
factory: () => null,
|
|
9409
|
-
});
|
|
9410
9376
|
|
|
9411
9377
|
/**
|
|
9412
9378
|
* @description Represents the version of Angular
|
|
@@ -9424,7 +9390,7 @@ class Version {
|
|
|
9424
9390
|
/**
|
|
9425
9391
|
* @publicApi
|
|
9426
9392
|
*/
|
|
9427
|
-
const VERSION = new Version('16.0.0-next.
|
|
9393
|
+
const VERSION = new Version('16.0.0-next.5');
|
|
9428
9394
|
|
|
9429
9395
|
// This default value is when checking the hierarchy for a token.
|
|
9430
9396
|
//
|
|
@@ -9675,39 +9641,318 @@ function getExpressionChangedErrorDetails(lView, bindingIndex, oldValue, newValu
|
|
|
9675
9641
|
return { propName: undefined, oldValue, newValue };
|
|
9676
9642
|
}
|
|
9677
9643
|
|
|
9678
|
-
/**
|
|
9679
|
-
|
|
9644
|
+
/**
|
|
9645
|
+
* A `WeakRef`-compatible reference that fakes the API with a strong reference
|
|
9646
|
+
* internally.
|
|
9647
|
+
*/
|
|
9648
|
+
class LeakyRef {
|
|
9649
|
+
constructor(ref) {
|
|
9650
|
+
this.ref = ref;
|
|
9651
|
+
}
|
|
9652
|
+
deref() {
|
|
9653
|
+
return this.ref;
|
|
9654
|
+
}
|
|
9655
|
+
}
|
|
9656
|
+
// `WeakRef` is not always defined in every TS environment where Angular is compiled. Instead,
|
|
9657
|
+
// read it off of the global context if available.
|
|
9658
|
+
// tslint:disable-next-line: no-toplevel-property-access
|
|
9659
|
+
let WeakRefImpl = _global['WeakRef'] ?? LeakyRef;
|
|
9660
|
+
function newWeakRef(value) {
|
|
9661
|
+
if (typeof ngDevMode !== 'undefined' && ngDevMode && WeakRefImpl === undefined) {
|
|
9662
|
+
throw new Error(`Angular requires a browser which supports the 'WeakRef' API`);
|
|
9663
|
+
}
|
|
9664
|
+
return new WeakRefImpl(value);
|
|
9665
|
+
}
|
|
9666
|
+
function setAlternateWeakRefImpl(impl) {
|
|
9667
|
+
// no-op since the alternate impl is included by default by the framework. Remove once internal
|
|
9668
|
+
// migration is complete.
|
|
9669
|
+
}
|
|
9680
9670
|
|
|
9681
9671
|
/**
|
|
9682
|
-
*
|
|
9672
|
+
* Counter tracking the next `ProducerId` or `ConsumerId`.
|
|
9673
|
+
*/
|
|
9674
|
+
let _nextReactiveId = 0;
|
|
9675
|
+
/**
|
|
9676
|
+
* Tracks the currently active reactive consumer (or `null` if there is no active
|
|
9677
|
+
* consumer).
|
|
9678
|
+
*/
|
|
9679
|
+
let activeConsumer = null;
|
|
9680
|
+
function setActiveConsumer(consumer) {
|
|
9681
|
+
const prev = activeConsumer;
|
|
9682
|
+
activeConsumer = consumer;
|
|
9683
|
+
return prev;
|
|
9684
|
+
}
|
|
9685
|
+
/**
|
|
9686
|
+
* A node in the reactive graph.
|
|
9683
9687
|
*
|
|
9684
|
-
*
|
|
9685
|
-
* indices, for example those created with {@link element} or {@link elementStart}.
|
|
9688
|
+
* Nodes can be producers of reactive values, consumers of other reactive values, or both.
|
|
9686
9689
|
*
|
|
9687
|
-
*
|
|
9688
|
-
* (rf: RenderFlags, ctx: any) => {
|
|
9689
|
-
* if (rf & 1) {
|
|
9690
|
-
* text(0, 'Hello');
|
|
9691
|
-
* text(1, 'Goodbye')
|
|
9692
|
-
* element(2, 'div');
|
|
9693
|
-
* }
|
|
9694
|
-
* if (rf & 2) {
|
|
9695
|
-
* advance(2); // Advance twice to the <div>.
|
|
9696
|
-
* property('title', 'test');
|
|
9697
|
-
* }
|
|
9698
|
-
* }
|
|
9699
|
-
* ```
|
|
9700
|
-
* @param delta Number of elements to advance forwards by.
|
|
9690
|
+
* Producers are nodes that produce values, and can be depended upon by consumer nodes.
|
|
9701
9691
|
*
|
|
9702
|
-
*
|
|
9692
|
+
* Producers expose a monotonic `valueVersion` counter, and are responsible for incrementing this
|
|
9693
|
+
* version when their value semantically changes. Some producers may produce their values lazily and
|
|
9694
|
+
* thus at times need to be polled for potential updates to their value (and by extension their
|
|
9695
|
+
* `valueVersion`). This is accomplished via the `onProducerUpdateValueVersion` method for
|
|
9696
|
+
* implemented by producers, which should perform whatever calculations are necessary to ensure
|
|
9697
|
+
* `valueVersion` is up to date.
|
|
9698
|
+
*
|
|
9699
|
+
* Consumers are nodes that depend on the values of producers and are notified when those values
|
|
9700
|
+
* might have changed.
|
|
9701
|
+
*
|
|
9702
|
+
* Consumers do not wrap the reads they consume themselves, but rather can be set as the active
|
|
9703
|
+
* reader via `setActiveConsumer`. Reads of producers that happen while a consumer is active will
|
|
9704
|
+
* result in those producers being added as dependencies of that consumer node.
|
|
9705
|
+
*
|
|
9706
|
+
* The set of dependencies of a consumer is dynamic. Implementers expose a monotonically increasing
|
|
9707
|
+
* `trackingVersion` counter, which increments whenever the consumer is about to re-run any reactive
|
|
9708
|
+
* reads it needs and establish a new set of dependencies as a result.
|
|
9709
|
+
*
|
|
9710
|
+
* Producers store the last `trackingVersion` they've seen from `Consumer`s which have read them.
|
|
9711
|
+
* This allows a producer to identify whether its record of the dependency is current or stale, by
|
|
9712
|
+
* comparing the consumer's `trackingVersion` to the version at which the dependency was
|
|
9713
|
+
* last observed.
|
|
9703
9714
|
*/
|
|
9704
|
-
|
|
9705
|
-
|
|
9706
|
-
|
|
9707
|
-
|
|
9708
|
-
|
|
9709
|
-
|
|
9710
|
-
|
|
9715
|
+
class ReactiveNode {
|
|
9716
|
+
constructor() {
|
|
9717
|
+
this.id = _nextReactiveId++;
|
|
9718
|
+
/**
|
|
9719
|
+
* A cached weak reference to this node, which will be used in `ReactiveEdge`s.
|
|
9720
|
+
*/
|
|
9721
|
+
this.ref = newWeakRef(this);
|
|
9722
|
+
/**
|
|
9723
|
+
* Edges to producers on which this node depends (in its consumer capacity).
|
|
9724
|
+
*/
|
|
9725
|
+
this.producers = new Map();
|
|
9726
|
+
/**
|
|
9727
|
+
* Edges to consumers on which this node depends (in its producer capacity).
|
|
9728
|
+
*/
|
|
9729
|
+
this.consumers = new Map();
|
|
9730
|
+
/**
|
|
9731
|
+
* Monotonically increasing counter representing a version of this `Consumer`'s
|
|
9732
|
+
* dependencies.
|
|
9733
|
+
*/
|
|
9734
|
+
this.trackingVersion = 0;
|
|
9735
|
+
/**
|
|
9736
|
+
* Monotonically increasing counter which increases when the value of this `Producer`
|
|
9737
|
+
* semantically changes.
|
|
9738
|
+
*/
|
|
9739
|
+
this.valueVersion = 0;
|
|
9740
|
+
}
|
|
9741
|
+
/**
|
|
9742
|
+
* Polls dependencies of a consumer to determine if they have actually changed.
|
|
9743
|
+
*
|
|
9744
|
+
* If this returns `false`, then even though the consumer may have previously been notified of a
|
|
9745
|
+
* change, the values of its dependencies have not actually changed and the consumer should not
|
|
9746
|
+
* rerun any reactions.
|
|
9747
|
+
*/
|
|
9748
|
+
consumerPollProducersForChange() {
|
|
9749
|
+
for (const [producerId, edge] of this.producers) {
|
|
9750
|
+
const producer = edge.producerNode.deref();
|
|
9751
|
+
if (producer === undefined || edge.atTrackingVersion !== this.trackingVersion) {
|
|
9752
|
+
// This dependency edge is stale, so remove it.
|
|
9753
|
+
this.producers.delete(producerId);
|
|
9754
|
+
producer?.consumers.delete(this.id);
|
|
9755
|
+
continue;
|
|
9756
|
+
}
|
|
9757
|
+
if (producer.producerPollStatus(edge.seenValueVersion)) {
|
|
9758
|
+
// One of the dependencies reports a real value change.
|
|
9759
|
+
return true;
|
|
9760
|
+
}
|
|
9761
|
+
}
|
|
9762
|
+
// No dependency reported a real value change, so the `Consumer` has also not been
|
|
9763
|
+
// impacted.
|
|
9764
|
+
return false;
|
|
9765
|
+
}
|
|
9766
|
+
/**
|
|
9767
|
+
* Notify all consumers of this producer that its value may have changed.
|
|
9768
|
+
*/
|
|
9769
|
+
producerMayHaveChanged() {
|
|
9770
|
+
for (const [consumerId, edge] of this.consumers) {
|
|
9771
|
+
const consumer = edge.consumerNode.deref();
|
|
9772
|
+
if (consumer === undefined || consumer.trackingVersion !== edge.atTrackingVersion) {
|
|
9773
|
+
this.consumers.delete(consumerId);
|
|
9774
|
+
consumer?.producers.delete(this.id);
|
|
9775
|
+
continue;
|
|
9776
|
+
}
|
|
9777
|
+
consumer.onConsumerDependencyMayHaveChanged();
|
|
9778
|
+
}
|
|
9779
|
+
}
|
|
9780
|
+
/**
|
|
9781
|
+
* Mark that this producer node has been accessed in the current reactive context.
|
|
9782
|
+
*/
|
|
9783
|
+
producerAccessed() {
|
|
9784
|
+
if (activeConsumer === null) {
|
|
9785
|
+
return;
|
|
9786
|
+
}
|
|
9787
|
+
// Either create or update the dependency `Edge` in both directions.
|
|
9788
|
+
let edge = activeConsumer.producers.get(this.id);
|
|
9789
|
+
if (edge === undefined) {
|
|
9790
|
+
edge = {
|
|
9791
|
+
consumerNode: activeConsumer.ref,
|
|
9792
|
+
producerNode: this.ref,
|
|
9793
|
+
seenValueVersion: this.valueVersion,
|
|
9794
|
+
atTrackingVersion: activeConsumer.trackingVersion,
|
|
9795
|
+
};
|
|
9796
|
+
activeConsumer.producers.set(this.id, edge);
|
|
9797
|
+
this.consumers.set(activeConsumer.id, edge);
|
|
9798
|
+
}
|
|
9799
|
+
else {
|
|
9800
|
+
edge.seenValueVersion = this.valueVersion;
|
|
9801
|
+
edge.atTrackingVersion = activeConsumer.trackingVersion;
|
|
9802
|
+
}
|
|
9803
|
+
}
|
|
9804
|
+
/**
|
|
9805
|
+
* Whether this consumer currently has any producers registered.
|
|
9806
|
+
*/
|
|
9807
|
+
get hasProducers() {
|
|
9808
|
+
return this.producers.size > 0;
|
|
9809
|
+
}
|
|
9810
|
+
/**
|
|
9811
|
+
* Checks if a `Producer` has a current value which is different than the value
|
|
9812
|
+
* last seen at a specific version by a `Consumer` which recorded a dependency on
|
|
9813
|
+
* this `Producer`.
|
|
9814
|
+
*/
|
|
9815
|
+
producerPollStatus(lastSeenValueVersion) {
|
|
9816
|
+
// `producer.valueVersion` may be stale, but a mismatch still means that the value
|
|
9817
|
+
// last seen by the `Consumer` is also stale.
|
|
9818
|
+
if (this.valueVersion !== lastSeenValueVersion) {
|
|
9819
|
+
return true;
|
|
9820
|
+
}
|
|
9821
|
+
// Trigger the `Producer` to update its `valueVersion` if necessary.
|
|
9822
|
+
this.onProducerUpdateValueVersion();
|
|
9823
|
+
// At this point, we can trust `producer.valueVersion`.
|
|
9824
|
+
return this.valueVersion !== lastSeenValueVersion;
|
|
9825
|
+
}
|
|
9826
|
+
}
|
|
9827
|
+
|
|
9828
|
+
/**
|
|
9829
|
+
* Marks current view and all ancestors dirty.
|
|
9830
|
+
*
|
|
9831
|
+
* Returns the root view because it is found as a byproduct of marking the view tree
|
|
9832
|
+
* dirty, and can be used by methods that consume markViewDirty() to easily schedule
|
|
9833
|
+
* change detection. Otherwise, such methods would need to traverse up the view tree
|
|
9834
|
+
* an additional time to get the root view and schedule a tick on it.
|
|
9835
|
+
*
|
|
9836
|
+
* @param lView The starting LView to mark dirty
|
|
9837
|
+
* @returns the root LView
|
|
9838
|
+
*/
|
|
9839
|
+
function markViewDirty(lView) {
|
|
9840
|
+
while (lView) {
|
|
9841
|
+
lView[FLAGS] |= 32 /* LViewFlags.Dirty */;
|
|
9842
|
+
const parent = getLViewParent(lView);
|
|
9843
|
+
// Stop traversing up as soon as you find a root view that wasn't attached to any container
|
|
9844
|
+
if (isRootView(lView) && !parent) {
|
|
9845
|
+
return lView;
|
|
9846
|
+
}
|
|
9847
|
+
// continue otherwise
|
|
9848
|
+
lView = parent;
|
|
9849
|
+
}
|
|
9850
|
+
return null;
|
|
9851
|
+
}
|
|
9852
|
+
|
|
9853
|
+
const NG_DEV_MODE = typeof ngDevMode === 'undefined' || ngDevMode;
|
|
9854
|
+
class ReactiveLViewConsumer extends ReactiveNode {
|
|
9855
|
+
constructor() {
|
|
9856
|
+
super(...arguments);
|
|
9857
|
+
this._lView = null;
|
|
9858
|
+
}
|
|
9859
|
+
set lView(lView) {
|
|
9860
|
+
NG_DEV_MODE && assertEqual(this._lView, null, 'Consumer already associated with a view.');
|
|
9861
|
+
this._lView = lView;
|
|
9862
|
+
}
|
|
9863
|
+
onConsumerDependencyMayHaveChanged() {
|
|
9864
|
+
NG_DEV_MODE &&
|
|
9865
|
+
assertDefined(this._lView, 'Updating a signal during template or host binding execution is not allowed.');
|
|
9866
|
+
markViewDirty(this._lView);
|
|
9867
|
+
}
|
|
9868
|
+
onProducerUpdateValueVersion() {
|
|
9869
|
+
// This type doesn't implement the producer side of a `ReactiveNode`.
|
|
9870
|
+
}
|
|
9871
|
+
get hasReadASignal() {
|
|
9872
|
+
return this.hasProducers;
|
|
9873
|
+
}
|
|
9874
|
+
runInContext(fn, rf, ctx) {
|
|
9875
|
+
const prevConsumer = setActiveConsumer(this);
|
|
9876
|
+
this.trackingVersion++;
|
|
9877
|
+
try {
|
|
9878
|
+
fn(rf, ctx);
|
|
9879
|
+
}
|
|
9880
|
+
finally {
|
|
9881
|
+
setActiveConsumer(prevConsumer);
|
|
9882
|
+
}
|
|
9883
|
+
}
|
|
9884
|
+
destroy() {
|
|
9885
|
+
// Incrementing the version means that every producer which tries to update this consumer will
|
|
9886
|
+
// consider its record stale, and not notify.
|
|
9887
|
+
this.trackingVersion++;
|
|
9888
|
+
}
|
|
9889
|
+
}
|
|
9890
|
+
let currentConsumer = null;
|
|
9891
|
+
function getOrCreateCurrentLViewConsumer() {
|
|
9892
|
+
currentConsumer ??= new ReactiveLViewConsumer();
|
|
9893
|
+
return currentConsumer;
|
|
9894
|
+
}
|
|
9895
|
+
/**
|
|
9896
|
+
* Create a new template consumer pointing at the specified LView.
|
|
9897
|
+
* Sometimes, a previously created consumer may be reused, in order to save on allocations. In that
|
|
9898
|
+
* case, the LView will be updated.
|
|
9899
|
+
*/
|
|
9900
|
+
function getReactiveLViewConsumer(lView, slot) {
|
|
9901
|
+
return lView[slot] ?? getOrCreateCurrentLViewConsumer();
|
|
9902
|
+
}
|
|
9903
|
+
/**
|
|
9904
|
+
* Assigns the `currentTemplateContext` to its LView's `REACTIVE_CONSUMER` slot if there are tracked
|
|
9905
|
+
* producers.
|
|
9906
|
+
*
|
|
9907
|
+
* The presence of producers means that a signal was read while the consumer was the active
|
|
9908
|
+
* consumer.
|
|
9909
|
+
*
|
|
9910
|
+
* If no producers are present, we do not assign the current template context. This also means we
|
|
9911
|
+
* can just reuse the template context for the next LView.
|
|
9912
|
+
*/
|
|
9913
|
+
function commitLViewConsumerIfHasProducers(lView, slot) {
|
|
9914
|
+
const consumer = getOrCreateCurrentLViewConsumer();
|
|
9915
|
+
if (!consumer.hasReadASignal) {
|
|
9916
|
+
return;
|
|
9917
|
+
}
|
|
9918
|
+
lView[slot] = currentConsumer;
|
|
9919
|
+
consumer.lView = lView;
|
|
9920
|
+
currentConsumer = new ReactiveLViewConsumer();
|
|
9921
|
+
}
|
|
9922
|
+
|
|
9923
|
+
/** A special value which designates that a value has not changed. */
|
|
9924
|
+
const NO_CHANGE = (typeof ngDevMode === 'undefined' || ngDevMode) ? { __brand__: 'NO_CHANGE' } : {};
|
|
9925
|
+
|
|
9926
|
+
/**
|
|
9927
|
+
* Advances to an element for later binding instructions.
|
|
9928
|
+
*
|
|
9929
|
+
* Used in conjunction with instructions like {@link property} to act on elements with specified
|
|
9930
|
+
* indices, for example those created with {@link element} or {@link elementStart}.
|
|
9931
|
+
*
|
|
9932
|
+
* ```ts
|
|
9933
|
+
* (rf: RenderFlags, ctx: any) => {
|
|
9934
|
+
* if (rf & 1) {
|
|
9935
|
+
* text(0, 'Hello');
|
|
9936
|
+
* text(1, 'Goodbye')
|
|
9937
|
+
* element(2, 'div');
|
|
9938
|
+
* }
|
|
9939
|
+
* if (rf & 2) {
|
|
9940
|
+
* advance(2); // Advance twice to the <div>.
|
|
9941
|
+
* property('title', 'test');
|
|
9942
|
+
* }
|
|
9943
|
+
* }
|
|
9944
|
+
* ```
|
|
9945
|
+
* @param delta Number of elements to advance forwards by.
|
|
9946
|
+
*
|
|
9947
|
+
* @codeGenApi
|
|
9948
|
+
*/
|
|
9949
|
+
function ɵɵadvance(delta) {
|
|
9950
|
+
ngDevMode && assertGreaterThan(delta, 0, 'Can only advance forward');
|
|
9951
|
+
selectIndexInternal(getTView(), getLView(), getSelectedIndex() + delta, !!ngDevMode && isInCheckNoChangesMode());
|
|
9952
|
+
}
|
|
9953
|
+
function selectIndexInternal(tView, lView, index, checkNoChangesMode) {
|
|
9954
|
+
ngDevMode && assertIndexInDeclRange(lView, index);
|
|
9955
|
+
// Flush the initial hooks for elements in the view that have been added up to this point.
|
|
9711
9956
|
// PERF WARNING: do NOT extract this to a separate function without running benchmarks
|
|
9712
9957
|
if (!checkNoChangesMode) {
|
|
9713
9958
|
const hooksInitPhaseCompleted = (lView[FLAGS] & 3 /* LViewFlags.InitPhaseStateMask */) === 3 /* InitPhaseState.InitPhaseCompleted */;
|
|
@@ -9757,6 +10002,22 @@ function runInInjectionContext(injector, fn) {
|
|
|
9757
10002
|
setInjectImplementation(previousInjectImplementation);
|
|
9758
10003
|
}
|
|
9759
10004
|
}
|
|
10005
|
+
/**
|
|
10006
|
+
* Asserts that the current stack frame is within an injection context and has access to `inject`.
|
|
10007
|
+
*
|
|
10008
|
+
* @param debugFn a reference to the function making the assertion (used for the error message).
|
|
10009
|
+
*
|
|
10010
|
+
* @publicApi
|
|
10011
|
+
*/
|
|
10012
|
+
function assertInInjectionContext(debugFn) {
|
|
10013
|
+
// Taking a `Function` instead of a string name here prevents the unminified name of the function
|
|
10014
|
+
// from being retained in the bundle regardless of minification.
|
|
10015
|
+
if (!getInjectImplementation() && !getCurrentInjector()) {
|
|
10016
|
+
throw new RuntimeError(-203 /* RuntimeErrorCode.MISSING_INJECTION_CONTEXT */, ngDevMode &&
|
|
10017
|
+
(debugFn.name +
|
|
10018
|
+
'() can only be used within an injection context such as a constructor, a factory function, a field initializer, or a function used with `runInInjectionContext`'));
|
|
10019
|
+
}
|
|
10020
|
+
}
|
|
9760
10021
|
|
|
9761
10022
|
/**
|
|
9762
10023
|
* A mapping of the @angular/core API surface used in generated expressions to the actual symbols.
|
|
@@ -9909,6 +10170,8 @@ function createInjectorWithoutInjectorInstances(defType, parent = null, addition
|
|
|
9909
10170
|
* @publicApi
|
|
9910
10171
|
*/
|
|
9911
10172
|
class Injector {
|
|
10173
|
+
static { this.THROW_IF_NOT_FOUND = THROW_IF_NOT_FOUND; }
|
|
10174
|
+
static { this.NULL = ( /* @__PURE__ */new NullInjector()); }
|
|
9912
10175
|
static create(options, parent) {
|
|
9913
10176
|
if (Array.isArray(options)) {
|
|
9914
10177
|
return createInjector({ name: '' }, parent, options, '');
|
|
@@ -9918,20 +10181,18 @@ class Injector {
|
|
|
9918
10181
|
return createInjector({ name }, options.parent, options.providers, name);
|
|
9919
10182
|
}
|
|
9920
10183
|
}
|
|
10184
|
+
/** @nocollapse */
|
|
10185
|
+
static { this.ɵprov = ɵɵdefineInjectable({
|
|
10186
|
+
token: Injector,
|
|
10187
|
+
providedIn: 'any',
|
|
10188
|
+
factory: () => ɵɵinject(INJECTOR),
|
|
10189
|
+
}); }
|
|
10190
|
+
/**
|
|
10191
|
+
* @internal
|
|
10192
|
+
* @nocollapse
|
|
10193
|
+
*/
|
|
10194
|
+
static { this.__NG_ELEMENT_ID__ = -1 /* InjectorMarkers.Injector */; }
|
|
9921
10195
|
}
|
|
9922
|
-
Injector.THROW_IF_NOT_FOUND = THROW_IF_NOT_FOUND;
|
|
9923
|
-
Injector.NULL = ( /* @__PURE__ */new NullInjector());
|
|
9924
|
-
/** @nocollapse */
|
|
9925
|
-
Injector.ɵprov = ɵɵdefineInjectable({
|
|
9926
|
-
token: Injector,
|
|
9927
|
-
providedIn: 'any',
|
|
9928
|
-
factory: () => ɵɵinject(INJECTOR),
|
|
9929
|
-
});
|
|
9930
|
-
/**
|
|
9931
|
-
* @internal
|
|
9932
|
-
* @nocollapse
|
|
9933
|
-
*/
|
|
9934
|
-
Injector.__NG_ELEMENT_ID__ = -1 /* InjectorMarkers.Injector */;
|
|
9935
10196
|
|
|
9936
10197
|
function findFirstClosedCycle(keys) {
|
|
9937
10198
|
const res = [];
|
|
@@ -10532,6 +10793,7 @@ class ReflectiveInjector {
|
|
|
10532
10793
|
}
|
|
10533
10794
|
}
|
|
10534
10795
|
class ReflectiveInjector_ {
|
|
10796
|
+
static { this.INJECTOR_KEY = ( /* @__PURE__ */ReflectiveKey.get(Injector)); }
|
|
10535
10797
|
/**
|
|
10536
10798
|
* Private
|
|
10537
10799
|
*/
|
|
@@ -10687,7 +10949,6 @@ class ReflectiveInjector_ {
|
|
|
10687
10949
|
return this.displayName;
|
|
10688
10950
|
}
|
|
10689
10951
|
}
|
|
10690
|
-
ReflectiveInjector_.INJECTOR_KEY = ( /* @__PURE__ */ReflectiveKey.get(Injector));
|
|
10691
10952
|
function _mapProviders(injector, fn) {
|
|
10692
10953
|
const res = [];
|
|
10693
10954
|
for (let i = 0; i < injector._providers.length; ++i) {
|
|
@@ -10761,6 +11022,7 @@ function processHostBindingOpCodes(tView, lView) {
|
|
|
10761
11022
|
const hostBindingOpCodes = tView.hostBindingOpCodes;
|
|
10762
11023
|
if (hostBindingOpCodes === null)
|
|
10763
11024
|
return;
|
|
11025
|
+
const consumer = getReactiveLViewConsumer(lView, REACTIVE_HOST_BINDING_CONSUMER);
|
|
10764
11026
|
try {
|
|
10765
11027
|
for (let i = 0; i < hostBindingOpCodes.length; i++) {
|
|
10766
11028
|
const opCode = hostBindingOpCodes[i];
|
|
@@ -10775,11 +11037,13 @@ function processHostBindingOpCodes(tView, lView) {
|
|
|
10775
11037
|
const hostBindingFn = hostBindingOpCodes[++i];
|
|
10776
11038
|
setBindingRootForHostBindings(bindingRootIndx, directiveIdx);
|
|
10777
11039
|
const context = lView[directiveIdx];
|
|
10778
|
-
hostBindingFn
|
|
11040
|
+
consumer.runInContext(hostBindingFn, 2 /* RenderFlags.Update */, context);
|
|
10779
11041
|
}
|
|
10780
11042
|
}
|
|
10781
11043
|
}
|
|
10782
11044
|
finally {
|
|
11045
|
+
lView[REACTIVE_HOST_BINDING_CONSUMER] === null &&
|
|
11046
|
+
commitLViewConsumerIfHasProducers(lView, REACTIVE_HOST_BINDING_CONSUMER);
|
|
10783
11047
|
setSelectedIndex(-1);
|
|
10784
11048
|
}
|
|
10785
11049
|
}
|
|
@@ -10835,6 +11099,7 @@ function createLView(parentLView, tView, context, flags, host, tHostNode, render
|
|
|
10835
11099
|
lView[ID] = getUniqueLViewId();
|
|
10836
11100
|
lView[HYDRATION] = hydrationInfo;
|
|
10837
11101
|
lView[EMBEDDED_VIEW_INJECTOR] = embeddedViewInjector;
|
|
11102
|
+
lView[REACTIVE_TEMPLATE_CONSUMER] = null;
|
|
10838
11103
|
ngDevMode &&
|
|
10839
11104
|
assertEqual(tView.type == 2 /* TViewType.Embedded */ ? parentLView !== null : true, true, 'Embedded views must have parentLView');
|
|
10840
11105
|
lView[DECLARATION_COMPONENT_VIEW] =
|
|
@@ -11119,6 +11384,7 @@ function refreshView(tView, lView, templateFn, context) {
|
|
|
11119
11384
|
}
|
|
11120
11385
|
}
|
|
11121
11386
|
function executeTemplate(tView, lView, templateFn, rf, context) {
|
|
11387
|
+
const consumer = getReactiveLViewConsumer(lView, REACTIVE_TEMPLATE_CONSUMER);
|
|
11122
11388
|
const prevSelectedIndex = getSelectedIndex();
|
|
11123
11389
|
const isUpdatePhase = rf & 2 /* RenderFlags.Update */;
|
|
11124
11390
|
try {
|
|
@@ -11130,9 +11396,12 @@ function executeTemplate(tView, lView, templateFn, rf, context) {
|
|
|
11130
11396
|
}
|
|
11131
11397
|
const preHookType = isUpdatePhase ? 2 /* ProfilerEvent.TemplateUpdateStart */ : 0 /* ProfilerEvent.TemplateCreateStart */;
|
|
11132
11398
|
profiler(preHookType, context);
|
|
11133
|
-
templateFn
|
|
11399
|
+
consumer.runInContext(templateFn, rf, context);
|
|
11134
11400
|
}
|
|
11135
11401
|
finally {
|
|
11402
|
+
if (lView[REACTIVE_TEMPLATE_CONSUMER] === null) {
|
|
11403
|
+
commitLViewConsumerIfHasProducers(lView, REACTIVE_TEMPLATE_CONSUMER);
|
|
11404
|
+
}
|
|
11136
11405
|
setSelectedIndex(prevSelectedIndex);
|
|
11137
11406
|
const postHookType = isUpdatePhase ? 3 /* ProfilerEvent.TemplateUpdateEnd */ : 1 /* ProfilerEvent.TemplateCreateEnd */;
|
|
11138
11407
|
profiler(postHookType, context);
|
|
@@ -12236,30 +12505,6 @@ function addToViewTree(lView, lViewOrLContainer) {
|
|
|
12236
12505
|
///////////////////////////////
|
|
12237
12506
|
//// Change detection
|
|
12238
12507
|
///////////////////////////////
|
|
12239
|
-
/**
|
|
12240
|
-
* Marks current view and all ancestors dirty.
|
|
12241
|
-
*
|
|
12242
|
-
* Returns the root view because it is found as a byproduct of marking the view tree
|
|
12243
|
-
* dirty, and can be used by methods that consume markViewDirty() to easily schedule
|
|
12244
|
-
* change detection. Otherwise, such methods would need to traverse up the view tree
|
|
12245
|
-
* an additional time to get the root view and schedule a tick on it.
|
|
12246
|
-
*
|
|
12247
|
-
* @param lView The starting LView to mark dirty
|
|
12248
|
-
* @returns the root LView
|
|
12249
|
-
*/
|
|
12250
|
-
function markViewDirty(lView) {
|
|
12251
|
-
while (lView) {
|
|
12252
|
-
lView[FLAGS] |= 32 /* LViewFlags.Dirty */;
|
|
12253
|
-
const parent = getLViewParent(lView);
|
|
12254
|
-
// Stop traversing up as soon as you find a root view that wasn't attached to any container
|
|
12255
|
-
if (isRootView(lView) && !parent) {
|
|
12256
|
-
return lView;
|
|
12257
|
-
}
|
|
12258
|
-
// continue otherwise
|
|
12259
|
-
lView = parent;
|
|
12260
|
-
}
|
|
12261
|
-
return null;
|
|
12262
|
-
}
|
|
12263
12508
|
function detectChangesInternal(tView, lView, context, notifyErrorHandler = true) {
|
|
12264
12509
|
const rendererFactory = lView[RENDERER_FACTORY];
|
|
12265
12510
|
// Check no changes mode is a dev only mode used to verify that bindings have not changed
|
|
@@ -12940,6 +13185,7 @@ class ComponentRef extends ComponentRef$1 {
|
|
|
12940
13185
|
this.location = location;
|
|
12941
13186
|
this._rootLView = _rootLView;
|
|
12942
13187
|
this._tNode = _tNode;
|
|
13188
|
+
this.previousInputValues = null;
|
|
12943
13189
|
this.instance = instance;
|
|
12944
13190
|
this.hostView = this.changeDetectorRef = new RootViewRef(_rootLView);
|
|
12945
13191
|
this.componentType = componentType;
|
|
@@ -12948,8 +13194,16 @@ class ComponentRef extends ComponentRef$1 {
|
|
|
12948
13194
|
const inputData = this._tNode.inputs;
|
|
12949
13195
|
let dataValue;
|
|
12950
13196
|
if (inputData !== null && (dataValue = inputData[name])) {
|
|
13197
|
+
this.previousInputValues ??= new Map();
|
|
13198
|
+
// Do not set the input if it is the same as the last value
|
|
13199
|
+
// This behavior matches `bindingUpdated` when binding inputs in templates.
|
|
13200
|
+
if (this.previousInputValues.has(name) &&
|
|
13201
|
+
Object.is(this.previousInputValues.get(name), value)) {
|
|
13202
|
+
return;
|
|
13203
|
+
}
|
|
12951
13204
|
const lView = this._rootLView;
|
|
12952
13205
|
setInputsForProperty(lView[TVIEW], lView, dataValue, name, value);
|
|
13206
|
+
this.previousInputValues.set(name, value);
|
|
12953
13207
|
markDirtyIfOnPush(lView, this._tNode.index);
|
|
12954
13208
|
}
|
|
12955
13209
|
else {
|
|
@@ -14680,10 +14934,9 @@ function siblingAfter(skip, from) {
|
|
|
14680
14934
|
*/
|
|
14681
14935
|
function stringifyNavigationInstructions(instructions) {
|
|
14682
14936
|
const container = [];
|
|
14683
|
-
let i = 0;
|
|
14684
|
-
|
|
14685
|
-
const
|
|
14686
|
-
const repeat = instructions[i++];
|
|
14937
|
+
for (let i = 0; i < instructions.length; i += 2) {
|
|
14938
|
+
const step = instructions[i];
|
|
14939
|
+
const repeat = instructions[i + 1];
|
|
14687
14940
|
for (let r = 0; r < repeat; r++) {
|
|
14688
14941
|
container.push(step === NodeNavigationStep.FirstChild ? 'firstChild' : 'nextSibling');
|
|
14689
14942
|
}
|
|
@@ -14696,10 +14949,9 @@ function stringifyNavigationInstructions(instructions) {
|
|
|
14696
14949
|
*/
|
|
14697
14950
|
function navigateToNode(from, instructions) {
|
|
14698
14951
|
let node = from;
|
|
14699
|
-
let i = 0;
|
|
14700
|
-
|
|
14701
|
-
const
|
|
14702
|
-
const repeat = instructions[i++];
|
|
14952
|
+
for (let i = 0; i < instructions.length; i += 2) {
|
|
14953
|
+
const step = instructions[i];
|
|
14954
|
+
const repeat = instructions[i + 1];
|
|
14703
14955
|
for (let r = 0; r < repeat; r++) {
|
|
14704
14956
|
if (ngDevMode && !node) {
|
|
14705
14957
|
throw nodeNotFoundAtPathError(from, stringifyNavigationInstructions(instructions));
|
|
@@ -14926,7 +15178,7 @@ function createContainerAnchorImpl(tView, lView, tNode, index) {
|
|
|
14926
15178
|
*/
|
|
14927
15179
|
function locateOrCreateContainerAnchorImpl(tView, lView, tNode, index) {
|
|
14928
15180
|
const hydrationInfo = lView[HYDRATION];
|
|
14929
|
-
const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1() || isDisconnectedNode(hydrationInfo, index);
|
|
15181
|
+
const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1() || isDisconnectedNode$1(hydrationInfo, index);
|
|
14930
15182
|
lastNodeWasCreated(isNodeCreationMode);
|
|
14931
15183
|
// Regular creation mode.
|
|
14932
15184
|
if (isNodeCreationMode) {
|
|
@@ -15192,7 +15444,7 @@ let _locateOrCreateElementNode = (tView, lView, tNode, renderer, name, index) =>
|
|
|
15192
15444
|
*/
|
|
15193
15445
|
function locateOrCreateElementNodeImpl(tView, lView, tNode, renderer, name, index) {
|
|
15194
15446
|
const hydrationInfo = lView[HYDRATION];
|
|
15195
|
-
const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1() || isDisconnectedNode(hydrationInfo, index);
|
|
15447
|
+
const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1() || isDisconnectedNode$1(hydrationInfo, index);
|
|
15196
15448
|
lastNodeWasCreated(isNodeCreationMode);
|
|
15197
15449
|
// Regular creation mode.
|
|
15198
15450
|
if (isNodeCreationMode) {
|
|
@@ -15220,7 +15472,7 @@ function locateOrCreateElementNodeImpl(tView, lView, tNode, renderer, name, inde
|
|
|
15220
15472
|
enterSkipHydrationBlock(tNode);
|
|
15221
15473
|
// Since this isn't hydratable, we need to empty the node
|
|
15222
15474
|
// so there's no duplicate content after render
|
|
15223
|
-
clearElementContents(
|
|
15475
|
+
clearElementContents(native);
|
|
15224
15476
|
}
|
|
15225
15477
|
else if (ngDevMode) {
|
|
15226
15478
|
// If this is not a component host, throw an error.
|
|
@@ -17666,8 +17918,11 @@ function isStylingValuePresent(value) {
|
|
|
17666
17918
|
* @param suffix
|
|
17667
17919
|
*/
|
|
17668
17920
|
function normalizeSuffix(value, suffix) {
|
|
17669
|
-
if (value == null
|
|
17921
|
+
if (value == null || value === '') {
|
|
17670
17922
|
// do nothing
|
|
17923
|
+
// Do not add the suffix if the value is going to be empty.
|
|
17924
|
+
// As it produce invalid CSS, which the browsers will automatically omit but Domino will not.
|
|
17925
|
+
// Example: `"left": "px;"` instead of `"left": ""`.
|
|
17671
17926
|
}
|
|
17672
17927
|
else if (typeof suffix === 'string') {
|
|
17673
17928
|
value = value + suffix;
|
|
@@ -17726,7 +17981,7 @@ let _locateOrCreateTextNode = (tView, lView, tNode, value, index) => {
|
|
|
17726
17981
|
*/
|
|
17727
17982
|
function locateOrCreateTextNodeImpl(tView, lView, tNode, value, index) {
|
|
17728
17983
|
const hydrationInfo = lView[HYDRATION];
|
|
17729
|
-
const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1() || isDisconnectedNode(hydrationInfo, index);
|
|
17984
|
+
const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock$1() || isDisconnectedNode$1(hydrationInfo, index);
|
|
17730
17985
|
lastNodeWasCreated(isNodeCreationMode);
|
|
17731
17986
|
// Regular creation mode.
|
|
17732
17987
|
if (isNodeCreationMode) {
|
|
@@ -21534,13 +21789,13 @@ class StandaloneService {
|
|
|
21534
21789
|
this.cachedInjectors.clear();
|
|
21535
21790
|
}
|
|
21536
21791
|
}
|
|
21792
|
+
/** @nocollapse */
|
|
21793
|
+
static { this.ɵprov = ɵɵdefineInjectable({
|
|
21794
|
+
token: StandaloneService,
|
|
21795
|
+
providedIn: 'environment',
|
|
21796
|
+
factory: () => new StandaloneService(ɵɵinject(EnvironmentInjector)),
|
|
21797
|
+
}); }
|
|
21537
21798
|
}
|
|
21538
|
-
/** @nocollapse */
|
|
21539
|
-
StandaloneService.ɵprov = ɵɵdefineInjectable({
|
|
21540
|
-
token: StandaloneService,
|
|
21541
|
-
providedIn: 'environment',
|
|
21542
|
-
factory: () => new StandaloneService(ɵɵinject(EnvironmentInjector)),
|
|
21543
|
-
});
|
|
21544
21799
|
/**
|
|
21545
21800
|
* A feature that acts as a setup code for the {@link StandaloneService}.
|
|
21546
21801
|
*
|
|
@@ -22582,6 +22837,7 @@ function symbolIterator() {
|
|
|
22582
22837
|
* @publicApi
|
|
22583
22838
|
*/
|
|
22584
22839
|
class QueryList {
|
|
22840
|
+
static { Symbol.iterator; }
|
|
22585
22841
|
/**
|
|
22586
22842
|
* Returns `Observable` of `QueryList` notifying the subscriber of changes.
|
|
22587
22843
|
*/
|
|
@@ -22709,7 +22965,6 @@ class QueryList {
|
|
|
22709
22965
|
this.changes.unsubscribe();
|
|
22710
22966
|
}
|
|
22711
22967
|
}
|
|
22712
|
-
Symbol.iterator;
|
|
22713
22968
|
|
|
22714
22969
|
/**
|
|
22715
22970
|
* Represents an embedded template that can be used to instantiate embedded views.
|
|
@@ -22730,12 +22985,12 @@ Symbol.iterator;
|
|
|
22730
22985
|
* @publicApi
|
|
22731
22986
|
*/
|
|
22732
22987
|
class TemplateRef {
|
|
22988
|
+
/**
|
|
22989
|
+
* @internal
|
|
22990
|
+
* @nocollapse
|
|
22991
|
+
*/
|
|
22992
|
+
static { this.__NG_ELEMENT_ID__ = injectTemplateRef; }
|
|
22733
22993
|
}
|
|
22734
|
-
/**
|
|
22735
|
-
* @internal
|
|
22736
|
-
* @nocollapse
|
|
22737
|
-
*/
|
|
22738
|
-
TemplateRef.__NG_ELEMENT_ID__ = injectTemplateRef;
|
|
22739
22994
|
const ViewEngineTemplateRef = TemplateRef;
|
|
22740
22995
|
// TODO(alxhub): combine interface and implementation. Currently this is challenging since something
|
|
22741
22996
|
// in g3 depends on them being separate.
|
|
@@ -22865,11 +23120,13 @@ function cleanupLView(lView) {
|
|
|
22865
23120
|
* Walks over all views registered within the ApplicationRef and removes
|
|
22866
23121
|
* all dehydrated views from all `LContainer`s along the way.
|
|
22867
23122
|
*/
|
|
22868
|
-
function cleanupDehydratedViews(appRef) {
|
|
23123
|
+
function cleanupDehydratedViews(appRef, pendingTasks) {
|
|
22869
23124
|
// Wait once an app becomes stable and cleanup all views that
|
|
22870
23125
|
// were not claimed during the application bootstrap process.
|
|
22871
23126
|
// The timing is similar to when we kick off serialization on the server.
|
|
22872
|
-
|
|
23127
|
+
const isStablePromise = appRef.isStable.pipe(first((isStable) => isStable)).toPromise();
|
|
23128
|
+
const pendingTasksPromise = pendingTasks.whenAllTasksComplete;
|
|
23129
|
+
return Promise.allSettled([isStablePromise, pendingTasksPromise]).then(() => {
|
|
22873
23130
|
const viewRefs = appRef._views;
|
|
22874
23131
|
for (const viewRef of viewRefs) {
|
|
22875
23132
|
const lView = getComponentLViewForHydration(viewRef);
|
|
@@ -22972,12 +23229,12 @@ function findMatchingDehydratedView(lContainer, template) {
|
|
|
22972
23229
|
* @publicApi
|
|
22973
23230
|
*/
|
|
22974
23231
|
class ViewContainerRef {
|
|
23232
|
+
/**
|
|
23233
|
+
* @internal
|
|
23234
|
+
* @nocollapse
|
|
23235
|
+
*/
|
|
23236
|
+
static { this.__NG_ELEMENT_ID__ = injectViewContainerRef; }
|
|
22975
23237
|
}
|
|
22976
|
-
/**
|
|
22977
|
-
* @internal
|
|
22978
|
-
* @nocollapse
|
|
22979
|
-
*/
|
|
22980
|
-
ViewContainerRef.__NG_ELEMENT_ID__ = injectViewContainerRef;
|
|
22981
23238
|
/**
|
|
22982
23239
|
* Creates a ViewContainerRef and stores it on the injector. Or, if the ViewContainerRef
|
|
22983
23240
|
* already exists, retrieves the existing ViewContainerRef.
|
|
@@ -23291,7 +23548,7 @@ function locateOrCreateAnchorNode(lContainer, hostLView, hostTNode, slotValue) {
|
|
|
23291
23548
|
const hydrationInfo = hostLView[HYDRATION];
|
|
23292
23549
|
const noOffsetIndex = hostTNode.index - HEADER_OFFSET;
|
|
23293
23550
|
const isNodeCreationMode = !hydrationInfo || isInSkipHydrationBlock(hostTNode) ||
|
|
23294
|
-
isDisconnectedNode(hydrationInfo, noOffsetIndex);
|
|
23551
|
+
isDisconnectedNode$1(hydrationInfo, noOffsetIndex);
|
|
23295
23552
|
// Regular creation mode.
|
|
23296
23553
|
if (isNodeCreationMode) {
|
|
23297
23554
|
return createAnchorNode(lContainer, hostLView, hostTNode, slotValue);
|
|
@@ -24166,7 +24423,6 @@ function verifySemanticsOfNgModuleDef(moduleType, allowDuplicateDeclarationsInRo
|
|
|
24166
24423
|
];
|
|
24167
24424
|
exports.forEach(verifyExportsAreDeclaredOrReExported);
|
|
24168
24425
|
declarations.forEach(decl => verifyDeclarationIsUnique(decl, allowDuplicateDeclarationsInRoot));
|
|
24169
|
-
declarations.forEach(verifyComponentEntryComponentsIsPartOfNgModule);
|
|
24170
24426
|
const ngModule = getAnnotation(moduleType, 'NgModule');
|
|
24171
24427
|
if (ngModule) {
|
|
24172
24428
|
ngModule.imports &&
|
|
@@ -24176,8 +24432,6 @@ function verifySemanticsOfNgModuleDef(moduleType, allowDuplicateDeclarationsInRo
|
|
|
24176
24432
|
});
|
|
24177
24433
|
ngModule.bootstrap && deepForEach(ngModule.bootstrap, verifyCorrectBootstrapType);
|
|
24178
24434
|
ngModule.bootstrap && deepForEach(ngModule.bootstrap, verifyComponentIsPartOfNgModule);
|
|
24179
|
-
ngModule.entryComponents &&
|
|
24180
|
-
deepForEach(ngModule.entryComponents, verifyComponentIsPartOfNgModule);
|
|
24181
24435
|
}
|
|
24182
24436
|
// Throw Error if any errors were detected.
|
|
24183
24437
|
if (errors.length) {
|
|
@@ -24255,16 +24509,6 @@ function verifySemanticsOfNgModuleDef(moduleType, allowDuplicateDeclarationsInRo
|
|
|
24255
24509
|
`function for bootstrap instead.`);
|
|
24256
24510
|
}
|
|
24257
24511
|
}
|
|
24258
|
-
function verifyComponentEntryComponentsIsPartOfNgModule(type) {
|
|
24259
|
-
type = resolveForwardRef(type);
|
|
24260
|
-
if (getComponentDef(type)) {
|
|
24261
|
-
// We know we are component
|
|
24262
|
-
const component = getAnnotation(type, 'Component');
|
|
24263
|
-
if (component && component.entryComponents) {
|
|
24264
|
-
deepForEach(component.entryComponents, verifyComponentIsPartOfNgModule);
|
|
24265
|
-
}
|
|
24266
|
-
}
|
|
24267
|
-
}
|
|
24268
24512
|
function verifySemanticsOfNgModuleImport(type, importingModule) {
|
|
24269
24513
|
type = resolveForwardRef(type);
|
|
24270
24514
|
const directiveDef = getComponentDef(type) || getDirectiveDef(type);
|
|
@@ -25105,7 +25349,7 @@ const NgModule = makeDecorator('NgModule', (ngModule) => ngModule, undefined, un
|
|
|
25105
25349
|
* Decorator that marks the following class as an NgModule, and supplies
|
|
25106
25350
|
* configuration metadata for it.
|
|
25107
25351
|
*
|
|
25108
|
-
* * The `declarations`
|
|
25352
|
+
* * The `declarations` option configures the compiler
|
|
25109
25353
|
* with information about what belongs to the NgModule.
|
|
25110
25354
|
* * The `providers` options configures the NgModule's injector to provide
|
|
25111
25355
|
* dependencies the NgModule members.
|
|
@@ -25261,9 +25505,9 @@ class ApplicationInitStatus {
|
|
|
25261
25505
|
}
|
|
25262
25506
|
this.initialized = true;
|
|
25263
25507
|
}
|
|
25508
|
+
static { this.ɵfac = function ApplicationInitStatus_Factory(t) { return new (t || ApplicationInitStatus)(); }; }
|
|
25509
|
+
static { this.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: ApplicationInitStatus, factory: ApplicationInitStatus.ɵfac, providedIn: 'root' }); }
|
|
25264
25510
|
}
|
|
25265
|
-
ApplicationInitStatus.ɵfac = function ApplicationInitStatus_Factory(t) { return new (t || ApplicationInitStatus)(); };
|
|
25266
|
-
ApplicationInitStatus.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: ApplicationInitStatus, factory: ApplicationInitStatus.ɵfac, providedIn: 'root' });
|
|
25267
25511
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ApplicationInitStatus, [{
|
|
25268
25512
|
type: Injectable,
|
|
25269
25513
|
args: [{ providedIn: 'root' }]
|
|
@@ -25279,9 +25523,9 @@ class Console {
|
|
|
25279
25523
|
// tslint:disable-next-line:no-console
|
|
25280
25524
|
console.warn(message);
|
|
25281
25525
|
}
|
|
25526
|
+
static { this.ɵfac = function Console_Factory(t) { return new (t || Console)(); }; }
|
|
25527
|
+
static { this.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: Console, factory: Console.ɵfac, providedIn: 'platform' }); }
|
|
25282
25528
|
}
|
|
25283
|
-
Console.ɵfac = function Console_Factory(t) { return new (t || Console)(); };
|
|
25284
|
-
Console.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: Console, factory: Console.ɵfac, providedIn: 'platform' });
|
|
25285
25529
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(Console, [{
|
|
25286
25530
|
type: Injectable,
|
|
25287
25531
|
args: [{ providedIn: 'platform' }]
|
|
@@ -25493,8 +25737,8 @@ class ModuleWithComponentFactories {
|
|
|
25493
25737
|
*/
|
|
25494
25738
|
class Compiler {
|
|
25495
25739
|
/**
|
|
25496
|
-
* Compiles the given NgModule and all of its components. All templates of the components
|
|
25497
|
-
*
|
|
25740
|
+
* Compiles the given NgModule and all of its components. All templates of the components
|
|
25741
|
+
* have to be inlined.
|
|
25498
25742
|
*/
|
|
25499
25743
|
compileModuleSync(moduleType) {
|
|
25500
25744
|
return new NgModuleFactory(moduleType);
|
|
@@ -25539,9 +25783,9 @@ class Compiler {
|
|
|
25539
25783
|
getModuleId(moduleType) {
|
|
25540
25784
|
return undefined;
|
|
25541
25785
|
}
|
|
25786
|
+
static { this.ɵfac = function Compiler_Factory(t) { return new (t || Compiler)(); }; }
|
|
25787
|
+
static { this.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: Compiler, factory: Compiler.ɵfac, providedIn: 'root' }); }
|
|
25542
25788
|
}
|
|
25543
|
-
Compiler.ɵfac = function Compiler_Factory(t) { return new (t || Compiler)(); };
|
|
25544
|
-
Compiler.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: Compiler, factory: Compiler.ɵfac, providedIn: 'root' });
|
|
25545
25789
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(Compiler, [{
|
|
25546
25790
|
type: Injectable,
|
|
25547
25791
|
args: [{ providedIn: 'root' }]
|
|
@@ -26356,9 +26600,9 @@ class Testability {
|
|
|
26356
26600
|
// TODO(juliemr): implement.
|
|
26357
26601
|
return [];
|
|
26358
26602
|
}
|
|
26603
|
+
static { this.ɵfac = function Testability_Factory(t) { return new (t || Testability)(ɵɵinject(NgZone), ɵɵinject(TestabilityRegistry), ɵɵinject(TESTABILITY_GETTER)); }; }
|
|
26604
|
+
static { this.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: Testability, factory: Testability.ɵfac }); }
|
|
26359
26605
|
}
|
|
26360
|
-
Testability.ɵfac = function Testability_Factory(t) { return new (t || Testability)(ɵɵinject(NgZone), ɵɵinject(TestabilityRegistry), ɵɵinject(TESTABILITY_GETTER)); };
|
|
26361
|
-
Testability.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: Testability, factory: Testability.ɵfac });
|
|
26362
26606
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(Testability, [{
|
|
26363
26607
|
type: Injectable
|
|
26364
26608
|
}], function () { return [{ type: NgZone }, { type: TestabilityRegistry }, { type: undefined, decorators: [{
|
|
@@ -26423,9 +26667,9 @@ class TestabilityRegistry {
|
|
|
26423
26667
|
findTestabilityInTree(elem, findInAncestors = true) {
|
|
26424
26668
|
return _testabilityGetter?.findTestabilityInTree(this, elem, findInAncestors) ?? null;
|
|
26425
26669
|
}
|
|
26670
|
+
static { this.ɵfac = function TestabilityRegistry_Factory(t) { return new (t || TestabilityRegistry)(); }; }
|
|
26671
|
+
static { this.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: TestabilityRegistry, factory: TestabilityRegistry.ɵfac, providedIn: 'platform' }); }
|
|
26426
26672
|
}
|
|
26427
|
-
TestabilityRegistry.ɵfac = function TestabilityRegistry_Factory(t) { return new (t || TestabilityRegistry)(); };
|
|
26428
|
-
TestabilityRegistry.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: TestabilityRegistry, factory: TestabilityRegistry.ɵfac, providedIn: 'platform' });
|
|
26429
26673
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(TestabilityRegistry, [{
|
|
26430
26674
|
type: Injectable,
|
|
26431
26675
|
args: [{ providedIn: 'platform' }]
|
|
@@ -26439,7 +26683,6 @@ function setTestabilityGetter(getter) {
|
|
|
26439
26683
|
}
|
|
26440
26684
|
let _testabilityGetter;
|
|
26441
26685
|
|
|
26442
|
-
const NG_DEV_MODE = typeof ngDevMode === 'undefined' || ngDevMode;
|
|
26443
26686
|
let _platformInjector = null;
|
|
26444
26687
|
/**
|
|
26445
26688
|
* Internal token to indicate whether having multiple bootstrapped platform should be allowed (only
|
|
@@ -26570,7 +26813,7 @@ function runPlatformInitializers(injector) {
|
|
|
26570
26813
|
*/
|
|
26571
26814
|
function internalCreateApplication(config) {
|
|
26572
26815
|
const { rootComponent, appProviders, platformProviders } = config;
|
|
26573
|
-
if (
|
|
26816
|
+
if ((typeof ngDevMode === 'undefined' || ngDevMode) && rootComponent !== undefined) {
|
|
26574
26817
|
assertStandaloneComponentType(rootComponent);
|
|
26575
26818
|
}
|
|
26576
26819
|
const platformInjector = createOrReusePlatformInjector(platformProviders);
|
|
@@ -26584,7 +26827,7 @@ function internalCreateApplication(config) {
|
|
|
26584
26827
|
];
|
|
26585
26828
|
const envInjector = createEnvironmentInjector(allAppProviders, platformInjector, 'Environment Injector');
|
|
26586
26829
|
const exceptionHandler = envInjector.get(ErrorHandler, null);
|
|
26587
|
-
if (
|
|
26830
|
+
if ((typeof ngDevMode === 'undefined' || ngDevMode) && !exceptionHandler) {
|
|
26588
26831
|
throw new RuntimeError(402 /* RuntimeErrorCode.MISSING_REQUIRED_INJECTABLE_IN_BOOTSTRAP */, 'No `ErrorHandler` found in the Dependency Injection tree.');
|
|
26589
26832
|
}
|
|
26590
26833
|
let onErrorSubscription;
|
|
@@ -26734,7 +26977,7 @@ class PlatformRef {
|
|
|
26734
26977
|
return ngZone.run(() => {
|
|
26735
26978
|
const moduleRef = createNgModuleRefWithProviders(moduleFactory.moduleType, this.injector, provideNgZoneChangeDetection(ngZone));
|
|
26736
26979
|
const exceptionHandler = moduleRef.injector.get(ErrorHandler, null);
|
|
26737
|
-
if (
|
|
26980
|
+
if ((typeof ngDevMode === 'undefined' || ngDevMode) && exceptionHandler === null) {
|
|
26738
26981
|
throw new RuntimeError(402 /* RuntimeErrorCode.MISSING_REQUIRED_INJECTABLE_IN_BOOTSTRAP */, 'No ErrorHandler. Is platform module (BrowserModule) included?');
|
|
26739
26982
|
}
|
|
26740
26983
|
ngZone.runOutsideAngular(() => {
|
|
@@ -26834,9 +27077,9 @@ class PlatformRef {
|
|
|
26834
27077
|
get destroyed() {
|
|
26835
27078
|
return this._destroyed;
|
|
26836
27079
|
}
|
|
27080
|
+
static { this.ɵfac = function PlatformRef_Factory(t) { return new (t || PlatformRef)(ɵɵinject(Injector)); }; }
|
|
27081
|
+
static { this.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: PlatformRef, factory: PlatformRef.ɵfac, providedIn: 'platform' }); }
|
|
26837
27082
|
}
|
|
26838
|
-
PlatformRef.ɵfac = function PlatformRef_Factory(t) { return new (t || PlatformRef)(ɵɵinject(Injector)); };
|
|
26839
|
-
PlatformRef.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: PlatformRef, factory: PlatformRef.ɵfac, providedIn: 'platform' });
|
|
26840
27083
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(PlatformRef, [{
|
|
26841
27084
|
type: Injectable,
|
|
26842
27085
|
args: [{ providedIn: 'platform' }]
|
|
@@ -27051,7 +27294,7 @@ class ApplicationRef {
|
|
|
27051
27294
|
* {@example core/ts/platform/platform.ts region='domNode'}
|
|
27052
27295
|
*/
|
|
27053
27296
|
bootstrap(componentOrFactory, rootSelectorOrNode) {
|
|
27054
|
-
|
|
27297
|
+
(typeof ngDevMode === 'undefined' || ngDevMode) && this.warnIfDestroyed();
|
|
27055
27298
|
const isComponentFactory = componentOrFactory instanceof ComponentFactory$1;
|
|
27056
27299
|
const initStatus = this._injector.get(ApplicationInitStatus);
|
|
27057
27300
|
if (!initStatus.done) {
|
|
@@ -27059,7 +27302,7 @@ class ApplicationRef {
|
|
|
27059
27302
|
const errorMessage = 'Cannot bootstrap as there are still asynchronous initializers running.' +
|
|
27060
27303
|
(standalone ? '' :
|
|
27061
27304
|
' Bootstrap components in the `ngDoBootstrap` method of the root module.');
|
|
27062
|
-
throw new RuntimeError(405 /* RuntimeErrorCode.ASYNC_INITIALIZERS_STILL_RUNNING */,
|
|
27305
|
+
throw new RuntimeError(405 /* RuntimeErrorCode.ASYNC_INITIALIZERS_STILL_RUNNING */, (typeof ngDevMode === 'undefined' || ngDevMode) && errorMessage);
|
|
27063
27306
|
}
|
|
27064
27307
|
let componentFactory;
|
|
27065
27308
|
if (isComponentFactory) {
|
|
@@ -27100,7 +27343,7 @@ class ApplicationRef {
|
|
|
27100
27343
|
* detection pass during which all change detection must complete.
|
|
27101
27344
|
*/
|
|
27102
27345
|
tick() {
|
|
27103
|
-
|
|
27346
|
+
(typeof ngDevMode === 'undefined' || ngDevMode) && this.warnIfDestroyed();
|
|
27104
27347
|
if (this._runningTick) {
|
|
27105
27348
|
throw new RuntimeError(101 /* RuntimeErrorCode.RECURSIVE_APPLICATION_REF_TICK */, ngDevMode && 'ApplicationRef.tick is called recursively');
|
|
27106
27349
|
}
|
|
@@ -27129,7 +27372,7 @@ class ApplicationRef {
|
|
|
27129
27372
|
* This will throw if the view is already attached to a ViewContainer.
|
|
27130
27373
|
*/
|
|
27131
27374
|
attachView(viewRef) {
|
|
27132
|
-
|
|
27375
|
+
(typeof ngDevMode === 'undefined' || ngDevMode) && this.warnIfDestroyed();
|
|
27133
27376
|
const view = viewRef;
|
|
27134
27377
|
this._views.push(view);
|
|
27135
27378
|
view.attachToAppRef(this);
|
|
@@ -27138,7 +27381,7 @@ class ApplicationRef {
|
|
|
27138
27381
|
* Detaches a view from dirty checking again.
|
|
27139
27382
|
*/
|
|
27140
27383
|
detachView(viewRef) {
|
|
27141
|
-
|
|
27384
|
+
(typeof ngDevMode === 'undefined' || ngDevMode) && this.warnIfDestroyed();
|
|
27142
27385
|
const view = viewRef;
|
|
27143
27386
|
remove(this._views, view);
|
|
27144
27387
|
view.detachFromAppRef();
|
|
@@ -27186,7 +27429,7 @@ class ApplicationRef {
|
|
|
27186
27429
|
* @internal
|
|
27187
27430
|
*/
|
|
27188
27431
|
onDestroy(callback) {
|
|
27189
|
-
|
|
27432
|
+
(typeof ngDevMode === 'undefined' || ngDevMode) && this.warnIfDestroyed();
|
|
27190
27433
|
this._destroyListeners.push(callback);
|
|
27191
27434
|
return () => remove(this._destroyListeners, callback);
|
|
27192
27435
|
}
|
|
@@ -27214,13 +27457,13 @@ class ApplicationRef {
|
|
|
27214
27457
|
return this._views.length;
|
|
27215
27458
|
}
|
|
27216
27459
|
warnIfDestroyed() {
|
|
27217
|
-
if (
|
|
27460
|
+
if ((typeof ngDevMode === 'undefined' || ngDevMode) && this._destroyed) {
|
|
27218
27461
|
console.warn(formatRuntimeError(406 /* RuntimeErrorCode.APPLICATION_REF_ALREADY_DESTROYED */, 'This instance of the `ApplicationRef` has already been destroyed.'));
|
|
27219
27462
|
}
|
|
27220
27463
|
}
|
|
27464
|
+
static { this.ɵfac = function ApplicationRef_Factory(t) { return new (t || ApplicationRef)(); }; }
|
|
27465
|
+
static { this.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: ApplicationRef, factory: ApplicationRef.ɵfac, providedIn: 'root' }); }
|
|
27221
27466
|
}
|
|
27222
|
-
ApplicationRef.ɵfac = function ApplicationRef_Factory(t) { return new (t || ApplicationRef)(); };
|
|
27223
|
-
ApplicationRef.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: ApplicationRef, factory: ApplicationRef.ɵfac, providedIn: 'root' });
|
|
27224
27467
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ApplicationRef, [{
|
|
27225
27468
|
type: Injectable,
|
|
27226
27469
|
args: [{ providedIn: 'root' }]
|
|
@@ -27245,7 +27488,7 @@ function _lastDefined(args) {
|
|
|
27245
27488
|
* `NgZone` is provided by default today so the default (and only) implementation for this
|
|
27246
27489
|
* is calling `ErrorHandler.handleError` outside of the Angular zone.
|
|
27247
27490
|
*/
|
|
27248
|
-
const INTERNAL_APPLICATION_ERROR_HANDLER = new InjectionToken(
|
|
27491
|
+
const INTERNAL_APPLICATION_ERROR_HANDLER = new InjectionToken((typeof ngDevMode === 'undefined' || ngDevMode) ? 'internal error handler' : '', {
|
|
27249
27492
|
providedIn: 'root',
|
|
27250
27493
|
factory: () => {
|
|
27251
27494
|
const userErrorHandler = inject(ErrorHandler);
|
|
@@ -27277,9 +27520,9 @@ class NgZoneChangeDetectionScheduler {
|
|
|
27277
27520
|
ngOnDestroy() {
|
|
27278
27521
|
this._onMicrotaskEmptySubscription?.unsubscribe();
|
|
27279
27522
|
}
|
|
27523
|
+
static { this.ɵfac = function NgZoneChangeDetectionScheduler_Factory(t) { return new (t || NgZoneChangeDetectionScheduler)(); }; }
|
|
27524
|
+
static { this.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: NgZoneChangeDetectionScheduler, factory: NgZoneChangeDetectionScheduler.ɵfac, providedIn: 'root' }); }
|
|
27280
27525
|
}
|
|
27281
|
-
NgZoneChangeDetectionScheduler.ɵfac = function NgZoneChangeDetectionScheduler_Factory(t) { return new (t || NgZoneChangeDetectionScheduler)(); };
|
|
27282
|
-
NgZoneChangeDetectionScheduler.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: NgZoneChangeDetectionScheduler, factory: NgZoneChangeDetectionScheduler.ɵfac, providedIn: 'root' });
|
|
27283
27526
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(NgZoneChangeDetectionScheduler, [{
|
|
27284
27527
|
type: Injectable,
|
|
27285
27528
|
args: [{ providedIn: 'root' }]
|
|
@@ -27292,8 +27535,10 @@ function provideNgZoneChangeDetection(ngZone) {
|
|
|
27292
27535
|
multi: true,
|
|
27293
27536
|
useFactory: () => {
|
|
27294
27537
|
const ngZoneChangeDetectionScheduler = inject(NgZoneChangeDetectionScheduler, { optional: true });
|
|
27295
|
-
if (
|
|
27296
|
-
|
|
27538
|
+
if ((typeof ngDevMode === 'undefined' || ngDevMode) &&
|
|
27539
|
+
ngZoneChangeDetectionScheduler === null) {
|
|
27540
|
+
throw new RuntimeError(402 /* RuntimeErrorCode.MISSING_REQUIRED_INJECTABLE_IN_BOOTSTRAP */, `A required Injectable was not found in the dependency injection tree. ` +
|
|
27541
|
+
'If you are bootstrapping an NgModule, make sure that the `BrowserModule` is imported.');
|
|
27297
27542
|
}
|
|
27298
27543
|
return () => ngZoneChangeDetectionScheduler.initialize();
|
|
27299
27544
|
},
|
|
@@ -27350,17 +27595,17 @@ function enableProdMode() {
|
|
|
27350
27595
|
* @publicApi
|
|
27351
27596
|
*/
|
|
27352
27597
|
class DestroyRef {
|
|
27598
|
+
/**
|
|
27599
|
+
* @internal
|
|
27600
|
+
* @nocollapse
|
|
27601
|
+
*/
|
|
27602
|
+
static { this.__NG_ELEMENT_ID__ = injectDestroyRef; }
|
|
27603
|
+
/**
|
|
27604
|
+
* @internal
|
|
27605
|
+
* @nocollapse
|
|
27606
|
+
*/
|
|
27607
|
+
static { this.__NG_ENV_ID__ = (injector) => injector; }
|
|
27353
27608
|
}
|
|
27354
|
-
/**
|
|
27355
|
-
* @internal
|
|
27356
|
-
* @nocollapse
|
|
27357
|
-
*/
|
|
27358
|
-
DestroyRef.__NG_ELEMENT_ID__ = injectDestroyRef;
|
|
27359
|
-
/**
|
|
27360
|
-
* @internal
|
|
27361
|
-
* @nocollapse
|
|
27362
|
-
*/
|
|
27363
|
-
DestroyRef.__NG_ENV_ID__ = (injector) => injector;
|
|
27364
27609
|
class NodeInjectorDestroyRef extends DestroyRef {
|
|
27365
27610
|
constructor(_lView) {
|
|
27366
27611
|
super();
|
|
@@ -27450,12 +27695,12 @@ function noModuleError(id) {
|
|
|
27450
27695
|
* @publicApi
|
|
27451
27696
|
*/
|
|
27452
27697
|
class ChangeDetectorRef {
|
|
27698
|
+
/**
|
|
27699
|
+
* @internal
|
|
27700
|
+
* @nocollapse
|
|
27701
|
+
*/
|
|
27702
|
+
static { this.__NG_ELEMENT_ID__ = injectChangeDetectorRef; }
|
|
27453
27703
|
}
|
|
27454
|
-
/**
|
|
27455
|
-
* @internal
|
|
27456
|
-
* @nocollapse
|
|
27457
|
-
*/
|
|
27458
|
-
ChangeDetectorRef.__NG_ELEMENT_ID__ = injectChangeDetectorRef;
|
|
27459
27704
|
/** Returns a ChangeDetectorRef (a.k.a. a ViewRef) */
|
|
27460
27705
|
function injectChangeDetectorRef(flags) {
|
|
27461
27706
|
return createViewRef(getCurrentTNode(), getLView(), (flags & 16 /* InternalInjectFlags.ForPipe */) === 16 /* InternalInjectFlags.ForPipe */);
|
|
@@ -29033,6 +29278,8 @@ function defaultIterableDiffersFactory() {
|
|
|
29033
29278
|
* @publicApi
|
|
29034
29279
|
*/
|
|
29035
29280
|
class IterableDiffers {
|
|
29281
|
+
/** @nocollapse */
|
|
29282
|
+
static { this.ɵprov = ɵɵdefineInjectable({ token: IterableDiffers, providedIn: 'root', factory: defaultIterableDiffersFactory }); }
|
|
29036
29283
|
constructor(factories) {
|
|
29037
29284
|
this.factories = factories;
|
|
29038
29285
|
}
|
|
@@ -29087,8 +29334,6 @@ class IterableDiffers {
|
|
|
29087
29334
|
}
|
|
29088
29335
|
}
|
|
29089
29336
|
}
|
|
29090
|
-
/** @nocollapse */
|
|
29091
|
-
IterableDiffers.ɵprov = ɵɵdefineInjectable({ token: IterableDiffers, providedIn: 'root', factory: defaultIterableDiffersFactory });
|
|
29092
29337
|
function getTypeNameForDebugging(type) {
|
|
29093
29338
|
return type['name'] || typeof type;
|
|
29094
29339
|
}
|
|
@@ -29102,6 +29347,8 @@ function defaultKeyValueDiffersFactory() {
|
|
|
29102
29347
|
* @publicApi
|
|
29103
29348
|
*/
|
|
29104
29349
|
class KeyValueDiffers {
|
|
29350
|
+
/** @nocollapse */
|
|
29351
|
+
static { this.ɵprov = ɵɵdefineInjectable({ token: KeyValueDiffers, providedIn: 'root', factory: defaultKeyValueDiffersFactory }); }
|
|
29105
29352
|
constructor(factories) {
|
|
29106
29353
|
this.factories = factories;
|
|
29107
29354
|
}
|
|
@@ -29153,8 +29400,6 @@ class KeyValueDiffers {
|
|
|
29153
29400
|
throw new RuntimeError(901 /* RuntimeErrorCode.NO_SUPPORTING_DIFFER_FACTORY */, ngDevMode && `Cannot find a differ supporting object '${kv}'`);
|
|
29154
29401
|
}
|
|
29155
29402
|
}
|
|
29156
|
-
/** @nocollapse */
|
|
29157
|
-
KeyValueDiffers.ɵprov = ɵɵdefineInjectable({ token: KeyValueDiffers, providedIn: 'root', factory: defaultKeyValueDiffersFactory });
|
|
29158
29403
|
|
|
29159
29404
|
/**
|
|
29160
29405
|
* Structural diffing for `Object`s and `Map`s.
|
|
@@ -29190,10 +29435,10 @@ const platformCore = createPlatformFactory(null, 'core', []);
|
|
|
29190
29435
|
class ApplicationModule {
|
|
29191
29436
|
// Inject ApplicationRef to make it eager...
|
|
29192
29437
|
constructor(appRef) { }
|
|
29438
|
+
static { this.ɵfac = function ApplicationModule_Factory(t) { return new (t || ApplicationModule)(ɵɵinject(ApplicationRef)); }; }
|
|
29439
|
+
static { this.ɵmod = /*@__PURE__*/ ɵɵdefineNgModule({ type: ApplicationModule }); }
|
|
29440
|
+
static { this.ɵinj = /*@__PURE__*/ ɵɵdefineInjector({}); }
|
|
29193
29441
|
}
|
|
29194
|
-
ApplicationModule.ɵfac = function ApplicationModule_Factory(t) { return new (t || ApplicationModule)(ɵɵinject(ApplicationRef)); };
|
|
29195
|
-
ApplicationModule.ɵmod = /*@__PURE__*/ ɵɵdefineNgModule({ type: ApplicationModule });
|
|
29196
|
-
ApplicationModule.ɵinj = /*@__PURE__*/ ɵɵdefineInjector({});
|
|
29197
29442
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ApplicationModule, [{
|
|
29198
29443
|
type: NgModule
|
|
29199
29444
|
}], function () { return [{ type: ApplicationRef }]; }, null); })();
|
|
@@ -29326,7 +29571,7 @@ function serializeLContainer(lContainer, context) {
|
|
|
29326
29571
|
const currentViewAsString = JSON.stringify(view);
|
|
29327
29572
|
if (views.length > 0 && currentViewAsString === lastViewAsString) {
|
|
29328
29573
|
const previousView = views[views.length - 1];
|
|
29329
|
-
previousView[MULTIPLIER]
|
|
29574
|
+
previousView[MULTIPLIER] ??= 1;
|
|
29330
29575
|
previousView[MULTIPLIER]++;
|
|
29331
29576
|
}
|
|
29332
29577
|
else {
|
|
@@ -29344,9 +29589,21 @@ function serializeLContainer(lContainer, context) {
|
|
|
29344
29589
|
*/
|
|
29345
29590
|
function appendSerializedNodePath(ngh, tNode, lView) {
|
|
29346
29591
|
const noOffsetIndex = tNode.index - HEADER_OFFSET;
|
|
29347
|
-
ngh[NODES]
|
|
29592
|
+
ngh[NODES] ??= {};
|
|
29348
29593
|
ngh[NODES][noOffsetIndex] = calcPathForNode(tNode, lView);
|
|
29349
29594
|
}
|
|
29595
|
+
/**
|
|
29596
|
+
* Helper function to append information about a disconnected node.
|
|
29597
|
+
* This info is needed at runtime to avoid DOM lookups for this element
|
|
29598
|
+
* and instead, the element would be created from scratch.
|
|
29599
|
+
*/
|
|
29600
|
+
function appendDisconnectedNodeIndex(ngh, tNode) {
|
|
29601
|
+
const noOffsetIndex = tNode.index - HEADER_OFFSET;
|
|
29602
|
+
ngh[DISCONNECTED_NODES] ??= [];
|
|
29603
|
+
if (!ngh[DISCONNECTED_NODES].includes(noOffsetIndex)) {
|
|
29604
|
+
ngh[DISCONNECTED_NODES].push(noOffsetIndex);
|
|
29605
|
+
}
|
|
29606
|
+
}
|
|
29350
29607
|
/**
|
|
29351
29608
|
* There is no special TNode type for an i18n block, so we verify
|
|
29352
29609
|
* whether the structure that we store at the `TView.data[idx]` position
|
|
@@ -29386,14 +29643,8 @@ function serializeLView(lView, context) {
|
|
|
29386
29643
|
// This situation may happen during the content projection, when some nodes don't make it
|
|
29387
29644
|
// into one of the content projection slots (for example, when there is no default
|
|
29388
29645
|
// <ng-content /> slot in projector component's template).
|
|
29389
|
-
|
|
29390
|
-
|
|
29391
|
-
// layer (in Domino) for now. Longer-term solution should not rely on the DOM emulation and
|
|
29392
|
-
// only use internal data structures and state to compute this information.
|
|
29393
|
-
if (!(tNode.type & 16 /* TNodeType.Projection */) && !!lView[i] &&
|
|
29394
|
-
!unwrapRNode(lView[i]).isConnected) {
|
|
29395
|
-
ngh[DISCONNECTED_NODES] ?? (ngh[DISCONNECTED_NODES] = []);
|
|
29396
|
-
ngh[DISCONNECTED_NODES].push(noOffsetIndex);
|
|
29646
|
+
if (isDisconnectedNode(tNode, lView) && isContentProjectedNode(tNode)) {
|
|
29647
|
+
appendDisconnectedNodeIndex(ngh, tNode);
|
|
29397
29648
|
continue;
|
|
29398
29649
|
}
|
|
29399
29650
|
if (Array.isArray(tNode.projection)) {
|
|
@@ -29408,7 +29659,16 @@ function serializeLView(lView, context) {
|
|
|
29408
29659
|
// a parent lView, which contains those nodes.
|
|
29409
29660
|
if (!isProjectionTNode(projectionHeadTNode) &&
|
|
29410
29661
|
!isInSkipHydrationBlock(projectionHeadTNode)) {
|
|
29411
|
-
|
|
29662
|
+
if (isDisconnectedNode(projectionHeadTNode, lView)) {
|
|
29663
|
+
// Check whether this node is connected, since we may have a TNode
|
|
29664
|
+
// in the data structure as a projection segment head, but the
|
|
29665
|
+
// content projection slot might be disabled (e.g.
|
|
29666
|
+
// <ng-content *ngIf="false" />).
|
|
29667
|
+
appendDisconnectedNodeIndex(ngh, projectionHeadTNode);
|
|
29668
|
+
}
|
|
29669
|
+
else {
|
|
29670
|
+
appendSerializedNodePath(ngh, projectionHeadTNode, lView);
|
|
29671
|
+
}
|
|
29412
29672
|
}
|
|
29413
29673
|
}
|
|
29414
29674
|
else {
|
|
@@ -29428,7 +29688,7 @@ function serializeLView(lView, context) {
|
|
|
29428
29688
|
// Serialize information about a template.
|
|
29429
29689
|
const embeddedTView = tNode.tView;
|
|
29430
29690
|
if (embeddedTView !== null) {
|
|
29431
|
-
ngh[TEMPLATES]
|
|
29691
|
+
ngh[TEMPLATES] ??= {};
|
|
29432
29692
|
ngh[TEMPLATES][noOffsetIndex] = getSsrId(embeddedTView);
|
|
29433
29693
|
}
|
|
29434
29694
|
// Serialize views within this LContainer.
|
|
@@ -29443,7 +29703,7 @@ function serializeLView(lView, context) {
|
|
|
29443
29703
|
annotateHostElementForHydration(targetNode, hostNode, context);
|
|
29444
29704
|
}
|
|
29445
29705
|
}
|
|
29446
|
-
ngh[CONTAINERS]
|
|
29706
|
+
ngh[CONTAINERS] ??= {};
|
|
29447
29707
|
ngh[CONTAINERS][noOffsetIndex] = serializeLContainer(lView[i], context);
|
|
29448
29708
|
}
|
|
29449
29709
|
else if (Array.isArray(lView[i])) {
|
|
@@ -29471,7 +29731,7 @@ function serializeLView(lView, context) {
|
|
|
29471
29731
|
// An <ng-container> is represented by the number of
|
|
29472
29732
|
// top-level nodes. This information is needed to skip over
|
|
29473
29733
|
// those nodes to reach a corresponding anchor node (comment node).
|
|
29474
|
-
ngh[ELEMENT_CONTAINERS]
|
|
29734
|
+
ngh[ELEMENT_CONTAINERS] ??= {};
|
|
29475
29735
|
ngh[ELEMENT_CONTAINERS][noOffsetIndex] = calcNumRootNodes(tView, lView, tNode.child);
|
|
29476
29736
|
}
|
|
29477
29737
|
else if (tNode.type & 16 /* TNodeType.Projection */) {
|
|
@@ -29563,32 +29823,122 @@ function insertCorruptedTextNodeMarkers(corruptedTextNodes, doc) {
|
|
|
29563
29823
|
textNode.after(doc.createComment(marker));
|
|
29564
29824
|
}
|
|
29565
29825
|
}
|
|
29566
|
-
|
|
29567
29826
|
/**
|
|
29568
|
-
*
|
|
29569
|
-
*
|
|
29827
|
+
* Detects whether a given TNode represents a node that
|
|
29828
|
+
* is being content projected.
|
|
29570
29829
|
*/
|
|
29571
|
-
|
|
29830
|
+
function isContentProjectedNode(tNode) {
|
|
29831
|
+
let currentTNode = tNode;
|
|
29832
|
+
while (currentTNode != null) {
|
|
29833
|
+
// If we come across a component host node in parent nodes -
|
|
29834
|
+
// this TNode is in the content projection section.
|
|
29835
|
+
if (isComponentHost(currentTNode)) {
|
|
29836
|
+
return true;
|
|
29837
|
+
}
|
|
29838
|
+
currentTNode = currentTNode.parent;
|
|
29839
|
+
}
|
|
29840
|
+
return false;
|
|
29841
|
+
}
|
|
29572
29842
|
/**
|
|
29573
|
-
*
|
|
29574
|
-
* The code is only present when the `provideHydrationSupport` is
|
|
29575
|
-
* invoked. Otherwise, this code is tree-shaken away during the
|
|
29576
|
-
* build optimization step.
|
|
29843
|
+
* Check whether a given node exists, but is disconnected from the DOM.
|
|
29577
29844
|
*
|
|
29578
|
-
*
|
|
29579
|
-
*
|
|
29580
|
-
*
|
|
29581
|
-
* supports hydration only when enabled.
|
|
29845
|
+
* Note: we leverage the fact that we have this information available in the DOM emulation
|
|
29846
|
+
* layer (in Domino) for now. Longer-term solution should not rely on the DOM emulation and
|
|
29847
|
+
* only use internal data structures and state to compute this information.
|
|
29582
29848
|
*/
|
|
29583
|
-
function
|
|
29584
|
-
|
|
29585
|
-
|
|
29586
|
-
|
|
29587
|
-
|
|
29588
|
-
|
|
29589
|
-
|
|
29590
|
-
|
|
29591
|
-
|
|
29849
|
+
function isDisconnectedNode(tNode, lView) {
|
|
29850
|
+
return !(tNode.type & 16 /* TNodeType.Projection */) && !!lView[tNode.index] &&
|
|
29851
|
+
!unwrapRNode(lView[tNode.index]).isConnected;
|
|
29852
|
+
}
|
|
29853
|
+
|
|
29854
|
+
/**
|
|
29855
|
+
* *Internal* service that keeps track of pending tasks happening in the system
|
|
29856
|
+
* during the initial rendering. No tasks are tracked after an initial
|
|
29857
|
+
* rendering.
|
|
29858
|
+
*
|
|
29859
|
+
* This information is needed to make sure that the serialization on the server
|
|
29860
|
+
* is delayed until all tasks in the queue (such as an initial navigation or a
|
|
29861
|
+
* pending HTTP request) are completed.
|
|
29862
|
+
*/
|
|
29863
|
+
class InitialRenderPendingTasks {
|
|
29864
|
+
get whenAllTasksComplete() {
|
|
29865
|
+
if (this.collection.size > 0) {
|
|
29866
|
+
return this.promise;
|
|
29867
|
+
}
|
|
29868
|
+
return Promise.resolve().then(() => {
|
|
29869
|
+
this.completed = true;
|
|
29870
|
+
});
|
|
29871
|
+
}
|
|
29872
|
+
constructor() {
|
|
29873
|
+
this.taskId = 0;
|
|
29874
|
+
this.collection = new Set();
|
|
29875
|
+
this.ngZone = inject(NgZone);
|
|
29876
|
+
this.completed = false;
|
|
29877
|
+
// Run outside of the Angular zone to avoid triggering
|
|
29878
|
+
// extra change detection cycles.
|
|
29879
|
+
this.ngZone.runOutsideAngular(() => {
|
|
29880
|
+
this.promise = new Promise((resolve) => {
|
|
29881
|
+
this.resolve = resolve;
|
|
29882
|
+
});
|
|
29883
|
+
});
|
|
29884
|
+
}
|
|
29885
|
+
add() {
|
|
29886
|
+
if (this.completed) {
|
|
29887
|
+
// Indicates that the task was added after
|
|
29888
|
+
// the task queue completion, so it's a noop.
|
|
29889
|
+
return -1;
|
|
29890
|
+
}
|
|
29891
|
+
const taskId = this.taskId++;
|
|
29892
|
+
this.collection.add(taskId);
|
|
29893
|
+
return taskId;
|
|
29894
|
+
}
|
|
29895
|
+
remove(taskId) {
|
|
29896
|
+
if (this.completed)
|
|
29897
|
+
return;
|
|
29898
|
+
this.collection.delete(taskId);
|
|
29899
|
+
if (this.collection.size === 0) {
|
|
29900
|
+
// We've removed the last task, resolve the promise.
|
|
29901
|
+
this.completed = true;
|
|
29902
|
+
this.resolve();
|
|
29903
|
+
}
|
|
29904
|
+
}
|
|
29905
|
+
ngOnDestroy() {
|
|
29906
|
+
this.completed = true;
|
|
29907
|
+
this.collection.clear();
|
|
29908
|
+
}
|
|
29909
|
+
static { this.ɵfac = function InitialRenderPendingTasks_Factory(t) { return new (t || InitialRenderPendingTasks)(); }; }
|
|
29910
|
+
static { this.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: InitialRenderPendingTasks, factory: InitialRenderPendingTasks.ɵfac, providedIn: 'root' }); }
|
|
29911
|
+
}
|
|
29912
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(InitialRenderPendingTasks, [{
|
|
29913
|
+
type: Injectable,
|
|
29914
|
+
args: [{ providedIn: 'root' }]
|
|
29915
|
+
}], function () { return []; }, null); })();
|
|
29916
|
+
|
|
29917
|
+
/**
|
|
29918
|
+
* Indicates whether the hydration-related code was added,
|
|
29919
|
+
* prevents adding it multiple times.
|
|
29920
|
+
*/
|
|
29921
|
+
let isHydrationSupportEnabled = false;
|
|
29922
|
+
/**
|
|
29923
|
+
* Brings the necessary hydration code in tree-shakable manner.
|
|
29924
|
+
* The code is only present when the `provideHydrationSupport` is
|
|
29925
|
+
* invoked. Otherwise, this code is tree-shaken away during the
|
|
29926
|
+
* build optimization step.
|
|
29927
|
+
*
|
|
29928
|
+
* This technique allows us to swap implementations of methods so
|
|
29929
|
+
* tree shaking works appropriately when hydration is disabled or
|
|
29930
|
+
* enabled. It brings in the appropriate version of the method that
|
|
29931
|
+
* supports hydration only when enabled.
|
|
29932
|
+
*/
|
|
29933
|
+
function enableHydrationRuntimeSupport() {
|
|
29934
|
+
if (!isHydrationSupportEnabled) {
|
|
29935
|
+
isHydrationSupportEnabled = true;
|
|
29936
|
+
enableRetrieveHydrationInfoImpl();
|
|
29937
|
+
enableLocateOrCreateElementNodeImpl();
|
|
29938
|
+
enableLocateOrCreateTextNodeImpl();
|
|
29939
|
+
enableLocateOrCreateElementContainerNodeImpl();
|
|
29940
|
+
enableLocateOrCreateContainerAnchorImpl();
|
|
29941
|
+
enableLocateOrCreateContainerRefImpl();
|
|
29592
29942
|
enableFindMatchingDehydratedViewImpl();
|
|
29593
29943
|
enableApplyRootElementTransformImpl();
|
|
29594
29944
|
}
|
|
@@ -29675,7 +30025,8 @@ function provideHydrationSupport() {
|
|
|
29675
30025
|
useFactory: () => {
|
|
29676
30026
|
if (isBrowser()) {
|
|
29677
30027
|
const appRef = inject(ApplicationRef);
|
|
29678
|
-
|
|
30028
|
+
const pendingTasks = inject(InitialRenderPendingTasks);
|
|
30029
|
+
return () => cleanupDehydratedViews(appRef, pendingTasks);
|
|
29679
30030
|
}
|
|
29680
30031
|
return () => { }; // noop
|
|
29681
30032
|
},
|
|
@@ -29694,14 +30045,14 @@ const SIGNAL = Symbol('SIGNAL');
|
|
|
29694
30045
|
* Checks if the given `value` function is a reactive `Signal`.
|
|
29695
30046
|
*/
|
|
29696
30047
|
function isSignal(value) {
|
|
29697
|
-
return value[SIGNAL]
|
|
30048
|
+
return value[SIGNAL] !== undefined;
|
|
29698
30049
|
}
|
|
29699
30050
|
/**
|
|
29700
30051
|
* Converts `fn` into a marked signal function (where `isSignal(fn)` will be `true`), and
|
|
29701
30052
|
* potentially add some set of extra properties (passed as an object record `extraApi`).
|
|
29702
30053
|
*/
|
|
29703
|
-
function createSignalFromFunction(fn, extraApi = {}) {
|
|
29704
|
-
fn[SIGNAL] =
|
|
30054
|
+
function createSignalFromFunction(node, fn, extraApi = {}) {
|
|
30055
|
+
fn[SIGNAL] = node;
|
|
29705
30056
|
// Copy properties from `extraApi` to `fn` to complete the desired API of the `Signal`.
|
|
29706
30057
|
return Object.assign(fn, extraApi);
|
|
29707
30058
|
}
|
|
@@ -29722,141 +30073,18 @@ function defaultEquals(a, b) {
|
|
|
29722
30073
|
// as objects (`typeof null === 'object'`).
|
|
29723
30074
|
return (a === null || typeof a !== 'object') && Object.is(a, b);
|
|
29724
30075
|
}
|
|
29725
|
-
|
|
29726
|
-
/**
|
|
29727
|
-
* Tracks the currently active reactive context (or `null` if there is no active
|
|
29728
|
-
* context).
|
|
29729
|
-
*/
|
|
29730
|
-
let activeConsumer = null;
|
|
29731
|
-
/**
|
|
29732
|
-
* Counter tracking the next `ProducerId` or `ConsumerId`.
|
|
29733
|
-
*/
|
|
29734
|
-
let _nextReactiveId = 0;
|
|
29735
|
-
/**
|
|
29736
|
-
* Get a new `ProducerId` or `ConsumerId`, allocated from the global sequence.
|
|
29737
|
-
*
|
|
29738
|
-
* The value returned is a type intersection of both branded types, and thus can be assigned to
|
|
29739
|
-
* either.
|
|
29740
|
-
*/
|
|
29741
|
-
function nextReactiveId() {
|
|
29742
|
-
return _nextReactiveId++;
|
|
29743
|
-
}
|
|
29744
|
-
/**
|
|
29745
|
-
* Set `consumer` as the active reactive context, and return the previous `Consumer`
|
|
29746
|
-
* (if any) for later restoration.
|
|
29747
|
-
*/
|
|
29748
|
-
function setActiveConsumer(consumer) {
|
|
29749
|
-
const prevConsumer = activeConsumer;
|
|
29750
|
-
activeConsumer = consumer;
|
|
29751
|
-
return prevConsumer;
|
|
29752
|
-
}
|
|
29753
|
-
/**
|
|
29754
|
-
* Notify all `Consumer`s of the given `Producer` that its value may have changed.
|
|
29755
|
-
*/
|
|
29756
|
-
function producerNotifyConsumers(producer) {
|
|
29757
|
-
for (const [consumerId, edge] of producer.consumers) {
|
|
29758
|
-
const consumer = edge.consumerRef.deref();
|
|
29759
|
-
if (consumer === undefined || consumer.trackingVersion !== edge.atTrackingVersion) {
|
|
29760
|
-
producer.consumers.delete(consumerId);
|
|
29761
|
-
consumer?.producers.delete(producer.id);
|
|
29762
|
-
continue;
|
|
29763
|
-
}
|
|
29764
|
-
consumer.notify();
|
|
29765
|
-
}
|
|
29766
|
-
}
|
|
29767
|
-
/**
|
|
29768
|
-
* Record a dependency on the given `Producer` by the current reactive `Consumer` if
|
|
29769
|
-
* one is present.
|
|
29770
|
-
*/
|
|
29771
|
-
function producerAccessed(producer) {
|
|
29772
|
-
if (activeConsumer === null) {
|
|
29773
|
-
return;
|
|
29774
|
-
}
|
|
29775
|
-
// Either create or update the dependency `Edge` in both directions.
|
|
29776
|
-
let edge = activeConsumer.producers.get(producer.id);
|
|
29777
|
-
if (edge === undefined) {
|
|
29778
|
-
edge = {
|
|
29779
|
-
consumerRef: activeConsumer.ref,
|
|
29780
|
-
producerRef: producer.ref,
|
|
29781
|
-
seenValueVersion: producer.valueVersion,
|
|
29782
|
-
atTrackingVersion: activeConsumer.trackingVersion,
|
|
29783
|
-
};
|
|
29784
|
-
activeConsumer.producers.set(producer.id, edge);
|
|
29785
|
-
producer.consumers.set(activeConsumer.id, edge);
|
|
29786
|
-
}
|
|
29787
|
-
else {
|
|
29788
|
-
edge.seenValueVersion = producer.valueVersion;
|
|
29789
|
-
edge.atTrackingVersion = activeConsumer.trackingVersion;
|
|
29790
|
-
}
|
|
29791
|
-
}
|
|
29792
|
-
/**
|
|
29793
|
-
* Checks if a `Producer` has a current value which is different than the value
|
|
29794
|
-
* last seen at a specific version by a `Consumer` which recorded a dependency on
|
|
29795
|
-
* this `Producer`.
|
|
29796
|
-
*/
|
|
29797
|
-
function producerPollStatus(producer, lastSeenValueVersion) {
|
|
29798
|
-
// `producer.valueVersion` may be stale, but a mismatch still means that the value
|
|
29799
|
-
// last seen by the `Consumer` is also stale.
|
|
29800
|
-
if (producer.valueVersion !== lastSeenValueVersion) {
|
|
29801
|
-
return true;
|
|
29802
|
-
}
|
|
29803
|
-
// Trigger the `Producer` to update its `valueVersion` if necessary.
|
|
29804
|
-
producer.checkForChangedValue();
|
|
29805
|
-
// At this point, we can trust `producer.valueVersion`.
|
|
29806
|
-
return producer.valueVersion !== lastSeenValueVersion;
|
|
29807
|
-
}
|
|
29808
|
-
/**
|
|
29809
|
-
* Function called to check the stale status of dependencies (producers) for a given consumer. This
|
|
29810
|
-
* is a verification step before refreshing a given consumer: if none of the the dependencies
|
|
29811
|
-
* reports a semantically new value, then the `Consumer` has not observed a real dependency change
|
|
29812
|
-
* (even though it may have been notified of one).
|
|
29813
|
-
*/
|
|
29814
|
-
function consumerPollValueStatus(consumer) {
|
|
29815
|
-
for (const [producerId, edge] of consumer.producers) {
|
|
29816
|
-
const producer = edge.producerRef.deref();
|
|
29817
|
-
if (producer === undefined || edge.atTrackingVersion !== consumer.trackingVersion) {
|
|
29818
|
-
// This dependency edge is stale, so remove it.
|
|
29819
|
-
consumer.producers.delete(producerId);
|
|
29820
|
-
producer?.consumers.delete(consumer.id);
|
|
29821
|
-
continue;
|
|
29822
|
-
}
|
|
29823
|
-
if (producerPollStatus(producer, edge.seenValueVersion)) {
|
|
29824
|
-
// One of the dependencies reports a real value change.
|
|
29825
|
-
return true;
|
|
29826
|
-
}
|
|
29827
|
-
}
|
|
29828
|
-
// No dependency reported a real value change, so the `Consumer` has also not been
|
|
29829
|
-
// impacted.
|
|
29830
|
-
return false;
|
|
29831
|
-
}
|
|
29832
|
-
|
|
29833
|
-
// `WeakRef` is not always defined in every TS environment where Angular is compiled. Instead,
|
|
29834
|
-
// read it off of the global context if available.
|
|
29835
|
-
// tslint:disable-next-line: no-toplevel-property-access
|
|
29836
|
-
let WeakRefImpl = _global['WeakRef'];
|
|
29837
|
-
function newWeakRef(value) {
|
|
29838
|
-
if (typeof ngDevMode !== 'undefined' && ngDevMode && WeakRefImpl === undefined) {
|
|
29839
|
-
throw new Error(`Angular requires a browser which supports the 'WeakRef' API`);
|
|
29840
|
-
}
|
|
29841
|
-
return new WeakRefImpl(value);
|
|
29842
|
-
}
|
|
29843
|
-
/**
|
|
29844
|
-
* Use an alternate implementation of `WeakRef` if a platform implementation isn't available.
|
|
29845
|
-
*/
|
|
29846
|
-
function setAlternateWeakRefImpl(impl) {
|
|
29847
|
-
if (!WeakRefImpl) {
|
|
29848
|
-
WeakRefImpl = impl;
|
|
29849
|
-
}
|
|
29850
|
-
}
|
|
30076
|
+
// clang-format on
|
|
29851
30077
|
|
|
29852
30078
|
/**
|
|
29853
30079
|
* Create a computed `Signal` which derives a reactive value from an expression.
|
|
29854
30080
|
*
|
|
29855
30081
|
* @developerPreview
|
|
29856
30082
|
*/
|
|
29857
|
-
function computed(computation,
|
|
29858
|
-
const node = new ComputedImpl(computation, equal);
|
|
29859
|
-
|
|
30083
|
+
function computed(computation, options) {
|
|
30084
|
+
const node = new ComputedImpl(computation, options?.equal ?? defaultEquals);
|
|
30085
|
+
// Casting here is required for g3, as TS inference behavior is slightly different between our
|
|
30086
|
+
// version/options and g3's.
|
|
30087
|
+
return createSignalFromFunction(node, node.signal.bind(node));
|
|
29860
30088
|
}
|
|
29861
30089
|
/**
|
|
29862
30090
|
* A dedicated symbol used before a computed value has been calculated for the first time.
|
|
@@ -29878,10 +30106,11 @@ const ERRORED = Symbol('ERRORED');
|
|
|
29878
30106
|
/**
|
|
29879
30107
|
* A computation, which derives a value from a declarative reactive expression.
|
|
29880
30108
|
*
|
|
29881
|
-
* `Computed`s are both
|
|
30109
|
+
* `Computed`s are both producers and consumers of reactivity.
|
|
29882
30110
|
*/
|
|
29883
|
-
class ComputedImpl {
|
|
30111
|
+
class ComputedImpl extends ReactiveNode {
|
|
29884
30112
|
constructor(computation, equal) {
|
|
30113
|
+
super();
|
|
29885
30114
|
this.computation = computation;
|
|
29886
30115
|
this.equal = equal;
|
|
29887
30116
|
/**
|
|
@@ -29903,20 +30132,25 @@ class ComputedImpl {
|
|
|
29903
30132
|
* state can be resolved without recomputing the value.
|
|
29904
30133
|
*/
|
|
29905
30134
|
this.stale = true;
|
|
29906
|
-
this.id = nextReactiveId();
|
|
29907
|
-
this.ref = newWeakRef(this);
|
|
29908
|
-
this.producers = new Map();
|
|
29909
|
-
this.consumers = new Map();
|
|
29910
|
-
this.trackingVersion = 0;
|
|
29911
|
-
this.valueVersion = 0;
|
|
29912
30135
|
}
|
|
29913
|
-
|
|
30136
|
+
onConsumerDependencyMayHaveChanged() {
|
|
30137
|
+
if (this.stale) {
|
|
30138
|
+
// We've already notified consumers that this value has potentially changed.
|
|
30139
|
+
return;
|
|
30140
|
+
}
|
|
30141
|
+
// Record that the currently cached value may be stale.
|
|
30142
|
+
this.stale = true;
|
|
30143
|
+
// Notify any consumers about the potential change.
|
|
30144
|
+
this.producerMayHaveChanged();
|
|
30145
|
+
}
|
|
30146
|
+
onProducerUpdateValueVersion() {
|
|
29914
30147
|
if (!this.stale) {
|
|
29915
30148
|
// The current value and its version are already up to date.
|
|
29916
30149
|
return;
|
|
29917
30150
|
}
|
|
29918
30151
|
// The current value is stale. Check whether we need to produce a new one.
|
|
29919
|
-
if (this.value !== UNSET && this.value !== COMPUTING &&
|
|
30152
|
+
if (this.value !== UNSET && this.value !== COMPUTING &&
|
|
30153
|
+
!this.consumerPollProducersForChange()) {
|
|
29920
30154
|
// Even though we were previously notified of a potential dependency update, all of
|
|
29921
30155
|
// our dependencies report that they have not actually changed in value, so we can
|
|
29922
30156
|
// resolve the stale state without needing to recompute the current value.
|
|
@@ -29959,21 +30193,11 @@ class ComputedImpl {
|
|
|
29959
30193
|
this.value = newValue;
|
|
29960
30194
|
this.valueVersion++;
|
|
29961
30195
|
}
|
|
29962
|
-
notify() {
|
|
29963
|
-
if (this.stale) {
|
|
29964
|
-
// We've already notified consumers that this value has potentially changed.
|
|
29965
|
-
return;
|
|
29966
|
-
}
|
|
29967
|
-
// Record that the currently cached value may be stale.
|
|
29968
|
-
this.stale = true;
|
|
29969
|
-
// Notify any consumers about the potential change.
|
|
29970
|
-
producerNotifyConsumers(this);
|
|
29971
|
-
}
|
|
29972
30196
|
signal() {
|
|
29973
30197
|
// Check if the value needs updating before returning it.
|
|
29974
|
-
this.
|
|
30198
|
+
this.onProducerUpdateValueVersion();
|
|
29975
30199
|
// Record that someone looked at this signal.
|
|
29976
|
-
producerAccessed(
|
|
30200
|
+
this.producerAccessed();
|
|
29977
30201
|
if (this.value === ERRORED) {
|
|
29978
30202
|
throw this.error;
|
|
29979
30203
|
}
|
|
@@ -29981,124 +30205,17 @@ class ComputedImpl {
|
|
|
29981
30205
|
}
|
|
29982
30206
|
}
|
|
29983
30207
|
|
|
29984
|
-
|
|
29985
|
-
* Watches a reactive expression and allows it to be scheduled to re-run
|
|
29986
|
-
* when any dependencies notify of a change.
|
|
29987
|
-
*
|
|
29988
|
-
* `Watch` doesn't run reactive expressions itself, but relies on a consumer-
|
|
29989
|
-
* provided scheduling operation to coordinate calling `Watch.run()`.
|
|
29990
|
-
*/
|
|
29991
|
-
class Watch {
|
|
29992
|
-
constructor(watch, schedule) {
|
|
29993
|
-
this.watch = watch;
|
|
29994
|
-
this.schedule = schedule;
|
|
29995
|
-
this.id = nextReactiveId();
|
|
29996
|
-
this.ref = newWeakRef(this);
|
|
29997
|
-
this.producers = new Map();
|
|
29998
|
-
this.trackingVersion = 0;
|
|
29999
|
-
this.dirty = false;
|
|
30000
|
-
}
|
|
30001
|
-
notify() {
|
|
30002
|
-
if (!this.dirty) {
|
|
30003
|
-
this.schedule(this);
|
|
30004
|
-
}
|
|
30005
|
-
this.dirty = true;
|
|
30006
|
-
}
|
|
30007
|
-
/**
|
|
30008
|
-
* Execute the reactive expression in the context of this `Watch` consumer.
|
|
30009
|
-
*
|
|
30010
|
-
* Should be called by the user scheduling algorithm when the provided
|
|
30011
|
-
* `schedule` hook is called by `Watch`.
|
|
30012
|
-
*/
|
|
30013
|
-
run() {
|
|
30014
|
-
this.dirty = false;
|
|
30015
|
-
if (this.trackingVersion !== 0 && !consumerPollValueStatus(this)) {
|
|
30016
|
-
return;
|
|
30017
|
-
}
|
|
30018
|
-
const prevConsumer = setActiveConsumer(this);
|
|
30019
|
-
this.trackingVersion++;
|
|
30020
|
-
try {
|
|
30021
|
-
this.watch();
|
|
30022
|
-
}
|
|
30023
|
-
finally {
|
|
30024
|
-
setActiveConsumer(prevConsumer);
|
|
30025
|
-
}
|
|
30026
|
-
}
|
|
30027
|
-
}
|
|
30028
|
-
|
|
30029
|
-
/**
|
|
30030
|
-
* Create a global `Effect` for the given reactive function.
|
|
30031
|
-
*
|
|
30032
|
-
* @developerPreview
|
|
30033
|
-
*/
|
|
30034
|
-
function effect(effectFn) {
|
|
30035
|
-
const watch = new Watch(effectFn, queueWatch);
|
|
30036
|
-
globalWatches.add(watch);
|
|
30037
|
-
// Effects start dirty.
|
|
30038
|
-
watch.notify();
|
|
30039
|
-
return {
|
|
30040
|
-
destroy: () => {
|
|
30041
|
-
queuedWatches.delete(watch);
|
|
30042
|
-
globalWatches.delete(watch);
|
|
30043
|
-
},
|
|
30044
|
-
};
|
|
30045
|
-
}
|
|
30046
|
-
/**
|
|
30047
|
-
* Get a `Promise` that resolves when any scheduled effects have resolved.
|
|
30048
|
-
*/
|
|
30049
|
-
function effectsDone() {
|
|
30050
|
-
return watchQueuePromise?.promise ?? Promise.resolve();
|
|
30051
|
-
}
|
|
30052
|
-
/**
|
|
30053
|
-
* Shut down all active effects.
|
|
30054
|
-
*/
|
|
30055
|
-
function resetEffects() {
|
|
30056
|
-
queuedWatches.clear();
|
|
30057
|
-
globalWatches.clear();
|
|
30058
|
-
}
|
|
30059
|
-
const globalWatches = new Set();
|
|
30060
|
-
const queuedWatches = new Set();
|
|
30061
|
-
let watchQueuePromise = null;
|
|
30062
|
-
function queueWatch(watch) {
|
|
30063
|
-
if (queuedWatches.has(watch) || !globalWatches.has(watch)) {
|
|
30064
|
-
return;
|
|
30065
|
-
}
|
|
30066
|
-
queuedWatches.add(watch);
|
|
30067
|
-
if (watchQueuePromise === null) {
|
|
30068
|
-
Promise.resolve().then(runWatchQueue);
|
|
30069
|
-
let resolveFn;
|
|
30070
|
-
const promise = new Promise((resolve) => {
|
|
30071
|
-
resolveFn = resolve;
|
|
30072
|
-
});
|
|
30073
|
-
watchQueuePromise = {
|
|
30074
|
-
promise,
|
|
30075
|
-
resolveFn,
|
|
30076
|
-
};
|
|
30077
|
-
}
|
|
30078
|
-
}
|
|
30079
|
-
function runWatchQueue() {
|
|
30080
|
-
for (const watch of queuedWatches) {
|
|
30081
|
-
queuedWatches.delete(watch);
|
|
30082
|
-
watch.run();
|
|
30083
|
-
}
|
|
30084
|
-
watchQueuePromise.resolveFn();
|
|
30085
|
-
watchQueuePromise = null;
|
|
30086
|
-
}
|
|
30087
|
-
|
|
30088
|
-
/**
|
|
30089
|
-
* Backing type for a `SettableSignal`, a mutable reactive value.
|
|
30090
|
-
*/
|
|
30091
|
-
class SettableSignalImpl {
|
|
30208
|
+
class WritableSignalImpl extends ReactiveNode {
|
|
30092
30209
|
constructor(value, equal) {
|
|
30210
|
+
super();
|
|
30093
30211
|
this.value = value;
|
|
30094
30212
|
this.equal = equal;
|
|
30095
|
-
this.id = nextReactiveId();
|
|
30096
|
-
this.ref = newWeakRef(this);
|
|
30097
|
-
this.consumers = new Map();
|
|
30098
|
-
this.valueVersion = 0;
|
|
30099
30213
|
}
|
|
30100
|
-
|
|
30101
|
-
//
|
|
30214
|
+
onConsumerDependencyMayHaveChanged() {
|
|
30215
|
+
// This never happens for writable signals as they're not consumers.
|
|
30216
|
+
}
|
|
30217
|
+
onProducerUpdateValueVersion() {
|
|
30218
|
+
// Writable signal value versions are always up to date.
|
|
30102
30219
|
}
|
|
30103
30220
|
/**
|
|
30104
30221
|
* Directly update the value of the signal to a new value, which may or may not be
|
|
@@ -30111,7 +30228,7 @@ class SettableSignalImpl {
|
|
|
30111
30228
|
if (!this.equal(this.value, newValue)) {
|
|
30112
30229
|
this.value = newValue;
|
|
30113
30230
|
this.valueVersion++;
|
|
30114
|
-
|
|
30231
|
+
this.producerMayHaveChanged();
|
|
30115
30232
|
}
|
|
30116
30233
|
}
|
|
30117
30234
|
/**
|
|
@@ -30130,10 +30247,10 @@ class SettableSignalImpl {
|
|
|
30130
30247
|
// Mutate bypasses equality checks as it's by definition changing the value.
|
|
30131
30248
|
mutator(this.value);
|
|
30132
30249
|
this.valueVersion++;
|
|
30133
|
-
|
|
30250
|
+
this.producerMayHaveChanged();
|
|
30134
30251
|
}
|
|
30135
30252
|
signal() {
|
|
30136
|
-
producerAccessed(
|
|
30253
|
+
this.producerAccessed();
|
|
30137
30254
|
return this.value;
|
|
30138
30255
|
}
|
|
30139
30256
|
}
|
|
@@ -30142,10 +30259,11 @@ class SettableSignalImpl {
|
|
|
30142
30259
|
*
|
|
30143
30260
|
* @developerPreview
|
|
30144
30261
|
*/
|
|
30145
|
-
function signal(initialValue,
|
|
30146
|
-
const signalNode = new
|
|
30147
|
-
// Casting here is required for g3
|
|
30148
|
-
|
|
30262
|
+
function signal(initialValue, options) {
|
|
30263
|
+
const signalNode = new WritableSignalImpl(initialValue, options?.equal ?? defaultEquals);
|
|
30264
|
+
// Casting here is required for g3, as TS inference behavior is slightly different between our
|
|
30265
|
+
// version/options and g3's.
|
|
30266
|
+
const signalFn = createSignalFromFunction(signalNode, signalNode.signal.bind(signalNode), {
|
|
30149
30267
|
set: signalNode.set.bind(signalNode),
|
|
30150
30268
|
update: signalNode.update.bind(signalNode),
|
|
30151
30269
|
mutate: signalNode.mutate.bind(signalNode),
|
|
@@ -30171,6 +30289,60 @@ function untracked(nonReactiveReadsFn) {
|
|
|
30171
30289
|
}
|
|
30172
30290
|
}
|
|
30173
30291
|
|
|
30292
|
+
const NOOP_CLEANUP_FN = () => { };
|
|
30293
|
+
/**
|
|
30294
|
+
* Watches a reactive expression and allows it to be scheduled to re-run
|
|
30295
|
+
* when any dependencies notify of a change.
|
|
30296
|
+
*
|
|
30297
|
+
* `Watch` doesn't run reactive expressions itself, but relies on a consumer-
|
|
30298
|
+
* provided scheduling operation to coordinate calling `Watch.run()`.
|
|
30299
|
+
*/
|
|
30300
|
+
class Watch extends ReactiveNode {
|
|
30301
|
+
constructor(watch, schedule) {
|
|
30302
|
+
super();
|
|
30303
|
+
this.watch = watch;
|
|
30304
|
+
this.schedule = schedule;
|
|
30305
|
+
this.dirty = false;
|
|
30306
|
+
this.cleanupFn = NOOP_CLEANUP_FN;
|
|
30307
|
+
}
|
|
30308
|
+
notify() {
|
|
30309
|
+
if (!this.dirty) {
|
|
30310
|
+
this.schedule(this);
|
|
30311
|
+
}
|
|
30312
|
+
this.dirty = true;
|
|
30313
|
+
}
|
|
30314
|
+
onConsumerDependencyMayHaveChanged() {
|
|
30315
|
+
this.notify();
|
|
30316
|
+
}
|
|
30317
|
+
onProducerUpdateValueVersion() {
|
|
30318
|
+
// Watches are not producers.
|
|
30319
|
+
}
|
|
30320
|
+
/**
|
|
30321
|
+
* Execute the reactive expression in the context of this `Watch` consumer.
|
|
30322
|
+
*
|
|
30323
|
+
* Should be called by the user scheduling algorithm when the provided
|
|
30324
|
+
* `schedule` hook is called by `Watch`.
|
|
30325
|
+
*/
|
|
30326
|
+
run() {
|
|
30327
|
+
this.dirty = false;
|
|
30328
|
+
if (this.trackingVersion !== 0 && !this.consumerPollProducersForChange()) {
|
|
30329
|
+
return;
|
|
30330
|
+
}
|
|
30331
|
+
const prevConsumer = setActiveConsumer(this);
|
|
30332
|
+
this.trackingVersion++;
|
|
30333
|
+
try {
|
|
30334
|
+
this.cleanupFn();
|
|
30335
|
+
this.cleanupFn = this.watch() ?? NOOP_CLEANUP_FN;
|
|
30336
|
+
}
|
|
30337
|
+
finally {
|
|
30338
|
+
setActiveConsumer(prevConsumer);
|
|
30339
|
+
}
|
|
30340
|
+
}
|
|
30341
|
+
cleanup() {
|
|
30342
|
+
this.cleanupFn();
|
|
30343
|
+
}
|
|
30344
|
+
}
|
|
30345
|
+
|
|
30174
30346
|
/** Coerces a value (typically a string) to a boolean. */
|
|
30175
30347
|
function coerceToBoolean(value) {
|
|
30176
30348
|
return typeof value === 'boolean' ? value : (value != null && value !== 'false');
|
|
@@ -30269,6 +30441,64 @@ function ɵɵngDeclarePipe(decl) {
|
|
|
30269
30441
|
// clang-format off
|
|
30270
30442
|
// clang-format on
|
|
30271
30443
|
|
|
30444
|
+
const globalWatches = new Set();
|
|
30445
|
+
const queuedWatches = new Map();
|
|
30446
|
+
let watchQueuePromise = null;
|
|
30447
|
+
/**
|
|
30448
|
+
* Create a global `Effect` for the given reactive function.
|
|
30449
|
+
*
|
|
30450
|
+
* @developerPreview
|
|
30451
|
+
*/
|
|
30452
|
+
function effect(effectFn, options) {
|
|
30453
|
+
!options?.injector && assertInInjectionContext(effect);
|
|
30454
|
+
const zone = Zone.current;
|
|
30455
|
+
const watch = new Watch(effectFn, (watch) => queueWatch(watch, zone));
|
|
30456
|
+
const injector = options?.injector ?? inject(Injector);
|
|
30457
|
+
const destroyRef = options?.manualCleanup !== true ? injector.get(DestroyRef) : null;
|
|
30458
|
+
globalWatches.add(watch);
|
|
30459
|
+
// Effects start dirty.
|
|
30460
|
+
watch.notify();
|
|
30461
|
+
let unregisterOnDestroy;
|
|
30462
|
+
const destroy = () => {
|
|
30463
|
+
watch.cleanup();
|
|
30464
|
+
unregisterOnDestroy?.();
|
|
30465
|
+
queuedWatches.delete(watch);
|
|
30466
|
+
globalWatches.delete(watch);
|
|
30467
|
+
};
|
|
30468
|
+
unregisterOnDestroy = destroyRef?.onDestroy(destroy);
|
|
30469
|
+
return {
|
|
30470
|
+
destroy,
|
|
30471
|
+
};
|
|
30472
|
+
}
|
|
30473
|
+
function queueWatch(watch, zone) {
|
|
30474
|
+
if (queuedWatches.has(watch) || !globalWatches.has(watch)) {
|
|
30475
|
+
return;
|
|
30476
|
+
}
|
|
30477
|
+
queuedWatches.set(watch, zone);
|
|
30478
|
+
if (watchQueuePromise === null) {
|
|
30479
|
+
Promise.resolve().then(runWatchQueue);
|
|
30480
|
+
let resolveFn;
|
|
30481
|
+
const promise = new Promise((resolve) => {
|
|
30482
|
+
resolveFn = resolve;
|
|
30483
|
+
});
|
|
30484
|
+
watchQueuePromise = {
|
|
30485
|
+
promise,
|
|
30486
|
+
resolveFn,
|
|
30487
|
+
};
|
|
30488
|
+
}
|
|
30489
|
+
}
|
|
30490
|
+
function runWatchQueue() {
|
|
30491
|
+
for (const [watch, zone] of queuedWatches) {
|
|
30492
|
+
queuedWatches.delete(watch);
|
|
30493
|
+
zone.run(() => watch.run());
|
|
30494
|
+
}
|
|
30495
|
+
watchQueuePromise.resolveFn();
|
|
30496
|
+
watchQueuePromise = null;
|
|
30497
|
+
}
|
|
30498
|
+
|
|
30499
|
+
// clang-format off
|
|
30500
|
+
// clang-format on
|
|
30501
|
+
|
|
30272
30502
|
// This file exists to allow the set of reactivity exports to be modified in g3, as these APIs are
|
|
30273
30503
|
|
|
30274
30504
|
/**
|
|
@@ -30452,5 +30682,5 @@ if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
|
30452
30682
|
* Generated bundle index. Do not edit.
|
|
30453
30683
|
*/
|
|
30454
30684
|
|
|
30455
|
-
export {
|
|
30685
|
+
export { ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, ApplicationInitStatus, ApplicationModule, ApplicationRef, Attribute, COMPILER_OPTIONS, CSP_NONCE, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, ChangeDetectorRef, Compiler, CompilerFactory, Component, ComponentFactory$1 as ComponentFactory, ComponentFactoryResolver$1 as ComponentFactoryResolver, ComponentRef$1 as ComponentRef, ContentChild, ContentChildren, DEFAULT_CURRENCY_CODE, DebugElement, DebugEventListener, DebugNode, DefaultIterableDiffer, DestroyRef, Directive, ENVIRONMENT_INITIALIZER, ElementRef, EmbeddedViewRef, EnvironmentInjector, ErrorHandler, EventEmitter, Host, HostBinding, HostListener, INJECTOR, Inject, InjectFlags, Injectable, InjectionToken, Injector, Input, IterableDiffers, KeyValueDiffers, LOCALE_ID, MissingTranslationStrategy, ModuleWithComponentFactories, NO_ERRORS_SCHEMA, NgModule, NgModuleFactory$1 as NgModuleFactory, NgModuleRef$1 as NgModuleRef, NgProbeToken, NgZone, Optional, Output, PACKAGE_ROOT_URL, PLATFORM_ID, PLATFORM_INITIALIZER, Pipe, PlatformRef, Query, QueryList, ReflectiveInjector, ReflectiveKey, Renderer2, RendererFactory2, RendererStyleFlags2, ResolvedReflectiveFactory, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, TransferState, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation$1 as ViewEncapsulation, ViewRef, asNativeElements, assertInInjectionContext, assertPlatform, computed, createComponent, createEnvironmentInjector, createNgModule, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, effect, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, importProvidersFrom, inject, isDevMode, isSignal, isStandalone, makeEnvironmentProviders, makeStateKey, mergeApplicationConfig, platformCore, reflectComponentType, resolveForwardRef, runInInjectionContext, setTestabilityGetter, signal, untracked, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, ComponentFactory$1 as ɵComponentFactory, Console as ɵConsole, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, IS_HYDRATION_FEATURE_ENABLED as ɵIS_HYDRATION_FEATURE_ENABLED, InitialRenderPendingTasks as ɵInitialRenderPendingTasks, LContext as ɵLContext, LifecycleHooksFeature as ɵLifecycleHooksFeature, LocaleDataIndex as ɵLocaleDataIndex, NG_COMP_DEF as ɵNG_COMP_DEF, NG_DIR_DEF as ɵNG_DIR_DEF, NG_ELEMENT_ID as ɵNG_ELEMENT_ID, NG_INJ_DEF as ɵNG_INJ_DEF, NG_MOD_DEF as ɵNG_MOD_DEF, NG_PIPE_DEF as ɵNG_PIPE_DEF, NG_PROV_DEF as ɵNG_PROV_DEF, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, NO_CHANGE as ɵNO_CHANGE, NgModuleFactory as ɵNgModuleFactory, NoopNgZone as ɵNoopNgZone, ReflectionCapabilities as ɵReflectionCapabilities, ComponentFactory as ɵRender3ComponentFactory, ComponentRef as ɵRender3ComponentRef, NgModuleRef as ɵRender3NgModuleRef, RuntimeError as ɵRuntimeError, TESTABILITY as ɵTESTABILITY, TESTABILITY_GETTER as ɵTESTABILITY_GETTER, ViewRef$1 as ɵViewRef, XSS_SECURITY_URL as ɵXSS_SECURITY_URL, _sanitizeHtml as ɵ_sanitizeHtml, _sanitizeUrl as ɵ_sanitizeUrl, allowSanitizationBypassAndThrow as ɵallowSanitizationBypassAndThrow, annotateForHydration as ɵannotateForHydration, bypassSanitizationTrustHtml as ɵbypassSanitizationTrustHtml, bypassSanitizationTrustResourceUrl as ɵbypassSanitizationTrustResourceUrl, bypassSanitizationTrustScript as ɵbypassSanitizationTrustScript, bypassSanitizationTrustStyle as ɵbypassSanitizationTrustStyle, bypassSanitizationTrustUrl as ɵbypassSanitizationTrustUrl, clearResolutionOfComponentResourcesQueue as ɵclearResolutionOfComponentResourcesQueue, coerceToBoolean as ɵcoerceToBoolean, compileComponent as ɵcompileComponent, compileDirective as ɵcompileDirective, compileNgModule as ɵcompileNgModule, compileNgModuleDefs as ɵcompileNgModuleDefs, compileNgModuleFactory as ɵcompileNgModuleFactory, compilePipe as ɵcompilePipe, convertToBitFlags as ɵconvertToBitFlags, createInjector as ɵcreateInjector, defaultIterableDiffers as ɵdefaultIterableDiffers, defaultKeyValueDiffers as ɵdefaultKeyValueDiffers, detectChanges as ɵdetectChanges, devModeEqual as ɵdevModeEqual, escapeTransferStateContent as ɵescapeTransferStateContent, findLocaleData as ɵfindLocaleData, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, formatRuntimeError as ɵformatRuntimeError, getDebugNode as ɵgetDebugNode, getDirectives as ɵgetDirectives, getHostElement as ɵgetHostElement, getInjectableDef as ɵgetInjectableDef, getLContext as ɵgetLContext, getLocaleCurrencyCode as ɵgetLocaleCurrencyCode, getLocalePluralCase as ɵgetLocalePluralCase, getSanitizationBypassType as ɵgetSanitizationBypassType, ɵgetUnknownElementStrictMode, ɵgetUnknownPropertyStrictMode, _global as ɵglobal, injectChangeDetectorRef as ɵinjectChangeDetectorRef, internalCreateApplication as ɵinternalCreateApplication, isBoundToModule as ɵisBoundToModule, isEnvironmentProviders as ɵisEnvironmentProviders, isInjectable as ɵisInjectable, isNgModule as ɵisNgModule, isPromise as ɵisPromise, isSubscribable as ɵisSubscribable, makeDecorator as ɵmakeDecorator, noSideEffects as ɵnoSideEffects, patchComponentDefWithScope as ɵpatchComponentDefWithScope, provideHydrationSupport as ɵprovideHydrationSupport, provideNgZoneChangeDetection as ɵprovideNgZoneChangeDetection, publishDefaultGlobalUtils$1 as ɵpublishDefaultGlobalUtils, publishGlobalUtil as ɵpublishGlobalUtil, registerLocaleData as ɵregisterLocaleData, resetCompiledComponents as ɵresetCompiledComponents, resetJitOptions as ɵresetJitOptions, resolveComponentResources as ɵresolveComponentResources, setAllowDuplicateNgModuleIdsForTest as ɵsetAllowDuplicateNgModuleIdsForTest, setAlternateWeakRefImpl as ɵsetAlternateWeakRefImpl, setClassMetadata as ɵsetClassMetadata, setCurrentInjector as ɵsetCurrentInjector, setDocument as ɵsetDocument, setLocaleId as ɵsetLocaleId, ɵsetUnknownElementStrictMode, ɵsetUnknownPropertyStrictMode, store as ɵstore, stringify as ɵstringify, transitiveScopesFor as ɵtransitiveScopesFor, unescapeTransferStateContent as ɵunescapeTransferStateContent, unregisterAllLocaleData as ɵunregisterLocaleData, unwrapSafeValue as ɵunwrapSafeValue, ɵɵCopyDefinitionFeature, FactoryTarget as ɵɵFactoryTarget, ɵɵHostDirectivesFeature, ɵɵInheritDefinitionFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵStandaloneFeature, ɵɵadvance, ɵɵattribute, ɵɵattributeInterpolate1, ɵɵattributeInterpolate2, ɵɵattributeInterpolate3, ɵɵattributeInterpolate4, ɵɵattributeInterpolate5, ɵɵattributeInterpolate6, ɵɵattributeInterpolate7, ɵɵattributeInterpolate8, ɵɵattributeInterpolateV, ɵɵclassMap, ɵɵclassMapInterpolate1, ɵɵclassMapInterpolate2, ɵɵclassMapInterpolate3, ɵɵclassMapInterpolate4, ɵɵclassMapInterpolate5, ɵɵclassMapInterpolate6, ɵɵclassMapInterpolate7, ɵɵclassMapInterpolate8, ɵɵclassMapInterpolateV, ɵɵclassProp, ɵɵcontentQuery, ɵɵdefineComponent, ɵɵdefineDirective, ɵɵdefineInjectable, ɵɵdefineInjector, ɵɵdefineNgModule, ɵɵdefinePipe, ɵɵdirectiveInject, ɵɵdisableBindings, ɵɵelement, ɵɵelementContainer, ɵɵelementContainerEnd, ɵɵelementContainerStart, ɵɵelementEnd, ɵɵelementStart, ɵɵenableBindings, ɵɵgetCurrentView, ɵɵgetInheritedFactory, ɵɵhostProperty, ɵɵi18n, ɵɵi18nApply, ɵɵi18nAttributes, ɵɵi18nEnd, ɵɵi18nExp, ɵɵi18nPostprocess, ɵɵi18nStart, ɵɵinject, ɵɵinjectAttribute, ɵɵinvalidFactory, ɵɵinvalidFactoryDep, ɵɵlistener, ɵɵloadQuery, ɵɵnamespaceHTML, ɵɵnamespaceMathML, ɵɵnamespaceSVG, ɵɵnextContext, ɵɵngDeclareClassMetadata, ɵɵngDeclareComponent, ɵɵngDeclareDirective, ɵɵngDeclareFactory, ɵɵngDeclareInjectable, ɵɵngDeclareInjector, ɵɵngDeclareNgModule, ɵɵngDeclarePipe, ɵɵpipe, ɵɵpipeBind1, ɵɵpipeBind2, ɵɵpipeBind3, ɵɵpipeBind4, ɵɵpipeBindV, ɵɵprojection, ɵɵprojectionDef, ɵɵproperty, ɵɵpropertyInterpolate, ɵɵpropertyInterpolate1, ɵɵpropertyInterpolate2, ɵɵpropertyInterpolate3, ɵɵpropertyInterpolate4, ɵɵpropertyInterpolate5, ɵɵpropertyInterpolate6, ɵɵpropertyInterpolate7, ɵɵpropertyInterpolate8, ɵɵpropertyInterpolateV, ɵɵpureFunction0, ɵɵpureFunction1, ɵɵpureFunction2, ɵɵpureFunction3, ɵɵpureFunction4, ɵɵpureFunction5, ɵɵpureFunction6, ɵɵpureFunction7, ɵɵpureFunction8, ɵɵpureFunctionV, ɵɵqueryRefresh, ɵɵreference, registerNgModuleType as ɵɵregisterNgModuleType, ɵɵresetView, ɵɵresolveBody, ɵɵresolveDocument, ɵɵresolveWindow, ɵɵrestoreView, ɵɵsanitizeHtml, ɵɵsanitizeResourceUrl, ɵɵsanitizeScript, ɵɵsanitizeStyle, ɵɵsanitizeUrl, ɵɵsanitizeUrlOrResourceUrl, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵstyleMap, ɵɵstyleMapInterpolate1, ɵɵstyleMapInterpolate2, ɵɵstyleMapInterpolate3, ɵɵstyleMapInterpolate4, ɵɵstyleMapInterpolate5, ɵɵstyleMapInterpolate6, ɵɵstyleMapInterpolate7, ɵɵstyleMapInterpolate8, ɵɵstyleMapInterpolateV, ɵɵstyleProp, ɵɵstylePropInterpolate1, ɵɵstylePropInterpolate2, ɵɵstylePropInterpolate3, ɵɵstylePropInterpolate4, ɵɵstylePropInterpolate5, ɵɵstylePropInterpolate6, ɵɵstylePropInterpolate7, ɵɵstylePropInterpolate8, ɵɵstylePropInterpolateV, ɵɵsyntheticHostListener, ɵɵsyntheticHostProperty, ɵɵtemplate, ɵɵtemplateRefExtractor, ɵɵtext, ɵɵtextInterpolate, ɵɵtextInterpolate1, ɵɵtextInterpolate2, ɵɵtextInterpolate3, ɵɵtextInterpolate4, ɵɵtextInterpolate5, ɵɵtextInterpolate6, ɵɵtextInterpolate7, ɵɵtextInterpolate8, ɵɵtextInterpolateV, ɵɵtrustConstantHtml, ɵɵtrustConstantResourceUrl, ɵɵvalidateIframeAttribute, ɵɵviewQuery };
|
|
30456
30686
|
//# sourceMappingURL=core.mjs.map
|