From bdbe2715c09db2524cb38cfadb97de987b3081ac Mon Sep 17 00:00:00 2001 From: Thomas Hii Date: Tue, 25 Mar 2025 22:16:43 +0800 Subject: [PATCH 01/70] Replace dart:html with package:web --- .gitignore | 3 +++ _tests/lib/matchers.dart | 2 +- _tests/pubspec.yaml | 4 ++-- _tests/test/bootstrap/run_app_test.dart | 2 +- _tests/test/common/directives/ng_class_test.dart | 2 +- .../compiler_integration/invalid_late_fields_test.dart | 8 ++++---- _tests/test/core/application_ref_test.dart | 2 +- .../core/change_detection/detect_host_changes_test.dart | 2 +- .../core/change_detection/on_push_embedded_view_test.dart | 2 +- _tests/test/core/directive_inheritance_test.dart | 2 +- _tests/test/core/event_handler_test.dart | 2 +- _tests/test/core/host_annotation_test.dart | 2 +- _tests/test/core/i18n_escape_test.dart | 2 +- _tests/test/core/i18n_test.dart | 2 +- _tests/test/core/linker/implicit_static_test.dart | 2 +- .../linker/integration/directive_integration_test.dart | 2 +- _tests/test/core/linker/integration/on_push_test.dart | 2 +- _tests/test/core/linker/integration/outputs_test.dart | 2 +- .../core/linker/integration/reference_binding_test.dart | 2 +- _tests/test/core/linker/integration/template_test.dart | 2 +- .../test/core/linker/integration/view_creation_test.dart | 2 +- _tests/test/core/linker/query_integration_test.dart | 2 +- _tests/test/core/linker/security_integration_test.dart | 2 +- _tests/test/core/linker/style_encapsulation_test.dart | 2 +- _tests/test/core/query_html_element_test.dart | 2 +- _tests/test/core/styling/shim_test.dart | 2 +- _tests/test/core/view/projection_integration_test.dart | 2 +- _tests/test/core/view/projection_test.dart | 2 +- _tests/test/core/view/view_child_regression_test.dart | 2 +- .../test/directives/ng_for_content_projection_test.dart | 2 +- _tests/test/integration/query_view_test.dart | 2 +- _tests/test/platform/dom/events/key_events_test.dart | 2 +- examples/hello_world/pubspec.yaml | 4 ++-- goldens/pubspec.yaml | 4 ++-- goldens/test/templates/queries.dart | 2 +- ngast/pubspec.yaml | 4 ++-- ngcompiler/pubspec.yaml | 4 ++-- ngdart/lib/src/common/directives/ng_class.dart | 2 +- ngdart/lib/src/common/directives/ng_style.dart | 2 +- ngdart/lib/src/core/application_ref.dart | 2 +- .../core/change_detection/directive_change_detector.dart | 2 +- ngdart/lib/src/core/exception_handler.dart | 2 +- ngdart/lib/src/core/linker/component_factory.dart | 2 +- ngdart/lib/src/core/linker/style_encapsulation.dart | 2 +- ngdart/lib/src/core/linker/view_container.dart | 2 +- ngdart/lib/src/core/linker/view_fragment.dart | 2 +- ngdart/lib/src/core/linker/view_ref.dart | 2 +- ngdart/lib/src/core/linker/views/component_view.dart | 2 +- ngdart/lib/src/core/linker/views/dynamic_view.dart | 2 +- ngdart/lib/src/core/linker/views/embedded_view.dart | 2 +- ngdart/lib/src/core/linker/views/host_view.dart | 2 +- ngdart/lib/src/core/linker/views/render_view.dart | 2 +- ngdart/lib/src/devtools/inspector.dart | 2 +- ngdart/lib/src/meta/directives.dart | 2 +- ngdart/lib/src/runtime/dom_events.dart | 2 +- ngdart/lib/src/runtime/text_binding.dart | 2 +- ngdart/lib/src/security/html_sanitizer.dart | 2 +- ngdart/lib/src/testability/js_api.dart | 2 +- ngdart/lib/src/testability/testability.dart | 2 +- ngdart/pubspec.yaml | 4 ++-- ngforms/lib/src/directives/checkbox_value_accessor.dart | 2 +- ngforms/lib/src/directives/default_value_accessor.dart | 2 +- ngforms/lib/src/directives/number_value_accessor.dart | 2 +- .../lib/src/directives/radio_control_value_accessor.dart | 2 +- .../lib/src/directives/select_control_value_accessor.dart | 2 +- ngforms/lib/src/directives/shared.dart | 2 +- ngforms/pubspec.yaml | 4 ++-- ngforms/test/accessor_test.dart | 2 +- ngforms/test/integration_test.dart | 2 +- ngforms/test/ng_control_group_test.dart | 2 +- ngforms/test/ng_control_name_test.dart | 2 +- ngforms/test/ng_form_control_test.dart | 2 +- ngforms/test/ng_form_test.dart | 2 +- .../lib/src/directives/router_link_active_directive.dart | 2 +- ngrouter/lib/src/location/base_href.dart | 2 +- ngrouter/lib/src/location/browser_platform_location.dart | 2 +- ngrouter/lib/src/location/location_strategy.dart | 2 +- ngrouter/lib/src/location/platform_location.dart | 2 +- ngrouter/pubspec.yaml | 4 ++-- ngrouter/test/regression/hash_location_strategy_test.dart | 2 +- ngrouter/test/regression/routing_state_crash_test.dart | 2 +- ngtest/lib/src/bootstrap.dart | 2 +- ngtest/lib/src/frontend/bed.dart | 2 +- ngtest/lib/src/frontend/fixture.dart | 2 +- ngtest/pubspec.yaml | 4 ++-- ngtest/test/bootstrap_test.dart | 2 +- ngtest/test/frontend/bed_lifecycle_test.dart | 2 +- ngtest/test/frontend/compatibility_test.dart | 2 +- 88 files changed, 102 insertions(+), 99 deletions(-) diff --git a/.gitignore b/.gitignore index 2f470c27b6..3ad678c16a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ pubspec.lock # melos # pubspec_overrides.yaml +.idea +.metals +.vscode \ No newline at end of file diff --git a/_tests/lib/matchers.dart b/_tests/lib/matchers.dart index 2c02dd85d2..8bed6999e8 100644 --- a/_tests/lib/matchers.dart +++ b/_tests/lib/matchers.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/_tests/pubspec.yaml b/_tests/pubspec.yaml index 65f4aa6d50..b153acdb51 100644 --- a/_tests/pubspec.yaml +++ b/_tests/pubspec.yaml @@ -3,7 +3,7 @@ description: Tests for AngularDart. publish_to: none environment: - sdk: ">=2.18.0 <3.0.0" + sdk: '>=3.6.0 <4.0.0' dependencies: build_resolvers: ^2.1.0 @@ -18,7 +18,7 @@ dev_dependencies: build_runner: ^2.3.3 build_web_compilers: ^3.2.7 csslib: 0.17.2 - lints: ^2.0.1 + lints: ^5.0.0 meta: ^1.8.0 mockito: ^5.3.2 package_config: ^2.1.0 diff --git a/_tests/test/bootstrap/run_app_test.dart b/_tests/test/bootstrap/run_app_test.dart index 13dae79e2f..dc3705f726 100644 --- a/_tests/test/bootstrap/run_app_test.dart +++ b/_tests/test/bootstrap/run_app_test.dart @@ -2,7 +2,7 @@ library angular.test.bootstrap.run_app_test; import 'dart:async'; -import 'dart:html'; +import 'package:web/web.dart'; import 'package:js/js.dart'; import 'package:test/test.dart'; diff --git a/_tests/test/common/directives/ng_class_test.dart b/_tests/test/common/directives/ng_class_test.dart index 3eac36f00d..9c88a6605c 100644 --- a/_tests/test/common/directives/ng_class_test.dart +++ b/_tests/test/common/directives/ng_class_test.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/_tests/test/compiler_integration/invalid_late_fields_test.dart b/_tests/test/compiler_integration/invalid_late_fields_test.dart index a025623f2b..20054da51a 100644 --- a/_tests/test/compiler_integration/invalid_late_fields_test.dart +++ b/_tests/test/compiler_integration/invalid_late_fields_test.dart @@ -28,7 +28,7 @@ void main() { test('should refuse to compile non-nullable single child query', () async { await compilesExpecting(""" - import 'dart:html'; + import 'package:web/web.dart'; import '$ngImport'; @Component( @@ -48,7 +48,7 @@ void main() { test('should refuse to compile late fields with a child query', () async { await compilesExpecting(""" - import 'dart:html'; + import 'package:web/web.dart'; import '$ngImport'; @Component( @@ -68,7 +68,7 @@ void main() { test('should refuse to compile late fields with a children query', () async { await compilesExpecting(""" - import 'dart:html'; + import 'package:web/web.dart'; import '$ngImport'; @Component( @@ -88,7 +88,7 @@ void main() { test('should compile non-nullable fields with a children query', () async { await compilesNormally(""" - import 'dart:html'; + import 'package:web/web.dart'; import '$ngImport'; @Component( diff --git a/_tests/test/core/application_ref_test.dart b/_tests/test/core/application_ref_test.dart index 15c28eeb7d..a2a7bd1a45 100644 --- a/_tests/test/core/application_ref_test.dart +++ b/_tests/test/core/application_ref_test.dart @@ -1,5 +1,5 @@ import 'dart:async'; -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/_tests/test/core/change_detection/detect_host_changes_test.dart b/_tests/test/core/change_detection/detect_host_changes_test.dart index c7d6ceff73..98cd676479 100644 --- a/_tests/test/core/change_detection/detect_host_changes_test.dart +++ b/_tests/test/core/change_detection/detect_host_changes_test.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/_tests/test/core/change_detection/on_push_embedded_view_test.dart b/_tests/test/core/change_detection/on_push_embedded_view_test.dart index 2010d89b14..8622c08de4 100644 --- a/_tests/test/core/change_detection/on_push_embedded_view_test.dart +++ b/_tests/test/core/change_detection/on_push_embedded_view_test.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/_tests/test/core/directive_inheritance_test.dart b/_tests/test/core/directive_inheritance_test.dart index 2404b17c8b..f65c07eaad 100644 --- a/_tests/test/core/directive_inheritance_test.dart +++ b/_tests/test/core/directive_inheritance_test.dart @@ -1,5 +1,5 @@ import 'dart:async'; -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/_tests/test/core/event_handler_test.dart b/_tests/test/core/event_handler_test.dart index d942fd34b9..fb5f5d8b2e 100644 --- a/_tests/test/core/event_handler_test.dart +++ b/_tests/test/core/event_handler_test.dart @@ -1,5 +1,5 @@ import 'dart:async'; -import 'dart:html'; +import 'package:web/web.dart'; import 'package:ngdart/angular.dart'; import 'package:ngtest/angular_test.dart'; diff --git a/_tests/test/core/host_annotation_test.dart b/_tests/test/core/host_annotation_test.dart index 92b9142996..9d8cac426d 100644 --- a/_tests/test/core/host_annotation_test.dart +++ b/_tests/test/core/host_annotation_test.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:ngdart/angular.dart'; import 'package:ngtest/angular_test.dart'; diff --git a/_tests/test/core/i18n_escape_test.dart b/_tests/test/core/i18n_escape_test.dart index cf599bf8e7..03aefe429a 100644 --- a/_tests/test/core/i18n_escape_test.dart +++ b/_tests/test/core/i18n_escape_test.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/_tests/test/core/i18n_test.dart b/_tests/test/core/i18n_test.dart index e3f54808c8..612c2194a7 100644 --- a/_tests/test/core/i18n_test.dart +++ b/_tests/test/core/i18n_test.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:ngdart/angular.dart'; import 'package:ngtest/angular_test.dart'; diff --git a/_tests/test/core/linker/implicit_static_test.dart b/_tests/test/core/linker/implicit_static_test.dart index c6c7a90cd8..fd5294b9a4 100644 --- a/_tests/test/core/linker/implicit_static_test.dart +++ b/_tests/test/core/linker/implicit_static_test.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/_tests/test/core/linker/integration/directive_integration_test.dart b/_tests/test/core/linker/integration/directive_integration_test.dart index 45150cefb0..aff79cd88d 100644 --- a/_tests/test/core/linker/integration/directive_integration_test.dart +++ b/_tests/test/core/linker/integration/directive_integration_test.dart @@ -1,5 +1,5 @@ import 'dart:async'; -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/_tests/test/core/linker/integration/on_push_test.dart b/_tests/test/core/linker/integration/on_push_test.dart index efb7fbc73d..827ce385dc 100644 --- a/_tests/test/core/linker/integration/on_push_test.dart +++ b/_tests/test/core/linker/integration/on_push_test.dart @@ -1,5 +1,5 @@ import 'dart:async'; -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/_tests/test/core/linker/integration/outputs_test.dart b/_tests/test/core/linker/integration/outputs_test.dart index 3a67e99700..41d6dbdc1c 100644 --- a/_tests/test/core/linker/integration/outputs_test.dart +++ b/_tests/test/core/linker/integration/outputs_test.dart @@ -1,5 +1,5 @@ import 'dart:async'; -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/_tests/test/core/linker/integration/reference_binding_test.dart b/_tests/test/core/linker/integration/reference_binding_test.dart index cbf3775bae..e8ee3f4a63 100644 --- a/_tests/test/core/linker/integration/reference_binding_test.dart +++ b/_tests/test/core/linker/integration/reference_binding_test.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/_tests/test/core/linker/integration/template_test.dart b/_tests/test/core/linker/integration/template_test.dart index 7128ded437..3d2a3d5acc 100644 --- a/_tests/test/core/linker/integration/template_test.dart +++ b/_tests/test/core/linker/integration/template_test.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/_tests/test/core/linker/integration/view_creation_test.dart b/_tests/test/core/linker/integration/view_creation_test.dart index 31ffb45917..a27de1eea8 100644 --- a/_tests/test/core/linker/integration/view_creation_test.dart +++ b/_tests/test/core/linker/integration/view_creation_test.dart @@ -1,5 +1,5 @@ import 'dart:async'; -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/_tests/test/core/linker/query_integration_test.dart b/_tests/test/core/linker/query_integration_test.dart index 598b636b70..9c37b7f010 100644 --- a/_tests/test/core/linker/query_integration_test.dart +++ b/_tests/test/core/linker/query_integration_test.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/_tests/test/core/linker/security_integration_test.dart b/_tests/test/core/linker/security_integration_test.dart index 6ce01d7976..20e9f0c652 100644 --- a/_tests/test/core/linker/security_integration_test.dart +++ b/_tests/test/core/linker/security_integration_test.dart @@ -1,6 +1,6 @@ @TestOn('browser') -import 'dart:html'; +import 'package:web/web.dart'; import 'package:ngtest/angular_test.dart'; import 'package:ngdart/src/security/dom_sanitization_service.dart'; diff --git a/_tests/test/core/linker/style_encapsulation_test.dart b/_tests/test/core/linker/style_encapsulation_test.dart index bd4eddde3b..f09730452b 100644 --- a/_tests/test/core/linker/style_encapsulation_test.dart +++ b/_tests/test/core/linker/style_encapsulation_test.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/_tests/test/core/query_html_element_test.dart b/_tests/test/core/query_html_element_test.dart index b8a518c3b3..36e5baac3e 100644 --- a/_tests/test/core/query_html_element_test.dart +++ b/_tests/test/core/query_html_element_test.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/_tests/test/core/styling/shim_test.dart b/_tests/test/core/styling/shim_test.dart index b7f5bedd6d..02969b4b43 100644 --- a/_tests/test/core/styling/shim_test.dart +++ b/_tests/test/core/styling/shim_test.dart @@ -1,6 +1,6 @@ library angular2.test.common.styling.shim_test; -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/_tests/test/core/view/projection_integration_test.dart b/_tests/test/core/view/projection_integration_test.dart index 78db26a9c2..97b48dba25 100644 --- a/_tests/test/core/view/projection_integration_test.dart +++ b/_tests/test/core/view/projection_integration_test.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/_tests/test/core/view/projection_test.dart b/_tests/test/core/view/projection_test.dart index 9b98e03783..2436b2dd8d 100644 --- a/_tests/test/core/view/projection_test.dart +++ b/_tests/test/core/view/projection_test.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:_tests/matchers.dart'; diff --git a/_tests/test/core/view/view_child_regression_test.dart b/_tests/test/core/view/view_child_regression_test.dart index 3d446f1213..35874e3921 100644 --- a/_tests/test/core/view/view_child_regression_test.dart +++ b/_tests/test/core/view/view_child_regression_test.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/_tests/test/directives/ng_for_content_projection_test.dart b/_tests/test/directives/ng_for_content_projection_test.dart index 57e074a7c9..9b770eb9ce 100644 --- a/_tests/test/directives/ng_for_content_projection_test.dart +++ b/_tests/test/directives/ng_for_content_projection_test.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/_tests/test/integration/query_view_test.dart b/_tests/test/integration/query_view_test.dart index 1bb2e7cce0..55bb3a8ba4 100644 --- a/_tests/test/integration/query_view_test.dart +++ b/_tests/test/integration/query_view_test.dart @@ -1,5 +1,5 @@ import 'dart:async'; -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:_tests/query_tests.dart'; diff --git a/_tests/test/platform/dom/events/key_events_test.dart b/_tests/test/platform/dom/events/key_events_test.dart index e49367fc54..503480bbba 100644 --- a/_tests/test/platform/dom/events/key_events_test.dart +++ b/_tests/test/platform/dom/events/key_events_test.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'dart:js'; import 'package:test/test.dart'; diff --git a/examples/hello_world/pubspec.yaml b/examples/hello_world/pubspec.yaml index bab3c6340c..0b35874468 100644 --- a/examples/hello_world/pubspec.yaml +++ b/examples/hello_world/pubspec.yaml @@ -1,7 +1,7 @@ name: examples_hello_world environment: - sdk: ">=2.18.0 <3.0.0" + sdk: '>=3.6.0 <4.0.0' dependencies: # No strict dependencies, we always use dependency_overrides. @@ -10,4 +10,4 @@ dependencies: dev_dependencies: build_runner: ^2.3.3 build_web_compilers: ^3.2.7 - lints: ^2.0.1 + lints: ^5.0.0 diff --git a/goldens/pubspec.yaml b/goldens/pubspec.yaml index 3b88ec29a1..bd67d67aba 100644 --- a/goldens/pubspec.yaml +++ b/goldens/pubspec.yaml @@ -3,7 +3,7 @@ description: Goldens for AngularDart. publish_to: none environment: - sdk: ">=2.18.0 <3.0.0" + sdk: '>=3.6.0 <4.0.0' dependencies: js: ^0.6.5 @@ -14,5 +14,5 @@ dev_dependencies: build_web_compilers: ^3.2.7 dart_style: ^2.3.0 glob: ^2.1.1 - lints: ^2.0.1 + lints: ^5.0.0 path: ^1.8.3 diff --git a/goldens/test/templates/queries.dart b/goldens/test/templates/queries.dart index b409fe5e9e..3a40b0c1fa 100644 --- a/goldens/test/templates/queries.dart +++ b/goldens/test/templates/queries.dart @@ -1,7 +1,7 @@ @JS() library golden; -import 'dart:html'; +import 'package:web/web.dart'; import 'package:js/js.dart'; import 'package:ngdart/angular.dart'; diff --git a/ngast/pubspec.yaml b/ngast/pubspec.yaml index 4cb9559536..46cdad3917 100644 --- a/ngast/pubspec.yaml +++ b/ngast/pubspec.yaml @@ -4,7 +4,7 @@ version: 3.0.0-dev.0 repository: https://github.com/angulardart-community/angular environment: - sdk: ">=2.18.0 <3.0.0" + sdk: '>=3.6.0 <4.0.0' dependencies: charcode: ^1.3.1 @@ -14,6 +14,6 @@ dependencies: string_scanner: ^1.2.0 dev_dependencies: - lints: ^2.0.1 + lints: ^5.0.0 path: ^1.8.3 test: ^1.22.2 diff --git a/ngcompiler/pubspec.yaml b/ngcompiler/pubspec.yaml index a90a0d440c..5d8378bfaa 100644 --- a/ngcompiler/pubspec.yaml +++ b/ngcompiler/pubspec.yaml @@ -7,7 +7,7 @@ version: 3.0.0-dev.1 repository: https://github.com/angulardart-community/angular environment: - sdk: ">=2.18.0 <3.0.0" + sdk: '>=3.6.0 <4.0.0' dependencies: analyzer: ^5.4.0 @@ -28,5 +28,5 @@ dependencies: source_span: ^1.9.1 dev_dependencies: - lints: ^2.0.1 + lints: ^5.0.0 test: ^1.22.2 diff --git a/ngdart/lib/src/common/directives/ng_class.dart b/ngdart/lib/src/common/directives/ng_class.dart index 19ba422a90..367af10f2a 100644 --- a/ngdart/lib/src/common/directives/ng_class.dart +++ b/ngdart/lib/src/common/directives/ng_class.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:ngdart/src/core/change_detection/differs/default_iterable_differ.dart'; import 'package:ngdart/src/core/change_detection/differs/default_keyvalue_differ.dart'; diff --git a/ngdart/lib/src/common/directives/ng_style.dart b/ngdart/lib/src/common/directives/ng_style.dart index 193ec5bf10..bbbe8fce81 100644 --- a/ngdart/lib/src/common/directives/ng_style.dart +++ b/ngdart/lib/src/common/directives/ng_style.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:ngdart/src/meta.dart'; import 'package:ngdart/src/utilities.dart'; diff --git a/ngdart/lib/src/core/application_ref.dart b/ngdart/lib/src/core/application_ref.dart index a8fd36da7d..983c1afc5a 100644 --- a/ngdart/lib/src/core/application_ref.dart +++ b/ngdart/lib/src/core/application_ref.dart @@ -1,5 +1,5 @@ import 'dart:async'; -import 'dart:html'; +import 'package:web/web.dart'; import 'package:meta/dart2js.dart' as dart2js; import 'package:ngdart/src/core/exception_handler.dart'; diff --git a/ngdart/lib/src/core/change_detection/directive_change_detector.dart b/ngdart/lib/src/core/change_detection/directive_change_detector.dart index 51c1065831..cd50de4d35 100644 --- a/ngdart/lib/src/core/change_detection/directive_change_detector.dart +++ b/ngdart/lib/src/core/change_detection/directive_change_detector.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:ngdart/src/core/linker/views/render_view.dart'; diff --git a/ngdart/lib/src/core/exception_handler.dart b/ngdart/lib/src/core/exception_handler.dart index 918ac544cd..8531ff586c 100644 --- a/ngdart/lib/src/core/exception_handler.dart +++ b/ngdart/lib/src/core/exception_handler.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; /// Provides a hook for receiving unhandled errors/exceptions. /// diff --git a/ngdart/lib/src/core/linker/component_factory.dart b/ngdart/lib/src/core/linker/component_factory.dart index df43db9f59..9dd08d41ad 100644 --- a/ngdart/lib/src/core/linker/component_factory.dart +++ b/ngdart/lib/src/core/linker/component_factory.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:meta/meta.dart'; import 'package:ngdart/src/core/change_detection/change_detector_ref.dart'; diff --git a/ngdart/lib/src/core/linker/style_encapsulation.dart b/ngdart/lib/src/core/linker/style_encapsulation.dart index fc3dcb4f2f..18df366a79 100644 --- a/ngdart/lib/src/core/linker/style_encapsulation.dart +++ b/ngdart/lib/src/core/linker/style_encapsulation.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:meta/dart2js.dart' as dart2js; import 'package:ngdart/src/core/linker/app_view_utils.dart'; diff --git a/ngdart/lib/src/core/linker/view_container.dart b/ngdart/lib/src/core/linker/view_container.dart index f1f11280da..34aadb939f 100644 --- a/ngdart/lib/src/core/linker/view_container.dart +++ b/ngdart/lib/src/core/linker/view_container.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:meta/meta.dart'; import 'package:ngdart/src/di/injector.dart' show Injector; diff --git a/ngdart/lib/src/core/linker/view_fragment.dart b/ngdart/lib/src/core/linker/view_fragment.dart index 9a52fe19a2..61bdfb5fef 100644 --- a/ngdart/lib/src/core/linker/view_fragment.dart +++ b/ngdart/lib/src/core/linker/view_fragment.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:meta/dart2js.dart' as dart2js; import 'package:ngdart/src/utilities.dart'; diff --git a/ngdart/lib/src/core/linker/view_ref.dart b/ngdart/lib/src/core/linker/view_ref.dart index a0d04317c3..5d10e69cdd 100644 --- a/ngdart/lib/src/core/linker/view_ref.dart +++ b/ngdart/lib/src/core/linker/view_ref.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; /// An Angular view that can be created and destroyed dynamically. /// diff --git a/ngdart/lib/src/core/linker/views/component_view.dart b/ngdart/lib/src/core/linker/views/component_view.dart index bd9d050643..c870f13343 100644 --- a/ngdart/lib/src/core/linker/views/component_view.dart +++ b/ngdart/lib/src/core/linker/views/component_view.dart @@ -1,5 +1,5 @@ import 'dart:async'; -import 'dart:html'; +import 'package:web/web.dart'; import 'package:meta/dart2js.dart' as dart2js; import 'package:meta/meta.dart'; diff --git a/ngdart/lib/src/core/linker/views/dynamic_view.dart b/ngdart/lib/src/core/linker/views/dynamic_view.dart index fdadf47784..1ca72ede5b 100644 --- a/ngdart/lib/src/core/linker/views/dynamic_view.dart +++ b/ngdart/lib/src/core/linker/views/dynamic_view.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:ngdart/src/core/linker/view_container.dart'; import 'package:ngdart/src/core/linker/view_fragment.dart'; diff --git a/ngdart/lib/src/core/linker/views/embedded_view.dart b/ngdart/lib/src/core/linker/views/embedded_view.dart index 7809947be3..0313435a23 100644 --- a/ngdart/lib/src/core/linker/views/embedded_view.dart +++ b/ngdart/lib/src/core/linker/views/embedded_view.dart @@ -1,5 +1,5 @@ import 'dart:async'; -import 'dart:html'; +import 'package:web/web.dart'; import 'package:meta/dart2js.dart' as dart2js; import 'package:meta/meta.dart'; diff --git a/ngdart/lib/src/core/linker/views/host_view.dart b/ngdart/lib/src/core/linker/views/host_view.dart index 5f481ceb5a..3e26659234 100644 --- a/ngdart/lib/src/core/linker/views/host_view.dart +++ b/ngdart/lib/src/core/linker/views/host_view.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:meta/dart2js.dart' as dart2js; import 'package:meta/meta.dart'; diff --git a/ngdart/lib/src/core/linker/views/render_view.dart b/ngdart/lib/src/core/linker/views/render_view.dart index 40e2036a71..e3ee953be5 100644 --- a/ngdart/lib/src/core/linker/views/render_view.dart +++ b/ngdart/lib/src/core/linker/views/render_view.dart @@ -1,5 +1,5 @@ import 'dart:async'; -import 'dart:html'; +import 'package:web/web.dart'; import 'package:meta/dart2js.dart' as dart2js; import 'package:ngdart/src/core/linker/app_view_utils.dart'; diff --git a/ngdart/lib/src/devtools/inspector.dart b/ngdart/lib/src/devtools/inspector.dart index 69a7e0edf9..d7fb7cc11d 100644 --- a/ngdart/lib/src/devtools/inspector.dart +++ b/ngdart/lib/src/devtools/inspector.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'dart:convert' show json; import 'dart:developer'; -import 'dart:html'; +import 'package:web/web.dart'; import 'package:built_collection/built_collection.dart'; import 'package:built_value/serializer.dart'; diff --git a/ngdart/lib/src/meta/directives.dart b/ngdart/lib/src/meta/directives.dart index c29c5d8357..6323fbc995 100644 --- a/ngdart/lib/src/meta/directives.dart +++ b/ngdart/lib/src/meta/directives.dart @@ -10,7 +10,7 @@ import 'visibility.dart'; /// /// /// ```dart -/// import 'dart:html'; +/// import 'package:web/web.dart'; /// /// import 'package:ngdart/angular.dart'; /// diff --git a/ngdart/lib/src/runtime/dom_events.dart b/ngdart/lib/src/runtime/dom_events.dart index 9bfc27de4d..87ea0fc7c8 100644 --- a/ngdart/lib/src/runtime/dom_events.dart +++ b/ngdart/lib/src/runtime/dom_events.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:ngdart/src/core/zone/ng_zone.dart'; diff --git a/ngdart/lib/src/runtime/text_binding.dart b/ngdart/lib/src/runtime/text_binding.dart index ece51b7083..bcdcf3f575 100644 --- a/ngdart/lib/src/runtime/text_binding.dart +++ b/ngdart/lib/src/runtime/text_binding.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:meta/dart2js.dart' as dart2js; import 'package:ngdart/src/runtime/check_binding.dart'; diff --git a/ngdart/lib/src/security/html_sanitizer.dart b/ngdart/lib/src/security/html_sanitizer.dart index 336bbfb539..bb9df0de90 100644 --- a/ngdart/lib/src/security/html_sanitizer.dart +++ b/ngdart/lib/src/security/html_sanitizer.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; final _inertFragment = DocumentFragment(); diff --git a/ngdart/lib/src/testability/js_api.dart b/ngdart/lib/src/testability/js_api.dart index 1da4f644c4..595bc59829 100644 --- a/ngdart/lib/src/testability/js_api.dart +++ b/ngdart/lib/src/testability/js_api.dart @@ -1,7 +1,7 @@ @JS() library angular.src.testability.js_api; -import 'dart:html'; +import 'package:web/web.dart'; import 'package:js/js.dart'; diff --git a/ngdart/lib/src/testability/testability.dart b/ngdart/lib/src/testability/testability.dart index 2895c9360a..7a47da8fbb 100644 --- a/ngdart/lib/src/testability/testability.dart +++ b/ngdart/lib/src/testability/testability.dart @@ -3,7 +3,7 @@ library angular.src.testability; import 'dart:async'; import 'dart:html' show Element; -import 'dart:html'; +import 'package:web/web.dart'; import 'package:js/js.dart'; import 'package:meta/meta.dart'; diff --git a/ngdart/pubspec.yaml b/ngdart/pubspec.yaml index 483e8a8fff..f8a5b32058 100644 --- a/ngdart/pubspec.yaml +++ b/ngdart/pubspec.yaml @@ -6,7 +6,7 @@ version: 8.0.0-dev.2 repository: https://github.com/angulardart-community/angular environment: - sdk: ">=2.18.0 <3.0.0" + sdk: '>=3.6.0 <4.0.0' dependencies: analyzer: ^5.4.0 @@ -23,4 +23,4 @@ dependencies: stream_transform: ^2.1.0 dev_dependencies: - lints: ^2.0.1 + lints: ^5.0.0 diff --git a/ngforms/lib/src/directives/checkbox_value_accessor.dart b/ngforms/lib/src/directives/checkbox_value_accessor.dart index 9644196b9d..b8109a937e 100644 --- a/ngforms/lib/src/directives/checkbox_value_accessor.dart +++ b/ngforms/lib/src/directives/checkbox_value_accessor.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:ngdart/angular.dart'; diff --git a/ngforms/lib/src/directives/default_value_accessor.dart b/ngforms/lib/src/directives/default_value_accessor.dart index ba7b99ead2..466f33eef2 100644 --- a/ngforms/lib/src/directives/default_value_accessor.dart +++ b/ngforms/lib/src/directives/default_value_accessor.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'dart:js_util' as js_util; import 'package:ngdart/angular.dart'; diff --git a/ngforms/lib/src/directives/number_value_accessor.dart b/ngforms/lib/src/directives/number_value_accessor.dart index 1f93ad71b2..a6e106b445 100644 --- a/ngforms/lib/src/directives/number_value_accessor.dart +++ b/ngforms/lib/src/directives/number_value_accessor.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:ngdart/angular.dart'; diff --git a/ngforms/lib/src/directives/radio_control_value_accessor.dart b/ngforms/lib/src/directives/radio_control_value_accessor.dart index 9f0d4657d0..504c6acc1f 100644 --- a/ngforms/lib/src/directives/radio_control_value_accessor.dart +++ b/ngforms/lib/src/directives/radio_control_value_accessor.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'dart:js_util' as js_util; import 'package:ngdart/angular.dart'; diff --git a/ngforms/lib/src/directives/select_control_value_accessor.dart b/ngforms/lib/src/directives/select_control_value_accessor.dart index 733fad76c1..499b7b2674 100644 --- a/ngforms/lib/src/directives/select_control_value_accessor.dart +++ b/ngforms/lib/src/directives/select_control_value_accessor.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:ngdart/angular.dart'; import 'package:ngdart/src/utilities.dart'; diff --git a/ngforms/lib/src/directives/shared.dart b/ngforms/lib/src/directives/shared.dart index 748c510137..190624341a 100644 --- a/ngforms/lib/src/directives/shared.dart +++ b/ngforms/lib/src/directives/shared.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'dart:js_util' as js_util; import '../model.dart' show Control, AbstractControlGroup; diff --git a/ngforms/pubspec.yaml b/ngforms/pubspec.yaml index d23844c1c5..31bb6bed1f 100644 --- a/ngforms/pubspec.yaml +++ b/ngforms/pubspec.yaml @@ -6,7 +6,7 @@ version: 5.0.0-dev.1 repository: https://github.com/angulardart-community/angular environment: - sdk: ">=2.18.0 <3.0.0" + sdk: '>=3.6.0 <4.0.0' dependencies: meta: ^1.8.0 @@ -15,7 +15,7 @@ dev_dependencies: build_runner: ^2.3.3 build_test: ^2.1.6 build_web_compilers: ^3.2.7 - lints: ^2.0.1 + lints: ^5.0.0 mockito: ^5.3.2 ngtest: ^5.0.0-dev.1 test: ^1.22.2 diff --git a/ngforms/test/accessor_test.dart b/ngforms/test/accessor_test.dart index a610caf0b7..d39d70dfad 100644 --- a/ngforms/test/accessor_test.dart +++ b/ngforms/test/accessor_test.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'dart:js_util' as js_util; import 'package:test/test.dart'; diff --git a/ngforms/test/integration_test.dart b/ngforms/test/integration_test.dart index 258543a597..138db372ab 100644 --- a/ngforms/test/integration_test.dart +++ b/ngforms/test/integration_test.dart @@ -1,5 +1,5 @@ import 'dart:async'; -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/ngforms/test/ng_control_group_test.dart b/ngforms/test/ng_control_group_test.dart index 3f910d6f30..8a39875ecf 100644 --- a/ngforms/test/ng_control_group_test.dart +++ b/ngforms/test/ng_control_group_test.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/ngforms/test/ng_control_name_test.dart b/ngforms/test/ng_control_name_test.dart index 80f857f94e..733ebaa327 100644 --- a/ngforms/test/ng_control_name_test.dart +++ b/ngforms/test/ng_control_name_test.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/ngforms/test/ng_form_control_test.dart b/ngforms/test/ng_form_control_test.dart index a9f049d79d..be0dde05dd 100644 --- a/ngforms/test/ng_form_control_test.dart +++ b/ngforms/test/ng_form_control_test.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/ngforms/test/ng_form_test.dart b/ngforms/test/ng_form_test.dart index f965164e32..fd61d65d74 100644 --- a/ngforms/test/ng_form_test.dart +++ b/ngforms/test/ng_form_test.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/ngrouter/lib/src/directives/router_link_active_directive.dart b/ngrouter/lib/src/directives/router_link_active_directive.dart index e470634d00..e869fb6592 100644 --- a/ngrouter/lib/src/directives/router_link_active_directive.dart +++ b/ngrouter/lib/src/directives/router_link_active_directive.dart @@ -1,5 +1,5 @@ import 'dart:async'; -import 'dart:html'; +import 'package:web/web.dart'; import 'package:collection/collection.dart'; import 'package:ngdart/angular.dart'; diff --git a/ngrouter/lib/src/location/base_href.dart b/ngrouter/lib/src/location/base_href.dart index 29c420930f..261295c429 100644 --- a/ngrouter/lib/src/location/base_href.dart +++ b/ngrouter/lib/src/location/base_href.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; final _urlParsingNode = AnchorElement(); Element? _baseElement; diff --git a/ngrouter/lib/src/location/browser_platform_location.dart b/ngrouter/lib/src/location/browser_platform_location.dart index de9bde806a..d954563589 100644 --- a/ngrouter/lib/src/location/browser_platform_location.dart +++ b/ngrouter/lib/src/location/browser_platform_location.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:ngdart/angular.dart' show Injectable; diff --git a/ngrouter/lib/src/location/location_strategy.dart b/ngrouter/lib/src/location/location_strategy.dart index d5bc17199c..40af612249 100644 --- a/ngrouter/lib/src/location/location_strategy.dart +++ b/ngrouter/lib/src/location/location_strategy.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:ngdart/angular.dart' show OpaqueToken; diff --git a/ngrouter/lib/src/location/platform_location.dart b/ngrouter/lib/src/location/platform_location.dart index e1a51fb390..52febc14f0 100644 --- a/ngrouter/lib/src/location/platform_location.dart +++ b/ngrouter/lib/src/location/platform_location.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; /// This class should not be used directly by an application developer. Instead, use /// [Location]. diff --git a/ngrouter/pubspec.yaml b/ngrouter/pubspec.yaml index 09cc789d5b..843ff1da12 100644 --- a/ngrouter/pubspec.yaml +++ b/ngrouter/pubspec.yaml @@ -6,7 +6,7 @@ version: 4.0.0-dev.1 repository: https://github.com/angulardart-community/angular environment: - sdk: ">=2.18.0 <3.0.0" + sdk: '>=3.6.0 <4.0.0' dependencies: collection: ^1.17.0 @@ -16,7 +16,7 @@ dev_dependencies: build_runner: ^2.3.3 build_test: ^2.1.6 build_web_compilers: ^3.2.7 - lints: ^2.0.1 + lints: ^5.0.0 mockito: ^5.3.2 ngtest: ^5.0.0-dev.1 test: ^1.22.2 diff --git a/ngrouter/test/regression/hash_location_strategy_test.dart b/ngrouter/test/regression/hash_location_strategy_test.dart index 9931a9df9d..1d848285ee 100644 --- a/ngrouter/test/regression/hash_location_strategy_test.dart +++ b/ngrouter/test/regression/hash_location_strategy_test.dart @@ -1,6 +1,6 @@ // @dart=2.9 -import 'dart:html'; +import 'package:web/web.dart'; import 'package:mockito/mockito.dart'; import 'package:test/test.dart'; diff --git a/ngrouter/test/regression/routing_state_crash_test.dart b/ngrouter/test/regression/routing_state_crash_test.dart index 1c130ab8b7..c44095c6c9 100644 --- a/ngrouter/test/regression/routing_state_crash_test.dart +++ b/ngrouter/test/regression/routing_state_crash_test.dart @@ -1,5 +1,5 @@ import 'dart:async'; -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/ngtest/lib/src/bootstrap.dart b/ngtest/lib/src/bootstrap.dart index 943a4298d5..1f704b8006 100644 --- a/ngtest/lib/src/bootstrap.dart +++ b/ngtest/lib/src/bootstrap.dart @@ -1,5 +1,5 @@ import 'dart:async'; -import 'dart:html'; +import 'package:web/web.dart'; import 'package:ngdart/angular.dart'; import 'package:ngdart/src/bootstrap/run.dart'; diff --git a/ngtest/lib/src/frontend/bed.dart b/ngtest/lib/src/frontend/bed.dart index c528f5b6d8..ea274eacc5 100644 --- a/ngtest/lib/src/frontend/bed.dart +++ b/ngtest/lib/src/frontend/bed.dart @@ -1,5 +1,5 @@ import 'dart:async'; -import 'dart:html'; +import 'package:web/web.dart'; import 'package:ngdart/angular.dart'; diff --git a/ngtest/lib/src/frontend/fixture.dart b/ngtest/lib/src/frontend/fixture.dart index 47e4989465..b3587f0e5b 100644 --- a/ngtest/lib/src/frontend/fixture.dart +++ b/ngtest/lib/src/frontend/fixture.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:ngdart/angular.dart'; import 'package:ngdart/src/utilities.dart'; diff --git a/ngtest/pubspec.yaml b/ngtest/pubspec.yaml index a28875706e..397d4b735b 100644 --- a/ngtest/pubspec.yaml +++ b/ngtest/pubspec.yaml @@ -6,7 +6,7 @@ version: 5.0.0-dev.1 repository: https://github.com/angulardart-community/angular environment: - sdk: ">=2.18.0 <3.0.0" + sdk: '>=3.6.0 <4.0.0' dependencies: collection: ^1.17.0 @@ -17,5 +17,5 @@ dev_dependencies: build_runner: ^2.3.3 build_test: ^2.1.6 build_web_compilers: ^3.2.7 - lints: ^2.0.1 + lints: ^5.0.0 test: ^1.22.2 diff --git a/ngtest/test/bootstrap_test.dart b/ngtest/test/bootstrap_test.dart index 787a24ae1c..8d25935644 100644 --- a/ngtest/test/bootstrap_test.dart +++ b/ngtest/test/bootstrap_test.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/ngtest/test/frontend/bed_lifecycle_test.dart b/ngtest/test/frontend/bed_lifecycle_test.dart index a6f3c77395..a1f92af06c 100644 --- a/ngtest/test/frontend/bed_lifecycle_test.dart +++ b/ngtest/test/frontend/bed_lifecycle_test.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; diff --git a/ngtest/test/frontend/compatibility_test.dart b/ngtest/test/frontend/compatibility_test.dart index 459d4fa9e6..026b17f2a4 100644 --- a/ngtest/test/frontend/compatibility_test.dart +++ b/ngtest/test/frontend/compatibility_test.dart @@ -1,4 +1,4 @@ -import 'dart:html'; +import 'package:web/web.dart'; import 'package:test/test.dart'; import 'package:ngdart/angular.dart'; From 5c1de2cdc2cd1701f435a5597709c1117c4d4f40 Mon Sep 17 00:00:00 2001 From: Thomas Hii Date: Tue, 25 Mar 2025 23:08:56 +0800 Subject: [PATCH 02/70] Upgrade dependencies --- _tests/pubspec.yaml | 6 +++--- examples/hello_world/pubspec.yaml | 2 +- goldens/pubspec.yaml | 6 +++--- ngcompiler/pubspec.yaml | 8 ++++---- ngdart/pubspec.yaml | 8 ++++---- ngforms/pubspec.yaml | 2 +- ngrouter/pubspec.yaml | 2 +- ngtest/pubspec.yaml | 2 +- 8 files changed, 18 insertions(+), 18 deletions(-) diff --git a/_tests/pubspec.yaml b/_tests/pubspec.yaml index b153acdb51..88808476d9 100644 --- a/_tests/pubspec.yaml +++ b/_tests/pubspec.yaml @@ -14,10 +14,10 @@ dependencies: test: ^1.22.2 dev_dependencies: - analyzer: ^5.4.0 + analyzer: ^7.3.0 build_runner: ^2.3.3 - build_web_compilers: ^3.2.7 - csslib: 0.17.2 + build_web_compilers: ^4.1.3 + csslib: ^1.0.0 lints: ^5.0.0 meta: ^1.8.0 mockito: ^5.3.2 diff --git a/examples/hello_world/pubspec.yaml b/examples/hello_world/pubspec.yaml index 0b35874468..92cd626e09 100644 --- a/examples/hello_world/pubspec.yaml +++ b/examples/hello_world/pubspec.yaml @@ -9,5 +9,5 @@ dependencies: dev_dependencies: build_runner: ^2.3.3 - build_web_compilers: ^3.2.7 + build_web_compilers: ^4.1.3 lints: ^5.0.0 diff --git a/goldens/pubspec.yaml b/goldens/pubspec.yaml index bd67d67aba..809a36110b 100644 --- a/goldens/pubspec.yaml +++ b/goldens/pubspec.yaml @@ -6,13 +6,13 @@ environment: sdk: '>=3.6.0 <4.0.0' dependencies: - js: ^0.6.5 +# js: ^0.7.2 ngdart: ^8.0.0-dev.1 dev_dependencies: build_runner: ^2.3.3 - build_web_compilers: ^3.2.7 - dart_style: ^2.3.0 + build_web_compilers: ^4.1.3 + dart_style: ^3.0.1 glob: ^2.1.1 lints: ^5.0.0 path: ^1.8.3 diff --git a/ngcompiler/pubspec.yaml b/ngcompiler/pubspec.yaml index 5d8378bfaa..d9490bfc48 100644 --- a/ngcompiler/pubspec.yaml +++ b/ngcompiler/pubspec.yaml @@ -10,21 +10,21 @@ environment: sdk: '>=3.6.0 <4.0.0' dependencies: - analyzer: ^5.4.0 + analyzer: ^7.3.0 args: ^2.3.2 build: ^2.3.1 build_test: ^2.1.6 code_builder: ^4.4.0 collection: ^1.17.0 - csslib: ^0.17.2 - dart_style: ^2.2.4 + csslib: ^1.0.0 + dart_style: ^3.0.1 logging: ^1.1.0 meta: ^1.8.0 ngast: ^3.0.0-dev.0 ngdart: ^8.0.0-dev.1 package_config: ^2.1.0 path: ^1.8.3 - source_gen: ^1.2.6 + source_gen: ^2.0.0 source_span: ^1.9.1 dev_dependencies: diff --git a/ngdart/pubspec.yaml b/ngdart/pubspec.yaml index f8a5b32058..0c45046735 100644 --- a/ngdart/pubspec.yaml +++ b/ngdart/pubspec.yaml @@ -9,14 +9,14 @@ environment: sdk: '>=3.6.0 <4.0.0' dependencies: - analyzer: ^5.4.0 + analyzer: ^7.3.0 build: ^2.3.1 built_collection: ^5.1.1 - build_modules: ^4.0.7 + build_modules: ^5.0.12 built_value: ^8.4.3 collection: ^1.17.0 - intl: ^0.18.0 - js: ^0.6.5 + intl: ^0.20.0 +# js: ^0.7.2 meta: ^1.8.0 ngast: ^3.0.0-dev.0 ngcompiler: ^3.0.0-dev.1 diff --git a/ngforms/pubspec.yaml b/ngforms/pubspec.yaml index 31bb6bed1f..79ffcff667 100644 --- a/ngforms/pubspec.yaml +++ b/ngforms/pubspec.yaml @@ -14,7 +14,7 @@ dependencies: dev_dependencies: build_runner: ^2.3.3 build_test: ^2.1.6 - build_web_compilers: ^3.2.7 + build_web_compilers: ^4.1.3 lints: ^5.0.0 mockito: ^5.3.2 ngtest: ^5.0.0-dev.1 diff --git a/ngrouter/pubspec.yaml b/ngrouter/pubspec.yaml index 843ff1da12..f9f034238b 100644 --- a/ngrouter/pubspec.yaml +++ b/ngrouter/pubspec.yaml @@ -15,7 +15,7 @@ dev_dependencies: async: ^2.10.0 build_runner: ^2.3.3 build_test: ^2.1.6 - build_web_compilers: ^3.2.7 + build_web_compilers: ^4.1.3 lints: ^5.0.0 mockito: ^5.3.2 ngtest: ^5.0.0-dev.1 diff --git a/ngtest/pubspec.yaml b/ngtest/pubspec.yaml index 397d4b735b..ef86883bc9 100644 --- a/ngtest/pubspec.yaml +++ b/ngtest/pubspec.yaml @@ -16,6 +16,6 @@ dependencies: dev_dependencies: build_runner: ^2.3.3 build_test: ^2.1.6 - build_web_compilers: ^3.2.7 + build_web_compilers: ^4.1.3 lints: ^5.0.0 test: ^1.22.2 From 14e40b0fa5d4c8d3398cc773d9885f7dce3483ee Mon Sep 17 00:00:00 2001 From: Thomas Hii Date: Wed, 26 Mar 2025 23:13:26 +0800 Subject: [PATCH 03/70] Replace dart:html with package:web --- .../boolean_coerced_inputs.template.dart.golden | 2 +- .../change_detection/change_detection_link.template.dart.golden | 2 +- goldens/test/change_detection/default.template.dart.golden | 2 +- .../directive_change_detector.template.dart.golden | 2 +- goldens/test/change_detection/on_push.template.dart.golden | 2 +- .../eager_existing_providers.template.dart.golden | 2 +- .../generated_injector_large.template.dart.golden | 2 +- .../generated_injector_small.template.dart.golden | 2 +- .../injector_get_internal.template.dart.golden | 2 +- .../dependency_injection/inlined_providers.template.dart.golden | 2 +- .../test/dependency_injection/opaque_token.template.dart.golden | 2 +- .../test/dependency_injection/visibility.template.dart.golden | 2 +- goldens/test/devtools/inputs.template.dart.golden | 2 +- goldens/test/dom_bindings/events.template.dart.golden | 2 +- goldens/test/dom_bindings/host_annotations.template.dart.golden | 2 +- goldens/test/dom_bindings/interpolate.template.dart.golden | 2 +- goldens/test/lifecycle_hooks/after_changes.template.dart.golden | 2 +- goldens/test/lifecycle_hooks/after_queries.template.dart.golden | 2 +- goldens/test/lifecycle_hooks/do_check.template.dart.golden | 2 +- .../lifecycle_hooks/on_init_and_destroy.template.dart.golden | 2 +- goldens/test/nnbd/hello_world.template.dart.golden | 2 +- .../test/templates/directive_star_syntax.template.dart.golden | 2 +- goldens/test/templates/encapsulation.template.dart.golden | 2 +- goldens/test/templates/generic_directives.template.dart.golden | 2 +- goldens/test/templates/i18n.template.dart.golden | 2 +- goldens/test/templates/large_templates.template.dart.golden | 2 +- .../test/templates/large_templates_opt_out.template.dart.golden | 2 +- .../templates/nested_structural_directives.template.dart.golden | 2 +- goldens/test/templates/pipes.template.dart.golden | 2 +- goldens/test/templates/queries.template.dart.golden | 2 +- goldens/test/templates/type_inference.template.dart.golden | 2 +- goldens/test/templates/whitespace.template.dart.golden | 2 +- ngcompiler/lib/v1/src/angular_compiler/outliner.dart | 2 +- 33 files changed, 33 insertions(+), 33 deletions(-) diff --git a/goldens/test/change_detection/boolean_coerced_inputs.template.dart.golden b/goldens/test/change_detection/boolean_coerced_inputs.template.dart.golden index 2e01d8fc8c..909a933e45 100644 --- a/goldens/test/change_detection/boolean_coerced_inputs.template.dart.golden +++ b/goldens/test/change_detection/boolean_coerced_inputs.template.dart.golden @@ -9,7 +9,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import2; import 'package:ngdart/src/core/linker/views/view.dart' as import3; import 'package:ngdart/src/meta/change_detection_constants.dart' as import4; import 'package:ngdart/src/utilities.dart' as import5; -import 'dart:html' as import6; +import 'package:web/web.dart' as import6; import 'package:ngdart/src/runtime/dom_helpers.dart' as import7; import 'package:ngdart/src/devtools.dart' as import8; import 'package:ngdart/src/runtime/check_binding.dart' as import9; diff --git a/goldens/test/change_detection/change_detection_link.template.dart.golden b/goldens/test/change_detection/change_detection_link.template.dart.golden index a1028b9b79..ae26790c0a 100644 --- a/goldens/test/change_detection/change_detection_link.template.dart.golden +++ b/goldens/test/change_detection/change_detection_link.template.dart.golden @@ -9,7 +9,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import2; import 'package:ngdart/src/core/linker/views/view.dart' as import3; import 'package:ngdart/src/meta/change_detection_constants.dart' as import4; import 'package:ngdart/src/utilities.dart' as import5; -import 'dart:html' as import6; +import 'package:web/web.dart' as import6; import 'package:ngdart/angular.dart'; import 'package:ngdart/src/core/linker/views/host_view.dart' as import8; import 'package:ngdart/src/core/linker/view_container.dart'; diff --git a/goldens/test/change_detection/default.template.dart.golden b/goldens/test/change_detection/default.template.dart.golden index 17218b1b07..d43ee768b2 100644 --- a/goldens/test/change_detection/default.template.dart.golden +++ b/goldens/test/change_detection/default.template.dart.golden @@ -9,7 +9,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import2; import 'package:ngdart/src/core/linker/views/view.dart' as import3; import 'package:ngdart/src/meta/change_detection_constants.dart' as import4; import 'package:ngdart/src/utilities.dart' as import5; -import 'dart:html' as import6; +import 'package:web/web.dart' as import6; import 'package:ngdart/src/runtime/check_binding.dart' as import7; import 'package:ngdart/src/devtools.dart' as import8; import 'package:ngdart/angular.dart'; diff --git a/goldens/test/change_detection/directive_change_detector.template.dart.golden b/goldens/test/change_detection/directive_change_detector.template.dart.golden index 7ec46bbccd..7c5f11a99a 100644 --- a/goldens/test/change_detection/directive_change_detector.template.dart.golden +++ b/goldens/test/change_detection/directive_change_detector.template.dart.golden @@ -9,7 +9,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import2; import 'package:ngdart/src/core/linker/views/view.dart' as import3; import 'package:ngdart/src/meta/change_detection_constants.dart' as import4; import 'package:ngdart/src/utilities.dart' as import5; -import 'dart:html' as import6; +import 'package:web/web.dart' as import6; import 'package:ngdart/src/runtime/dom_helpers.dart' as import7; import 'package:ngdart/src/devtools.dart' as import8; import 'package:ngdart/src/runtime/check_binding.dart' as import9; diff --git a/goldens/test/change_detection/on_push.template.dart.golden b/goldens/test/change_detection/on_push.template.dart.golden index d16b20014b..aff759a35b 100644 --- a/goldens/test/change_detection/on_push.template.dart.golden +++ b/goldens/test/change_detection/on_push.template.dart.golden @@ -9,7 +9,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import2; import 'package:ngdart/src/core/linker/views/view.dart' as import3; import 'package:ngdart/src/meta/change_detection_constants.dart' as import4; import 'package:ngdart/src/utilities.dart' as import5; -import 'dart:html' as import6; +import 'package:web/web.dart' as import6; import 'package:ngdart/src/runtime/check_binding.dart' as import7; import 'package:ngdart/src/devtools.dart' as import8; import 'package:ngdart/angular.dart'; diff --git a/goldens/test/dependency_injection/eager_existing_providers.template.dart.golden b/goldens/test/dependency_injection/eager_existing_providers.template.dart.golden index b8603f5ad5..bd4aed67fc 100644 --- a/goldens/test/dependency_injection/eager_existing_providers.template.dart.golden +++ b/goldens/test/dependency_injection/eager_existing_providers.template.dart.golden @@ -9,7 +9,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import2; import 'package:ngdart/src/core/linker/views/view.dart' as import3; import 'package:ngdart/src/meta/change_detection_constants.dart' as import4; import 'package:ngdart/src/utilities.dart' as import5; -import 'dart:html' as import6; +import 'package:web/web.dart' as import6; import 'package:ngdart/angular.dart'; import 'package:ngdart/src/core/linker/views/host_view.dart' as import8; import 'package:ngdart/src/di/errors.dart' as import9; diff --git a/goldens/test/dependency_injection/generated_injector_large.template.dart.golden b/goldens/test/dependency_injection/generated_injector_large.template.dart.golden index 97f3d7e857..1615cc2fe9 100644 --- a/goldens/test/dependency_injection/generated_injector_large.template.dart.golden +++ b/goldens/test/dependency_injection/generated_injector_large.template.dart.golden @@ -11,7 +11,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import2; import 'package:ngdart/src/core/linker/views/view.dart' as import3; import 'package:ngdart/src/meta/change_detection_constants.dart' as import4; import 'package:ngdart/src/utilities.dart' as import5; -import 'dart:html' as import6; +import 'package:web/web.dart' as import6; import 'package:ngdart/angular.dart'; import 'package:ngdart/src/core/linker/views/host_view.dart' as import8; diff --git a/goldens/test/dependency_injection/generated_injector_small.template.dart.golden b/goldens/test/dependency_injection/generated_injector_small.template.dart.golden index 35bf6c7698..ae1fb7851e 100644 --- a/goldens/test/dependency_injection/generated_injector_small.template.dart.golden +++ b/goldens/test/dependency_injection/generated_injector_small.template.dart.golden @@ -12,7 +12,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import2; import 'package:ngdart/src/core/linker/views/view.dart' as import3; import 'package:ngdart/src/meta/change_detection_constants.dart' as import4; import 'package:ngdart/src/utilities.dart' as import5; -import 'dart:html' as import6; +import 'package:web/web.dart' as import6; import 'package:ngdart/angular.dart'; import 'package:ngdart/src/core/linker/views/host_view.dart' as import8; diff --git a/goldens/test/dependency_injection/injector_get_internal.template.dart.golden b/goldens/test/dependency_injection/injector_get_internal.template.dart.golden index 002d84dfd3..b2e4a9ba5d 100644 --- a/goldens/test/dependency_injection/injector_get_internal.template.dart.golden +++ b/goldens/test/dependency_injection/injector_get_internal.template.dart.golden @@ -10,7 +10,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import3; import 'package:ngdart/src/core/linker/views/view.dart' as import4; import 'package:ngdart/src/meta/change_detection_constants.dart' as import5; import 'package:ngdart/src/utilities.dart' as import6; -import 'dart:html' as import7; +import 'package:web/web.dart' as import7; import 'package:ngdart/src/runtime/dom_helpers.dart' as import8; import 'package:ngdart/src/devtools.dart' as import9; import 'package:ngdart/src/meta/di_tokens.dart' as import10; diff --git a/goldens/test/dependency_injection/inlined_providers.template.dart.golden b/goldens/test/dependency_injection/inlined_providers.template.dart.golden index a6ace8adad..ea011403d2 100644 --- a/goldens/test/dependency_injection/inlined_providers.template.dart.golden +++ b/goldens/test/dependency_injection/inlined_providers.template.dart.golden @@ -9,7 +9,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import2; import 'package:ngdart/src/core/linker/views/view.dart' as import3; import 'package:ngdart/src/meta/change_detection_constants.dart' as import4; import 'package:ngdart/src/utilities.dart' as import5; -import 'dart:html' as import6; +import 'package:web/web.dart' as import6; import 'package:ngdart/src/runtime/dom_helpers.dart' as import7; import 'package:ngdart/src/devtools.dart' as import8; import 'package:ngdart/angular.dart'; diff --git a/goldens/test/dependency_injection/opaque_token.template.dart.golden b/goldens/test/dependency_injection/opaque_token.template.dart.golden index 325817f3f7..f677799aad 100644 --- a/goldens/test/dependency_injection/opaque_token.template.dart.golden +++ b/goldens/test/dependency_injection/opaque_token.template.dart.golden @@ -12,7 +12,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import2; import 'package:ngdart/src/core/linker/views/view.dart' as import3; import 'package:ngdart/src/meta/change_detection_constants.dart' as import4; import 'package:ngdart/src/utilities.dart' as import5; -import 'dart:html' as import6; +import 'package:web/web.dart' as import6; import 'package:ngdart/angular.dart'; import 'package:ngdart/src/core/linker/views/host_view.dart' as import8; import 'dart:core'; diff --git a/goldens/test/dependency_injection/visibility.template.dart.golden b/goldens/test/dependency_injection/visibility.template.dart.golden index 7b8364d11b..f7403881b5 100644 --- a/goldens/test/dependency_injection/visibility.template.dart.golden +++ b/goldens/test/dependency_injection/visibility.template.dart.golden @@ -9,7 +9,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import2; import 'package:ngdart/src/core/linker/views/view.dart' as import3; import 'package:ngdart/src/meta/change_detection_constants.dart' as import4; import 'package:ngdart/src/utilities.dart' as import5; -import 'dart:html' as import6; +import 'package:web/web.dart' as import6; import 'package:ngdart/angular.dart'; import 'package:ngdart/src/core/linker/views/host_view.dart' as import8; diff --git a/goldens/test/devtools/inputs.template.dart.golden b/goldens/test/devtools/inputs.template.dart.golden index 4a3d965aaa..ac115f32c4 100644 --- a/goldens/test/devtools/inputs.template.dart.golden +++ b/goldens/test/devtools/inputs.template.dart.golden @@ -10,7 +10,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import3; import 'package:ngdart/src/core/linker/views/view.dart' as import4; import 'package:ngdart/src/meta/change_detection_constants.dart' as import5; import 'package:ngdart/src/utilities.dart' as import6; -import 'dart:html' as import7; +import 'package:web/web.dart' as import7; import 'package:ngdart/src/runtime/dom_helpers.dart' as import8; import 'package:ngdart/src/devtools.dart' as import9; import 'package:ngdart/src/runtime/check_binding.dart' as import10; diff --git a/goldens/test/dom_bindings/events.template.dart.golden b/goldens/test/dom_bindings/events.template.dart.golden index 7b3d43e77f..ba6f58b102 100644 --- a/goldens/test/dom_bindings/events.template.dart.golden +++ b/goldens/test/dom_bindings/events.template.dart.golden @@ -9,7 +9,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import2; import 'package:ngdart/src/core/linker/views/view.dart' as import3; import 'package:ngdart/src/meta/change_detection_constants.dart' as import4; import 'package:ngdart/src/utilities.dart' as import5; -import 'dart:html' as import6; +import 'package:web/web.dart' as import6; import 'package:ngdart/angular.dart'; import 'package:ngdart/src/core/linker/views/host_view.dart' as import8; import 'package:ngdart/src/runtime/dom_helpers.dart' as import9; diff --git a/goldens/test/dom_bindings/host_annotations.template.dart.golden b/goldens/test/dom_bindings/host_annotations.template.dart.golden index 125a5e9944..688ce37484 100644 --- a/goldens/test/dom_bindings/host_annotations.template.dart.golden +++ b/goldens/test/dom_bindings/host_annotations.template.dart.golden @@ -9,7 +9,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import2; import 'package:ngdart/src/core/linker/views/view.dart' as import3; import 'package:ngdart/src/meta/change_detection_constants.dart' as import4; import 'package:ngdart/src/utilities.dart' as import5; -import 'dart:html' as import6; +import 'package:web/web.dart' as import6; import 'package:ngdart/src/runtime/dom_helpers.dart' as import7; import 'package:ngdart/src/devtools.dart' as import8; import 'package:ngdart/src/core/linker/app_view_utils.dart' as import9; diff --git a/goldens/test/dom_bindings/interpolate.template.dart.golden b/goldens/test/dom_bindings/interpolate.template.dart.golden index d2184c4d47..260a0b04f3 100644 --- a/goldens/test/dom_bindings/interpolate.template.dart.golden +++ b/goldens/test/dom_bindings/interpolate.template.dart.golden @@ -9,7 +9,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import2; import 'package:ngdart/src/core/linker/views/view.dart' as import3; import 'package:ngdart/src/meta/change_detection_constants.dart' as import4; import 'package:ngdart/src/utilities.dart' as import5; -import 'dart:html' as import6; +import 'package:web/web.dart' as import6; import 'package:ngdart/src/runtime/check_binding.dart' as import7; import 'package:ngdart/src/devtools.dart' as import8; import 'package:ngdart/angular.dart'; diff --git a/goldens/test/lifecycle_hooks/after_changes.template.dart.golden b/goldens/test/lifecycle_hooks/after_changes.template.dart.golden index dedcbb9e9e..966a6d2f8c 100644 --- a/goldens/test/lifecycle_hooks/after_changes.template.dart.golden +++ b/goldens/test/lifecycle_hooks/after_changes.template.dart.golden @@ -9,7 +9,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import2; import 'package:ngdart/src/core/linker/views/view.dart' as import3; import 'package:ngdart/src/meta/change_detection_constants.dart' as import4; import 'package:ngdart/src/utilities.dart' as import5; -import 'dart:html' as import6; +import 'package:web/web.dart' as import6; import 'package:ngdart/src/runtime/check_binding.dart' as import7; import 'package:ngdart/src/devtools.dart' as import8; import 'package:ngdart/angular.dart'; diff --git a/goldens/test/lifecycle_hooks/after_queries.template.dart.golden b/goldens/test/lifecycle_hooks/after_queries.template.dart.golden index 1edaf89609..a72258739e 100644 --- a/goldens/test/lifecycle_hooks/after_queries.template.dart.golden +++ b/goldens/test/lifecycle_hooks/after_queries.template.dart.golden @@ -11,7 +11,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import4; import 'package:ngdart/src/core/linker/views/view.dart' as import5; import 'package:ngdart/src/meta/change_detection_constants.dart' as import6; import 'package:ngdart/src/utilities.dart' as import7; -import 'dart:html' as import8; +import 'package:web/web.dart' as import8; import 'package:ngdart/src/runtime/dom_helpers.dart' as import9; import 'package:ngdart/src/core/linker/template_ref.dart'; import 'package:ngdart/src/devtools.dart' as import11; diff --git a/goldens/test/lifecycle_hooks/do_check.template.dart.golden b/goldens/test/lifecycle_hooks/do_check.template.dart.golden index 29e7242580..fbc636ca25 100644 --- a/goldens/test/lifecycle_hooks/do_check.template.dart.golden +++ b/goldens/test/lifecycle_hooks/do_check.template.dart.golden @@ -9,7 +9,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import2; import 'package:ngdart/src/core/linker/views/view.dart' as import3; import 'package:ngdart/src/meta/change_detection_constants.dart' as import4; import 'package:ngdart/src/utilities.dart' as import5; -import 'dart:html' as import6; +import 'package:web/web.dart' as import6; import 'package:ngdart/src/runtime/check_binding.dart' as import7; import 'package:ngdart/src/devtools.dart' as import8; import 'package:ngdart/angular.dart'; diff --git a/goldens/test/lifecycle_hooks/on_init_and_destroy.template.dart.golden b/goldens/test/lifecycle_hooks/on_init_and_destroy.template.dart.golden index 9897e42334..8b5d64395e 100644 --- a/goldens/test/lifecycle_hooks/on_init_and_destroy.template.dart.golden +++ b/goldens/test/lifecycle_hooks/on_init_and_destroy.template.dart.golden @@ -9,7 +9,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import2; import 'package:ngdart/src/core/linker/views/view.dart' as import3; import 'package:ngdart/src/meta/change_detection_constants.dart' as import4; import 'package:ngdart/src/utilities.dart' as import5; -import 'dart:html' as import6; +import 'package:web/web.dart' as import6; import 'package:ngdart/src/runtime/check_binding.dart' as import7; import 'package:ngdart/src/devtools.dart' as import8; import 'package:ngdart/angular.dart'; diff --git a/goldens/test/nnbd/hello_world.template.dart.golden b/goldens/test/nnbd/hello_world.template.dart.golden index 2ae72cf41f..f232257718 100644 --- a/goldens/test/nnbd/hello_world.template.dart.golden +++ b/goldens/test/nnbd/hello_world.template.dart.golden @@ -9,7 +9,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import2; import 'package:ngdart/src/core/linker/views/view.dart' as import3; import 'package:ngdart/src/meta/change_detection_constants.dart' as import4; import 'package:ngdart/src/utilities.dart' as import5; -import 'dart:html' as import6; +import 'package:web/web.dart' as import6; import 'package:ngdart/src/runtime/dom_helpers.dart' as import7; import 'package:ngdart/angular.dart'; import 'package:ngdart/src/core/linker/views/host_view.dart' as import9; diff --git a/goldens/test/templates/directive_star_syntax.template.dart.golden b/goldens/test/templates/directive_star_syntax.template.dart.golden index 480808a114..17976ae9b6 100644 --- a/goldens/test/templates/directive_star_syntax.template.dart.golden +++ b/goldens/test/templates/directive_star_syntax.template.dart.golden @@ -12,7 +12,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import5; import 'package:ngdart/src/core/linker/views/view.dart' as import6; import 'package:ngdart/src/meta/change_detection_constants.dart' as import7; import 'package:ngdart/src/utilities.dart' as import8; -import 'dart:html' as import9; +import 'package:web/web.dart' as import9; import 'package:ngdart/src/runtime/dom_helpers.dart' as import10; import 'package:ngdart/src/core/linker/template_ref.dart'; import 'package:ngdart/src/devtools.dart' as import12; diff --git a/goldens/test/templates/encapsulation.template.dart.golden b/goldens/test/templates/encapsulation.template.dart.golden index 45b95e8069..9568ce4b55 100644 --- a/goldens/test/templates/encapsulation.template.dart.golden +++ b/goldens/test/templates/encapsulation.template.dart.golden @@ -5,7 +5,7 @@ import 'encapsulation.dart'; import 'package:ngdart/src/core/linker/views/component_view.dart' as import0; import 'encapsulation.dart' as import1; -import 'dart:html' as import2; +import 'package:web/web.dart' as import2; import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import3; import 'package:ngdart/src/core/linker/views/view.dart' as import4; import 'package:ngdart/src/meta/change_detection_constants.dart' as import5; diff --git a/goldens/test/templates/generic_directives.template.dart.golden b/goldens/test/templates/generic_directives.template.dart.golden index ea129ccb92..eb291b848c 100644 --- a/goldens/test/templates/generic_directives.template.dart.golden +++ b/goldens/test/templates/generic_directives.template.dart.golden @@ -9,7 +9,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import2; import 'package:ngdart/src/core/linker/views/view.dart' as import3; import 'package:ngdart/src/meta/change_detection_constants.dart' as import4; import 'package:ngdart/src/utilities.dart' as import5; -import 'dart:html' as import6; +import 'package:web/web.dart' as import6; import 'package:ngdart/angular.dart'; import 'package:ngdart/src/core/linker/views/host_view.dart' as import8; import 'package:ngdart/src/runtime/check_binding.dart' as import9; diff --git a/goldens/test/templates/i18n.template.dart.golden b/goldens/test/templates/i18n.template.dart.golden index 5658984b6e..29e28532e9 100644 --- a/goldens/test/templates/i18n.template.dart.golden +++ b/goldens/test/templates/i18n.template.dart.golden @@ -10,7 +10,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import3; import 'package:ngdart/src/core/linker/views/view.dart' as import4; import 'package:ngdart/src/meta/change_detection_constants.dart' as import5; import 'package:ngdart/src/utilities.dart' as import6; -import 'dart:html' as import7; +import 'package:web/web.dart' as import7; import 'package:ngdart/src/runtime/dom_helpers.dart' as import8; import 'package:ngdart/src/core/linker/app_view_utils.dart' as import9; import 'package:ngdart/src/devtools.dart' as import10; diff --git a/goldens/test/templates/large_templates.template.dart.golden b/goldens/test/templates/large_templates.template.dart.golden index fb4b10b70b..6e50c1b133 100644 --- a/goldens/test/templates/large_templates.template.dart.golden +++ b/goldens/test/templates/large_templates.template.dart.golden @@ -11,7 +11,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import4; import 'package:ngdart/src/core/linker/views/view.dart' as import5; import 'package:ngdart/src/meta/change_detection_constants.dart' as import6; import 'package:ngdart/src/utilities.dart' as import7; -import 'dart:html' as import8; +import 'package:web/web.dart' as import8; import 'package:ngdart/src/runtime/dom_helpers.dart' as import9; import 'package:ngdart/src/core/linker/template_ref.dart'; import 'package:ngdart/src/devtools.dart' as import11; diff --git a/goldens/test/templates/large_templates_opt_out.template.dart.golden b/goldens/test/templates/large_templates_opt_out.template.dart.golden index 0c20f155b1..e05c045218 100644 --- a/goldens/test/templates/large_templates_opt_out.template.dart.golden +++ b/goldens/test/templates/large_templates_opt_out.template.dart.golden @@ -13,7 +13,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import4; import 'package:ngdart/src/core/linker/views/view.dart' as import5; import 'package:ngdart/src/meta/change_detection_constants.dart' as import6; import 'package:ngdart/src/utilities.dart' as import7; -import 'dart:html' as import8; +import 'package:web/web.dart' as import8; import 'package:ngdart/src/runtime/dom_helpers.dart' as import9; import 'package:ngdart/src/core/linker/template_ref.dart'; import 'package:ngdart/src/devtools.dart' as import11; diff --git a/goldens/test/templates/nested_structural_directives.template.dart.golden b/goldens/test/templates/nested_structural_directives.template.dart.golden index 7a4c4f6c15..05300ea93a 100644 --- a/goldens/test/templates/nested_structural_directives.template.dart.golden +++ b/goldens/test/templates/nested_structural_directives.template.dart.golden @@ -11,7 +11,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import4; import 'package:ngdart/src/core/linker/views/view.dart' as import5; import 'package:ngdart/src/meta/change_detection_constants.dart' as import6; import 'package:ngdart/src/utilities.dart' as import7; -import 'dart:html' as import8; +import 'package:web/web.dart' as import8; import 'package:ngdart/src/runtime/dom_helpers.dart' as import9; import 'package:ngdart/src/core/linker/template_ref.dart'; import 'package:ngdart/src/devtools.dart' as import11; diff --git a/goldens/test/templates/pipes.template.dart.golden b/goldens/test/templates/pipes.template.dart.golden index cd1e7eb3da..3efc15c639 100644 --- a/goldens/test/templates/pipes.template.dart.golden +++ b/goldens/test/templates/pipes.template.dart.golden @@ -11,7 +11,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import4; import 'package:ngdart/src/core/linker/views/view.dart' as import5; import 'package:ngdart/src/meta/change_detection_constants.dart' as import6; import 'package:ngdart/src/utilities.dart' as import7; -import 'dart:html' as import8; +import 'package:web/web.dart' as import8; import 'package:ngdart/src/runtime/dom_helpers.dart' as import9; import 'package:ngdart/src/runtime/proxies.dart' as import10; import 'package:ngdart/src/runtime/interpolate.dart' as import11; diff --git a/goldens/test/templates/queries.template.dart.golden b/goldens/test/templates/queries.template.dart.golden index db96fec558..fd323ead27 100644 --- a/goldens/test/templates/queries.template.dart.golden +++ b/goldens/test/templates/queries.template.dart.golden @@ -11,7 +11,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import4; import 'package:ngdart/src/core/linker/views/view.dart' as import5; import 'package:ngdart/src/meta/change_detection_constants.dart' as import6; import 'package:ngdart/src/utilities.dart' as import7; -import 'dart:html' as import8; +import 'package:web/web.dart' as import8; import 'package:ngdart/src/runtime/dom_helpers.dart' as import9; import 'package:ngdart/src/devtools.dart' as import10; import 'package:ngdart/src/core/linker/template_ref.dart'; diff --git a/goldens/test/templates/type_inference.template.dart.golden b/goldens/test/templates/type_inference.template.dart.golden index a557d74659..8b7ef8cc81 100644 --- a/goldens/test/templates/type_inference.template.dart.golden +++ b/goldens/test/templates/type_inference.template.dart.golden @@ -12,7 +12,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import5; import 'package:ngdart/src/core/linker/views/view.dart' as import6; import 'package:ngdart/src/meta/change_detection_constants.dart' as import7; import 'package:ngdart/src/utilities.dart' as import8; -import 'dart:html' as import9; +import 'package:web/web.dart' as import9; import 'package:ngdart/src/runtime/dom_helpers.dart' as import10; import 'package:ngdart/src/core/linker/template_ref.dart'; import 'package:ngdart/src/devtools.dart' as import12; diff --git a/goldens/test/templates/whitespace.template.dart.golden b/goldens/test/templates/whitespace.template.dart.golden index 98708752a7..1230fbafde 100644 --- a/goldens/test/templates/whitespace.template.dart.golden +++ b/goldens/test/templates/whitespace.template.dart.golden @@ -9,7 +9,7 @@ import 'package:ngdart/src/core/linker/style_encapsulation.dart' as import2; import 'package:ngdart/src/core/linker/views/view.dart' as import3; import 'package:ngdart/src/meta/change_detection_constants.dart' as import4; import 'package:ngdart/src/utilities.dart' as import5; -import 'dart:html' as import6; +import 'package:web/web.dart' as import6; import 'package:ngdart/angular.dart'; import 'package:ngdart/src/core/linker/views/host_view.dart' as import8; import 'package:intl/intl.dart' as import9; diff --git a/ngcompiler/lib/v1/src/angular_compiler/outliner.dart b/ngcompiler/lib/v1/src/angular_compiler/outliner.dart index 0df986d0c5..909c5086e8 100644 --- a/ngcompiler/lib/v1/src/angular_compiler/outliner.dart +++ b/ngcompiler/lib/v1/src/angular_compiler/outliner.dart @@ -6,7 +6,7 @@ import 'analyzer.dart'; import 'outliner/collect_type_parameters.dart'; const _angularImports = ''' -import 'dart:html' as _html; +import 'package:web/web.dart' as _html; import 'package:ngdart/angular.dart' as _ng; import 'package:ngdart/src/core/change_detection/directive_change_detector.dart' as _ng; import 'package:ngdart/src/core/linker/views/component_view.dart' as _ng; From 4ca14a1baf6a97891e467cc8e5ac13658d1e686f Mon Sep 17 00:00:00 2001 From: Thomas Hii Date: Wed, 26 Mar 2025 23:14:39 +0800 Subject: [PATCH 04/70] Added package:web --- _tests/mono_pkg.yaml | 2 +- _tests/pubspec.yaml | 1 + ngdart/CHANGELOG.md | 1033 +++++++++++++++++++++-------------------- ngdart/pubspec.yaml | 1 + ngforms/pubspec.yaml | 1 + ngrouter/pubspec.yaml | 1 + 6 files changed, 523 insertions(+), 516 deletions(-) diff --git a/_tests/mono_pkg.yaml b/_tests/mono_pkg.yaml index 89c94a6fac..d52b00d1a1 100644 --- a/_tests/mono_pkg.yaml +++ b/_tests/mono_pkg.yaml @@ -1,5 +1,5 @@ sdk: - - 2.19.6 + - 3.6.1 - pubspec stages: diff --git a/_tests/pubspec.yaml b/_tests/pubspec.yaml index 88808476d9..071470bb0e 100644 --- a/_tests/pubspec.yaml +++ b/_tests/pubspec.yaml @@ -12,6 +12,7 @@ dependencies: ngdart: ^8.0.0-dev.1 ngtest: ^5.0.0-dev.1 test: ^1.22.2 + web: ^1.1.1 dev_dependencies: analyzer: ^7.3.0 diff --git a/ngdart/CHANGELOG.md b/ngdart/CHANGELOG.md index e277fd7a23..4f9261f1ef 100644 --- a/ngdart/CHANGELOG.md +++ b/ngdart/CHANGELOG.md @@ -1,32 +1,35 @@ +# Change Log + ## 8.0.0-dev.2 - - **DOCS**(all): update to new workflow badge. ([01a55035](https://github.com/angulardart-community/angular/commit/01a55035a3a69c3fca20212d428aa476662b14a4)) +- **DOCS**(all): update to new workflow badge. ([01a55035](https://github.com/angulardart-community/angular/commit/01a55035a3a69c3fca20212d428aa476662b14a4)) ## 8.0.0-dev.1 > Note: This release has breaking changes. - - **FEAT**(ngdart): bring back DomSanitizationService. ([f1b65727](https://github.com/angulardart-community/angular/commit/f1b657276387021557bdd4987e47be960e1e1eed)) - - **BREAKING** **REFACTOR**(ngdart): migrate ViewEncapsulation to enum. ([2e15858b](https://github.com/angulardart-community/angular/commit/2e15858b6f32a14f9874bf3f95a3daf2c930a290)) - - **BREAKING** **REFACTOR**(ngdart): rename and remove deprecated values from ChangeDetectionStrategy and APP_ID ([#41](https://github.com/angulardart-community/angular/issues/41)). ([3c5523a0](https://github.com/angulardart-community/angular/commit/3c5523a089d323789f1dec6dd294b735d8a28066)) - - **BREAKING** **REFACTOR**(ngdart): migrate ChangeDetectorState to enum. ([598cae20](https://github.com/angulardart-community/angular/commit/598cae207148fee962db9d4a6e62c90a817be443)) +- **FEAT**(ngdart): bring back DomSanitizationService. ([f1b65727](https://github.com/angulardart-community/angular/commit/f1b657276387021557bdd4987e47be960e1e1eed)) +- **BREAKING** **REFACTOR**(ngdart): migrate ViewEncapsulation to enum. ([2e15858b](https://github.com/angulardart-community/angular/commit/2e15858b6f32a14f9874bf3f95a3daf2c930a290)) +- **BREAKING** **REFACTOR**(ngdart): rename and remove deprecated values from ChangeDetectionStrategy and APP_ID ([#41](https://github.com/angulardart-community/angular/issues/41)). ([3c5523a0](https://github.com/angulardart-community/angular/commit/3c5523a089d323789f1dec6dd294b735d8a28066)) +- **BREAKING** **REFACTOR**(ngdart): migrate ChangeDetectorState to enum. ([598cae20](https://github.com/angulardart-community/angular/commit/598cae207148fee962db9d4a6e62c90a817be443)) ## 8.0.0-dev.0 > Note: This release has breaking changes. - - **DOCS**: fix typo in comments for Directive. - - **BREAKING** **REFACTOR**: remove Testabiliy and TestabilityRegistry from minimal application and make it injectable ([#28](https://github.com/angulardart-community/angular/issues/28)). - - **BREAKING** **REFACTOR**: remove SlowComponentLoader and ReflectiveInjector ([#26](https://github.com/angulardart-community/angular/issues/26)). +- **DOCS**: fix typo in comments for Directive. +- **BREAKING** **REFACTOR**: remove Testabiliy and TestabilityRegistry from minimal application and make it injectable ([#28](https://github.com/angulardart-community/angular/issues/28)). +- **BREAKING** **REFACTOR**: remove SlowComponentLoader and ReflectiveInjector ([#26](https://github.com/angulardart-community/angular/issues/26)). ## 7.1.1 - - **REFACTOR**: use the new super initializers in Dart 2.17. - - **DOCS**: add notices to improve pub score. +- **REFACTOR**: use the new super initializers in Dart 2.17. +- **DOCS**: add notices to improve pub score. ## 7.1.0 + Renaming forked by AngularDart Community packages to be able publish and use them on pub.dev -Resolving builds and tests. Fix complained test analyzis. +Resolving builds and tests. Fix complained test analyzis. New package names: angular -> ngdart (the existing ngdart package utility will be renamed to ngdart_cli) angular_ast -> ngast @@ -52,19 +55,19 @@ New package names: ## 6.0.1 -* Update `package:analyzer` dependency to `^0.40.0`. +- Update `package:analyzer` dependency to `^0.40.0`. ## 6.0.0 ### New features -* Added `debugClearComponentStyles()`. This top-level function resets all +- Added `debugClearComponentStyles()`. This top-level function resets all static state used for component styles, and removes all component ` ''', - styleUrls: [ - '1.css', - '2.css', - ], + styleUrls: ['1.css', '2.css'], ), ); metadata = await normalizer.normalizeDirective(metadata); expect( metadata.template?.styleUrls, - orderedEquals([ - 'package:a/1.css', - 'package:a/2.css', - ]), + orderedEquals(['package:a/1.css', 'package:a/2.css']), ); }); @@ -196,22 +177,15 @@ void main() { :host { padding: 10px; } ''', - styleUrls: [ - '1.css', - '2.css', - ], - styles: [ - ':host { margin: 10px; }', - ], + styleUrls: ['1.css', '2.css'], + styles: [':host { margin: 10px; }'], ), ); metadata = await normalizer.normalizeDirective(metadata); expect(metadata.template?.encapsulation, ViewEncapsulation.emulated); expect( metadata.template?.styles, - [ - contains(':host { margin: 10px; }'), - ], + [contains(':host { margin: 10px; }')], reason: 'Only one inline style should have been processed', ); }); diff --git a/ngcompiler/lib/v1/src/angular_compiler/analyzer/view/directive.dart b/ngcompiler/lib/v1/src/angular_compiler/analyzer/view/directive.dart index d460ee50c0..ff8ad30f5b 100644 --- a/ngcompiler/lib/v1/src/angular_compiler/analyzer/view/directive.dart +++ b/ngcompiler/lib/v1/src/angular_compiler/analyzer/view/directive.dart @@ -12,8 +12,8 @@ import '../types.dart'; /// currently within the `angular` package. As such, this helps, but does not /// completely implement compiler logic. class DirectiveVisitor { - static void _noopClassMember(Element _, DartObject __) {} - static void _noopClassMethod(MethodElement _, DartObject __) {} + static void _noopClassMember(Element _, DartObject _) {} + static void _noopClassMethod(MethodElement _, DartObject _) {} /// Invoked for every _valid_ member annotated with `@HostBinding`. /// @@ -34,7 +34,8 @@ class DirectiveVisitor { /// Throws a [BuildError] if [element] is not an instance-level member. static void _assertInstance(Element element, String message) { - if (element is ClassMemberElement && !element.isStatic) { + //if (element is ClassMemberElement && !element.isStatic) { + if (element is PropertyAccessorElement && !element.isStatic) { return; } throw BuildError.forElement(element, message); @@ -48,11 +49,11 @@ class DirectiveVisitor { throw BuildError.forElement(element, message); } - static bool _isRequired(ParameterElement e) => e.isRequiredPositional; + static bool _isRequired(FormalParameterElement e) => e.isRequiredPositional; static void _assertExactArgs(Element element, String message, int exactArgs) { if (element is MethodElement && - element.parameters.where(_isRequired).length != exactArgs) { + element.formalParameters.where(_isRequired).length != exactArgs) { throw BuildError.forElement(element, message); } } @@ -64,15 +65,18 @@ class DirectiveVisitor { /// * [onHostListener] /// /// **NOTE**: There is no verification [element] has the annotation. - void visitDirective(ClassElement element) { - for (final superType in element.allSupertypes.reversed) { + void visitDirective(ClassFragment fragment) { + for (final superType in fragment.element.allSupertypes.reversed) { _visitDirectiveOrSupertype(superType.element); } - _visitDirectiveOrSupertype(element); + _visitDirectiveOrSupertype(fragment.element); } void _visitDirectiveOrSupertype(InterfaceElement element) { - for (final accessor in element.accessors) { + for (final accessor in element.getters) { + _visitMember(accessor); + } + for (final accessor in element.setters) { _visitMember(accessor); } for (final method in element.methods) { diff --git a/ngcompiler/lib/v1/src/source_gen/template_compiler/check_injectables.dart b/ngcompiler/lib/v1/src/source_gen/template_compiler/check_injectables.dart index 613e11ed5b..8316d8f578 100644 --- a/ngcompiler/lib/v1/src/source_gen/template_compiler/check_injectables.dart +++ b/ngcompiler/lib/v1/src/source_gen/template_compiler/check_injectables.dart @@ -9,18 +9,20 @@ const DependencyReader dependencyReader = DependencyReader(); // checks elements with `@Injectable()` annotation. void checkInjectables(LibraryElement library) { for (var unit in allUnits(library)) { - for (var type in unit.classes) { - checkClass(type); - checkFunctions(type.methods); + var clazz = unit.libraryFragment?.classes ?? []; + for (var type in clazz) { + checkClass(type.element); + checkFunctions(type.element.methods); } - checkFunctions(unit.functions); + var topLevelFunctions = unit.libraryFragment?.functions ?? []; + checkFunctions(topLevelFunctions.map((e) => e.element)); } } -Iterable allUnits(LibraryElement library) sync* { - yield library.definingCompilationUnit; - yield* library.units; +Iterable allUnits(LibraryElement library) sync* { + yield library.firstFragment; + yield* library.fragments; } void checkClass(ClassElement element) { diff --git a/ngcompiler/lib/v1/src/source_gen/template_compiler/component_visitor_exceptions.dart b/ngcompiler/lib/v1/src/source_gen/template_compiler/component_visitor_exceptions.dart index 4803716c15..658f721b89 100644 --- a/ngcompiler/lib/v1/src/source_gen/template_compiler/component_visitor_exceptions.dart +++ b/ngcompiler/lib/v1/src/source_gen/template_compiler/component_visitor_exceptions.dart @@ -1,7 +1,6 @@ import 'package:analyzer/dart/analysis/results.dart'; import 'package:analyzer/dart/ast/ast.dart'; import 'package:analyzer/dart/element/element.dart'; -import 'package:analyzer/dart/element/type.dart'; import 'package:analyzer/error/error.dart'; import 'package:build/build.dart'; import 'package:source_span/source_span.dart'; @@ -220,6 +219,32 @@ class UnresolvedExpressionError extends AsyncBuildError { ), ); + // Replacement for ClassElement.contetns.data + Iterable allClassMembers(ClassElement cls) sync* { + // Fields (include synthetic accessors) + for (var field in cls.fields) { + yield field; + if (field.getter case var g when g != null) yield g; + if (field.setter case var s when s != null) yield s; + } + + // Methods + yield* cls.methods; + + // Constructors + yield* cls.constructors; + } + + String allClassMembersContentData(ClassElement cls) { + var contents = allClassMembers(cls); + var buffer = StringBuffer(); + for (var member in contents) { + buffer.write('${member.name}\n'); + } + + return buffer.toString(); + } + // TODO(deboer): Since we are checking ElementAnnotation.constantValueErrors, // all code paths that call this function are unreachable. // If we don't see any errors in the wild, delete this code. @@ -235,7 +260,7 @@ class UnresolvedExpressionError extends AsyncBuildError { sourceSpanWithLineInfo( e.offset, e.length, - componentType.contents.data, + allClassMembersContentData(componentType), componentType.library.firstFragment.source.uri, ), 'This argument *may* have not been resolved', diff --git a/ngcompiler/lib/v1/src/source_gen/template_compiler/find_components.dart b/ngcompiler/lib/v1/src/source_gen/template_compiler/find_components.dart index ae6b38282b..18cda3847e 100644 --- a/ngcompiler/lib/v1/src/source_gen/template_compiler/find_components.dart +++ b/ngcompiler/lib/v1/src/source_gen/template_compiler/find_components.dart @@ -294,15 +294,16 @@ class _ComponentVisitor } @override - CompileDirectiveMetadata? visitPropertyAccessorElement( - PropertyAccessorElement element, - ) { - super.visitPropertyAccessorElement(element); - _visitClassMember( - element, - isGetter: element.isGetter, - isSetter: element.isSetter, - ); + CompileDirectiveMetadata? visitGetterElement(GetterElement element) { + super.visitGetterElement(element); + _visitClassMember(element, isGetter: true, isSetter: false); + return null; + } + + @override + CompileDirectiveMetadata? visitSetterElement(SetterElement element) { + super.visitSetterElement(element); + _visitClassMember(element, isGetter: false, isSetter: true); return null; } @@ -710,7 +711,7 @@ class _ComponentVisitor DirectiveVisitor( onHostBinding: _addHostBinding, onHostListener: _addHostListener, - ).visitDirective(element); + ).visitDirective(element.firstFragment); _collectInheritableMetadata(element); final isComponent = directiveInfo.isComponent; final annotationValue = directiveInfo.constantValue; diff --git a/ngcompiler/lib/v2/context.dart b/ngcompiler/lib/v2/context.dart index 806a14696e..44d6021e19 100644 --- a/ngcompiler/lib/v2/context.dart +++ b/ngcompiler/lib/v2/context.dart @@ -72,7 +72,7 @@ Future runWithContext(CompileContext instance, Future Function() run) { } }, zoneSpecification: ZoneSpecification( - print: (_, __, ___, line) => log.info(line), + print: (_, _, _, line) => log.info(line), ), zoneValues: {_compileContextKey: instance}, )?.then((result) { diff --git a/ngcompiler/test/v1/angular_compiler/analyzer/di/dependency_reader_test.dart b/ngcompiler/test/v1/angular_compiler/analyzer/di/dependency_reader_test.dart index 19e05dd61d..c3e63c4a9e 100644 --- a/ngcompiler/test/v1/angular_compiler/analyzer/di/dependency_reader_test.dart +++ b/ngcompiler/test/v1/angular_compiler/analyzer/di/dependency_reader_test.dart @@ -68,23 +68,21 @@ void main() { ClassElement? classNamed(String name) => library.getClass(name); - FunctionElement functionNamed(String name) => library - .definingCompilationUnit - .functions - .firstWhere((e) => e.name == name); + TopLevelFunctionFragment functionNamed(String name) => + library.firstFragment.functions.firstWhere((e) => e.name == name); test('a function with no parameters', () { final function = functionNamed('createExample0'); - final deps = reader.parseDependencies(function); - expect(deps.bound, const TypeMatcher()); + final deps = reader.parseDependencies(function.element); + expect(deps.bound, const TypeMatcher()); expect(deps.positional, isEmpty); expect(deps.named, isEmpty); }); test('a function with one parameter', () { final function = functionNamed('createExample1'); - final deps = reader.parseDependencies(function); - expect(deps.bound, const TypeMatcher()); + final deps = reader.parseDependencies(function.element); + expect(deps.bound, const TypeMatcher()); expect(deps.positional, [ DependencyElement( TypeTokenElement( @@ -97,8 +95,8 @@ void main() { test('a function with two parameters, of which one is named', () { final function = functionNamed('createExample2'); - final deps = reader.parseDependencies(function); - expect(deps.bound, const TypeMatcher()); + final deps = reader.parseDependencies(function.element); + expect(deps.bound, const TypeMatcher()); expect(deps.positional, [ DependencyElement( TypeTokenElement( @@ -111,7 +109,7 @@ void main() { test('a function with a parameter annotated with @Host', () { final function = functionNamed('createExampleHost'); - final deps = reader.parseDependencies(function); + final deps = reader.parseDependencies(function.element); expect(deps.positional, [ DependencyElement( TypeTokenElement( @@ -124,7 +122,7 @@ void main() { test('a function with a parameter annotated with @Optional', () { final function = functionNamed('createExampleOptional'); - final deps = reader.parseDependencies(function); + final deps = reader.parseDependencies(function.element); expect(deps.positional, [ DependencyElement( TypeTokenElement( @@ -141,7 +139,7 @@ void main() { test('a function with a parameter annotated with @Self', () { final function = functionNamed('createExampleSelf'); - final deps = reader.parseDependencies(function); + final deps = reader.parseDependencies(function.element); expect(deps.positional, [ DependencyElement( TypeTokenElement( @@ -154,7 +152,7 @@ void main() { test('a function with a parameter annotated with @SkipSelf', () { final function = functionNamed('createExampleSkipSelf'); - final deps = reader.parseDependencies(function); + final deps = reader.parseDependencies(function.element); expect(deps.positional, [ DependencyElement( TypeTokenElement( @@ -167,7 +165,7 @@ void main() { test('a function with a parameter annotated with @Inject', () { final function = functionNamed('createExampleInject'); - final deps = reader.parseDependencies(function); + final deps = reader.parseDependencies(function.element); expect(deps.positional, [ DependencyElement( OpaqueTokenElement( @@ -184,7 +182,7 @@ void main() { test('a function with a parameter annotated with an OpaqueToken', () { final function = functionNamed('createExampleInjectToken'); - final deps = reader.parseDependencies(function); + final deps = reader.parseDependencies(function.element); expect(deps.positional, [ DependencyElement( OpaqueTokenElement( @@ -201,7 +199,7 @@ void main() { test('a function with an untyped parameter annotated with @Inject', () { final function = functionNamed('createExampleDynamic'); - final deps = reader.parseDependencies(function); + final deps = reader.parseDependencies(function.element); expect(deps.positional, [ DependencyElement( TypeTokenElement( diff --git a/ngcompiler/test/v1/angular_compiler/analyzer/di/module_reader_test.dart b/ngcompiler/test/v1/angular_compiler/analyzer/di/module_reader_test.dart index 4488fcf5ce..a268ee16a5 100644 --- a/ngcompiler/test/v1/angular_compiler/analyzer/di/module_reader_test.dart +++ b/ngcompiler/test/v1/angular_compiler/analyzer/di/module_reader_test.dart @@ -63,10 +63,10 @@ void main() { '''); $Example = testLib.getClass('Example')!; $Dependency = testLib.getClass('Dependency')!; - $listModule = $Example.metadata.first.computeConstantValue()!; - $newModuleA = $Example.metadata[1].computeConstantValue()!; - $newModuleB = $Example.metadata[2].computeConstantValue()!; - $newModuleC = $Example.metadata[3].computeConstantValue()!; + $listModule = $Example.metadata.annotations.first.computeConstantValue()!; + $newModuleA = $Example.metadata.annotations[1].computeConstantValue()!; + $newModuleB = $Example.metadata.annotations[2].computeConstantValue()!; + $newModuleC = $Example.metadata.annotations[3].computeConstantValue()!; }); group('should parse module', () { @@ -240,6 +240,7 @@ void main() { testLib .getClass('Example')! .metadata + .annotations .map((e) => e.computeConstantValue()), ); aListOfProviders = testObjects[0]; diff --git a/ngcompiler/test/v1/angular_compiler/analyzer/di/provider_reader_test.dart b/ngcompiler/test/v1/angular_compiler/analyzer/di/provider_reader_test.dart index b998942da5..ea9a47ff7c 100644 --- a/ngcompiler/test/v1/angular_compiler/analyzer/di/provider_reader_test.dart +++ b/ngcompiler/test/v1/angular_compiler/analyzer/di/provider_reader_test.dart @@ -23,7 +23,7 @@ void main() { late ClassElement $ExamplePrime; late ClassElement $DependencyA; late ClassElement $DependencyB; - late FunctionElement $createExample; + late TopLevelFunctionElement $createExample; late MethodElement $ExampleCreate; setUpAll(() async { @@ -101,9 +101,9 @@ void main() { $ExamplePrime = testLib.getClass('ExamplePrime')!; $DependencyA = testLib.getClass('DependencyA')!; $DependencyB = testLib.getClass('DependencyB')!; - $createExample = testLib.definingCompilationUnit.functions.first; + $createExample = testLib.firstFragment.functions.first.element; $ExampleCreate = $Example.getMethod('create')!; - providers = $Example.metadata.first + providers = $Example.metadata.annotations.first .computeConstantValue()! .toListValue()!; }); diff --git a/ngcompiler/test/v1/angular_compiler/analyzer/di/token_reader_test.dart b/ngcompiler/test/v1/angular_compiler/analyzer/di/token_reader_test.dart index cb9b679319..1f07f0afb9 100644 --- a/ngcompiler/test/v1/angular_compiler/analyzer/di/token_reader_test.dart +++ b/ngcompiler/test/v1/angular_compiler/analyzer/di/token_reader_test.dart @@ -28,7 +28,7 @@ void main() { class Example { const Example(); } - '''))!.metadata.first.computeConstantValue()!.toListValue()!; + '''))!.metadata.annotations.first.computeConstantValue()!.toListValue()!; }); test('Type', () { diff --git a/ngcompiler/test/v1/angular_compiler/analyzer/types_test.dart b/ngcompiler/test/v1/angular_compiler/analyzer/types_test.dart index f74aa939dd..6783b3e46e 100644 --- a/ngcompiler/test/v1/angular_compiler/analyzer/types_test.dart +++ b/ngcompiler/test/v1/angular_compiler/analyzer/types_test.dart @@ -54,11 +54,11 @@ void main() { }); group('injection annotations', () { - Element getParameterFrom(String name) => testLib - .definingCompilationUnit + FormalParameterFragment getParameterFrom(String name) => testLib + .firstFragment .functions .firstWhere((e) => e.name == name) - .parameters + .formalParameters .first; const { @@ -70,7 +70,7 @@ void main() { }.forEach((name, type) { test('of $type should find "$name"', () { final parameter = getParameterFrom(name); - expect(type.firstAnnotationOfExact(parameter), isNotNull); + expect(type.firstAnnotationOfExact(parameter.element), isNotNull); }); }); }); diff --git a/ngcompiler/test/v1/angular_compiler/analyzer/view/directive_test.dart b/ngcompiler/test/v1/angular_compiler/analyzer/view/directive_test.dart index bcceda27c1..6a0e0d2c98 100644 --- a/ngcompiler/test/v1/angular_compiler/analyzer/view/directive_test.dart +++ b/ngcompiler/test/v1/angular_compiler/analyzer/view/directive_test.dart @@ -7,7 +7,7 @@ void main() { Future expectBuildError(String source, Object matcherOrString) { return compilesExpecting(source, (library) async { final visitDirective = const DirectiveVisitor().visitDirective; - library.definingCompilationUnit.classes.forEach(visitDirective); + library.firstFragment.classes.forEach(visitDirective); }, errors: [matcherOrString]); } diff --git a/ngcompiler/test/v1/angular_compiler/analyzer/view/typed_reader_test.dart b/ngcompiler/test/v1/angular_compiler/analyzer/view/typed_reader_test.dart index 06417820c0..2cd6264aff 100644 --- a/ngcompiler/test/v1/angular_compiler/analyzer/view/typed_reader_test.dart +++ b/ngcompiler/test/v1/angular_compiler/analyzer/view/typed_reader_test.dart @@ -21,7 +21,7 @@ Future parse(String source) async { final element = await resolveClass(amendedSource, 'Example'); final typedReader = TypedReader(element!); - final typedValue = element.metadata + final typedValue = element.metadata.annotations .firstWhere((annotation) => annotation.element!.name == 'typed') .computeConstantValue()!; return typedReader.parse(typedValue); @@ -230,7 +230,8 @@ void main() { Future parseTyped(LibraryElement element) async { final example = element.getClass('Example')!; final typedReader = TypedReader(example); - final typedValue = example.metadata.first.computeConstantValue()!; + final typedValue = example.metadata.annotations.first + .computeConstantValue()!; typedReader.parse(typedValue); } diff --git a/ngcompiler/test/v1/angular_compiler/src/compile.dart b/ngcompiler/test/v1/angular_compiler/src/compile.dart index 2ad4a234c1..23fc6fb5ed 100644 --- a/ngcompiler/test/v1/angular_compiler/src/compile.dart +++ b/ngcompiler/test/v1/angular_compiler/src/compile.dart @@ -1,11 +1,23 @@ import 'package:analyzer/dart/element/element.dart'; -import 'package:build_test/build_test.dart'; import 'package:logging/logging.dart'; import 'package:test/test.dart'; import 'package:ngcompiler/v2/context.dart'; import 'resolve.dart'; +// Replacement for removed scopeLogAsync function in package:build +Future scopeLogAsync(Future Function() fn, Logger logger) async { + final sub = logger.onRecord.listen((record) { + print('${record.level.name}: ${record.time}: ${record.message}'); + }); + + try { + return await fn(); + } finally { + await sub.cancel(); + } +} + Future _recordLogs( Future Function() run, void Function(List) onLog, diff --git a/ngcompiler/test/v1/angular_compiler/src/resolve.dart b/ngcompiler/test/v1/angular_compiler/src/resolve.dart index 8b2c6622da..49f473f441 100644 --- a/ngcompiler/test/v1/angular_compiler/src/resolve.dart +++ b/ngcompiler/test/v1/angular_compiler/src/resolve.dart @@ -53,5 +53,5 @@ Future resolveClass(String source, [String? name]) async { final library = await resolveLibrary(source); return name != null ? library.getClass(name) - : library.definingCompilationUnit.classes.first; + : library.firstFragment.classes.first.element; } diff --git a/ngcompiler/test/v2/analyzer_test.dart b/ngcompiler/test/v2/analyzer_test.dart index 14819f04fa..1aef18811a 100644 --- a/ngcompiler/test/v2/analyzer_test.dart +++ b/ngcompiler/test/v2/analyzer_test.dart @@ -18,7 +18,7 @@ void main() { final lib = await resolve(''' dynamic topLevelField; ''', includeAngularDeps: false); - final field = lib.library.topLevelElements.last as VariableElement; + final field = lib.library.topLevelFunctions.last as VariableElement; expect(field.type.isExplicitlyNullable, isFalse); expect(field.type.isExplicitlyNonNullable, isFalse); } @@ -32,7 +32,7 @@ void main() { final lib = await resolve(''' String topLevelField; ''', includeAngularDeps: false); - final field = lib.library.topLevelElements.last as VariableElement; + final field = lib.library.topLevelFunctions.last as VariableElement; expect(field.type.isExplicitlyNullable, isFalse); expect(field.type.isExplicitlyNonNullable, isTrue); }); @@ -41,7 +41,7 @@ void main() { final lib = await resolve(''' String? topLevelField; ''', includeAngularDeps: false); - final field = lib.library.topLevelElements.last as VariableElement; + final field = lib.library.topLevelFunctions.last as VariableElement; expect(field.type.isExplicitlyNullable, isTrue); expect(field.type.isExplicitlyNonNullable, isFalse); }); @@ -51,7 +51,7 @@ void main() { import 'dart:async'; FutureOr topLevelField; ''', includeAngularDeps: false); - final field = lib.library.topLevelElements.last as VariableElement; + final field = lib.library.topLevelFunctions.last as VariableElement; expect(field.type.isExplicitlyNullable, isTrue); expect(field.type.isExplicitlyNonNullable, isFalse); }); @@ -69,7 +69,7 @@ void main() { String topLevelField; ''', includeAngularDeps: false); - final field = lib.library.topLevelElements.last as VariableElement; + final field = lib.library.topLevelFunctions.last as VariableElement; expect(field.type.isExplicitlyNullable, isFalse); expect(field.type.isExplicitlyNonNullable, isFalse); }, @@ -84,7 +84,7 @@ void main() { import 'dart:async'; FutureOr topLevelField; ''', includeAngularDeps: false); - final field = lib.library.topLevelElements.last as VariableElement; + final field = lib.library.topLevelFunctions.last as VariableElement; expect(field.type.isExplicitlyNullable, isFalse); expect(field.type.isExplicitlyNonNullable, isFalse); }, diff --git a/ngcompiler/test/v2/testing/runtime_source_resolution_test.dart b/ngcompiler/test/v2/testing/runtime_source_resolution_test.dart index d71ca081ef..ceae54cb5b 100644 --- a/ngcompiler/test/v2/testing/runtime_source_resolution_test.dart +++ b/ngcompiler/test/v2/testing/runtime_source_resolution_test.dart @@ -15,6 +15,7 @@ void main() { library .getClass('Example')! .metadata + .annotations .first .computeConstantValue()! .getField('template')! @@ -32,7 +33,12 @@ void main() { class Example {} ''', includeAngularDeps: false); expect( - library.getClass('Example')!.metadata.first.computeConstantValue(), + library + .getClass('Example')! + .metadata + .annotations + .first + .computeConstantValue(), isNull, reason: 'Angular was not loaded', ); @@ -54,7 +60,7 @@ void main() { ); final clazz = library.getClass('Example')!; expect( - clazz.metadata.first + clazz.metadata.annotations.first .computeConstantValue()! .getField('template')! .toStringValue(), From 98b76554baf6ddc0d365fec83c39fefc05f98a11 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 6 Dec 2025 15:56:39 +0800 Subject: [PATCH 43/70] Fixed failed test cases --- _tests/lib/compiler.dart | 39 ++++++++----------- _tests/pubspec.yaml | 1 - .../test/v1/angular_compiler/src/resolve.dart | 2 +- ngcompiler/test/v2/analyzer_test.dart | 12 +++--- .../runtime_source_resolution_test.dart | 7 ++-- 5 files changed, 27 insertions(+), 34 deletions(-) diff --git a/_tests/lib/compiler.dart b/_tests/lib/compiler.dart index f5130a127f..19f790cd05 100644 --- a/_tests/lib/compiler.dart +++ b/_tests/lib/compiler.dart @@ -2,16 +2,14 @@ import 'dart:io'; import 'package:build/build.dart'; import 'package:build/experiments.dart'; -import 'package:build_resolvers/build_resolvers.dart'; import 'package:build_test/build_test.dart' hide testBuilder; import 'package:glob/glob.dart'; import 'package:logging/logging.dart'; import 'package:test/test.dart'; -import 'package:ngdart/src/build.dart'; import 'package:ngcompiler/v2/context.dart'; /// A 'test' build process (similar to the normal one). -final Builder _testAngularBuilder = MultiplexingBuilder([ +final Builder _testAngularBuilder = AggregateBuilder([ templateCompiler(BuilderOptions({})), stylesheetCompiler(BuilderOptions({})), ]); @@ -61,10 +59,7 @@ Future _testBuilder( // Setup the readers/writers for assets. final sources = InMemoryAssetReader(rootPackage: rootPackage); final packages = await _packageAssets; - final reader = MultiAssetReader([ - sources, - packages, - ]); + final reader = MultiAssetReader([sources, packages]); // Sanity check. if (!await reader.canRead(AssetId(ngPackage, 'lib/angular.dart'))) { @@ -150,9 +145,7 @@ Future compilesExpecting( include ??= const {}; // Complete list of input sources. - final sources = { - inputSource: input, - }..addAll(include); + final sources = {inputSource: input}..addAll(include); // Run the builder. final records = >{}; @@ -180,9 +173,12 @@ void expectLogRecords(List? logs, matcher, String reasonPrefix) { return; } logs ??= []; - expect(logs.map(formattedLogMessage), matcher, - reason: - '$reasonPrefix: \n${logs.map((l) => '${formattedLogMessage(l)} at:\n ${l.stackTrace}')}'); + expect( + logs.map(formattedLogMessage), + matcher, + reason: + '$reasonPrefix: \n${logs.map((l) => '${formattedLogMessage(l)} at:\n ${l.stackTrace}')}', + ); } String formattedLogMessage(LogRecord record) { @@ -201,15 +197,14 @@ Future compilesNormally( String? inputSource, Map? include, Set? runBuilderOn, -}) => - compilesExpecting( - input, - inputSource: inputSource, - runBuilderOn: runBuilderOn, - include: include, - errors: isEmpty, - warnings: isEmpty, - ); +}) => compilesExpecting( + input, + inputSource: inputSource, + runBuilderOn: runBuilderOn, + include: include, + errors: isEmpty, + warnings: isEmpty, +); /// Match for a source location, but don't require tests to manage package /// names. diff --git a/_tests/pubspec.yaml b/_tests/pubspec.yaml index 419e69c038..df265790ad 100644 --- a/_tests/pubspec.yaml +++ b/_tests/pubspec.yaml @@ -22,7 +22,6 @@ dependencies: dev_dependencies: analyzer: ^8.4.0 - build: ^4.0.3 build_runner: ^2.3.3 build_web_compilers: ^4.1.3 csslib: ^1.0.0 diff --git a/ngcompiler/test/v1/angular_compiler/src/resolve.dart b/ngcompiler/test/v1/angular_compiler/src/resolve.dart index 49f473f441..5e6986a2f4 100644 --- a/ngcompiler/test/v1/angular_compiler/src/resolve.dart +++ b/ngcompiler/test/v1/angular_compiler/src/resolve.dart @@ -34,7 +34,7 @@ Future resolveLibrary(String source) async { $source '''; - //print(inputSource); + print(inputSource); return withEnabledExperiments( () => resolveSource( inputSource, diff --git a/ngcompiler/test/v2/analyzer_test.dart b/ngcompiler/test/v2/analyzer_test.dart index 1aef18811a..9559c7c834 100644 --- a/ngcompiler/test/v2/analyzer_test.dart +++ b/ngcompiler/test/v2/analyzer_test.dart @@ -18,7 +18,7 @@ void main() { final lib = await resolve(''' dynamic topLevelField; ''', includeAngularDeps: false); - final field = lib.library.topLevelFunctions.last as VariableElement; + final field = lib.library.topLevelVariables.last as VariableElement; expect(field.type.isExplicitlyNullable, isFalse); expect(field.type.isExplicitlyNonNullable, isFalse); } @@ -32,7 +32,7 @@ void main() { final lib = await resolve(''' String topLevelField; ''', includeAngularDeps: false); - final field = lib.library.topLevelFunctions.last as VariableElement; + final field = lib.library.topLevelVariables.last as VariableElement; expect(field.type.isExplicitlyNullable, isFalse); expect(field.type.isExplicitlyNonNullable, isTrue); }); @@ -41,7 +41,7 @@ void main() { final lib = await resolve(''' String? topLevelField; ''', includeAngularDeps: false); - final field = lib.library.topLevelFunctions.last as VariableElement; + final field = lib.library.topLevelVariables.last as VariableElement; expect(field.type.isExplicitlyNullable, isTrue); expect(field.type.isExplicitlyNonNullable, isFalse); }); @@ -51,7 +51,7 @@ void main() { import 'dart:async'; FutureOr topLevelField; ''', includeAngularDeps: false); - final field = lib.library.topLevelFunctions.last as VariableElement; + final field = lib.library.topLevelVariables.last as VariableElement; expect(field.type.isExplicitlyNullable, isTrue); expect(field.type.isExplicitlyNonNullable, isFalse); }); @@ -69,7 +69,7 @@ void main() { String topLevelField; ''', includeAngularDeps: false); - final field = lib.library.topLevelFunctions.last as VariableElement; + final field = lib.library.topLevelVariables.last as VariableElement; expect(field.type.isExplicitlyNullable, isFalse); expect(field.type.isExplicitlyNonNullable, isFalse); }, @@ -84,7 +84,7 @@ void main() { import 'dart:async'; FutureOr topLevelField; ''', includeAngularDeps: false); - final field = lib.library.topLevelFunctions.last as VariableElement; + final field = lib.library.topLevelVariables.last as VariableElement; expect(field.type.isExplicitlyNullable, isFalse); expect(field.type.isExplicitlyNonNullable, isFalse); }, diff --git a/ngcompiler/test/v2/testing/runtime_source_resolution_test.dart b/ngcompiler/test/v2/testing/runtime_source_resolution_test.dart index ceae54cb5b..444e0bca72 100644 --- a/ngcompiler/test/v2/testing/runtime_source_resolution_test.dart +++ b/ngcompiler/test/v2/testing/runtime_source_resolution_test.dart @@ -59,11 +59,10 @@ void main() { }, ); final clazz = library.getClass('Example')!; + + var annotation = clazz.metadata.annotations.first; expect( - clazz.metadata.annotations.first - .computeConstantValue()! - .getField('template')! - .toStringValue(), + annotation.computeConstantValue()!.getField('template')!.toStringValue(), 'Hello World', ); expect(clazz.supertype!.element.name, 'Base'); From edf1f987345c72dc121e1de2c115f3f2d0667285 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 27 Dec 2025 16:08:44 +0800 Subject: [PATCH 44/70] Update to support analyzer 9 --- _tests/lib/compiler.dart | 18 +- _tests/pubspec.yaml | 4 +- .../ast_directive_normalizer_test.dart | 2 +- ngast/pubspec.yaml | 2 +- ngcompiler/example/app.dart | 224 ++++++++++++++++++ .../lib/v1/src/compiler/output/convert.dart | 2 +- .../template_compiler/find_components.dart | 2 +- ngcompiler/pubspec.yaml | 5 +- .../test/v1/angular_compiler/src/resolve.dart | 18 +- ngdart/lib/di.dart | 61 +++-- ngdart/lib/experimental.dart | 4 +- ngdart/lib/src/bootstrap/modules.dart | 8 +- ngdart/lib/src/bootstrap/run.dart | 16 +- .../lib/src/common/directives/ng_class.dart | 13 +- ngdart/lib/src/common/directives/ng_for.dart | 10 +- .../common/directives/ng_for_identity.dart | 15 +- ngdart/lib/src/common/directives/ng_if.dart | 10 +- .../lib/src/common/directives/ng_style.dart | 14 +- .../lib/src/common/directives/ng_switch.dart | 30 +-- .../common/directives/ng_template_outlet.dart | 9 +- ngdart/lib/src/common/pipes/async_pipe.dart | 19 +- ngdart/lib/src/common/pipes/date_pipe.dart | 6 +- .../lib/src/common/pipes/lowercase_pipe.dart | 2 +- ngdart/lib/src/common/pipes/number_pipe.dart | 18 +- ngdart/lib/src/common/pipes/replace_pipe.dart | 15 +- ngdart/lib/src/common/pipes/slice_pipe.dart | 3 +- .../lib/src/common/pipes/uppercase_pipe.dart | 2 +- ngdart/lib/src/core/application_ref.dart | 96 ++++---- ngdart/lib/src/core/application_tokens.dart | 2 +- .../change_detection/change_detection.dart | 2 +- .../differs/default_iterable_differ.dart | 138 +++++++---- .../directive_change_detector.dart | 2 +- .../lib/src/core/change_detection/host.dart | 34 +-- ngdart/lib/src/core/exception_handler.dart | 10 +- .../lib/src/core/linker/app_view_utils.dart | 9 +- .../src/core/linker/component_factory.dart | 27 +-- .../src/core/linker/style_encapsulation.dart | 18 +- ngdart/lib/src/core/linker/template_ref.dart | 8 +- .../lib/src/core/linker/view_container.dart | 9 +- .../src/core/linker/view_container_ref.dart | 2 +- ngdart/lib/src/core/linker/view_fragment.dart | 2 +- .../src/core/linker/views/component_view.dart | 14 +- .../src/core/linker/views/dynamic_view.dart | 6 +- .../src/core/linker/views/embedded_view.dart | 37 +-- .../lib/src/core/linker/views/host_view.dart | 22 +- .../src/core/linker/views/render_view.dart | 19 +- ngdart/lib/src/core/linker/views/view.dart | 30 +-- ngdart/lib/src/di/errors.dart | 17 +- ngdart/lib/src/di/injector.dart | 31 +-- ngdart/lib/src/meta.dart | 2 +- ngdart/lib/src/meta/di_arguments.dart | 6 +- ngdart/lib/src/meta/di_modules.dart | 22 +- ngdart/lib/src/meta/di_providers.dart | 79 ++---- ngdart/lib/src/meta/di_tokens.dart | 3 +- ngdart/lib/src/meta/directives.dart | 68 ++---- ngdart/lib/src/runtime/check_binding.dart | 26 +- ngdart/lib/src/runtime/dom_events.dart | 45 ++-- ngdart/lib/src/runtime/dom_helpers.dart | 26 +- ngdart/lib/src/runtime/text_binding.dart | 2 +- .../security/dom_sanitization_service.dart | 29 ++- ngdart/lib/src/security/safe_inner_html.dart | 8 +- .../src/security/sanitization_service.dart | 8 +- ngdart/lib/src/testability/testability.dart | 2 +- ngdart/pubspec.yaml | 4 +- ngforms/pubspec.yaml | 2 +- ngrouter/pubspec.yaml | 2 +- ngtest/pubspec.yaml | 2 +- pubspec.yaml | 3 +- 68 files changed, 792 insertions(+), 614 deletions(-) create mode 100644 ngcompiler/example/app.dart diff --git a/_tests/lib/compiler.dart b/_tests/lib/compiler.dart index 19f790cd05..9a1f83e5c5 100644 --- a/_tests/lib/compiler.dart +++ b/_tests/lib/compiler.dart @@ -5,14 +5,20 @@ import 'package:build/experiments.dart'; import 'package:build_test/build_test.dart' hide testBuilder; import 'package:glob/glob.dart'; import 'package:logging/logging.dart'; +import 'package:ngcompiler/v1/src/compiler/stylesheet_compiler/builder.dart'; +import 'package:ngcompiler/v1/src/compiler/template_compiler.dart'; import 'package:test/test.dart'; import 'package:ngcompiler/v2/context.dart'; /// A 'test' build process (similar to the normal one). -final Builder _testAngularBuilder = AggregateBuilder([ - templateCompiler(BuilderOptions({})), - stylesheetCompiler(BuilderOptions({})), -]); +final Builder _testAngularBuilder1 = TemplateCompiler( + BuilderOptions({}), + null, + null, + null, +); + +final Builder _testAngularBuilder2 = StylesheetCompiler(BuilderOptions({})); // Here to be configurable. // @@ -57,7 +63,7 @@ Future _testBuilder( String? rootPackage, }) async { // Setup the readers/writers for assets. - final sources = InMemoryAssetReader(rootPackage: rootPackage); + final sources = TestReaderWriter(rootPackage: rootPackage); final packages = await _packageAssets; final reader = MultiAssetReader([sources, packages]); @@ -67,7 +73,7 @@ Future _testBuilder( } // Load user sources. - final writer = InMemoryAssetWriter(); + final writer = TestReaderWriter(); final inputIds = runBuilderOn ?? []; sourceAssets.forEach((serializedId, contents) { final id = makeAssetId(serializedId); diff --git a/_tests/pubspec.yaml b/_tests/pubspec.yaml index df265790ad..efdadf2624 100644 --- a/_tests/pubspec.yaml +++ b/_tests/pubspec.yaml @@ -3,7 +3,7 @@ description: Tests for AngularDart. publish_to: none environment: - sdk: '>=3.9.0 <4.0.0' + sdk: '>=3.10.0 <4.0.0' resolution: workspace @@ -21,7 +21,7 @@ dependencies: glob: ^2.1.3 dev_dependencies: - analyzer: ^8.4.0 + analyzer: ^9.0.0 build_runner: ^2.3.3 build_web_compilers: ^4.1.3 csslib: ^1.0.0 diff --git a/_tests/test/compiler/ast_directive_normalizer_test.dart b/_tests/test/compiler/ast_directive_normalizer_test.dart index eb62e04bdf..7d2d866681 100644 --- a/_tests/test/compiler/ast_directive_normalizer_test.dart +++ b/_tests/test/compiler/ast_directive_normalizer_test.dart @@ -1,4 +1,4 @@ -import 'package:build_test/build_test.dart'; +//import 'package:build_test/build_test.dart'; import 'package:logging/logging.dart'; import 'package:test/test.dart'; import 'package:ngdart/src/meta.dart'; diff --git a/ngast/pubspec.yaml b/ngast/pubspec.yaml index 367016e179..35c8e141f6 100644 --- a/ngast/pubspec.yaml +++ b/ngast/pubspec.yaml @@ -4,7 +4,7 @@ version: 4.0.0-dev.1 repository: https://github.com/angulardart-community/angular environment: - sdk: '>=3.9.0 <4.0.0' + sdk: '>=3.10.0 <4.0.0' resolution: workspace diff --git a/ngcompiler/example/app.dart b/ngcompiler/example/app.dart new file mode 100644 index 0000000000..36fa83c6a3 --- /dev/null +++ b/ngcompiler/example/app.dart @@ -0,0 +1,224 @@ +import 'dart:io'; +import 'dart:isolate'; + +import 'package:build/build.dart'; +import 'package:build_test/build_test.dart'; +import 'package:package_config/package_config.dart'; + +import '../test/v1/angular_compiler/src/resolve.dart'; + +// final _packageConfigFuture = Platform +// .environment['ANGULAR_PACKAGE_CONFIG_PATH'] != +// null +// ? loadPackageConfigUri( +// Uri.base.resolve(Platform.environment['ANGULAR_PACKAGE_CONFIG_PATH']!)) +// : Isolate.packageConfig.then(loadPackageConfigUri); + +void main() async { + _testResolveModule(); +} + +/* + * Attempt to resolve module with includes and providers +*/ +void _testResolveModule() async { + final packageConfig = await packageConfigFuture; + + final inputSource = r''' + library test; + + import 'package:ngdart/angular.dart'; + + class Dependency {} + + const someToken = const OpaqueToken('someToken'); + + const newModuleA = Module( + provide: [ + Provider(Dependency) + ], + ); + + const newModuleB = Module( + include: [ + newModuleA, + ], + + provide: [ + Provider(Example), + ], + ); + + const newModuleC = Module( + include: [ + newModuleB, + ], + + provide: [ + Provider(Example, useClass: ExamplePrime), + ], + ); + + @newModuleA + @newModuleB + @newModuleC + @Injectable() + class Example {} + + class ExamplePrime extends Example {} + + '''; + + var testLib = await resolveSource( + inputSource, + (resolver) async => (await resolver.findLibraryByName('test'))!, + //inputId: AssetId('test_lib', 'lib/test_lib.dart'), + inputId: AssetId('ngdart', 'lib/angular.dart'), + // nonInputsToReadFromFilesystem: { + // AssetId('ngdart', 'lib/angular.dart'), + // AssetId('ngdart', 'lib/src/meta.dart'), + // AssetId('ngdart', 'lib/src/meta/di_modules.dart'), + // AssetId('ngdart', 'lib/src/meta/di_arguments.dart'), + //}, + packageConfig: packageConfig, + ); + var example = testLib?.getClass('Example')!; + var dependency = testLib?.getClass('Dependency')!; +} + +/* + * Working version of resolve module test +*/ +void _testResolveModuleRaw() async { + final inputSource = r''' + library test; + + import 'package:ngdart/angular.dart'; + + class Dependency {} + + const newModuleA = Module(); + + const newModuleB = Module( + include: [ + newModuleA + ] + ); + + const newModuleC = Module( + include: [ + newModuleB, + ] + ); + + const listModule = [ + Example, + newModuleA, + ]; + + // A parameter metadata that marks a dependency. + //class Injectable { + // const Injectable(); + //} + + @listModule + @newModuleA + @newModuleB + @newModuleC + @Injectable() + class Example {} + + class ExamplePrime extends Example {} + + '''; + + // final config = PackageConfig([ + // Package( + // 'ngdart', + // Uri.parse('file:///home/thii/dart_workspace/angular/ngdart/'), + // packageUriRoot: Uri.parse( + // 'file:///home/thii/dart_workspace/angular/ngdart/lib/', + // ), + // ), + // ]); + + final config = await loadPackageConfigUri( + Uri.base.resolve( + 'file:///home/thii/dart_workspace/angular/.dart_tool/package_config.json', + ), + ); + + //final testAssetId = AssetId('test', 'lib/resolve.dart'); + + var testLib = await resolveSource( + inputSource, + (resolver) async { + return await resolver.findLibraryByName('test'); + }, + //inputId: testAssetId, + nonInputsToReadFromFilesystem: { + AssetId('ngdart', 'lib/angular.dart'), + AssetId('ngdart', 'lib/src/meta.dart'), + AssetId('ngdart', 'lib/src/meta/di_modules.dart'), + AssetId('ngdart', 'lib/src/meta/di_arguments.dart'), + }, + packageConfig: config, + ); + var example = testLib?.getClass('Example')!; + var dependency = testLib?.getClass('Dependency')!; +} + +/* + class Module { + final List include; + + @literal + const factory Module({List include}) = Module._; + + const Module._({this.include = const []}); + } + +*/ +/* + class Dependency {} + + const listModule = [ + Example, + newModuleA, + ]; + + const newModuleA = Module( + provide: [ + Provider(Dependency) + ], + ); + + const newModuleB = Module( + include: [ + newModuleA, + ], + + provide: [ + Provider(Example), + ], + ); + + const newModuleC = Module( + include: [ + newModuleB, + ], + + provide: [ + Provider(Example, useClass: ExamplePrime), + ], + ); + + @listModule + @newModuleA + @newModuleB + @newModuleC + @Injectable() + class Example {} + + class ExamplePrime extends Example {} +*/ diff --git a/ngcompiler/lib/v1/src/compiler/output/convert.dart b/ngcompiler/lib/v1/src/compiler/output/convert.dart index 691d74c46a..aeae2fa806 100644 --- a/ngcompiler/lib/v1/src/compiler/output/convert.dart +++ b/ngcompiler/lib/v1/src/compiler/output/convert.dart @@ -38,7 +38,7 @@ o.OutputType? fromDartType(DartType? dartType, {bool resolveBounds = true}) { if (dartType is TypeParameterType && resolveBounds) { // Resolve generic type to its bound or dynamic if it has none. final dynamicType = dartType.element.library!.typeProvider.dynamicType; - var propertyType = dartType.element3.library2?.typeSystem; + var propertyType = dartType.element.library?.typeSystem; // TODO: Migrate to dart 3.6 (Need to review) //print('=== ResolveToBound(dartType) ==='); diff --git a/ngcompiler/lib/v1/src/source_gen/template_compiler/find_components.dart b/ngcompiler/lib/v1/src/source_gen/template_compiler/find_components.dart index 18cda3847e..3bd245264a 100644 --- a/ngcompiler/lib/v1/src/source_gen/template_compiler/find_components.dart +++ b/ngcompiler/lib/v1/src/source_gen/template_compiler/find_components.dart @@ -344,7 +344,7 @@ class _ComponentVisitor } //DartType propertyType = setter.parameters.first.type; final dynamicType = setter.library.typeProvider.dynamicType; - var propertyType = setter.formalParameters.first.library2?.typeSystem; + var propertyType = setter.formalParameters.first.library?.typeSystem; // Resolves unspecified or bounded generic type parameters. // TODO: Migration to 3.6 (Need review) diff --git a/ngcompiler/pubspec.yaml b/ngcompiler/pubspec.yaml index 988f667b80..782ac03737 100644 --- a/ngcompiler/pubspec.yaml +++ b/ngcompiler/pubspec.yaml @@ -7,12 +7,12 @@ version: 4.0.0-dev.1 repository: https://github.com/angulardart-community/angular environment: - sdk: '>=3.9.0 <4.0.0' + sdk: '>=3.10.0 <4.0.0' resolution: workspace dependencies: - analyzer: ^8.4.0 + analyzer: ^9.0.0 args: ^2.3.2 build: ^4.0.0 build_test: ^3.0.0 @@ -24,6 +24,7 @@ dependencies: meta: ^1.8.0 ngast: ^4.0.0-dev.1 ngdart: ^9.0.0-dev.1 + ngdart2: ^9.0.0-dev.1 package_config: ^2.1.0 path: ^1.8.3 source_gen: ^4.0.0 diff --git a/ngcompiler/test/v1/angular_compiler/src/resolve.dart b/ngcompiler/test/v1/angular_compiler/src/resolve.dart index 5e6986a2f4..8072bad69c 100644 --- a/ngcompiler/test/v1/angular_compiler/src/resolve.dart +++ b/ngcompiler/test/v1/angular_compiler/src/resolve.dart @@ -34,12 +34,28 @@ Future resolveLibrary(String source) async { $source '''; - print(inputSource); + //print(inputSource); return withEnabledExperiments( () => resolveSource( inputSource, (resolver) async => (await resolver.findLibraryByName('_test'))!, inputId: AssetId('test_lib', 'lib/test_lib.dart'), + nonInputsToReadFromFilesystem: { + AssetId('ngdart', 'lib/angular.dart'), + AssetId('ngdart', 'lib/src/meta.dart'), + AssetId('ngdart', 'lib/src/meta/di_modules.dart'), + AssetId('ngdart', 'lib/src/meta/di_arguments.dart'), + AssetId('ngdart', 'lib/src/meta/di_tokens.dart'), + AssetId('ngdart', 'lib/src/meta/di_providers.dart'), + AssetId('ngdart', 'lib/src/meta/di_generate_injector.dart'), + AssetId('ngdart', 'lib/src/meta/lifecycle_hooks.dart'), + AssetId('ngdart', 'lib/src/meta/typed.dart'), + AssetId('ngdart', 'lib/src/meta/directives.dart'), + AssetId('ngdart', 'lib/src/meta/view.dart'), + AssetId('ngdart', 'lib/src/meta/visibility.dart'), + AssetId('ngdart', 'lib/src/meta/change_detection_constants.dart'), + AssetId('ngdart', 'lib/src/meta/change_detection_link.dart'), + }, packageConfig: packageConfig, ), ['non-nullable'], diff --git a/ngdart/lib/di.dart b/ngdart/lib/di.dart index cfca58a920..22971ffe01 100644 --- a/ngdart/lib/di.dart +++ b/ngdart/lib/di.dart @@ -7,27 +7,40 @@ library; export 'src/di/injector.dart' show Injector, InjectorFactory; -export 'src/meta.dart' - show - ClassProvider, - Component, - Directive, - ExistingProvider, - FactoryProvider, - GenerateInjector, - Host, - Input, - Inject, - Injectable, - Module, - MultiToken, - OpaqueToken, - Optional, - Output, - Pipe, - Provider, - Self, - SkipSelf, - ValueProvider, - provide, - noValueProvided; +export 'src/meta/change_detection_constants.dart'; +export 'src/meta/change_detection_link.dart'; +export 'src/meta/di_arguments.dart'; +export 'src/meta/di_generate_injector.dart'; +export 'src/meta/di_modules.dart'; +export 'src/meta/di_providers.dart'; +export 'src/meta/di_tokens.dart'; +export 'src/meta/directives.dart'; +export 'src/meta/lifecycle_hooks.dart'; +export 'src/meta/typed.dart'; +export 'src/meta/view.dart'; +export 'src/meta/visibility.dart'; + +// export 'src/meta.dart' +// show +// ClassProvider, +// Component, +// Directive, +// ExistingProvider, +// FactoryProvider, +// GenerateInjector, +// Host, +// Input, +// Inject, +// Injectable, +// Module, +// MultiToken, +// OpaqueToken, +// Optional, +// Output, +// Pipe, +// Provider, +// Self, +// SkipSelf, +// ValueProvider, +// provide, +// noValueProvided; diff --git a/ngdart/lib/experimental.dart b/ngdart/lib/experimental.dart index 4e3a37bff8..afea154663 100644 --- a/ngdart/lib/experimental.dart +++ b/ngdart/lib/experimental.dart @@ -9,16 +9,16 @@ library; import 'package:meta/meta.dart'; -import 'package:ngdart/angular.dart'; import 'src/bootstrap/run.dart' show appInjector; +import 'src/di/injector.dart'; import 'src/runtime/dom_helpers.dart'; export 'src/common/directives/ng_for_identity.dart' show NgForIdentity; export 'src/core/linker/component_factory.dart' show debugUsesDefaultChangeDetection; export 'src/core/zone/ng_zone.dart' show longestPendingTimer, inAngularZone; -export 'src/meta.dart' show changeDetectionLink; +export 'src/meta/change_detection_link.dart' show changeDetectionLink; /// Create a root application [Injector]. /// diff --git a/ngdart/lib/src/bootstrap/modules.dart b/ngdart/lib/src/bootstrap/modules.dart index 32301df40f..d480774aca 100644 --- a/ngdart/lib/src/bootstrap/modules.dart +++ b/ngdart/lib/src/bootstrap/modules.dart @@ -1,9 +1,9 @@ import 'dart:math'; -import 'package:ngdart/src/core/application_tokens.dart'; -import 'package:ngdart/src/core/exception_handler.dart'; -import 'package:ngdart/src/core/linker/component_loader.dart'; -import 'package:ngdart/src/di/injector.dart'; +import '../core/application_tokens.dart'; +import '../core/exception_handler.dart'; +import '../core/linker/component_loader.dart'; +import '../di/injector.dart'; /// Returns a simple application [Injector] that is hand-authored. /// diff --git a/ngdart/lib/src/bootstrap/run.dart b/ngdart/lib/src/bootstrap/run.dart index b5379cfc50..d814920651 100644 --- a/ngdart/lib/src/bootstrap/run.dart +++ b/ngdart/lib/src/bootstrap/run.dart @@ -1,5 +1,5 @@ import 'package:meta/meta.dart'; -import 'package:ngdart/src/meta.dart'; +import '../meta.dart'; import '../core/application_ref.dart'; import '../core/application_tokens.dart'; @@ -48,10 +48,7 @@ Injector appInjector( // We also add other top-level services with similar constraints: // * `AppViewUtils` final injector = ngZone.run(() { - applicationRef = internalCreateApplicationRef( - ngZone, - userInjector, - ); + applicationRef = internalCreateApplicationRef(ngZone, userInjector); appViewUtils = AppViewUtils( userInjector.provideToken(appId), EventManager(ngZone), @@ -73,10 +70,7 @@ Injector appInjector( class _LazyInjector extends HierarchicalInjector { final Map _providers; - const _LazyInjector( - this._providers, [ - super.parent, - ]); + const _LazyInjector(this._providers, [super.parent]); @override Object? injectFromSelfOptional( @@ -100,7 +94,7 @@ Injector _identityInjector(Injector parent) => parent; /// /// ```dart /// // Assume this file is "main.dart". -/// import 'package:ngdart/angular.dart'; +/// import '../angular.dart'; /// import 'main.template.dart' as ng; /// /// @Component( @@ -124,7 +118,7 @@ Injector _identityInjector(Injector parent) => parent; /// services to the root of the application: /// /// // Assume this file is "main.dart". -/// import 'package:ngdart/angular.dart'; +/// import '../angular.dart'; /// import 'main.template.dart' as ng; /// /// @Component( diff --git a/ngdart/lib/src/common/directives/ng_class.dart b/ngdart/lib/src/common/directives/ng_class.dart index 4638d784a2..0ee1a0f45e 100644 --- a/ngdart/lib/src/common/directives/ng_class.dart +++ b/ngdart/lib/src/common/directives/ng_class.dart @@ -1,9 +1,10 @@ import 'package:web/web.dart'; -import 'package:ngdart/src/core/change_detection/differs/default_iterable_differ.dart'; -import 'package:ngdart/src/core/change_detection/differs/default_keyvalue_differ.dart'; -import 'package:ngdart/src/meta.dart'; -import 'package:ngdart/src/utilities.dart'; +import '../../core/change_detection/differs/default_iterable_differ.dart'; +import '../../core/change_detection/differs/default_keyvalue_differ.dart'; +import '../../meta/directives.dart'; +import '../../meta/lifecycle_hooks.dart'; +import '../../utilities/unsafe_cast.dart'; /// The [NgClass] directive conditionally adds and removes CSS classes on an /// HTML element based on an expression's evaluation result. @@ -48,9 +49,7 @@ import 'package:ngdart/src/utilities.dart'; /// /// [ex]: https://angulardart.dev/examples/template-syntax#ngClass /// [guide]: https://webdev.dartlang.org/angular/guide/template-syntax.html#ngClass -@Directive( - selector: '[ngClass]', -) +@Directive(selector: '[ngClass]') class NgClass implements DoCheck, OnDestroy { // Separator used to split string to parts - can be any number of // whitespaces, new lines or tabs. diff --git a/ngdart/lib/src/common/directives/ng_for.dart b/ngdart/lib/src/common/directives/ng_for.dart index 8bfaab3ac7..3251c7b126 100644 --- a/ngdart/lib/src/common/directives/ng_for.dart +++ b/ngdart/lib/src/common/directives/ng_for.dart @@ -1,8 +1,8 @@ -import 'package:ngdart/src/meta.dart'; -import 'package:ngdart/src/utilities.dart'; - import '../../core/change_detection/differs/default_iterable_differ.dart'; import '../../core/linker.dart'; +import '../../meta/directives.dart'; +import '../../meta/lifecycle_hooks.dart'; +import '../../utilities/unsafe_cast.dart'; /// The `NgFor` directive instantiates a template once per item from an /// iterable. The context for each instantiated template inherits from the outer @@ -82,9 +82,7 @@ import '../../core/linker.dart'; /// page. /// /// [guide]: https://webdev.dartlang.org/angular/guide/template-syntax.html#ngFor -@Directive( - selector: '[ngFor][ngForOf]', -) +@Directive(selector: '[ngFor][ngForOf]') class NgFor implements DoCheck { final ViewContainerRef _viewContainer; diff --git a/ngdart/lib/src/common/directives/ng_for_identity.dart b/ngdart/lib/src/common/directives/ng_for_identity.dart index fb0c7fc38d..6163799c8d 100644 --- a/ngdart/lib/src/common/directives/ng_for_identity.dart +++ b/ngdart/lib/src/common/directives/ng_for_identity.dart @@ -1,7 +1,7 @@ import 'package:meta/meta.dart'; -import 'package:ngdart/src/core/linker/template_ref.dart'; -import 'package:ngdart/src/core/linker/view_container_ref.dart'; -import 'package:ngdart/src/meta.dart'; +import '../../core/linker/template_ref.dart'; +import '../../core/linker/view_container_ref.dart'; +import '../../meta/directives.dart'; /// An alternative to [NgFor] optimized for immutable/unmodified collections. /// @@ -17,18 +17,13 @@ import 'package:ngdart/src/meta.dart'; /// * Only supports the `$implicit` and `index` local variables. /// /// This API is **experimental** and subject to change or removal. -@Directive( - selector: '[ngForIdentity][ngForIdentityOf]', -) +@Directive(selector: '[ngForIdentity][ngForIdentityOf]') @experimental class NgForIdentity { final TemplateRef _template; final ViewContainerRef _container; - const NgForIdentity( - this._template, - this._container, - ); + const NgForIdentity(this._template, this._container); @Input() set ngForIdentityOf(Iterable? elements) { diff --git a/ngdart/lib/src/common/directives/ng_if.dart b/ngdart/lib/src/common/directives/ng_if.dart index 092b9c740d..2b2561b498 100644 --- a/ngdart/lib/src/common/directives/ng_if.dart +++ b/ngdart/lib/src/common/directives/ng_if.dart @@ -1,6 +1,6 @@ -import 'package:ngdart/src/core/linker.dart'; -import 'package:ngdart/src/meta.dart'; -import 'package:ngdart/src/runtime/check_binding.dart'; +import '../../core/linker.dart'; +import '../../meta/directives.dart'; +import '../../runtime/check_binding.dart'; /// Causes an element and its contents to be conditionally added/removed from /// the DOM based on the value of the given boolean template expression. @@ -27,9 +27,7 @@ import 'package:ngdart/src/runtime/check_binding.dart'; /// ``` /// /// [guide]: https://webdev.dartlang.org/angular/guide/template-syntax.html#ngIf -@Directive( - selector: '[ngIf]', -) +@Directive(selector: '[ngIf]') class NgIf { final TemplateRef _templateRef; final ViewContainerRef _viewContainer; diff --git a/ngdart/lib/src/common/directives/ng_style.dart b/ngdart/lib/src/common/directives/ng_style.dart index cbd1aaa371..dd884744b8 100644 --- a/ngdart/lib/src/common/directives/ng_style.dart +++ b/ngdart/lib/src/common/directives/ng_style.dart @@ -2,10 +2,10 @@ import 'dart:js_interop_unsafe'; import 'package:web/web.dart'; -import 'package:ngdart/src/meta.dart'; -import 'package:ngdart/src/utilities.dart'; - import '../../core/change_detection/differs/default_keyvalue_differ.dart'; +import '../../meta/directives.dart'; +import '../../meta/lifecycle_hooks.dart'; +import '../../utilities/unsafe_cast.dart'; /// The `NgStyle` directive changes an element's style based on the bound style /// expression: @@ -56,9 +56,7 @@ import '../../core/change_detection/differs/default_keyvalue_differ.dart'; /// /// [guide]: https://webdev.dartlang.org/angular/guide/template-syntax.html#ngStyle /// [ex]: https://angulardart.dev/examples/template-syntax#ngStyle -@Directive( - selector: '[ngStyle]', -) +@Directive(selector: '[ngStyle]') class NgStyle implements DoCheck { final Element _ngElement; Map? _rawStyle; @@ -94,6 +92,8 @@ class NgStyle implements DoCheck { ); */ _ngElement.setProperty( - unsafeCast(record.key), unsafeCast(record.currentValue)); + unsafeCast(record.key), + unsafeCast(record.currentValue), + ); } } diff --git a/ngdart/lib/src/common/directives/ng_switch.dart b/ngdart/lib/src/common/directives/ng_switch.dart index 7c1f2d6454..647f1c7b3f 100644 --- a/ngdart/lib/src/common/directives/ng_switch.dart +++ b/ngdart/lib/src/common/directives/ng_switch.dart @@ -1,5 +1,7 @@ -import 'package:ngdart/src/core/linker.dart'; -import 'package:ngdart/src/meta.dart'; +import '../../core/linker.dart'; +import '../../meta/di_arguments.dart'; +import '../../meta/directives.dart'; +import '../../meta/visibility.dart'; const _whenDefault = Object(); @@ -72,10 +74,7 @@ class SwitchView { /// [ex]: https://angulardart.dev/examples/template-syntax#ngSwitch /// [guide]: https://webdev.dartlang.org/angular/guide/structural-directives.html#ngSwitch /// -@Directive( - selector: '[ngSwitch]', - visibility: Visibility.all, -) +@Directive(selector: '[ngSwitch]', visibility: Visibility.all) class NgSwitch { dynamic _switchValue; bool _useDefault = false; @@ -167,9 +166,7 @@ class NgSwitch { /// /// See [NgSwitch] for more details and example. /// -@Directive( - selector: '[ngSwitchWhen],[ngSwitchCase]', -) +@Directive(selector: '[ngSwitchWhen],[ngSwitchCase]') class NgSwitchWhen { final NgSwitch _switch; final SwitchView _view; @@ -201,13 +198,16 @@ class NgSwitchWhen { /// /// See [NgSwitch] for more details and example. /// -@Directive( - selector: '[ngSwitchDefault]', -) +@Directive(selector: '[ngSwitchDefault]') class NgSwitchDefault { - NgSwitchDefault(ViewContainerRef viewContainer, TemplateRef templateRef, - @Host() NgSwitch switchDirective) { + NgSwitchDefault( + ViewContainerRef viewContainer, + TemplateRef templateRef, + @Host() NgSwitch switchDirective, + ) { switchDirective._registerView( - _whenDefault, SwitchView(viewContainer, templateRef)); + _whenDefault, + SwitchView(viewContainer, templateRef), + ); } } diff --git a/ngdart/lib/src/common/directives/ng_template_outlet.dart b/ngdart/lib/src/common/directives/ng_template_outlet.dart index 6cb61c81a0..e091a01b74 100644 --- a/ngdart/lib/src/common/directives/ng_template_outlet.dart +++ b/ngdart/lib/src/common/directives/ng_template_outlet.dart @@ -1,5 +1,6 @@ -import 'package:ngdart/src/core/linker.dart'; -import 'package:ngdart/src/meta.dart'; +import '../../core/linker.dart'; +import '../../meta/directives.dart'; +import '../../meta/lifecycle_hooks.dart'; /// Inserts an embedded view, created from a [TemplateRef]. /// @@ -40,9 +41,7 @@ import 'package:ngdart/src/meta.dart'; /// }; /// } /// ``` -@Directive( - selector: '[ngTemplateOutlet]', -) +@Directive(selector: '[ngTemplateOutlet]') class NgTemplateOutlet implements DoCheck { final ViewContainerRef _viewContainerRef; diff --git a/ngdart/lib/src/common/pipes/async_pipe.dart b/ngdart/lib/src/common/pipes/async_pipe.dart index 248be633cf..693fe926b4 100644 --- a/ngdart/lib/src/common/pipes/async_pipe.dart +++ b/ngdart/lib/src/common/pipes/async_pipe.dart @@ -1,13 +1,16 @@ import 'dart:async'; -import 'package:ngdart/src/core/change_detection/change_detector_ref.dart'; -import 'package:ngdart/src/meta.dart'; +import '../../core/change_detection/change_detector_ref.dart'; +import '../../meta/directives.dart'; +import '../../meta/lifecycle_hooks.dart'; import 'invalid_pipe_argument_exception.dart' show InvalidPipeArgumentException; class _ObservableStrategy { StreamSubscription createSubscription( - Stream stream, void Function(Object?) updateLatestValue) { + Stream stream, + void Function(Object?) updateLatestValue, + ) { return stream.listen(updateLatestValue); } @@ -22,7 +25,9 @@ class _ObservableStrategy { class _PromiseStrategy { dynamic createSubscription( - Future async, dynamic Function(dynamic) updateLatestValue) { + Future async, + dynamic Function(dynamic) updateLatestValue, + ) { return async.then(updateLatestValue); } @@ -111,7 +116,9 @@ class AsyncPipe implements OnDestroy { _obj = obj; _strategy = _selectStrategy(obj); _subscription = _strategy.createSubscription( - obj, (Object? value) => _updateLatestValue(obj, value)); + obj, + (Object? value) => _updateLatestValue(obj, value), + ); } dynamic _selectStrategy(dynamic /* Stream | Future | EventEmitter */ obj) { @@ -141,7 +148,7 @@ class AsyncPipe implements OnDestroy { // StreamController.stream getter always returns new Stream instance, // operator== check is also needed. See // https://github.com/angulardart/angular/issues/260 - static bool _maybeStreamIdentical(a, b) { + static bool _maybeStreamIdentical(dynamic a, dynamic b) { if (!identical(a, b)) { return a is Stream && b is Stream && a == b; } diff --git a/ngdart/lib/src/common/pipes/date_pipe.dart b/ngdart/lib/src/common/pipes/date_pipe.dart index dd6a215c3f..02d87f045a 100644 --- a/ngdart/lib/src/common/pipes/date_pipe.dart +++ b/ngdart/lib/src/common/pipes/date_pipe.dart @@ -1,7 +1,7 @@ import 'package:intl/intl.dart'; -import 'package:ngdart/src/meta.dart'; -import 'package:ngdart/src/utilities.dart'; +import '../../meta/directives.dart'; +import '../../utilities/unsafe_cast.dart'; import 'invalid_pipe_argument_exception.dart'; /// Formats a date value to a string based on the requested format. @@ -77,7 +77,7 @@ class DatePipe { 'mediumDate': 'yMMMd', 'shortDate': 'yMd', 'mediumTime': 'jms', - 'shortTime': 'jm' + 'shortTime': 'jm', }; String? transform(dynamic value, [String pattern = 'mediumDate']) { diff --git a/ngdart/lib/src/common/pipes/lowercase_pipe.dart b/ngdart/lib/src/common/pipes/lowercase_pipe.dart index 9ee22b2f1d..27d9d854ac 100644 --- a/ngdart/lib/src/common/pipes/lowercase_pipe.dart +++ b/ngdart/lib/src/common/pipes/lowercase_pipe.dart @@ -1,4 +1,4 @@ -import 'package:ngdart/src/meta.dart'; +import '../../meta/directives.dart'; /// Transforms text to lowercase. @Pipe('lowercase') diff --git a/ngdart/lib/src/common/pipes/number_pipe.dart b/ngdart/lib/src/common/pipes/number_pipe.dart index d48da43401..049ccd4f47 100644 --- a/ngdart/lib/src/common/pipes/number_pipe.dart +++ b/ngdart/lib/src/common/pipes/number_pipe.dart @@ -1,5 +1,6 @@ import 'package:intl/intl.dart'; -import 'package:ngdart/src/meta.dart'; + +import '../../meta/directives.dart'; final RegExp _re = RegExp('^(\\d+)?\\.((\\d+)(\\-(\\d+))?)?\$'); @@ -115,14 +116,13 @@ class CurrencyPipe extends _NumberPipe { String currencyCode = 'USD', bool symbolDisplay = false, String? digits, - ]) => - _NumberPipe._format( - value, - _NumberFormatStyle.currency, - digits, - currencyCode, - symbolDisplay, - ); + ]) => _NumberPipe._format( + value, + _NumberFormatStyle.currency, + digits, + currencyCode, + symbolDisplay, + ); const CurrencyPipe(); } diff --git a/ngdart/lib/src/common/pipes/replace_pipe.dart b/ngdart/lib/src/common/pipes/replace_pipe.dart index d589a9356d..5630ad2887 100644 --- a/ngdart/lib/src/common/pipes/replace_pipe.dart +++ b/ngdart/lib/src/common/pipes/replace_pipe.dart @@ -1,5 +1,4 @@ -import 'package:ngdart/src/meta.dart'; - +import '../../meta/directives.dart'; import 'invalid_pipe_argument_exception.dart' show InvalidPipeArgumentException; /// Creates a new String with some or all of the matches of a pattern replaced @@ -30,8 +29,11 @@ import 'invalid_pipe_argument_exception.dart' show InvalidPipeArgumentException; class ReplacePipe { const ReplacePipe(); - dynamic transform(dynamic value, dynamic /* String | RegExp */ pattern, - dynamic /* Function | String */ replacement) { + dynamic transform( + dynamic value, + dynamic /* String | RegExp */ pattern, + dynamic /* Function | String */ replacement, + ) { if (value == null) { return value; } @@ -47,8 +49,9 @@ class ReplacePipe { } // template fails with literal RegExp e.g /pattern/igm if (replacement is String Function(Match)) { - var rgxPattern = - pattern is String ? RegExp(pattern) : (pattern as RegExp); + var rgxPattern = pattern is String + ? RegExp(pattern) + : (pattern as RegExp); return input.replaceAllMapped(rgxPattern, replacement); } if (pattern is RegExp) { diff --git a/ngdart/lib/src/common/pipes/slice_pipe.dart b/ngdart/lib/src/common/pipes/slice_pipe.dart index d77b46f3da..d9888a6988 100644 --- a/ngdart/lib/src/common/pipes/slice_pipe.dart +++ b/ngdart/lib/src/common/pipes/slice_pipe.dart @@ -1,7 +1,6 @@ import 'dart:math' as math; -import 'package:ngdart/src/meta.dart'; - +import '../../meta/directives.dart'; import 'invalid_pipe_argument_exception.dart' show InvalidPipeArgumentException; /// Creates a new [List] or [String] containing a subset (slice) of the diff --git a/ngdart/lib/src/common/pipes/uppercase_pipe.dart b/ngdart/lib/src/common/pipes/uppercase_pipe.dart index 16f93b5e2c..035325f455 100644 --- a/ngdart/lib/src/common/pipes/uppercase_pipe.dart +++ b/ngdart/lib/src/common/pipes/uppercase_pipe.dart @@ -1,4 +1,4 @@ -import 'package:ngdart/src/meta.dart'; +import '../../meta/directives.dart'; /// Implements uppercase transforms to text. @Pipe('uppercase') diff --git a/ngdart/lib/src/core/application_ref.dart b/ngdart/lib/src/core/application_ref.dart index 983c1afc5a..abf76ce8ab 100644 --- a/ngdart/lib/src/core/application_ref.dart +++ b/ngdart/lib/src/core/application_ref.dart @@ -2,27 +2,20 @@ import 'dart:async'; import 'package:web/web.dart'; import 'package:meta/dart2js.dart' as dart2js; -import 'package:ngdart/src/core/exception_handler.dart'; -import 'package:ngdart/src/devtools.dart'; -import 'package:ngdart/src/di/injector.dart'; -import 'package:ngdart/src/testability.dart'; -import 'package:ngdart/src/utilities.dart'; - +import '../devtools.dart'; +import '../di/injector.dart'; +import '../testability.dart'; +import '../utilities/unsafe_cast.dart'; +import 'change_detection/change_detector_ref.dart'; import 'change_detection/host.dart'; +import 'exception_handler.dart'; import 'linker/component_factory.dart' show ComponentRef, ComponentFactory; import 'zone/ng_zone.dart' show NgZone; /// **INTERNAL ONLY**: Do not use. @dart2js.tryInline -ApplicationRef internalCreateApplicationRef( - NgZone ngZone, - Injector injector, -) => - ApplicationRef._( - ngZone, - injector.provideType(ExceptionHandler), - injector, - ); +ApplicationRef internalCreateApplicationRef(NgZone ngZone, Injector injector) => + ApplicationRef._(ngZone, injector.provideType(ExceptionHandler), injector); /// A reference to an Angular application running on a page. /// @@ -38,16 +31,9 @@ class ApplicationRef extends ChangeDetectionHost { late final StreamSubscription _onErrorSub; late final StreamSubscription _onMicroSub; - ApplicationRef._( - this._ngZone, - this._exceptionHandler, - this._injector, - ) { + ApplicationRef._(this._ngZone, this._exceptionHandler, this._injector) { _onErrorSub = _ngZone.onUncaughtError.listen((e) { - handleUncaughtException( - e.error, - e.stackTrace, - ); + handleUncaughtException(e.error, e.stackTrace); }); _onMicroSub = _ngZone.onMicrotaskEmpty.listen((_) { _ngZone.runGuarded(tick); @@ -68,36 +54,38 @@ class ApplicationRef extends ChangeDetectionHost { ComponentRef bootstrap( ComponentFactory componentFactory, ) { - return unsafeCast(run(() { - final component = componentFactory.create(_injector); - final existing = querySelector(componentFactory.selector); - Element? replacement; - if (existing != null) { - final newElement = component.location; - // For app shards using bootstrapStatic, transfer element id - // from original node to allow hosting applications to locate loaded - // application root. - if (newElement.id.isEmpty) { - newElement.id = existing.id; + return unsafeCast( + run(() { + final component = componentFactory.create(_injector); + final existing = querySelector(componentFactory.selector); + Element? replacement; + if (existing != null) { + final newElement = component.location; + // For app shards using bootstrapStatic, transfer element id + // from original node to allow hosting applications to locate loaded + // application root. + if (newElement.id.isEmpty) { + newElement.id = existing.id; + } + replacement = newElement; + existing.replaceWith(replacement); + } else { + document.body!.append(component.location); } - replacement = newElement; - existing.replaceWith(replacement); - } else { - document.body!.append(component.location); - } - final injector = component.injector; - final testability = injector.provideTypeOptional( - Testability, - ); - if (testability != null) { - final registry = _injector.provideType( - TestabilityRegistry, + final injector = component.injector; + final testability = injector.provideTypeOptional( + Testability, ); - registry.registerApplication(component.location, testability); - } - _loadedRootComponent(component, replacement); - return component; - })); + if (testability != null) { + final registry = _injector.provideType( + TestabilityRegistry, + ); + registry.registerApplication(component.location, testability); + } + _loadedRootComponent(component, replacement); + return component; + }), + ); } void _loadedRootComponent(ComponentRef component, Element? node) { @@ -109,7 +97,7 @@ class ApplicationRef extends ChangeDetectionHost { _destroyedRootComponent(component); node?.remove(); }); - registerChangeDetector(component.changeDetectorRef); + registerChangeDetector(component.changeDetectorRef as ChangeDetectorRef); tick(); } @@ -117,7 +105,7 @@ class ApplicationRef extends ChangeDetectionHost { if (!_rootComponents.remove(component)) { return; } - unregisterChangeDetector(component.changeDetectorRef); + unregisterChangeDetector(component.changeDetectorRef as ChangeDetectorRef); } /// Dispose of this application and all of its components. diff --git a/ngdart/lib/src/core/application_tokens.dart b/ngdart/lib/src/core/application_tokens.dart index b8e73e564c..0fa83442b3 100644 --- a/ngdart/lib/src/core/application_tokens.dart +++ b/ngdart/lib/src/core/application_tokens.dart @@ -1,4 +1,4 @@ -import 'package:ngdart/src/meta.dart'; +import '../meta/di_tokens.dart'; /// A dependency injection token representing a unique ID for the application. /// diff --git a/ngdart/lib/src/core/change_detection/change_detection.dart b/ngdart/lib/src/core/change_detection/change_detection.dart index bc8ba52a4f..40a9a0c6f0 100644 --- a/ngdart/lib/src/core/change_detection/change_detection.dart +++ b/ngdart/lib/src/core/change_detection/change_detection.dart @@ -1,4 +1,4 @@ -export 'package:ngdart/src/meta.dart' +export '../../meta/change_detection_constants.dart' show ChangeDetectionStrategy, ChangeDetectorState; export 'change_detector_ref.dart' diff --git a/ngdart/lib/src/core/change_detection/differs/default_iterable_differ.dart b/ngdart/lib/src/core/change_detection/differs/default_iterable_differ.dart index ab9e3c0a0a..68467c02f6 100644 --- a/ngdart/lib/src/core/change_detection/differs/default_iterable_differ.dart +++ b/ngdart/lib/src/core/change_detection/differs/default_iterable_differ.dart @@ -1,4 +1,5 @@ -import 'package:ngdart/src/utilities.dart'; +import '../../../utilities/is_dev_mode.dart'; +import '../../../utilities/unsafe_cast.dart'; /// A function that can be used to return a unique key for [item] at [index]. /// @@ -55,7 +56,7 @@ class DefaultIterableDiffer { CollectionChangeRecord? _identityChangesTail; DefaultIterableDiffer([TrackByFn? trackByFn]) - : _trackByFn = trackByFn ?? _trackByIdentity; + : _trackByFn = trackByFn ?? _trackByIdentity; DefaultIterableDiffer clone(TrackByFn? trackByFn) { var differ = DefaultIterableDiffer(trackByFn); @@ -91,16 +92,23 @@ class DefaultIterableDiffer { while (nextIt != null || nextRemove != null) { // Figure out which is the next record to process // Order: remove, add, move - dynamic record = nextRemove == null || + dynamic record = + nextRemove == null || nextIt != null && nextIt.currentIndex! < _getPreviousIndex( - nextRemove, addRemoveOffset, moveOffsets)! + nextRemove, + addRemoveOffset, + moveOffsets, + )! ? nextIt : nextRemove; - var adjPreviousIndex = - _getPreviousIndex(unsafeCast(record), addRemoveOffset, moveOffsets); + var adjPreviousIndex = _getPreviousIndex( + unsafeCast(record), + addRemoveOffset, + moveOffsets, + ); // TODO(b/171306883): Type "record" and remove the unsafeCast(s). var currentIndex = unsafeCast(record.currentIndex); @@ -166,25 +174,31 @@ class DefaultIterableDiffer { } void forEachAddedItem(void Function(CollectionChangeRecord) fn) { - for (var record = _additionsHead; - record != null; - record = record._nextAdded) { + for ( + var record = _additionsHead; + record != null; + record = record._nextAdded + ) { fn(record); } } void forEachRemovedItem(void Function(CollectionChangeRecord) fn) { - for (var record = _removalsHead; - record != null; - record = record._nextRemoved) { + for ( + var record = _removalsHead; + record != null; + record = record._nextRemoved + ) { fn(record); } } void forEachIdentityChange(void Function(CollectionChangeRecord) fn) { - for (var record = _identityChangesHead; - record != null; - record = record._nextIdentityChange) { + for ( + var record = _identityChangesHead; + record != null; + record = record._nextIdentityChange + ) { fn(record); } } @@ -266,14 +280,18 @@ class DefaultIterableDiffer { if (isDirty) { CollectionChangeRecord? record; CollectionChangeRecord? nextRecord; - for (record = _previousItHead = _itHead; - record != null; - record = record._next) { + for ( + record = _previousItHead = _itHead; + record != null; + record = record._next + ) { record._nextPrevious = record._next; } - for (record = _additionsHead; - record != null; - record = record._nextAdded) { + for ( + record = _additionsHead; + record != null; + record = record._nextAdded + ) { record.previousIndex = record.currentIndex; } _additionsHead = _additionsTail = null; @@ -295,8 +313,12 @@ class DefaultIterableDiffer { /// - `index` is the position of the item in the collection /// /// @internal - CollectionChangeRecord _mismatch(CollectionChangeRecord? record, dynamic item, - dynamic itemTrackBy, int index) { + CollectionChangeRecord _mismatch( + CollectionChangeRecord? record, + dynamic item, + dynamic itemTrackBy, + int index, + ) { // The previous record after which we will append the current one. CollectionChangeRecord? previousRecord; if (record == null) { @@ -329,7 +351,10 @@ class DefaultIterableDiffer { } else { // It is a new item: add it. record = _addAfter( - CollectionChangeRecord(item, itemTrackBy), previousRecord, index); + CollectionChangeRecord(item, itemTrackBy), + previousRecord, + index, + ); } } return record; @@ -363,8 +388,12 @@ class DefaultIterableDiffer { /// at the end. /// /// @internal - CollectionChangeRecord _verifyReinsertion(CollectionChangeRecord record, - dynamic item, dynamic itemTrackBy, int index) { + CollectionChangeRecord _verifyReinsertion( + CollectionChangeRecord record, + dynamic item, + dynamic itemTrackBy, + int index, + ) { var reinsertRecord = _unlinkedRecords?.get(itemTrackBy); if (reinsertRecord != null) { record = _reinsertAfter(reinsertRecord, record._prev, index); @@ -396,8 +425,11 @@ class DefaultIterableDiffer { _identityChangesTail?._nextIdentityChange = null; } - CollectionChangeRecord _reinsertAfter(CollectionChangeRecord record, - CollectionChangeRecord? prevRecord, int index) { + CollectionChangeRecord _reinsertAfter( + CollectionChangeRecord record, + CollectionChangeRecord? prevRecord, + int index, + ) { if (!identical(_unlinkedRecords, null)) { _unlinkedRecords!.remove(record); } @@ -418,16 +450,22 @@ class DefaultIterableDiffer { return record; } - CollectionChangeRecord _moveAfter(CollectionChangeRecord record, - CollectionChangeRecord? prevRecord, int index) { + CollectionChangeRecord _moveAfter( + CollectionChangeRecord record, + CollectionChangeRecord? prevRecord, + int index, + ) { _unlink(record); _insertAfter(record, prevRecord, index); _addToMoves(record, index); return record; } - CollectionChangeRecord _addAfter(CollectionChangeRecord record, - CollectionChangeRecord? prevRecord, int index) { + CollectionChangeRecord _addAfter( + CollectionChangeRecord record, + CollectionChangeRecord? prevRecord, + int index, + ) { _insertAfter(record, prevRecord, index); if (identical(_additionsTail, null)) { // todo(vicb) @@ -445,8 +483,11 @@ class DefaultIterableDiffer { return record; } - CollectionChangeRecord _insertAfter(CollectionChangeRecord record, - CollectionChangeRecord? prevRecord, int index) { + CollectionChangeRecord _insertAfter( + CollectionChangeRecord record, + CollectionChangeRecord? prevRecord, + int index, + ) { // todo(vicb) // assert(record != prevRecord); @@ -504,7 +545,9 @@ class DefaultIterableDiffer { } CollectionChangeRecord _addToMoves( - CollectionChangeRecord record, int toIndex) { + CollectionChangeRecord record, + int toIndex, + ) { // todo(vicb) // assert(record._nextMoved === null); @@ -548,7 +591,9 @@ class DefaultIterableDiffer { } CollectionChangeRecord _addIdentityChange( - CollectionChangeRecord record, dynamic item) { + CollectionChangeRecord record, + dynamic item, + ) { record.item = item; if (identical(_identityChangesTail, null)) { _identityChangesTail = _identityChangesHead = record; @@ -566,17 +611,21 @@ class DefaultIterableDiffer { list.add(record); } var previous = []; - for (var record = _previousItHead; - record != null; - record = record._nextPrevious) { + for ( + var record = _previousItHead; + record != null; + record = record._nextPrevious + ) { previous.add(record); } var additions = []; forEachAddedItem((record) => additions.add(record)); var moves = []; - for (var record = _movesHead; - record != null; - record = record._nextMoved) { + for ( + var record = _movesHead; + record != null; + record = record._nextMoved + ) { moves.add(record); } var removals = []; @@ -744,7 +793,10 @@ class _DuplicateMap { } int? _getPreviousIndex( - CollectionChangeRecord item, int addRemoveOffset, List? moveOffsets) { + CollectionChangeRecord item, + int addRemoveOffset, + List? moveOffsets, +) { var previousIndex = item.previousIndex; if (previousIndex == null) return null; diff --git a/ngdart/lib/src/core/change_detection/directive_change_detector.dart b/ngdart/lib/src/core/change_detection/directive_change_detector.dart index cd50de4d35..c8240746c0 100644 --- a/ngdart/lib/src/core/change_detection/directive_change_detector.dart +++ b/ngdart/lib/src/core/change_detection/directive_change_detector.dart @@ -1,6 +1,6 @@ import 'package:web/web.dart'; -import 'package:ngdart/src/core/linker/views/render_view.dart'; +import '../linker/views/render_view.dart'; /// Base class for helpers generated for some classes annotated with @Directive. /// diff --git a/ngdart/lib/src/core/change_detection/host.dart b/ngdart/lib/src/core/change_detection/host.dart index ede4cea23d..d7458b4346 100644 --- a/ngdart/lib/src/core/change_detection/host.dart +++ b/ngdart/lib/src/core/change_detection/host.dart @@ -2,10 +2,11 @@ import 'dart:async'; import 'package:meta/dart2js.dart' as dart2js; import 'package:meta/meta.dart'; -import 'package:ngdart/src/core/linker/views/view.dart'; -import 'package:ngdart/src/runtime/check_binding.dart'; -import 'package:ngdart/src/utilities.dart'; +import '../../core/linker/views/view.dart'; +import '../../runtime/check_binding.dart'; +import '../../utilities/is_dev_mode.dart'; +import '../../utilities/unsafe_cast.dart'; import 'change_detector_ref.dart'; /// A host for tracking the current application. @@ -128,7 +129,7 @@ abstract class ChangeDetectionHost { final detector = detectors[i]; if (detector is View) { final view = detector; - _lastGuardedView = view; + _lastGuardedView = view as View?; view.detectChanges(); } } @@ -170,11 +171,7 @@ abstract class ChangeDetectionHost { /// Disables the [view] as an error, and forwards to [reportException]. @dart2js.noInline - void reportViewException( - View view, - Object error, [ - StackTrace? trace, - ]) { + void reportViewException(View view, Object error, [StackTrace? trace]) { view.disableChangeDetection(); handleUncaughtException(error, trace); } @@ -207,14 +204,17 @@ abstract class ChangeDetectionHost { result = callback(); if (result is Future) { final resultCast = unsafeCast>(result); - resultCast.then((result) { - completer.complete(result); - }, onError: (e, s) { - final sCasted = unsafeCast(s); - final eCasted = unsafeCast(e); - completer.completeError(eCasted, sCasted); - handleUncaughtException(eCasted, sCasted); - }); + resultCast.then( + (result) { + completer.complete(result); + }, + onError: (e, s) { + final sCasted = unsafeCast(s); + final eCasted = unsafeCast(e); + completer.completeError(eCasted, sCasted); + handleUncaughtException(eCasted, sCasted); + }, + ); } } catch (e, s) { handleUncaughtException(e, s); diff --git a/ngdart/lib/src/core/exception_handler.dart b/ngdart/lib/src/core/exception_handler.dart index c3c4137995..16159525d5 100644 --- a/ngdart/lib/src/core/exception_handler.dart +++ b/ngdart/lib/src/core/exception_handler.dart @@ -10,7 +10,7 @@ import 'package:web/web.dart'; /// /// It's possible to instead write a _custom exception handler_: /// ``` -/// import 'package:ngdart/angular.dart'; +/// import '../angular.dart'; /// /// import 'main.template.dart' as ng; /// @@ -67,10 +67,8 @@ class ExceptionHandler { Object? stackTrace, @Deprecated('No longer supported. Remove this argument.') String? reason, ]) { - console.error(ExceptionHandler.exceptionToString( - exception, - stackTrace, - reason, - ).toJS); + console.error( + ExceptionHandler.exceptionToString(exception, stackTrace, reason).toJS, + ); } } diff --git a/ngdart/lib/src/core/linker/app_view_utils.dart b/ngdart/lib/src/core/linker/app_view_utils.dart index 232db35246..e95fb1740d 100644 --- a/ngdart/lib/src/core/linker/app_view_utils.dart +++ b/ngdart/lib/src/core/linker/app_view_utils.dart @@ -4,8 +4,8 @@ import 'dart:js_interop'; import 'package:sanitize_html/sanitize_html.dart'; import 'package:web/web.dart' show DocumentFragment; -import 'package:ngdart/src/core/application_tokens.dart' as tokens show appId; -import 'package:ngdart/src/runtime/dom_events.dart' show EventManager; +import '../../core/application_tokens.dart' as tokens show appId; +import '../../runtime/dom_events.dart' show EventManager; /// Application wide view utilities. late AppViewUtils appViewUtils; @@ -16,10 +16,7 @@ class AppViewUtils { final String appId; final EventManager eventManager; - AppViewUtils( - @tokens.appId this.appId, - this.eventManager, - ); + AppViewUtils(@tokens.appId this.appId, this.eventManager); } /// Creates a document fragment from [trustedHtml]. diff --git a/ngdart/lib/src/core/linker/component_factory.dart b/ngdart/lib/src/core/linker/component_factory.dart index 9dd08d41ad..fb460ba4c0 100644 --- a/ngdart/lib/src/core/linker/component_factory.dart +++ b/ngdart/lib/src/core/linker/component_factory.dart @@ -1,12 +1,12 @@ import 'package:web/web.dart'; import 'package:meta/meta.dart'; -import 'package:ngdart/src/core/change_detection/change_detector_ref.dart'; -import 'package:ngdart/src/core/zone/ng_zone.dart'; -import 'package:ngdart/src/di/injector.dart'; -import 'package:ngdart/src/meta.dart'; -import 'package:ngdart/src/utilities.dart'; +import '../../core/change_detection/change_detector_ref.dart'; +import '../../core/zone/ng_zone.dart'; +import '../../di/injector.dart'; +import '../../meta/lifecycle_hooks.dart'; +import '../../utilities/is_dev_mode.dart'; import 'view_ref.dart' show ViewRef; import 'views/host_view.dart'; @@ -43,15 +43,11 @@ bool debugUsesDefaultChangeDetection(ComponentRef componentRef) { /// objects related to this Component Instance and allows you to destroy the /// Component Instance via the [ComponentRef.destroy] method. class ComponentRef { - final HostView _hostView; + final HostView _hostView; final Element _nativeElement; final C _component; - ComponentRef( - this._hostView, - this._nativeElement, - this._component, - ); + ComponentRef(this._hostView, this._nativeElement, this._component); /// Location of the Host Element of this Component Instance. Element get location => _nativeElement; @@ -63,10 +59,10 @@ class ComponentRef { C get instance => _component; /// The [ViewRef] of the Host View of this Component instance. - ViewRef get hostView => _hostView; + HostView get hostView => _hostView; /// The [ChangeDetectorRef] of the Component instance. - ChangeDetectorRef get changeDetectorRef => _hostView; + HostView get changeDetectorRef => _hostView; /// Runs [run] to apply changes to the component instance. /// @@ -133,10 +129,7 @@ class ComponentFactory { final HostView Function() _viewFactory; /// Internal constructor for generated code only - **do not invoke**. - const ComponentFactory( - this.selector, - this._viewFactory, - ); + const ComponentFactory(this.selector, this._viewFactory); @Deprecated('Unsupported and in the process of removal.') Type get componentType => T; diff --git a/ngdart/lib/src/core/linker/style_encapsulation.dart b/ngdart/lib/src/core/linker/style_encapsulation.dart index 15c93f3255..a64281d686 100644 --- a/ngdart/lib/src/core/linker/style_encapsulation.dart +++ b/ngdart/lib/src/core/linker/style_encapsulation.dart @@ -1,9 +1,10 @@ import 'package:web/web.dart'; import 'package:meta/dart2js.dart' as dart2js; -import 'package:ngdart/src/core/linker/app_view_utils.dart'; -import 'package:ngdart/src/runtime/dom_helpers.dart'; -import 'package:ngdart/src/utilities.dart'; +import '../../core/linker/app_view_utils.dart'; +import '../../runtime/dom_helpers.dart'; +import '../../utilities/is_dev_mode.dart'; +import '../../utilities/unsafe_cast.dart'; /// Clears all component styles from the DOM. /// @@ -109,10 +110,8 @@ class ComponentStyles { /// Creates a [ComponentStyles] that directly appends [styles] to the DOM. @dart2js.noInline - factory ComponentStyles.unscoped( - List styles, - String? componentUrl, - ) = _UnscopedComponentStyles; + factory ComponentStyles.unscoped(List styles, String? componentUrl) = + _UnscopedComponentStyles; /// Adds a CSS shim class to [element]. void addContentShimClass(Element element) { @@ -179,10 +178,7 @@ class ComponentStyles { } class _UnscopedComponentStyles extends ComponentStyles { - _UnscopedComponentStyles( - super.styles, - super.componentUrl, - ) : super._(); + _UnscopedComponentStyles(super.styles, super.componentUrl) : super._(); @override void addContentShimClass(Element element) { diff --git a/ngdart/lib/src/core/linker/template_ref.dart b/ngdart/lib/src/core/linker/template_ref.dart index 479baa0abe..1f71ae379e 100644 --- a/ngdart/lib/src/core/linker/template_ref.dart +++ b/ngdart/lib/src/core/linker/template_ref.dart @@ -1,7 +1,5 @@ -import 'package:ngdart/src/utilities.dart'; - +import '../../utilities/unsafe_cast.dart'; import 'view_container.dart'; -import 'view_ref.dart' show EmbeddedViewRef; import 'views/embedded_view.dart'; import 'views/render_view.dart'; @@ -19,12 +17,12 @@ import 'views/render_view.dart'; /// it to the View Container. class TemplateRef { final ViewContainer _viewContainer; - final EmbeddedView Function(RenderView, int) _viewFactory; + final EmbeddedView Function(RenderView, int) _viewFactory; TemplateRef(this._viewContainer, this._viewFactory); /// Instantiates an instance of the provided template. - EmbeddedViewRef createEmbeddedView() { + EmbeddedView createEmbeddedView() { // The unsafe cast is necessary because a view container's parent may be any // kind of view, but this method is only ever called when the parent view is // a `RenderView`. diff --git a/ngdart/lib/src/core/linker/view_container.dart b/ngdart/lib/src/core/linker/view_container.dart index 34aadb939f..54dfc49d99 100644 --- a/ngdart/lib/src/core/linker/view_container.dart +++ b/ngdart/lib/src/core/linker/view_container.dart @@ -1,9 +1,9 @@ import 'package:web/web.dart'; import 'package:meta/meta.dart'; -import 'package:ngdart/src/di/injector.dart' show Injector; -import 'package:ngdart/src/utilities.dart'; +import '../../di/injector.dart' show Injector; +import '../../utilities/unsafe_cast.dart'; import 'component_factory.dart' show ComponentFactory, ComponentRef; import 'component_loader.dart'; import 'element_ref.dart'; @@ -129,7 +129,7 @@ class ViewContainer extends ComponentLoader implements ViewContainerRef { contextInjector, projectableNodes, ); - insert(componentRef.hostView, index); + insert(componentRef.hostView as ViewRef, index); return componentRef; } @@ -267,6 +267,5 @@ class ViewContainer extends ComponentLoader implements ViewContainerRef { ComponentRef loadNextTo( ComponentFactory component, { Injector? injector, - }) => - loadNextToLocation(component, this, injector: injector); + }) => loadNextToLocation(component, this, injector: injector); } diff --git a/ngdart/lib/src/core/linker/view_container_ref.dart b/ngdart/lib/src/core/linker/view_container_ref.dart index 77db542829..3505ecd10d 100644 --- a/ngdart/lib/src/core/linker/view_container_ref.dart +++ b/ngdart/lib/src/core/linker/view_container_ref.dart @@ -1,4 +1,4 @@ -import 'package:ngdart/src/di/injector.dart' show Injector; +import '../../di/injector.dart' show Injector; import 'component_factory.dart' show ComponentFactory, ComponentRef; import 'component_loader.dart'; diff --git a/ngdart/lib/src/core/linker/view_fragment.dart b/ngdart/lib/src/core/linker/view_fragment.dart index 61bdfb5fef..3d80aaee61 100644 --- a/ngdart/lib/src/core/linker/view_fragment.dart +++ b/ngdart/lib/src/core/linker/view_fragment.dart @@ -1,8 +1,8 @@ import 'package:web/web.dart'; import 'package:meta/dart2js.dart' as dart2js; -import 'package:ngdart/src/utilities.dart'; +import '../../utilities/unsafe_cast.dart'; import 'view_container.dart'; /// Provides a collection of [Node] and/or [ViewContainer]s and access to them. diff --git a/ngdart/lib/src/core/linker/views/component_view.dart b/ngdart/lib/src/core/linker/views/component_view.dart index c870f13343..3caed6506b 100644 --- a/ngdart/lib/src/core/linker/views/component_view.dart +++ b/ngdart/lib/src/core/linker/views/component_view.dart @@ -3,12 +3,11 @@ import 'package:web/web.dart'; import 'package:meta/dart2js.dart' as dart2js; import 'package:meta/meta.dart'; -import 'package:ngdart/src/core/change_detection/host.dart'; -import 'package:ngdart/src/core/linker/style_encapsulation.dart'; -import 'package:ngdart/src/devtools.dart'; -import 'package:ngdart/src/meta.dart'; -import 'package:ngdart/src/utilities.dart'; - +import '../../../core/change_detection/host.dart'; +import '../../../core/linker/style_encapsulation.dart'; +import '../../../devtools.dart'; +import '../../../meta/change_detection_constants.dart'; +import '../../../utilities/is_dev_mode.dart'; import 'render_view.dart'; import 'view.dart'; @@ -312,7 +311,8 @@ class _ComponentViewData implements RenderViewData { } void _updateShouldSkipChangeDetection() { - _shouldSkipChangeDetection = _changeDetectionMode == + _shouldSkipChangeDetection = + _changeDetectionMode == ChangeDetectionCheckedState.waitingForMarkForCheck || _changeDetectionMode == ChangeDetectionCheckedState.waitingToBeAttached || diff --git a/ngdart/lib/src/core/linker/views/dynamic_view.dart b/ngdart/lib/src/core/linker/views/dynamic_view.dart index 1ca72ede5b..6238f3c587 100644 --- a/ngdart/lib/src/core/linker/views/dynamic_view.dart +++ b/ngdart/lib/src/core/linker/views/dynamic_view.dart @@ -1,8 +1,8 @@ import 'package:web/web.dart'; -import 'package:ngdart/src/core/linker/view_container.dart'; -import 'package:ngdart/src/core/linker/view_fragment.dart'; -import 'package:ngdart/src/core/linker/view_ref.dart'; +import '../../../core/linker/view_container.dart'; +import '../../../core/linker/view_fragment.dart'; +import '../../../core/linker/view_ref.dart'; import 'view.dart'; diff --git a/ngdart/lib/src/core/linker/views/embedded_view.dart b/ngdart/lib/src/core/linker/views/embedded_view.dart index 0313435a23..f14f9ff529 100644 --- a/ngdart/lib/src/core/linker/views/embedded_view.dart +++ b/ngdart/lib/src/core/linker/views/embedded_view.dart @@ -3,15 +3,16 @@ import 'package:web/web.dart'; import 'package:meta/dart2js.dart' as dart2js; import 'package:meta/meta.dart'; -import 'package:ngdart/src/core/change_detection/host.dart'; -import 'package:ngdart/src/core/linker/style_encapsulation.dart'; -import 'package:ngdart/src/core/linker/view_container.dart'; -import 'package:ngdart/src/core/linker/view_fragment.dart'; -import 'package:ngdart/src/core/linker/view_ref.dart'; -import 'package:ngdart/src/meta.dart'; -import 'package:ngdart/src/runtime/dom_helpers.dart'; -import 'package:ngdart/src/utilities.dart'; - +import '../../../core/change_detection/host.dart'; +import '../../../core/linker/style_encapsulation.dart'; +import '../../../core/linker/view_container.dart'; +import '../../../core/linker/view_fragment.dart'; +import '../../../core/linker/view_ref.dart'; +import '../../../meta/change_detection_constants.dart'; +import '../../../runtime/dom_helpers.dart'; + +import '../../../utilities/is_dev_mode.dart'; +import '../../../utilities/unsafe_cast.dart'; import 'dynamic_view.dart'; import 'render_view.dart'; @@ -31,7 +32,7 @@ import 'render_view.dart'; abstract class EmbeddedView extends RenderView implements DynamicView, EmbeddedViewRef { EmbeddedView(RenderView parentView, int parentIndex) - : _data = _EmbeddedViewData(parentView, parentIndex); + : _data = _EmbeddedViewData(parentView, parentIndex); final _EmbeddedViewData _data; @@ -226,13 +227,12 @@ class _EmbeddedViewData implements DynamicViewData, RenderViewData { } _EmbeddedViewData._(this.parentView, this.parentIndex) - : - // The `parentView` is always a `ComponentView` or `EmbeddedView` - // but `RenderView` lacks this type parameter (to avoid the cost of - // reifying it), so the cast is necessary, but safe. - ctx = unsafeCast(parentView.ctx), - componentStyles = parentView.componentStyles, - projectedNodes = parentView.projectedNodes; + : // The `parentView` is always a `ComponentView` or `EmbeddedView` + // but `RenderView` lacks this type parameter (to avoid the cost of + // reifying it), so the cast is necessary, but safe. + ctx = unsafeCast(parentView.ctx), + componentStyles = parentView.componentStyles, + projectedNodes = parentView.projectedNodes; /// Storage for [RenderView.ctx]. final T ctx; @@ -316,7 +316,8 @@ class _EmbeddedViewData implements DynamicViewData, RenderViewData { } void _updateShouldSkipChangeDetection() { - _shouldSkipChangeDetection = _changeDetectionMode == + _shouldSkipChangeDetection = + _changeDetectionMode == ChangeDetectionCheckedState.waitingToBeAttached || _changeDetectorState == ChangeDetectorState.errored; } diff --git a/ngdart/lib/src/core/linker/views/host_view.dart b/ngdart/lib/src/core/linker/views/host_view.dart index 3e26659234..20ab44b53a 100644 --- a/ngdart/lib/src/core/linker/views/host_view.dart +++ b/ngdart/lib/src/core/linker/views/host_view.dart @@ -2,15 +2,16 @@ import 'package:web/web.dart'; import 'package:meta/dart2js.dart' as dart2js; import 'package:meta/meta.dart'; -import 'package:ngdart/src/core/change_detection/host.dart'; -import 'package:ngdart/src/core/linker/component_factory.dart'; -import 'package:ngdart/src/core/linker/view_container.dart'; -import 'package:ngdart/src/core/linker/view_fragment.dart'; -import 'package:ngdart/src/di/injector.dart'; -import 'package:ngdart/src/meta.dart'; -import 'package:ngdart/src/runtime/dom_helpers.dart'; -import 'package:ngdart/src/utilities.dart'; - +import '../../../core/change_detection/host.dart'; +import '../../../core/linker/component_factory.dart'; +import '../../../core/linker/view_container.dart'; +import '../../../core/linker/view_fragment.dart'; +import '../../../di/injector.dart'; +import '../../../meta/change_detection_constants.dart'; +import '../../../runtime/dom_helpers.dart'; + +import '../../../utilities/is_dev_mode.dart'; +import '../../../utilities/unsafe_cast.dart'; import 'component_view.dart'; import 'dynamic_view.dart'; import 'view.dart'; @@ -304,7 +305,8 @@ class _HostViewData implements DynamicViewData { } void _updateShouldSkipChangeDetection() { - _shouldSkipChangeDetection = _changeDetectionMode == + _shouldSkipChangeDetection = + _changeDetectionMode == ChangeDetectionCheckedState.waitingToBeAttached || _changeDetectorState == ChangeDetectorState.errored; } diff --git a/ngdart/lib/src/core/linker/views/render_view.dart b/ngdart/lib/src/core/linker/views/render_view.dart index 35f4e34e9b..a39c7a2453 100644 --- a/ngdart/lib/src/core/linker/views/render_view.dart +++ b/ngdart/lib/src/core/linker/views/render_view.dart @@ -3,13 +3,13 @@ import 'dart:js_interop'; import 'package:web/web.dart'; import 'package:meta/dart2js.dart' as dart2js; -import 'package:ngdart/src/core/linker/app_view_utils.dart'; -import 'package:ngdart/src/core/linker/style_encapsulation.dart'; -import 'package:ngdart/src/core/linker/view_container.dart'; -import 'package:ngdart/src/core/linker/view_fragment.dart'; -import 'package:ngdart/src/runtime/dom_helpers.dart'; -import 'package:ngdart/src/utilities.dart'; +import '../../../core/linker/app_view_utils.dart'; +import '../../../core/linker/style_encapsulation.dart'; +import '../../../core/linker/view_container.dart'; +import '../../../core/linker/view_fragment.dart'; +import '../../../runtime/dom_helpers.dart'; +import '../../../utilities/unsafe_cast.dart'; import 'view.dart'; /// A view that renders a portion of a component template. @@ -161,9 +161,10 @@ abstract class RenderView extends View { /// known type. void Function(E) eventHandler1(void Function(F) handler) { assert( - E == Null || F != Null, - "Event handler '$handler' isn't assignable to expected type " - "'($E) => void'"); + E == Null || F != Null, + "Event handler '$handler' isn't assignable to expected type " + "'($E) => void'", + ); return (E event) { markForCheck(); appViewUtils.eventManager.zone.runGuarded( diff --git a/ngdart/lib/src/core/linker/views/view.dart b/ngdart/lib/src/core/linker/views/view.dart index a0301393cd..a92f2e55ff 100644 --- a/ngdart/lib/src/core/linker/views/view.dart +++ b/ngdart/lib/src/core/linker/views/view.dart @@ -3,12 +3,13 @@ import 'package:web/web.dart' show Element; import 'package:meta/dart2js.dart' as dart2js; import 'package:meta/meta.dart'; -import 'package:ngdart/src/core/change_detection/change_detection.dart'; -import 'package:ngdart/src/core/change_detection/host.dart'; -import 'package:ngdart/src/di/errors.dart'; -import 'package:ngdart/src/di/injector.dart'; -import 'package:ngdart/src/meta.dart'; -import 'package:ngdart/src/utilities.dart'; +import '../../../core/change_detection/change_detection.dart' + hide ChangeDetectorState, ChangeDetectionStrategy; +import '../../../core/change_detection/host.dart'; +import '../../../di/errors.dart'; +import '../../../di/injector.dart'; +import '../../../meta/change_detection_constants.dart'; +import '../../../utilities/unsafe_cast.dart'; /// The base implementation of all views. /// @@ -191,8 +192,7 @@ abstract class View implements ChangeDetectorRef { Object token, int nodeIndex, Object? notFoundResult, - ) => - notFoundResult; + ) => notFoundResult; /// The dependency lookup implementation for [injectorGet]. /// @@ -280,30 +280,24 @@ class _ElementInjector extends Injector { _ElementInjector(this._view, this._nodeIndex); @override - T provideUntyped( - Object token, [ - Object? orElse = throwIfNotFound, - ]) => + T provideUntyped(Object token, [Object? orElse = throwIfNotFound]) => unsafeCast(_view.inject(token, _nodeIndex, orElse)); @override Object? injectFromAncestryOptional( Object token, [ Object? orElse = throwIfNotFound, - ]) => - throw UnimplementedError(); + ]) => throw UnimplementedError(); @override Object? injectFromParentOptional( Object token, [ Object? orElse = throwIfNotFound, - ]) => - throw UnimplementedError(); + ]) => throw UnimplementedError(); @override Object? injectFromSelfOptional( Object token, [ Object? orElse = throwIfNotFound, - ]) => - throw UnimplementedError(); + ]) => throw UnimplementedError(); } diff --git a/ngdart/lib/src/di/errors.dart b/ngdart/lib/src/di/errors.dart index fdd6e419d5..11bf2428cb 100644 --- a/ngdart/lib/src/di/errors.dart +++ b/ngdart/lib/src/di/errors.dart @@ -1,5 +1,6 @@ import 'package:meta/dart2js.dart' as dart2js; -import 'package:ngdart/src/utilities.dart'; + +import '../utilities/is_dev_mode.dart'; /// Current stack of tokens being requested for an injection. List? _tokenStack; @@ -93,16 +94,16 @@ class NoProviderError extends InjectionError { final List path; NoProviderError._(this.token, List? stack) - : path = _withAdjacentDeduped(stack, token), - super._(); + : path = _withAdjacentDeduped(stack, token), + super._(); @override String toString() => path.isEmpty ? _noProviderError(token) : '${_noProviderError(token)}:\n' - ' ${path.join(' ->\n ')} ->\n' - ' $token.\n' - '**NOTE**: This path is not exhaustive, and nodes may be missing ' - 'in between the "->" delimiters. There is ongoing work to improve ' - 'this error message and include all the nodes where possible. '; + ' ${path.join(' ->\n ')} ->\n' + ' $token.\n' + '**NOTE**: This path is not exhaustive, and nodes may be missing ' + 'in between the "->" delimiters. There is ongoing work to improve ' + 'this error message and include all the nodes where possible. '; } diff --git a/ngdart/lib/src/di/injector.dart b/ngdart/lib/src/di/injector.dart index 1c019d2116..4ff4b4b35b 100644 --- a/ngdart/lib/src/di/injector.dart +++ b/ngdart/lib/src/di/injector.dart @@ -1,9 +1,9 @@ import 'dart:collection'; import 'package:meta/meta.dart'; -import 'package:ngdart/src/meta.dart'; -import 'package:ngdart/src/utilities.dart'; +import '../meta.dart'; +import '../utilities/unsafe_cast.dart'; import 'errors.dart' as errors; /// **INTERNAL ONLY**: Sentinel value for determining a missing DI instance. @@ -65,10 +65,8 @@ abstract class Injector { /// It is considered _unsupported_ to provide `Injector` as a key or `null` /// as either a key or a value, and assertion may be thrown in development /// mode. - factory Injector.map( - Map providers, [ - Injector parent, - ]) = _MapInjector; + factory Injector.map(Map providers, [Injector parent]) = + _MapInjector; /// Injects and returns an object representing [token]. /// @@ -76,10 +74,7 @@ abstract class Injector { /// /// **NOTE**: This is an internal-only method and may be removed. @protected - T provideUntyped( - Object token, [ - Object? orElse = throwIfNotFound, - ]) { + T provideUntyped(Object token, [Object? orElse = throwIfNotFound]) { errors.debugInjectorEnter(token); var result = injectFromSelfOptional(token, orElse); if (identical(result, orElse)) { @@ -185,10 +180,7 @@ abstract class Injector { /// /// An injector always returns itself if [Injector] is given as a token. @mustCallSuper - dynamic get( - Object token, [ - Object? notFoundValue = throwIfNotFound, - ]) { + dynamic get(Object token, [Object? notFoundValue = throwIfNotFound]) { errors.debugInjectorEnter(token); final result = provideUntyped(token, notFoundValue); if (identical(result, throwIfNotFound)) { @@ -294,7 +286,7 @@ abstract class HierarchicalInjector extends Injector { @visibleForTemplate const HierarchicalInjector([Injector? parent]) - : _parent = parent ?? const _EmptyInjector(); + : _parent = parent ?? const _EmptyInjector(); @override Object? injectFromAncestryOptional( @@ -321,8 +313,7 @@ class _EmptyInjector extends Injector { Object? injectFromSelfOptional( Object token, [ Object? orElse = throwIfNotFound, - ]) => - identical(token, Injector) ? this : orElse; + ]) => identical(token, Injector) ? this : orElse; @override Object? injectFromParentOptional( @@ -346,10 +337,8 @@ class _EmptyInjector extends Injector { class _MapInjector extends HierarchicalInjector implements Injector { final Map _providers; - _MapInjector( - Map providers, [ - super.parent, - ]) : _providers = HashMap.identity()..addAll(providers) { + _MapInjector(Map providers, [super.parent]) + : _providers = HashMap.identity()..addAll(providers) { assert(!providers.containsKey(Injector)); } diff --git a/ngdart/lib/src/meta.dart b/ngdart/lib/src/meta.dart index 918f440025..ebd8428f81 100644 --- a/ngdart/lib/src/meta.dart +++ b/ngdart/lib/src/meta.dart @@ -28,7 +28,7 @@ export 'meta/visibility.dart'; /// /// ```dart /// // my_component.dart -/// import 'package:ngdart/angular.dart'; +/// import '../angular.dart'; /// /// @Component( /// selector: 'my-comp', diff --git a/ngdart/lib/src/meta/di_arguments.dart b/ngdart/lib/src/meta/di_arguments.dart index 22a190a100..b435376eef 100644 --- a/ngdart/lib/src/meta/di_arguments.dart +++ b/ngdart/lib/src/meta/di_arguments.dart @@ -108,11 +108,7 @@ class Inject { /// ## Use #3: A static class method /// /// This works the same way as with top-level functions. -@Target({ - TargetKind.classType, - TargetKind.function, - TargetKind.method, -}) +@Target({TargetKind.classType, TargetKind.function, TargetKind.method}) class Injectable { const Injectable(); } diff --git a/ngdart/lib/src/meta/di_modules.dart b/ngdart/lib/src/meta/di_modules.dart index b6216a0058..d539f8af7e 100644 --- a/ngdart/lib/src/meta/di_modules.dart +++ b/ngdart/lib/src/meta/di_modules.dart @@ -1,5 +1,6 @@ import 'package:meta/meta.dart'; -import 'package:ngdart/src/meta.dart'; + +import 'di_providers.dart'; /// Encapsulates a reusable set of dependency injection configurations. /// @@ -44,22 +45,17 @@ class Module { final List> provide; @literal - const factory Module({ - List include, - List> provide, - }) = Module._; + const factory Module({List include, List> provide}) = + Module._; - const Module._({ - this.include = const [], - this.provide = const [], - }); + const Module._({this.include = const [], this.provide = const []}); } /// Compatibility layer for expressing a [Module] as a `List<...>`. /// /// **DO NOT USE**: This function may break or change at any time. List> internalModuleToList(Module module) => [ - for (final includedModule in module.include) - ...internalModuleToList(includedModule), - ...module.provide, - ]; + for (final includedModule in module.include) + ...internalModuleToList(includedModule), + ...module.provide, +]; diff --git a/ngdart/lib/src/meta/di_providers.dart b/ngdart/lib/src/meta/di_providers.dart index dcec794dc4..3ca0f09c44 100644 --- a/ngdart/lib/src/meta/di_providers.dart +++ b/ngdart/lib/src/meta/di_providers.dart @@ -1,6 +1,6 @@ import 'package:meta/meta.dart'; -import 'package:ngdart/src/utilities.dart'; +import '../utilities/unsafe_cast.dart'; import 'di_tokens.dart'; /// A marker that represents a lack-of-value for the `useValue` parameter. @@ -38,15 +38,14 @@ Provider provide( Object? useExisting, Function? useFactory, List? deps, -}) => - Provider( - token, - useClass: useClass, - useValue: useValue, - useExisting: useExisting, - useFactory: useFactory, - deps: deps, - ); +}) => Provider( + token, + useClass: useClass, + useValue: useValue, + useExisting: useExisting, + useFactory: useFactory, + deps: deps, +); /// Describes at compile-time how an `Injector` should be configured. /// @@ -169,23 +168,14 @@ Object buildAtRuntime(Provider provider, RuntimeInjectorBuilder builder) { /// ``` @optionalTypeArgs class ClassProvider extends Provider { - const factory ClassProvider( - Type type, { - Type useClass, - }) = ClassProvider._; + const factory ClassProvider(Type type, {Type useClass}) = ClassProvider._; - const factory ClassProvider.forToken( - OpaqueToken token, { - Type useClass, - }) = ClassProvider._; + const factory ClassProvider.forToken(OpaqueToken token, {Type useClass}) = + ClassProvider._; // Prevents extending this class. - const ClassProvider._( - super.token, { - Type? useClass, - }) : super._( - useClass: useClass ?? token as Type, - ); + const ClassProvider._(super.token, {Type? useClass}) + : super._(useClass: useClass ?? token as Type); } /// Describes at compile-time configuring to redirect to another token. @@ -195,10 +185,8 @@ class ClassProvider extends Provider { /// Commonly used for deprecation strategies or to-export an interface. @optionalTypeArgs class ExistingProvider extends Provider { - const factory ExistingProvider( - Type type, - Object useExisting, - ) = ExistingProvider._; + const factory ExistingProvider(Type type, Object useExisting) = + ExistingProvider._; const factory ExistingProvider.forToken( OpaqueToken token, @@ -206,12 +194,8 @@ class ExistingProvider extends Provider { ) = ExistingProvider._; // Prevents extending this class. - const ExistingProvider._( - super.token, - Object useExisting, - ) : super._( - useExisting: useExisting, - ); + const ExistingProvider._(super.token, Object useExisting) + : super._(useExisting: useExisting); } /// Describes at compile-time configuring to invoke a factory function. @@ -232,13 +216,8 @@ class FactoryProvider extends Provider { }) = FactoryProvider._; // Prevents extending this class. - const FactoryProvider._( - super.token, - Function useFactory, { - super.deps, - }) : super._( - useFactory: useFactory, - ); + const FactoryProvider._(super.token, Function useFactory, {super.deps}) + : super._(useFactory: useFactory); } /// Describes at compile-time using a constant value to represent a token. @@ -256,21 +235,11 @@ class FactoryProvider extends Provider { /// encounter problems it is recommended to use [FactoryProvider] instead. @optionalTypeArgs class ValueProvider extends Provider { - const factory ValueProvider( - Type type, - T useValue, - ) = ValueProvider._; + const factory ValueProvider(Type type, T useValue) = ValueProvider._; - const factory ValueProvider.forToken( - OpaqueToken token, - T useValue, - ) = ValueProvider._; + const factory ValueProvider.forToken(OpaqueToken token, T useValue) = + ValueProvider._; // Prevents extending this class. - const ValueProvider._( - super.token, - T useValue, - ) : super._( - useValue: useValue, - ); + const ValueProvider._(super.token, T useValue) : super._(useValue: useValue); } diff --git a/ngdart/lib/src/meta/di_tokens.dart b/ngdart/lib/src/meta/di_tokens.dart index e990e69883..8b01d02ac7 100644 --- a/ngdart/lib/src/meta/di_tokens.dart +++ b/ngdart/lib/src/meta/di_tokens.dart @@ -1,5 +1,6 @@ import 'package:meta/meta.dart'; -import 'package:ngdart/src/utilities.dart'; + +import '../utilities/is_dev_mode.dart'; /// A token to be used instead of [Type] when configuring dependency injection. /// diff --git a/ngdart/lib/src/meta/directives.dart b/ngdart/lib/src/meta/directives.dart index ee28cc23c5..35db1c1248 100644 --- a/ngdart/lib/src/meta/directives.dart +++ b/ngdart/lib/src/meta/directives.dart @@ -12,7 +12,7 @@ import 'visibility.dart'; /// ```dart /// import 'package:web/web.dart'; /// -/// import 'package:ngdart/angular.dart'; +/// import '../angular.dart'; /// /// @Directive(selector: '[myHighlight]') /// class HighlightDirective { @@ -375,16 +375,9 @@ abstract class _Query { /// combination with an `NgFor` (or a custom directive that supports moving /// embedded views) this field or setter may _not_ be updated. For details see /// go/angular-dart/dev/template-queries. -@Target({ - TargetKind.field, - TargetKind.setter, -}) +@Target({TargetKind.field, TargetKind.setter}) class ContentChildren extends _Query { - const ContentChildren( - super.selector, { - super.descendants = true, - super.read, - }); + const ContentChildren(super.selector, {super.descendants = true, super.read}); } /// Declares a reference to a single child node projected into ``. @@ -394,18 +387,10 @@ class ContentChildren extends _Query { /// - similar to `querySelector` instead of `querySelectorAll`. /// /// See [ContentChildren] and [ViewChildren] for full documentation. -@Target({ - TargetKind.field, - TargetKind.setter, -}) +@Target({TargetKind.field, TargetKind.setter}) class ContentChild extends _Query { - const ContentChild( - super.selector, { - super.read, - }) : super( - descendants: true, - first: true, - ); + const ContentChild(super.selector, {super.read}) + : super(descendants: true, first: true); } abstract class _ViewQuery extends _Query { @@ -590,17 +575,9 @@ abstract class _ViewQuery extends _Query { /// combination with an `NgFor` (or a custom directive that supports moving /// embedded views) this field or setter may _not_ be updated. For details see /// go/angular-dart/dev/template-queries. -@Target({ - TargetKind.field, - TargetKind.setter, -}) +@Target({TargetKind.field, TargetKind.setter}) class ViewChildren extends _ViewQuery { - const ViewChildren( - super.selector, { - super.read, - }) : super( - descendants: true, - ); + const ViewChildren(super.selector, {super.read}) : super(descendants: true); } /// Declares a reference to a single child node in a component's template. @@ -628,18 +605,10 @@ class ViewChildren extends _ViewQuery { /// ``` /// /// See [ViewChildren] for a full documentation of parameters and more examples. -@Target({ - TargetKind.field, - TargetKind.setter, -}) +@Target({TargetKind.field, TargetKind.setter}) class ViewChild extends _ViewQuery { - const ViewChild( - super.selector, { - super.read, - }) : super( - descendants: true, - first: true, - ); + const ViewChild(super.selector, {super.read}) + : super(descendants: true, first: true); } /// Declares a data-bound input property. @@ -680,10 +649,7 @@ class ViewChild extends _ViewQuery { /// directives: const [BankAccount]) /// class App {} /// ``` -@Target({ - TargetKind.field, - TargetKind.setter, -}) +@Target({TargetKind.field, TargetKind.setter}) class Input { /// Name used when instantiating a component in the template. final String? bindingPropertyName; @@ -737,10 +703,7 @@ class Input { /// } /// } /// ``` -@Target({ - TargetKind.field, - TargetKind.getter, -}) +@Target({TargetKind.field, TargetKind.getter}) class Output { final String? bindingPropertyName; const Output([this.bindingPropertyName]); @@ -781,10 +744,7 @@ class Output { /// String debugId; /// } /// ``` -@Target({ - TargetKind.field, - TargetKind.getter, -}) +@Target({TargetKind.field, TargetKind.getter}) class HostBinding { final String? hostPropertyName; const HostBinding([this.hostPropertyName]); diff --git a/ngdart/lib/src/runtime/check_binding.dart b/ngdart/lib/src/runtime/check_binding.dart index a9817dfe86..29bae6c87c 100644 --- a/ngdart/lib/src/runtime/check_binding.dart +++ b/ngdart/lib/src/runtime/check_binding.dart @@ -1,7 +1,7 @@ import 'package:collection/collection.dart'; import 'package:meta/dart2js.dart' as dart2js; import 'package:meta/meta.dart'; -import 'package:ngdart/src/utilities.dart'; +import '../utilities.dart'; /// Whether [_debugCheckBinding] should throw if the values are different. var _debugThrowIfChanged = false; @@ -80,10 +80,9 @@ bool checkBinding( Object? newValue, [ String? expression, String? location, -]) => - isDevMode && _debugThrowIfChanged - ? !_debugCheckBinding(oldValue, newValue, expression, location) - : !identical(oldValue, newValue); +]) => isDevMode && _debugThrowIfChanged + ? !_debugCheckBinding(oldValue, newValue, expression, location) + : !identical(oldValue, newValue); /// Returns `true` if [oldValue] is identical to [newValue]. /// @@ -107,12 +106,14 @@ bool _debugCheckBinding( : const _DevModeEquality().equals(oldValue, newValue); if (!isIdentical) { - _unstableExpressionValues.add(UnstableExpressionValue._( - expression: expression, - location: location, - oldValue: oldValue, - newValue: newValue, - )); + _unstableExpressionValues.add( + UnstableExpressionValue._( + expression: expression, + location: location, + oldValue: oldValue, + newValue: newValue, + ), + ); if (_debugThrowImmediately) { debugThrowIfUnstableExpressionsFound(); } @@ -176,7 +177,8 @@ class UnstableExpressionError extends Error { @override String toString() { - final message = '' + final message = + '' 'An expression bound in an AngularDart template returned a different ' 'value the second time it was evaluated.\n'; return '$message\n$details\n$_goLink\n'; diff --git a/ngdart/lib/src/runtime/dom_events.dart b/ngdart/lib/src/runtime/dom_events.dart index 22810b7a70..daf2646345 100644 --- a/ngdart/lib/src/runtime/dom_events.dart +++ b/ngdart/lib/src/runtime/dom_events.dart @@ -1,7 +1,7 @@ import 'package:web/web.dart'; import 'dart:js_interop'; -import 'package:ngdart/src/core/zone/ng_zone.dart'; +import '../core/zone/ng_zone.dart'; /// Provides a runtime implementation for "native" DOM events on elements. class EventManager { @@ -29,11 +29,12 @@ class EventManager { zone.runOutsideAngular(() { //_keyEvents.addEventListener(element, name, callback); _keyEvents.addEventListener( - element, - name, - ((Event event) { - callback.callAsFunction(event); - }).toJS); + element, + name, + ((Event event) { + callback.callAsFunction(event); + }).toJS, + ); }); return; } @@ -42,10 +43,11 @@ class EventManager { // "click"), it will never be called into EventManager. But of course the // browser APIs change, so this is the final fallback. element.addEventListener( - name, - ((Event event) { - callback.callAsFunction(event); - }).toJS); + name, + ((Event event) { + callback.callAsFunction(event); + }).toJS, + ); } } @@ -99,15 +101,16 @@ class _KeyEventsHandler { } element.addEventListener( - parsed.domEventName, - (Event event) { - // TODO: Migrate to 3.6 (Need review) - //if (event is KeyboardEvent && parsed.matches(event)) { - if (event.isA() && - parsed.matches(event as KeyboardEvent)) { - callback.callAsFunction(event); - } - }.toJS); + parsed.domEventName, + (Event event) { + // TODO: Migrate to 3.6 (Need review) + //if (event is KeyboardEvent && parsed.matches(event)) { + if (event.isA() && + parsed.matches(event as KeyboardEvent)) { + callback.callAsFunction(event); + } + }.toJS, + ); } static _ParsedEvent? _parse(String name) { @@ -253,7 +256,7 @@ const _keyCodeNames = { 122: 'f11', 123: 'f12', 144: 'numlock', - 145: 'scrolllock' + 145: 'scrolllock', }; /// Determines whether a given modifier key name is currently active. @@ -261,5 +264,5 @@ final _modifiers = { 'alt': (event) => event.altKey, 'control': (event) => event.ctrlKey, 'meta': (event) => event.metaKey, - 'shift': (event) => event.shiftKey + 'shift': (event) => event.shiftKey, }; diff --git a/ngdart/lib/src/runtime/dom_helpers.dart b/ngdart/lib/src/runtime/dom_helpers.dart index 4d0d985e4b..1525249534 100644 --- a/ngdart/lib/src/runtime/dom_helpers.dart +++ b/ngdart/lib/src/runtime/dom_helpers.dart @@ -11,7 +11,7 @@ import 'package:web/web.dart' hide document; //import 'dart:js_interop'; //import 'package:js/js_util.dart' as js; import 'package:meta/dart2js.dart' as dart2js; -import 'package:ngdart/src/utilities.dart'; +import '../utilities.dart'; import 'dom_helpers.dart' as js; @@ -74,11 +74,7 @@ void updateClassBindingNonHtml(Element element, String className, bool isAdd) { /// /// If [value] is `null`, this implicitly _removes_ [attribute] from [element]. @dart2js.noInline -void updateAttribute( - Element element, - String attribute, - String? value, -) { +void updateAttribute(Element element, String attribute, String? value) { if (value == null) { element.removeAttribute(attribute); } else { @@ -109,11 +105,7 @@ void updateAttributeNS( /// from the template, as it does not check to see if [value] is `null` (and /// the attribute should be removed) nor does it set [domRootRendererIsDirty]. @dart2js.noInline -void setAttribute( - Element element, - String attribute, [ - String value = '', -]) { +void setAttribute(Element element, String attribute, [String value = '']) { element.setAttribute(attribute, value); } @@ -125,11 +117,7 @@ void setAttribute( /// e.disabled = true; /// ``` @dart2js.tryInline -void setProperty( - Element element, - String property, - Object? value, -) { +void setProperty(Element element, String property, Object? value) { js.setProperty(element, property, value); } @@ -222,11 +210,7 @@ HTMLSpanElement appendSpan(Document doc, Node parent) { /// /// This is an optimization to reduce code size for a common operation. @dart2js.noInline -T appendElement( - Document doc, - Node parent, - String tagName, -) { +T appendElement(Document doc, Node parent, String tagName) { // allows the pattern: // HtmlElement e = appendElement(doc, parent, 'foo') // diff --git a/ngdart/lib/src/runtime/text_binding.dart b/ngdart/lib/src/runtime/text_binding.dart index bcdcf3f575..05bfe2239b 100644 --- a/ngdart/lib/src/runtime/text_binding.dart +++ b/ngdart/lib/src/runtime/text_binding.dart @@ -1,7 +1,7 @@ import 'package:web/web.dart'; import 'package:meta/dart2js.dart' as dart2js; -import 'package:ngdart/src/runtime/check_binding.dart'; +import '../runtime/check_binding.dart'; import 'interpolate.dart'; diff --git a/ngdart/lib/src/security/dom_sanitization_service.dart b/ngdart/lib/src/security/dom_sanitization_service.dart index 30462806b4..5af2ec5657 100644 --- a/ngdart/lib/src/security/dom_sanitization_service.dart +++ b/ngdart/lib/src/security/dom_sanitization_service.dart @@ -1,6 +1,5 @@ -import 'package:ngdart/di.dart' show Injectable; - -import 'package:ngdart/src/utilities.dart'; +import '../meta/di_arguments.dart'; +import '../utilities.dart'; import 'html_sanitizer.dart'; import 'style_sanitizer.dart'; import 'url_sanitizer.dart'; @@ -84,7 +83,8 @@ class DomSanitizationService implements SanitizationService { } if (value is SafeValue) { throw UnsupportedError( - 'Unexpected SecurityContext $value, expecting html'); + 'Unexpected SecurityContext $value, expecting html', + ); } // print('Uh oh, falling back to internal sanitizing...'); return sanitizeHtmlInternal(unsafeCast(value)); @@ -97,8 +97,10 @@ class DomSanitizationService implements SanitizationService { return value.changingThisWillBypassSecurityTrust; } if (value is SafeValue) { - throw UnsupportedError('Unexpected SecurityContext $value, ' - 'expecting style'); + throw UnsupportedError( + 'Unexpected SecurityContext $value, ' + 'expecting style', + ); } if (value == null) return null; return internalSanitizeStyle(value is String ? value : value.toString()); @@ -109,8 +111,10 @@ class DomSanitizationService implements SanitizationService { if (value == null) return null; if (value is SafeUrl) return value.changingThisWillBypassSecurityTrust; if (value is SafeValue) { - throw UnsupportedError('Unexpected SecurityContext $value, ' - 'expecting url'); + throw UnsupportedError( + 'Unexpected SecurityContext $value, ' + 'expecting url', + ); } return internalSanitizeUrl(value.toString()); } @@ -122,11 +126,14 @@ class DomSanitizationService implements SanitizationService { return value.changingThisWillBypassSecurityTrust; } if (value is SafeValue) { - throw UnsupportedError('Unexpected SecurityContext $value, ' - 'expecting resource url'); + throw UnsupportedError( + 'Unexpected SecurityContext $value, ' + 'expecting resource url', + ); } throw UnsupportedError( - 'Security violation in resource url. Create SafeValue'); + 'Security violation in resource url. Create SafeValue', + ); } /// Bypass security and trust the given value to be safe HTML. diff --git a/ngdart/lib/src/security/safe_inner_html.dart b/ngdart/lib/src/security/safe_inner_html.dart index c4121376a8..8e1f3d259a 100644 --- a/ngdart/lib/src/security/safe_inner_html.dart +++ b/ngdart/lib/src/security/safe_inner_html.dart @@ -1,6 +1,6 @@ -import 'package:ngdart/angular.dart'; import 'package:web/web.dart' show Element; +import '../meta/directives.dart'; import 'dom_sanitization_service.dart' show SafeHtml; /// Sets [Element.innerHTML] _without_ sanitizing the HTML output. @@ -40,7 +40,7 @@ class SafeInnerHtmlDirective { SafeInnerHtmlDirective(this._element); @Input() - set safeInnerHtml(safeInnerHtml) { + set safeInnerHtml(dynamic safeInnerHtml) { // print('Setting inner html as $safeInnerHtml'); if (safeInnerHtml is SafeHtml) { //_element.setInnerHtml( @@ -60,9 +60,7 @@ class SafeInnerHtmlDirective { // origin instead of passing a primitive string through layers // of code which could introduce mutations making security auditing // hard. - throw UnsupportedError( - 'SafeHtml required (got $safeInnerHtml)', - ); + throw UnsupportedError('SafeHtml required (got $safeInnerHtml)'); } } } diff --git a/ngdart/lib/src/security/sanitization_service.dart b/ngdart/lib/src/security/sanitization_service.dart index 683986fd0b..1181cd00ec 100644 --- a/ngdart/lib/src/security/sanitization_service.dart +++ b/ngdart/lib/src/security/sanitization_service.dart @@ -2,11 +2,11 @@ /// SafeValue equivalents that can be used to bind to in templates. abstract class SanitizationService { // Sanitizes html content. - String? sanitizeHtml(value); + String? sanitizeHtml(dynamic value); // Sanitizes css style. - String? sanitizeStyle(value); + String? sanitizeStyle(dynamic value); // Sanitizes url link. - String? sanitizeUrl(value); + String? sanitizeUrl(dynamic value); // Sanitizes resource loading url. - String? sanitizeResourceUrl(value); + String? sanitizeResourceUrl(dynamic value); } diff --git a/ngdart/lib/src/testability/testability.dart b/ngdart/lib/src/testability/testability.dart index 8557ac2d0a..cc8af32870 100644 --- a/ngdart/lib/src/testability/testability.dart +++ b/ngdart/lib/src/testability/testability.dart @@ -7,8 +7,8 @@ import 'package:web/web.dart'; import 'package:meta/meta.dart'; -import '../../di.dart'; import '../core/zone/ng_zone.dart'; +import '../meta/di_providers.dart'; import 'js_api.dart'; part 'js_impl.dart'; diff --git a/ngdart/pubspec.yaml b/ngdart/pubspec.yaml index b325cb877b..ab38cdb0a8 100644 --- a/ngdart/pubspec.yaml +++ b/ngdart/pubspec.yaml @@ -6,12 +6,12 @@ version: 9.0.0-dev.1 repository: https://github.com/angulardart-community/angular environment: - sdk: '>=3.9.0 <4.0.0' + sdk: '>=3.10.0 <4.0.0' resolution: workspace dependencies: - analyzer: ^8.4.0 + analyzer: ^9.0.0 build: ^4.0.0 built_collection: ^5.1.1 build_modules: ^5.0.12 diff --git a/ngforms/pubspec.yaml b/ngforms/pubspec.yaml index 6dd91fec03..f77cc91a87 100644 --- a/ngforms/pubspec.yaml +++ b/ngforms/pubspec.yaml @@ -6,7 +6,7 @@ version: 6.0.0-dev.1 repository: https://github.com/angulardart-community/angular environment: - sdk: '>=3.9.0 <4.0.0' + sdk: '>=3.10.0 <4.0.0' resolution: workspace diff --git a/ngrouter/pubspec.yaml b/ngrouter/pubspec.yaml index e84dcbc7e2..430a895d54 100644 --- a/ngrouter/pubspec.yaml +++ b/ngrouter/pubspec.yaml @@ -6,7 +6,7 @@ version: 5.0.0-dev.1 repository: https://github.com/angulardart-community/angular environment: - sdk: '>=3.9.0 <4.0.0' + sdk: '>=3.10.0 <4.0.0' resolution: workspace diff --git a/ngtest/pubspec.yaml b/ngtest/pubspec.yaml index 59ae4aa58f..4d2870d82c 100644 --- a/ngtest/pubspec.yaml +++ b/ngtest/pubspec.yaml @@ -6,7 +6,7 @@ version: 6.0.0-dev.1 repository: https://github.com/angulardart-community/angular environment: - sdk: '>=3.9.0 <4.0.0' + sdk: '>=3.10.0 <4.0.0' resolution: workspace diff --git a/pubspec.yaml b/pubspec.yaml index c5dfd9ff25..9293ac8538 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -11,7 +11,8 @@ workspace: - ngforms - ngrouter - goldens - - _tests + - ngdart2 + #- _tests dev_dependencies: melos: ^7.3.0 From 05ffc489bc3d001657367a00a41de4635af9f2b4 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 27 Dec 2025 23:15:40 +0800 Subject: [PATCH 45/70] Fixed failed test cases --- .../testing/runtime_source_resolution.dart | 16 +++ .../analyzer/di/dependency_reader_test.dart | 6 +- .../test/v1/angular_compiler/src/resolve.dart | 12 +- ngdart/lib/angular.dart | 104 ++++++++++-------- 4 files changed, 84 insertions(+), 54 deletions(-) diff --git a/ngcompiler/lib/v2/src/testing/runtime_source_resolution.dart b/ngcompiler/lib/v2/src/testing/runtime_source_resolution.dart index 8d8f56b59d..f83bee7004 100644 --- a/ngcompiler/lib/v2/src/testing/runtime_source_resolution.dart +++ b/ngcompiler/lib/v2/src/testing/runtime_source_resolution.dart @@ -91,6 +91,22 @@ Future resolve( () => resolveSources( sources, (resolver) => resolver.libraryFor(_defaultAssetId), + nonInputsToReadFromFilesystem: { + AssetId('ngdart', 'lib/angular.dart'), + AssetId('ngdart', 'lib/src/meta/di_modules.dart'), + AssetId('ngdart', 'lib/src/meta/di_arguments.dart'), + AssetId('ngdart', 'lib/src/meta/change_detection_constants.dart'), + AssetId('ngdart', 'lib/src/meta/change_detection_link.dart'), + AssetId('ngdart', 'lib/src/meta/di_generate_injector.dart'), + AssetId('ngdart', 'lib/src/meta/di_modules.dart'), + AssetId('ngdart', 'lib/src/meta/di_providers.dart'), + AssetId('ngdart', 'lib/src/meta/di_tokens.dart'), + AssetId('ngdart', 'lib/src/meta/directives.dart'), + AssetId('ngdart', 'lib/src/meta/lifecycle_hooks.dart'), + AssetId('ngdart', 'lib/src/meta/typed.dart'), + AssetId('ngdart', 'lib/src/meta/view.dart'), + AssetId('ngdart', 'lib/src/meta/visibility.dart'), + }, packageConfig: config, ), ['non-nullable'], diff --git a/ngcompiler/test/v1/angular_compiler/analyzer/di/dependency_reader_test.dart b/ngcompiler/test/v1/angular_compiler/analyzer/di/dependency_reader_test.dart index c3e63c4a9e..8e50f064ba 100644 --- a/ngcompiler/test/v1/angular_compiler/analyzer/di/dependency_reader_test.dart +++ b/ngcompiler/test/v1/angular_compiler/analyzer/di/dependency_reader_test.dart @@ -74,7 +74,7 @@ void main() { test('a function with no parameters', () { final function = functionNamed('createExample0'); final deps = reader.parseDependencies(function.element); - expect(deps.bound, const TypeMatcher()); + expect(deps.bound, const TypeMatcher()); expect(deps.positional, isEmpty); expect(deps.named, isEmpty); }); @@ -82,7 +82,7 @@ void main() { test('a function with one parameter', () { final function = functionNamed('createExample1'); final deps = reader.parseDependencies(function.element); - expect(deps.bound, const TypeMatcher()); + expect(deps.bound, const TypeMatcher()); expect(deps.positional, [ DependencyElement( TypeTokenElement( @@ -96,7 +96,7 @@ void main() { test('a function with two parameters, of which one is named', () { final function = functionNamed('createExample2'); final deps = reader.parseDependencies(function.element); - expect(deps.bound, const TypeMatcher()); + expect(deps.bound, const TypeMatcher()); expect(deps.positional, [ DependencyElement( TypeTokenElement( diff --git a/ngcompiler/test/v1/angular_compiler/src/resolve.dart b/ngcompiler/test/v1/angular_compiler/src/resolve.dart index 8072bad69c..7302b8d16c 100644 --- a/ngcompiler/test/v1/angular_compiler/src/resolve.dart +++ b/ngcompiler/test/v1/angular_compiler/src/resolve.dart @@ -42,19 +42,19 @@ Future resolveLibrary(String source) async { inputId: AssetId('test_lib', 'lib/test_lib.dart'), nonInputsToReadFromFilesystem: { AssetId('ngdart', 'lib/angular.dart'), - AssetId('ngdart', 'lib/src/meta.dart'), AssetId('ngdart', 'lib/src/meta/di_modules.dart'), AssetId('ngdart', 'lib/src/meta/di_arguments.dart'), - AssetId('ngdart', 'lib/src/meta/di_tokens.dart'), - AssetId('ngdart', 'lib/src/meta/di_providers.dart'), + AssetId('ngdart', 'lib/src/meta/change_detection_constants.dart'), + AssetId('ngdart', 'lib/src/meta/change_detection_link.dart'), AssetId('ngdart', 'lib/src/meta/di_generate_injector.dart'), + AssetId('ngdart', 'lib/src/meta/di_modules.dart'), + AssetId('ngdart', 'lib/src/meta/di_providers.dart'), + AssetId('ngdart', 'lib/src/meta/di_tokens.dart'), + AssetId('ngdart', 'lib/src/meta/directives.dart'), AssetId('ngdart', 'lib/src/meta/lifecycle_hooks.dart'), AssetId('ngdart', 'lib/src/meta/typed.dart'), - AssetId('ngdart', 'lib/src/meta/directives.dart'), AssetId('ngdart', 'lib/src/meta/view.dart'), AssetId('ngdart', 'lib/src/meta/visibility.dart'), - AssetId('ngdart', 'lib/src/meta/change_detection_constants.dart'), - AssetId('ngdart', 'lib/src/meta/change_detection_link.dart'), }, packageConfig: packageConfig, ), diff --git a/ngdart/lib/angular.dart b/ngdart/lib/angular.dart index 297f37b162..2b44bf7ce7 100644 --- a/ngdart/lib/angular.dart +++ b/ngdart/lib/angular.dart @@ -29,51 +29,65 @@ export 'src/core/zone/ng_zone.dart' show NgZone, UncaughtError; export 'src/devtools.dart' show enableDevTools, registerContentRoot; export 'src/di/errors.dart' show InjectionError, NoProviderError; export 'src/di/injector.dart' show Injector, InjectorFactory; -export 'src/meta.dart' - show - AfterChanges, - AfterContentChecked, - AfterContentInit, - AfterViewChecked, - AfterViewInit, - Attribute, - ChangeDetectionStrategy, - ChangeDetectorState, - ClassProvider, - Component, - ContentChild, - ContentChildren, - Directive, - DoCheck, - ExistingProvider, - FactoryProvider, - GenerateInjector, - Host, - HostBinding, - HostListener, - Inject, - Injectable, - Input, - Module, - MultiToken, - OnDestroy, - OnInit, - OpaqueToken, - Optional, - Output, - Pipe, - Provider, - Self, - SkipSelf, - Typed, - ValueProvider, - ViewChild, - ViewChildren, - ViewEncapsulation, - Visibility, - noValueProvided, - provide, - visibleForTemplate; + +export 'src/meta/change_detection_constants.dart'; +export 'src/meta/change_detection_link.dart'; +export 'src/meta/di_arguments.dart'; +export 'src/meta/di_generate_injector.dart'; +export 'src/meta/di_modules.dart'; +export 'src/meta/di_providers.dart'; +export 'src/meta/di_tokens.dart'; +export 'src/meta/directives.dart'; +export 'src/meta/lifecycle_hooks.dart'; +export 'src/meta/typed.dart'; +export 'src/meta/view.dart'; +export 'src/meta/visibility.dart'; + +// export 'src/meta.dart' +// show +// AfterChanges, +// AfterContentChecked, +// AfterContentInit, +// AfterViewChecked, +// AfterViewInit, +// Attribute, +// ChangeDetectionStrategy, +// ChangeDetectorState, +// ClassProvider, +// Component, +// ContentChild, +// ContentChildren, +// Directive, +// DoCheck, +// ExistingProvider, +// FactoryProvider, +// GenerateInjector, +// Host, +// HostBinding, +// HostListener, +// Inject, +// Injectable, +// Input, +// Module, +// MultiToken, +// OnDestroy, +// OnInit, +// OpaqueToken, +// Optional, +// Output, +// Pipe, +// Provider, +// Self, +// SkipSelf, +// Typed, +// ValueProvider, +// ViewChild, +// ViewChildren, +// ViewEncapsulation, +// Visibility, +// noValueProvided, +// provide, +// visibleForTemplate; export 'src/runtime/check_binding.dart' show debugCheckBindings; // TODO(b/116697059): Move to a testonly=1 library. export 'src/testability.dart' From 0647290609dd4c7c74c447f3a2ce787d2f1d03b7 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sun, 28 Dec 2025 14:13:25 +0800 Subject: [PATCH 46/70] Updated pubspec --- ngcompiler/pubspec.yaml | 1 - pubspec.yaml | 1 - 2 files changed, 2 deletions(-) diff --git a/ngcompiler/pubspec.yaml b/ngcompiler/pubspec.yaml index 782ac03737..3e64ca8d16 100644 --- a/ngcompiler/pubspec.yaml +++ b/ngcompiler/pubspec.yaml @@ -24,7 +24,6 @@ dependencies: meta: ^1.8.0 ngast: ^4.0.0-dev.1 ngdart: ^9.0.0-dev.1 - ngdart2: ^9.0.0-dev.1 package_config: ^2.1.0 path: ^1.8.3 source_gen: ^4.0.0 diff --git a/pubspec.yaml b/pubspec.yaml index 9293ac8538..a009f474d6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -11,7 +11,6 @@ workspace: - ngforms - ngrouter - goldens - - ngdart2 #- _tests dev_dependencies: From faaee8313e369bb8ed5a64258f32711154c73a21 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sun, 28 Dec 2025 14:51:09 +0800 Subject: [PATCH 47/70] Fixed test cases --- .../lib/v1/src/angular_compiler/analyzer/view/directive.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ngcompiler/lib/v1/src/angular_compiler/analyzer/view/directive.dart b/ngcompiler/lib/v1/src/angular_compiler/analyzer/view/directive.dart index ff8ad30f5b..8c14b93dd7 100644 --- a/ngcompiler/lib/v1/src/angular_compiler/analyzer/view/directive.dart +++ b/ngcompiler/lib/v1/src/angular_compiler/analyzer/view/directive.dart @@ -35,7 +35,8 @@ class DirectiveVisitor { /// Throws a [BuildError] if [element] is not an instance-level member. static void _assertInstance(Element element, String message) { //if (element is ClassMemberElement && !element.isStatic) { - if (element is PropertyAccessorElement && !element.isStatic) { + //if (element is PropertyAccessorElement && !element.isStatic) { + if (element is MethodElement && !element.isStatic) { return; } throw BuildError.forElement(element, message); From 115ef0c0cd27f9ca59d5ced90231fb459ad70993 Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 2 Jan 2026 06:48:21 +0800 Subject: [PATCH 48/70] Fixed errors --- _tests/lib/compiler.dart | 32 +- _tests/lib/matchers.dart | 8 +- _tests/test/common/directives/for_test.dart | 239 +- .../directives/ng_template_outlet_test.dart | 63 +- _tests/test/common/pipes/slice_pipe_test.dart | 29 +- _tests/test/compiler/analyzed_class_test.dart | 2 +- .../compiler/ast_template_parser_test.dart | 1924 +++++++++-------- .../expression_parser/parser_test.dart | 66 +- .../test/compiler/output/path_util_test.dart | 56 +- _tests/test/compiler/selector_test.dart | 439 ++-- .../errors_in_part_of_file_test.dart | 34 +- .../inject_optional_non_nullable_test.dart | 79 +- .../injectable_annotation_test.dart | 21 +- .../invalid_binding_test.dart | 6 +- .../invalid_change_detection_link_test.dart | 44 +- .../invalid_component_test.dart | 401 ++-- ...invalid_global_singleton_service_test.dart | 44 +- .../invalid_host_annotations_test.dart | 50 +- .../invalid_late_fields_test.dart | 46 +- .../invalid_uri_test.dart | 2 +- .../null_class_attribute_test.dart | 2 +- .../on_push_validation_test.dart | 86 +- .../unresolvable_annotation_test.dart | 108 +- .../unresolvable_export_test.dart | 71 +- .../unrevivable_const_test.dart | 51 +- .../unsupported_style_url_test.dart | 20 +- .../core/linker/component_selector_test.dart | 94 +- .../test/core/linker/ng_content_ref_test.dart | 73 +- _tests/test/core/view/projection_test.dart | 132 +- _tests/test/di/injector_test.dart | 64 +- .../test/integration/query_content_test.dart | 32 +- _tests/test/integration/query_view_test.dart | 106 +- ngcompiler/example/app.dart | 47 +- ngtest/README.md | 1 + 34 files changed, 2450 insertions(+), 2022 deletions(-) diff --git a/_tests/lib/compiler.dart b/_tests/lib/compiler.dart index 9a1f83e5c5..a13f7b26f8 100644 --- a/_tests/lib/compiler.dart +++ b/_tests/lib/compiler.dart @@ -2,7 +2,7 @@ import 'dart:io'; import 'package:build/build.dart'; import 'package:build/experiments.dart'; -import 'package:build_test/build_test.dart' hide testBuilder; +import 'package:build_test/build_test.dart'; import 'package:glob/glob.dart'; import 'package:logging/logging.dart'; import 'package:ngcompiler/v1/src/compiler/stylesheet_compiler/builder.dart'; @@ -11,7 +11,7 @@ import 'package:test/test.dart'; import 'package:ngcompiler/v2/context.dart'; /// A 'test' build process (similar to the normal one). -final Builder _testAngularBuilder1 = TemplateCompiler( +final Builder _testAngularBuilder = TemplateCompiler( BuilderOptions({}), null, null, @@ -65,7 +65,9 @@ Future _testBuilder( // Setup the readers/writers for assets. final sources = TestReaderWriter(rootPackage: rootPackage); final packages = await _packageAssets; - final reader = MultiAssetReader([sources, packages]); + + final reader = PackageAssetReader.forPackages([sources, packages]); + //final reader = MultiAssetReader([sources, packages]); // Sanity check. if (!await reader.canRead(AssetId(ngPackage, 'lib/angular.dart'))) { @@ -77,7 +79,8 @@ Future _testBuilder( final inputIds = runBuilderOn ?? []; sourceAssets.forEach((serializedId, contents) { final id = makeAssetId(serializedId); - sources.cacheStringAsset(id, contents); + //sources.cacheStringAsset(id, contents); + sources.writeAsString(id, contents); if (runBuilderOn == null) { inputIds.add(id); } @@ -91,7 +94,8 @@ Future _testBuilder( // TODO: Can we cache and re-use this once per test suite? final framework = packages.findAssets(_ngFiles, package: ngPackage); await for (final file in framework) { - sources.cacheStringAsset(file, await packages.readAsString(file)); + //sources.cacheStringAsset(file, await packages.readAsString(file)); + await sources.writeAsString(file, await packages.readAsString(file)); } final logger = Logger('_testBuilder'); @@ -102,14 +106,22 @@ Future _testBuilder( CompileContext.forTesting(), () { return withEnabledExperiments( - () => runBuilder( + () => testBuilder( builder, inputIds, - reader, - writer, - AnalyzerResolvers(), - logger: logger, + rootPackage: rootPackage, + readerWriter: writer, + //resolvers: AnalyzerResolvers(), + onLog: logger, ), + // () => runBuilder( + // builder, + // inputIds, + // reader, + // writer, + // AnalyzerResolvers(), + // logger: logger, + // ), ['non-nullable'], ); }, diff --git a/_tests/lib/matchers.dart b/_tests/lib/matchers.dart index e6a6b8389a..a73040396d 100644 --- a/_tests/lib/matchers.dart +++ b/_tests/lib/matchers.dart @@ -1,3 +1,5 @@ +library; + import 'dart:js_interop'; import 'package:test/test.dart'; @@ -30,8 +32,10 @@ class _HasTextContent extends Matcher { void _, void __, ) { - mismatchDescription.add('Text content of element: ' - '\'${_elementText(item)}\''); + mismatchDescription.add( + 'Text content of element: ' + '\'${_elementText(item)}\'', + ); return mismatchDescription; } } diff --git a/_tests/test/common/directives/for_test.dart b/_tests/test/common/directives/for_test.dart index 785c6267c6..e045793049 100644 --- a/_tests/test/common/directives/for_test.dart +++ b/_tests/test/common/directives/for_test.dart @@ -3,10 +3,10 @@ library; import 'dart:async'; import 'package:test/test.dart'; -import 'package:_tests/matchers.dart'; import 'package:ngdart/angular.dart'; import 'package:ngtest/angular_test.dart'; +import '../../../lib/matchers.dart'; import 'for_test.template.dart' as ng; void main() { @@ -75,27 +75,32 @@ void main() { expect(testFixture.rootElement, hasTextContent('2;1;3;')); }); - test('should reflect a mix of all changes (additions/removals/moves)', - () async { - var testBed = NgTestBed(ng.createNgForItemsTestFactory()); - var testFixture = await testBed.create(); - await testFixture.update((NgForItemsTest component) { - component.items = [0, 1, 2, 3, 4, 5]; - }); - await testFixture.update((NgForItemsTest component) { - component.items = [6, 2, 7, 0, 4, 8]; - }); - expect(testFixture.rootElement, hasTextContent('6;2;7;0;4;8;')); - }); + test( + 'should reflect a mix of all changes (additions/removals/moves)', + () async { + var testBed = NgTestBed( + ng.createNgForItemsTestFactory(), + ); + var testFixture = await testBed.create(); + await testFixture.update((NgForItemsTest component) { + component.items = [0, 1, 2, 3, 4, 5]; + }); + await testFixture.update((NgForItemsTest component) { + component.items = [6, 2, 7, 0, 4, 8]; + }); + expect(testFixture.rootElement, hasTextContent('6;2;7;0;4;8;')); + }, + ); test('should iterate over an array of objects', () async { - var testBed = - NgTestBed(ng.createNgForOptionsTestFactory()); + var testBed = NgTestBed( + ng.createNgForOptionsTestFactory(), + ); var testFixture = await testBed.create(); await testFixture.update((NgForOptionsTest component) { component.items = [ {'name': 'misko'}, - {'name': 'shyam'} + {'name': 'shyam'}, ]; }); expect(testFixture.rootElement, hasTextContent('misko;shyam;')); @@ -133,19 +138,26 @@ void main() { expect(testFixture.rootElement, hasTextContent('5;6;')); }); - test('should throw on non-iterable ref and suggest using an array', - () async { - final testBed = - NgTestBed(ng.createNgForOptionsTestFactory()); - final testFixture = await testBed.create(); - expect(testFixture.update((component) { - component.items = 'this is not iterable'; - }), throwsA(const TypeMatcher())); - }); + test( + 'should throw on non-iterable ref and suggest using an array', + () async { + final testBed = NgTestBed( + ng.createNgForOptionsTestFactory(), + ); + final testFixture = await testBed.create(); + expect( + testFixture.update((component) { + component.items = 'this is not iterable'; + }), + throwsA(const TypeMatcher()), + ); + }, + ); test('should work with duplicates', () async { var testBed = NgTestBed( - ng.createNgForObjectItemInstanceTestFactory()); + ng.createNgForObjectItemInstanceTestFactory(), + ); var testFixture = await testBed.create(); await testFixture.update((NgForObjectItemInstanceTest component) { var a = Foo('titleA'); @@ -155,52 +167,53 @@ void main() { }); test('should repeat over nested arrays', () async { - var testBed = - NgTestBed(ng.createNgForNestedTestFactory()); + var testBed = NgTestBed( + ng.createNgForNestedTestFactory(), + ); var testFixture = await testBed.create(); await testFixture.update((NgForNestedTest component) { component.items = [ ['a', 'b'], - ['c'] + ['c'], ]; }); expect(testFixture.rootElement, hasTextContent('a-2;b-2;|c-1;|')); await testFixture.update((NgForNestedTest component) { component.items = [ ['e'], - ['f', 'g'] + ['f', 'g'], ]; }); expect(testFixture.rootElement, hasTextContent('e-1;|f-2;g-2;|')); }); - test( - 'should repeat over nested arrays with no intermediate ' + test('should repeat over nested arrays with no intermediate ' 'element', () async { var testBed = NgTestBed( - ng.createNgForNestedTemplateTestFactory()); + ng.createNgForNestedTemplateTestFactory(), + ); var testFixture = await testBed.create(); await testFixture.update((NgForNestedTemplateTest component) { component.items = [ ['a', 'b'], - ['c'] + ['c'], ]; }); expect(testFixture.rootElement, hasTextContent('a-2;b-2;|c-1;|')); await testFixture.update((NgForNestedTemplateTest component) { component.items = [ ['e'], - ['f', 'g'] + ['f', 'g'], ]; }); expect(testFixture.rootElement, hasTextContent('e-1;|f-2;g-2;|')); }); - test( - 'should repeat over nested ngIf that are the last node in ' + test('should repeat over nested ngIf that are the last node in ' 'the ngFor temlate', () async { var testBed = NgTestBed( - ng.createNgForNestedLastIfTestFactory()); + ng.createNgForNestedLastIfTestFactory(), + ); var testFixture = await testBed.create(); var el = testFixture.rootElement; await testFixture.update((NgForNestedLastIfTest component) { @@ -234,8 +247,8 @@ void main() { test('should ignore extra spaces after a let assignment', () async { final fixture = await NgTestBed( - ng.createLetAssignmentSpacingTestFactory()) - .create(); + ng.createLetAssignmentSpacingTestFactory(), + ).create(); expect(fixture.text, '012'); }); @@ -293,7 +306,8 @@ void main() { test('should allow using a custom template', () async { var testBed = NgTestBed( - ng.createNgForCustomTemplateTestFactory()); + ng.createNgForCustomTemplateTestFactory(), + ); var testFixture = await testBed.create(); await testFixture.update((component) { component.child!.items = ['a', 'b', 'c']; @@ -303,7 +317,8 @@ void main() { test('should use a default template if a custom one is null', () async { var testBed = NgTestBed( - ng.createNgForCustomTemplateNullTestFactory()); + ng.createNgForCustomTemplateNullTestFactory(), + ); var testFixture = await testBed.create(); await testFixture.update((NgForCustomTemplateNullTest component) { component.child!.items = ['a', 'b', 'c']; @@ -311,11 +326,11 @@ void main() { expect(testFixture.text, hasTextContent('0: a;1: b;2: c;')); }); - test( - 'should use a custom template (precedence) when both default and a ' + test('should use a custom template (precedence) when both default and a ' 'custom one are present', () async { var testBed = NgTestBed( - ng.createNgForCustomTemplatePrecedenceTestFactory()); + ng.createNgForCustomTemplatePrecedenceTestFactory(), + ); var testFixture = await testBed.create(); await testFixture.update((NgForCustomTemplatePrecedenceTest component) { component.child!.items = ['a', 'b', 'c']; @@ -329,14 +344,14 @@ void main() { var testFixture = await testBed.create(); await testFixture.update((TrackByIdTest component) { component.items = [ - {'id': 'a', 'color': 'blue'} + {'id': 'a', 'color': 'blue'}, ]; }); var startElement = testFixture.rootElement.querySelector('p'); // Set items to new list instance (same trackBy identity). await testFixture.update((TrackByIdTest component) { component.items = [ - {'id': 'a', 'color': 'red'} + {'id': 'a', 'color': 'red'}, ]; }); var endElement = testFixture.rootElement.querySelector('p'); @@ -349,7 +364,7 @@ void main() { var testFixture = await testBed.create(); await testFixture.update((TrackByIdTest component) { component.items = [ - {'id': 'a', 'color': 'blue'} + {'id': 'a', 'color': 'blue'}, ]; }); var startElement = testFixture.rootElement.querySelector('p'); @@ -357,7 +372,7 @@ void main() { // Set items to new list instance (same trackBy identity). await testFixture.update((TrackByIdTest component) { component.items = [ - {'id': 'a', 'color': 'red'} + {'id': 'a', 'color': 'red'}, ]; }); expect(startElement, hasTextContent('{id: a, color: red}')); @@ -369,14 +384,14 @@ void main() { await testFixture.update((TrackByIdTest component) { component.items = [ {'id': 'a', 'color': 'blue'}, - {'id': 'b', 'color': 'yellow'} + {'id': 'b', 'color': 'yellow'}, ]; }); var startElements = testFixture.rootElement.querySelectorAll('p'); await testFixture.update((TrackByIdTest component) { component.items = [ {'id': 'b', 'color': 'red'}, - {'id': 'a', 'color': 'orange'} + {'id': 'a', 'color': 'orange'}, ]; }); var endElements = testFixture.rootElement.querySelectorAll('p'); @@ -384,11 +399,11 @@ void main() { expect(startElements.item(1), endElements.item(0)); }); - test( - 'should handle added and removed items properly when tracking ' + test('should handle added and removed items properly when tracking ' 'by index', () async { - var testBed = - NgTestBed(ng.createTrackByIndexTestFactory()); + var testBed = NgTestBed( + ng.createTrackByIndexTestFactory(), + ); var testFixture = await testBed.create(); await testFixture.update((TrackByIndexTest component) { component.items = ['a', 'b', 'c', 'd']; @@ -402,11 +417,11 @@ void main() { expect(testFixture.rootElement, hasTextContent('efh')); }); - test( - 'should remove by index when list item or ' + test('should remove by index when list item or ' 'it\'s hash changes', () async { var testBed = NgTestBed( - ng.createObjectEditorComponentFactory()); + ng.createObjectEditorComponentFactory(), + ); var testFixture = await testBed.create(); await testFixture.update((ObjectEditorComponent component) { component.entities = ['a1', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1', 'h1']; @@ -426,18 +441,18 @@ void main() { }); }); - test( - 'should remove item if hash code is changed before ' + test('should remove item if hash code is changed before ' 'removing element from list', () async { - var testBed = - NgTestBed(ng.createNgForHashcodeTestFactory()); + var testBed = NgTestBed( + ng.createNgForHashcodeTestFactory(), + ); var testFixture = await testBed.create(); var testItems = [ HashcodeTestItem(1), HashcodeTestItem(2), HashcodeTestItem(3), HashcodeTestItem(4), - HashcodeTestItem(5) + HashcodeTestItem(5), ]; await testFixture.update((NgForHashcodeTest component) { @@ -479,19 +494,15 @@ class BaseTestComponent { } } -@Directive( - selector: 'copy-me', -) +@Directive(selector: 'copy-me') class CopyMe {} @Component( selector: 'ngfor-items-test', - template: '
' + template: + '
' '{{item.toString()}};
', - directives: [ - CopyMe, - NgFor, - ], + directives: [CopyMe, NgFor], ) class NgForItemsTest extends BaseTestComponent { @ContentChild(TemplateRef) @@ -500,7 +511,8 @@ class NgForItemsTest extends BaseTestComponent { @Component( selector: 'ngfor-options-test', - template: '
  • {{item["name"]}};' + template: + '
    • {{item["name"]}};' '
    ', directives: [NgFor], ) @@ -533,12 +545,10 @@ class NgForNullTest extends NgForOptionsTest {} @Component( selector: 'ngfor-object-test', - template: '
    ' + template: + '
    ' '{{item.toString()}};
    ', - directives: [ - CopyMe, - NgFor, - ], + directives: [CopyMe, NgFor], ) class NgForObjectItemInstanceTest { List? items; @@ -553,7 +563,8 @@ class NgForObjectItemInstanceTest { @Component( selector: 'ng-for-nested', - template: '
    ' + template: + '
    ' '
    ' '
    ' '{{subitem}}-{{item.length}};' @@ -568,7 +579,8 @@ class NgForNestedTest { @Component( selector: 'ng-for-nested-template', - template: '
    ' + template: + '
    ' '