From da600bacfeb06e9a53df6f9e12cd772e3bf3ad1e Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Wed, 29 May 2019 22:46:28 -0700 Subject: [PATCH] Reland - Wire up hot restart and incremental rebuilds for web (#33533) --- dev/automated_tests/pubspec.yaml | 6 +- dev/benchmarks/complex_layout/pubspec.yaml | 6 +- dev/benchmarks/macrobenchmarks/pubspec.yaml | 6 +- dev/benchmarks/microbenchmarks/pubspec.yaml | 8 +- dev/bots/pubspec.yaml | 6 +- dev/devicelab/pubspec.yaml | 8 +- .../android_semantics_testing/pubspec.yaml | 6 +- .../android_views/pubspec.yaml | 6 +- dev/integration_tests/channels/pubspec.yaml | 6 +- dev/integration_tests/codegen/pubspec.yaml | 6 +- .../external_ui/pubspec.yaml | 6 +- dev/integration_tests/flavors/pubspec.yaml | 6 +- .../image_loading/pubspec.yaml | 6 +- .../platform_interaction/pubspec.yaml | 6 +- dev/integration_tests/ui/pubspec.yaml | 8 +- dev/snippets/pubspec.yaml | 6 +- examples/catalog/pubspec.yaml | 6 +- examples/flutter_gallery/pubspec.yaml | 12 +- examples/platform_channel/pubspec.yaml | 6 +- examples/platform_channel_swift/pubspec.yaml | 4 +- examples/stocks/pubspec.yaml | 6 +- packages/flutter_driver/pubspec.yaml | 4 +- packages/flutter_tools/lib/executable.dart | 4 + packages/flutter_tools/lib/src/artifacts.dart | 7 + .../lib/src/build_runner/build_runner.dart | 4 +- .../web_compilation_delegate.dart | 231 ++++++++++++++++++ .../lib/src/commands/build_web.dart | 39 ++- .../flutter_tools/lib/src/commands/run.dart | 17 +- .../lib/src/commands/update_packages.dart | 1 + .../lib/src/resident_web_runner.dart | 161 ++++++++++++ .../lib/src/web/asset_server.dart | 186 ++++++++++++++ .../flutter_tools/lib/src/web/compile.dart | 52 +++- .../flutter_tools/lib/src/web/web_device.dart | 50 +++- packages/flutter_tools/pubspec.yaml | 13 +- .../test/forbidden_imports_test.dart | 4 +- .../flutter_tools/test/web/compile_test.dart | 2 +- .../flutter_tools/test/web/devices_test.dart | 6 +- .../pubspec.yaml | 4 +- 38 files changed, 804 insertions(+), 117 deletions(-) create mode 100644 packages/flutter_tools/lib/src/build_runner/web_compilation_delegate.dart create mode 100644 packages/flutter_tools/lib/src/resident_web_runner.dart create mode 100644 packages/flutter_tools/lib/src/web/asset_server.dart diff --git a/dev/automated_tests/pubspec.yaml b/dev/automated_tests/pubspec.yaml index f23f83fea1..c9c2dc5991 100644 --- a/dev/automated_tests/pubspec.yaml +++ b/dev/automated_tests/pubspec.yaml @@ -32,7 +32,7 @@ dependencies: kernel: 0.3.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" matcher: 0.12.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" meta: 1.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - mime: 0.9.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + mime: 0.9.6+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" multi_server_socket: 1.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" node_preamble: 1.4.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" package_config: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -59,10 +59,10 @@ dependencies: vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" watcher: 0.9.7+10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - web_socket_channel: 1.0.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + web_socket_channel: 1.0.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 2.1.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 02c2 +# PUBSPEC CHECKSUM: 5cc4 diff --git a/dev/benchmarks/complex_layout/pubspec.yaml b/dev/benchmarks/complex_layout/pubspec.yaml index 158e00d110..becfef6306 100644 --- a/dev/benchmarks/complex_layout/pubspec.yaml +++ b/dev/benchmarks/complex_layout/pubspec.yaml @@ -35,7 +35,7 @@ dependencies: typed_data: 1.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - web_socket_channel: 1.0.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + web_socket_channel: 1.0.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" dev_dependencies: flutter_test: @@ -56,7 +56,7 @@ dev_dependencies: js: 0.6.1+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" kernel: 0.3.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" matcher: 0.12.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - mime: 0.9.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + mime: 0.9.6+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" multi_server_socket: 1.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" node_preamble: 1.4.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" package_config: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -82,4 +82,4 @@ flutter: - packages/flutter_gallery_assets/people/square/ali.png - packages/flutter_gallery_assets/places/india_chettinad_silk_maker.png -# PUBSPEC CHECKSUM: 9c97 +# PUBSPEC CHECKSUM: f699 diff --git a/dev/benchmarks/macrobenchmarks/pubspec.yaml b/dev/benchmarks/macrobenchmarks/pubspec.yaml index 011267f580..f12d528aa5 100644 --- a/dev/benchmarks/macrobenchmarks/pubspec.yaml +++ b/dev/benchmarks/macrobenchmarks/pubspec.yaml @@ -35,7 +35,7 @@ dependencies: typed_data: 1.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - web_socket_channel: 1.0.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + web_socket_channel: 1.0.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" dev_dependencies: flutter_test: @@ -56,7 +56,7 @@ dev_dependencies: js: 0.6.1+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" kernel: 0.3.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" matcher: 0.12.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - mime: 0.9.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + mime: 0.9.6+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" multi_server_socket: 1.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" node_preamble: 1.4.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" package_config: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -79,4 +79,4 @@ dev_dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 9c97 +# PUBSPEC CHECKSUM: f699 diff --git a/dev/benchmarks/microbenchmarks/pubspec.yaml b/dev/benchmarks/microbenchmarks/pubspec.yaml index 377b94ef33..64dfdf336b 100644 --- a/dev/benchmarks/microbenchmarks/pubspec.yaml +++ b/dev/benchmarks/microbenchmarks/pubspec.yaml @@ -32,14 +32,14 @@ dependencies: http_multi_server: 2.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" intl: 0.15.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - intl_translation: 0.17.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + intl_translation: 0.17.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" io: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" isolate: 2.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" js: 0.6.1+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" json_rpc_2: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" kernel: 0.3.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" matcher: 0.12.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - mime: 0.9.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + mime: 0.9.6+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" multi_server_socket: 1.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" node_preamble: 1.4.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" package_config: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -67,10 +67,10 @@ dependencies: vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" watcher: 0.9.7+10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - web_socket_channel: 1.0.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + web_socket_channel: 1.0.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 2.1.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 1a24 +# PUBSPEC CHECKSUM: ce27 diff --git a/dev/bots/pubspec.yaml b/dev/bots/pubspec.yaml index ec83220de1..0fa88143f6 100644 --- a/dev/bots/pubspec.yaml +++ b/dev/bots/pubspec.yaml @@ -37,7 +37,7 @@ dependencies: json_rpc_2: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" kernel: 0.3.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" matcher: 0.12.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - mime: 0.9.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + mime: 0.9.6+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" multi_server_socket: 1.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" node_preamble: 1.4.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" package_config: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -60,11 +60,11 @@ dependencies: typed_data: 1.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" watcher: 0.9.7+10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - web_socket_channel: 1.0.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + web_socket_channel: 1.0.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 2.1.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" dev_dependencies: mockito: 4.0.0 test_api: 0.2.5 -# PUBSPEC CHECKSUM: 0d9b +# PUBSPEC CHECKSUM: 7f9d diff --git a/dev/devicelab/pubspec.yaml b/dev/devicelab/pubspec.yaml index 347ae3bf2c..db2cd556fd 100644 --- a/dev/devicelab/pubspec.yaml +++ b/dev/devicelab/pubspec.yaml @@ -10,7 +10,7 @@ environment: dependencies: args: 1.5.1 file: 5.0.8 - image: 2.1.0 + image: 2.1.3 meta: 1.1.6 path: 1.6.2 platform: 2.2.0 @@ -34,7 +34,7 @@ dependencies: stream_channel: 2.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" typed_data: 1.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - web_socket_channel: 1.0.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + web_socket_channel: 1.0.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" xml: 3.5.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" dev_dependencies: @@ -54,7 +54,7 @@ dev_dependencies: js: 0.6.1+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" kernel: 0.3.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" matcher: 0.12.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - mime: 0.9.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + mime: 0.9.6+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" multi_server_socket: 1.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" node_preamble: 1.4.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" package_config: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -73,4 +73,4 @@ dev_dependencies: watcher: 0.9.7+10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 2.1.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" -# PUBSPEC CHECKSUM: e013 +# PUBSPEC CHECKSUM: b018 diff --git a/dev/integration_tests/android_semantics_testing/pubspec.yaml b/dev/integration_tests/android_semantics_testing/pubspec.yaml index 3eacb5fc0e..571f789961 100644 --- a/dev/integration_tests/android_semantics_testing/pubspec.yaml +++ b/dev/integration_tests/android_semantics_testing/pubspec.yaml @@ -31,7 +31,7 @@ dependencies: kernel: 0.3.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" matcher: 0.12.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" meta: 1.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - mime: 0.9.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + mime: 0.9.6+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" multi_server_socket: 1.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" node_preamble: 1.4.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" package_config: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -57,10 +57,10 @@ dependencies: vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" watcher: 0.9.7+10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - web_socket_channel: 1.0.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + web_socket_channel: 1.0.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 2.1.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 960c +# PUBSPEC CHECKSUM: d60e diff --git a/dev/integration_tests/android_views/pubspec.yaml b/dev/integration_tests/android_views/pubspec.yaml index 02ff858159..bf9e305910 100644 --- a/dev/integration_tests/android_views/pubspec.yaml +++ b/dev/integration_tests/android_views/pubspec.yaml @@ -32,7 +32,7 @@ dependencies: typed_data: 1.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - web_socket_channel: 1.0.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + web_socket_channel: 1.0.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" dev_dependencies: flutter_test: @@ -53,7 +53,7 @@ dev_dependencies: js: 0.6.1+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" kernel: 0.3.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" matcher: 0.12.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - mime: 0.9.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + mime: 0.9.6+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" multi_server_socket: 1.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" node_preamble: 1.4.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" package_config: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -76,4 +76,4 @@ dev_dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 8dbc +# PUBSPEC CHECKSUM: 10be diff --git a/dev/integration_tests/channels/pubspec.yaml b/dev/integration_tests/channels/pubspec.yaml index 5fb21247ec..150a7685df 100644 --- a/dev/integration_tests/channels/pubspec.yaml +++ b/dev/integration_tests/channels/pubspec.yaml @@ -35,7 +35,7 @@ dependencies: kernel: 0.3.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" matcher: 0.12.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" meta: 1.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - mime: 0.9.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + mime: 0.9.6+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" multi_server_socket: 1.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" node_preamble: 1.4.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" package_config: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -61,10 +61,10 @@ dependencies: vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" watcher: 0.9.7+10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - web_socket_channel: 1.0.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + web_socket_channel: 1.0.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 2.1.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 960c +# PUBSPEC CHECKSUM: d60e diff --git a/dev/integration_tests/codegen/pubspec.yaml b/dev/integration_tests/codegen/pubspec.yaml index f9e6fcc3ce..229c3e4f0f 100644 --- a/dev/integration_tests/codegen/pubspec.yaml +++ b/dev/integration_tests/codegen/pubspec.yaml @@ -29,7 +29,7 @@ dependencies: typed_data: 1.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - web_socket_channel: 1.0.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + web_socket_channel: 1.0.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" dev_dependencies: test: 1.6.3 @@ -48,7 +48,7 @@ dev_dependencies: js: 0.6.1+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" kernel: 0.3.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" matcher: 0.12.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - mime: 0.9.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + mime: 0.9.6+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" multi_server_socket: 1.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" node_preamble: 1.4.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" package_config: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -74,4 +74,4 @@ builders: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 960c +# PUBSPEC CHECKSUM: d60e diff --git a/dev/integration_tests/external_ui/pubspec.yaml b/dev/integration_tests/external_ui/pubspec.yaml index 9c0a1ce8a8..17e47393b1 100644 --- a/dev/integration_tests/external_ui/pubspec.yaml +++ b/dev/integration_tests/external_ui/pubspec.yaml @@ -35,7 +35,7 @@ dependencies: kernel: 0.3.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" matcher: 0.12.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" meta: 1.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - mime: 0.9.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + mime: 0.9.6+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" multi_server_socket: 1.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" node_preamble: 1.4.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" package_config: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -61,10 +61,10 @@ dependencies: vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" watcher: 0.9.7+10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - web_socket_channel: 1.0.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + web_socket_channel: 1.0.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 2.1.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 960c +# PUBSPEC CHECKSUM: d60e diff --git a/dev/integration_tests/flavors/pubspec.yaml b/dev/integration_tests/flavors/pubspec.yaml index 51e4bfb446..8ef036a1f0 100644 --- a/dev/integration_tests/flavors/pubspec.yaml +++ b/dev/integration_tests/flavors/pubspec.yaml @@ -35,7 +35,7 @@ dependencies: kernel: 0.3.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" matcher: 0.12.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" meta: 1.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - mime: 0.9.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + mime: 0.9.6+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" multi_server_socket: 1.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" node_preamble: 1.4.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" package_config: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -61,10 +61,10 @@ dependencies: vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" watcher: 0.9.7+10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - web_socket_channel: 1.0.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + web_socket_channel: 1.0.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 2.1.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 960c +# PUBSPEC CHECKSUM: d60e diff --git a/dev/integration_tests/image_loading/pubspec.yaml b/dev/integration_tests/image_loading/pubspec.yaml index 694d165fae..09b3790fed 100644 --- a/dev/integration_tests/image_loading/pubspec.yaml +++ b/dev/integration_tests/image_loading/pubspec.yaml @@ -28,7 +28,7 @@ dependencies: kernel: 0.3.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" matcher: 0.12.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" meta: 1.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - mime: 0.9.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + mime: 0.9.6+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" multi_server_socket: 1.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" node_preamble: 1.4.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" package_config: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -54,10 +54,10 @@ dependencies: vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" watcher: 0.9.7+10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - web_socket_channel: 1.0.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + web_socket_channel: 1.0.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 2.1.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 631c +# PUBSPEC CHECKSUM: bf1e diff --git a/dev/integration_tests/platform_interaction/pubspec.yaml b/dev/integration_tests/platform_interaction/pubspec.yaml index 6f9a847369..8171255894 100644 --- a/dev/integration_tests/platform_interaction/pubspec.yaml +++ b/dev/integration_tests/platform_interaction/pubspec.yaml @@ -35,7 +35,7 @@ dependencies: kernel: 0.3.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" matcher: 0.12.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" meta: 1.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - mime: 0.9.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + mime: 0.9.6+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" multi_server_socket: 1.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" node_preamble: 1.4.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" package_config: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -61,10 +61,10 @@ dependencies: vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" watcher: 0.9.7+10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - web_socket_channel: 1.0.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + web_socket_channel: 1.0.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 2.1.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 960c +# PUBSPEC CHECKSUM: d60e diff --git a/dev/integration_tests/ui/pubspec.yaml b/dev/integration_tests/ui/pubspec.yaml index 31dd952e14..3454f9d59e 100644 --- a/dev/integration_tests/ui/pubspec.yaml +++ b/dev/integration_tests/ui/pubspec.yaml @@ -6,7 +6,7 @@ environment: sdk: ">=2.0.0-dev.68.0 <3.0.0" dependencies: - image: 2.1.0 + image: 2.1.3 flutter: sdk: flutter flutter_driver: @@ -37,7 +37,7 @@ dependencies: kernel: 0.3.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" matcher: 0.12.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" meta: 1.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - mime: 0.9.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + mime: 0.9.6+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" multi_server_socket: 1.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" node_preamble: 1.4.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" package_config: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -63,7 +63,7 @@ dependencies: vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" watcher: 0.9.7+10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - web_socket_channel: 1.0.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + web_socket_channel: 1.0.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" xml: 3.5.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 2.1.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -77,4 +77,4 @@ dev_dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: a123 +# PUBSPEC CHECKSUM: 1b28 diff --git a/dev/snippets/pubspec.yaml b/dev/snippets/pubspec.yaml index 0cc56e5a21..f0502917b2 100644 --- a/dev/snippets/pubspec.yaml +++ b/dev/snippets/pubspec.yaml @@ -50,7 +50,7 @@ dev_dependencies: js: 0.6.1+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" json_rpc_2: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" matcher: 0.12.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - mime: 0.9.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + mime: 0.9.6+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" multi_server_socket: 1.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" node_preamble: 1.4.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" package_resolver: 1.0.10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -67,7 +67,7 @@ dev_dependencies: test_api: 0.2.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" test_core: 0.2.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - web_socket_channel: 1.0.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + web_socket_channel: 1.0.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" executables: snippets: null @@ -98,4 +98,4 @@ executables: vm_service_client: 0.2.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" web_socket_channel: 1.0.9 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" -# PUBSPEC CHECKSUM: 312a +# PUBSPEC CHECKSUM: 6b2c diff --git a/examples/catalog/pubspec.yaml b/examples/catalog/pubspec.yaml index 56304f57a8..f5f77ec051 100644 --- a/examples/catalog/pubspec.yaml +++ b/examples/catalog/pubspec.yaml @@ -43,7 +43,7 @@ dev_dependencies: json_rpc_2: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" kernel: 0.3.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" matcher: 0.12.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - mime: 0.9.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + mime: 0.9.6+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" multi_server_socket: 1.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" node_preamble: 1.4.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" package_config: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -67,10 +67,10 @@ dev_dependencies: test_core: 0.2.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" watcher: 0.9.7+10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - web_socket_channel: 1.0.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + web_socket_channel: 1.0.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 2.1.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 05f6 +# PUBSPEC CHECKSUM: 5ff8 diff --git a/examples/flutter_gallery/pubspec.yaml b/examples/flutter_gallery/pubspec.yaml index f1f7d1622a..780e46c6ff 100644 --- a/examples/flutter_gallery/pubspec.yaml +++ b/examples/flutter_gallery/pubspec.yaml @@ -8,13 +8,13 @@ dependencies: flutter: sdk: flutter collection: 1.14.11 - device_info: 0.4.0+1 + device_info: 0.4.0+2 intl: 0.15.8 - connectivity: 0.4.3+1 + connectivity: 0.4.3+2 string_scanner: 1.0.4 url_launcher: 5.0.2 cupertino_icons: 0.1.2 - video_player: 0.10.1 + video_player: 0.10.1+2 scoped_model: 1.0.1 shrine_images: 1.1.2 @@ -57,7 +57,7 @@ dev_dependencies: json_rpc_2: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" kernel: 0.3.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" matcher: 0.12.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - mime: 0.9.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + mime: 0.9.6+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" multi_server_socket: 1.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" node_preamble: 1.4.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" package_config: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -80,7 +80,7 @@ dev_dependencies: test_core: 0.2.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" watcher: 0.9.7+10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - web_socket_channel: 1.0.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + web_socket_channel: 1.0.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 2.1.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" flutter: @@ -253,4 +253,4 @@ flutter: - asset: packages/flutter_gallery_assets/fonts/merriweather/Merriweather-Regular.ttf - asset: packages/flutter_gallery_assets/fonts/merriweather/Merriweather-Light.ttf -# PUBSPEC CHECKSUM: a9fe +# PUBSPEC CHECKSUM: 8760 diff --git a/examples/platform_channel/pubspec.yaml b/examples/platform_channel/pubspec.yaml index 57b2abe1cf..9433dfa85d 100644 --- a/examples/platform_channel/pubspec.yaml +++ b/examples/platform_channel/pubspec.yaml @@ -41,7 +41,7 @@ dev_dependencies: json_rpc_2: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" kernel: 0.3.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" matcher: 0.12.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - mime: 0.9.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + mime: 0.9.6+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" multi_server_socket: 1.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" node_preamble: 1.4.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" package_config: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -66,10 +66,10 @@ dev_dependencies: test_core: 0.2.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" watcher: 0.9.7+10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - web_socket_channel: 1.0.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + web_socket_channel: 1.0.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 2.1.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 05f6 +# PUBSPEC CHECKSUM: 5ff8 diff --git a/examples/platform_channel_swift/pubspec.yaml b/examples/platform_channel_swift/pubspec.yaml index 131eeb28f6..e2da99b87d 100644 --- a/examples/platform_channel_swift/pubspec.yaml +++ b/examples/platform_channel_swift/pubspec.yaml @@ -39,9 +39,9 @@ dev_dependencies: term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" test_api: 0.2.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - web_socket_channel: 1.0.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + web_socket_channel: 1.0.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" flutter: uses-material-design: true -# PUBSPEC CHECKSUM: ca3f +# PUBSPEC CHECKSUM: cb40 diff --git a/examples/stocks/pubspec.yaml b/examples/stocks/pubspec.yaml index 54aaaa37a5..e9aea00083 100644 --- a/examples/stocks/pubspec.yaml +++ b/examples/stocks/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: flutter_localizations: sdk: flutter intl: 0.15.8 - intl_translation: 0.17.4 + intl_translation: 0.17.5 http: 0.12.0+2 isolate: 2.0.2 @@ -57,9 +57,9 @@ dev_dependencies: stream_channel: 2.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" test_api: 0.2.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vm_service_client: 0.2.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - web_socket_channel: 1.0.12 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + web_socket_channel: 1.0.13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 36b5 +# PUBSPEC CHECKSUM: 63b7 diff --git a/packages/flutter_driver/pubspec.yaml b/packages/flutter_driver/pubspec.yaml index 8863dee2ec..eb36b72078 100644 --- a/packages/flutter_driver/pubspec.yaml +++ b/packages/flutter_driver/pubspec.yaml @@ -12,7 +12,7 @@ dependencies: json_rpc_2: 2.1.0 meta: 1.1.6 path: 1.6.2 - web_socket_channel: 1.0.12 + web_socket_channel: 1.0.13 vm_service_client: 0.2.6+2 flutter: sdk: flutter @@ -46,4 +46,4 @@ dev_dependencies: mockito: 4.0.0 quiver: 2.0.3 -# PUBSPEC CHECKSUM: b38c +# PUBSPEC CHECKSUM: b48d diff --git a/packages/flutter_tools/lib/executable.dart b/packages/flutter_tools/lib/executable.dart index 1e75509fdf..42c18082a7 100644 --- a/packages/flutter_tools/lib/executable.dart +++ b/packages/flutter_tools/lib/executable.dart @@ -10,6 +10,8 @@ import 'src/base/context.dart'; // avoid introducing the dependency into google3. Not all build* packages // are synced internally. import 'src/build_runner/build_runner.dart'; +import 'src/build_runner/web_compilation_delegate.dart'; + import 'src/codegen.dart'; import 'src/commands/analyze.dart'; import 'src/commands/attach.dart'; @@ -42,6 +44,7 @@ import 'src/commands/update_packages.dart'; import 'src/commands/upgrade.dart'; import 'src/commands/version.dart'; import 'src/runner/flutter_command.dart'; +import 'src/web/compile.dart'; /// Main entry point for commands. /// @@ -94,5 +97,6 @@ Future main(List args) async { // The build runner instance is not supported in google3 because // the build runner packages are not synced internally. CodeGenerator: () => const BuildRunner(), + WebCompilationProxy: () => BuildRunnerWebCompilationProxy(), }); } diff --git a/packages/flutter_tools/lib/src/artifacts.dart b/packages/flutter_tools/lib/src/artifacts.dart index 8dae706f76..259ba67548 100644 --- a/packages/flutter_tools/lib/src/artifacts.dart +++ b/packages/flutter_tools/lib/src/artifacts.dart @@ -28,6 +28,7 @@ enum Artifact { engineDartSdkPath, engineDartBinary, dart2jsSnapshot, + dartdevcSnapshot, kernelWorkerSnapshot, flutterWebSdk, } @@ -80,6 +81,8 @@ String _artifactToFileName(Artifact artifact, [ TargetPlatform platform, BuildMo return 'dart'; case Artifact.dart2jsSnapshot: return 'dart2js.dart.snapshot'; + case Artifact.dartdevcSnapshot: + return 'dartdevc.dart.snapshot'; case Artifact.kernelWorkerSnapshot: return 'kernel_worker.dart.snapshot'; } @@ -212,6 +215,8 @@ class CachedArtifacts extends Artifacts { return _getFlutterWebSdkPath(); case Artifact.dart2jsSnapshot: return fs.path.join(dartSdkPath, 'bin', 'snapshots', _artifactToFileName(artifact)); + case Artifact.dartdevcSnapshot: + return fs.path.join(dartSdkPath, 'bin', 'snapshots', _artifactToFileName(artifact)); case Artifact.kernelWorkerSnapshot: return fs.path.join(dartSdkPath, 'bin', 'snapshots', _artifactToFileName(artifact)); case Artifact.flutterMacOSFramework: @@ -304,6 +309,8 @@ class LocalEngineArtifacts extends Artifacts { return fs.path.join(_hostEngineOutPath, 'dart-sdk', 'bin', _artifactToFileName(artifact)); case Artifact.dart2jsSnapshot: return fs.path.join(_hostEngineOutPath, 'dart-sdk', 'bin', 'snapshots', _artifactToFileName(artifact)); + case Artifact.dartdevcSnapshot: + return fs.path.join(dartSdkPath, 'bin', 'snapshots', _artifactToFileName(artifact)); case Artifact.kernelWorkerSnapshot: return fs.path.join(_hostEngineOutPath, 'dart-sdk', 'bin', 'snapshots', _artifactToFileName(artifact)); } diff --git a/packages/flutter_tools/lib/src/build_runner/build_runner.dart b/packages/flutter_tools/lib/src/build_runner/build_runner.dart index 7c7ee329d0..de2d00d930 100644 --- a/packages/flutter_tools/lib/src/build_runner/build_runner.dart +++ b/packages/flutter_tools/lib/src/build_runner/build_runner.dart @@ -155,6 +155,7 @@ class BuildRunner extends CodeGenerator { .path; final Status status = logger.startProgress('starting build daemon...', timeout: null); BuildDaemonClient buildDaemonClient; + final String path = cache.getArtifactDirectory('web-sdk').path; try { final List command = [ engineDartBinaryPath, @@ -162,7 +163,8 @@ class BuildRunner extends CodeGenerator { buildSnapshot.path, 'daemon', '--skip-build-script-check', - '--delete-conflicting-outputs' + '--delete-conflicting-outputs', + '--define', 'build|ddc=flutter_sdk_dir=$path', ]; buildDaemonClient = await BuildDaemonClient.connect( flutterProject.directory.path, diff --git a/packages/flutter_tools/lib/src/build_runner/web_compilation_delegate.dart b/packages/flutter_tools/lib/src/build_runner/web_compilation_delegate.dart new file mode 100644 index 0000000000..913746b117 --- /dev/null +++ b/packages/flutter_tools/lib/src/build_runner/web_compilation_delegate.dart @@ -0,0 +1,231 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// ignore_for_file: implementation_imports +import 'package:build/build.dart'; +import 'package:build_config/build_config.dart'; +import 'package:build_modules/build_modules.dart'; +import 'package:build_modules/builders.dart'; +import 'package:build_modules/src/module_builder.dart'; +import 'package:build_modules/src/platform.dart'; +import 'package:build_runner_core/build_runner_core.dart' as core; +import 'package:build_runner_core/src/generate/build_impl.dart'; +import 'package:build_runner_core/src/generate/options.dart'; +import 'package:build_web_compilers/build_web_compilers.dart'; +import 'package:build_web_compilers/builders.dart'; +import 'package:build_web_compilers/src/dev_compiler_bootstrap.dart'; +import 'package:logging/logging.dart'; +import 'package:meta/meta.dart'; +import 'package:path/path.dart' as path; +import 'package:watcher/watcher.dart'; + +import '../artifacts.dart'; +import '../base/file_system.dart'; +import '../base/logger.dart'; +import '../compile.dart'; +import '../dart/package_map.dart'; +import '../globals.dart'; +import '../web/compile.dart'; + +const String ddcBootstrapExtension = '.dart.bootstrap.js'; +const String jsEntrypointExtension = '.dart.js'; +const String jsEntrypointSourceMapExtension = '.dart.js.map'; +const String jsEntrypointArchiveExtension = '.dart.js.tar.gz'; +const String digestsEntrypointExtension = '.digests'; +const String jsModuleErrorsExtension = '.ddc.js.errors'; +const String jsModuleExtension = '.ddc.js'; +const String jsSourceMapExtension = '.ddc.js.map'; + +final DartPlatform flutterWebPlatform = + DartPlatform.register('flutter_web', [ + 'async', + 'collection', + 'convert', + 'core', + 'developer', + 'html', + 'html_common', + 'indexed_db', + 'js', + 'js_util', + 'math', + 'svg', + 'typed_data', + 'web_audio', + 'web_gl', + 'web_sql', + '_internal', + // Flutter web specific libraries. + 'ui', + '_engine', + 'io', + 'isolate', +]); + +/// The build application to compile a flutter application to the web. +final List builders = [ + core.apply( + 'flutter_tools|module_library', + [moduleLibraryBuilder], + core.toAllPackages(), + isOptional: true, + hideOutput: true, + appliesBuilders: ['flutter_tools|module_cleanup']), + core.apply( + 'flutter_tools|ddc_modules', + [ + (BuilderOptions options) => MetaModuleBuilder(flutterWebPlatform), + (BuilderOptions options) => MetaModuleCleanBuilder(flutterWebPlatform), + (BuilderOptions options) => ModuleBuilder(flutterWebPlatform), + ], + core.toNoneByDefault(), + isOptional: true, + hideOutput: true, + appliesBuilders: ['flutter_tools|module_cleanup']), + core.apply( + 'flutter_tools|ddc', + [ + (BuilderOptions builderOptions) => KernelBuilder( + platformSdk: artifacts.getArtifactPath(Artifact.flutterWebSdk), + summaryOnly: true, + sdkKernelPath: path.join('kernel', 'flutter_ddc_sdk.dill'), + outputExtension: ddcKernelExtension, + platform: flutterWebPlatform, + librariesPath: 'libraries.json', + ), + (BuilderOptions builderOptions) => DevCompilerBuilder( + useIncrementalCompiler: false, + platform: flutterWebPlatform, + platformSdk: artifacts.getArtifactPath(Artifact.flutterWebSdk), + sdkKernelPath: path.join('kernel', 'flutter_ddc_sdk.dill'), + ), + ], + core.toAllPackages(), + isOptional: true, + hideOutput: true, + appliesBuilders: ['flutter_tools|ddc_modules']), + core.apply( + 'flutter_tools|entrypoint', + [ + (BuilderOptions options) => FlutterWebEntrypointBuilder( + options.config['target'] ?? 'lib/main.dart'), + ], + core.toRoot(), + hideOutput: true, + defaultGenerateFor: const InputSet( + include: [ + 'lib/**', + 'web/**', + ], + ), + ), + core.applyPostProcess('flutter_tools|module_cleanup', moduleCleanup, + defaultGenerateFor: const InputSet()) +]; + +/// A build_runner specific implementation of the [WebCompilationProxy]. +class BuildRunnerWebCompilationProxy extends WebCompilationProxy { + BuildRunnerWebCompilationProxy(); + + core.PackageGraph _packageGraph; + BuildImpl _builder; + PackageUriMapper _packageUriMapper; + + @override + Future initialize({ + @required Directory projectDirectory, + @required String target, + }) async { + // Override the generated output directory so this does not conflict with + // other build_runner output. + core.overrideGeneratedOutputDirectory('flutter_web'); + _packageUriMapper = PackageUriMapper( + path.absolute(target), PackageMap.globalPackagesPath, null, null); + _packageGraph = core.PackageGraph.forPath(projectDirectory.path); + final core.BuildEnvironment buildEnvironment = core.OverrideableEnvironment( + core.IOEnvironment(_packageGraph), onLog: (LogRecord record) { + if (record.level == Level.SEVERE || record.level == Level.SHOUT) { + printError(record.message); + } else { + printTrace(record.message); + } + }); + final LogSubscription logSubscription = LogSubscription( + buildEnvironment, + verbose: false, + logLevel: Level.FINE, + ); + final BuildOptions buildOptions = await BuildOptions.create( + logSubscription, + packageGraph: _packageGraph, + skipBuildScriptCheck: true, + trackPerformance: false, + deleteFilesByDefault: true, + ); + final Status status = + logger.startProgress('Compiling $target for the Web...', timeout: null); + try { + _builder = await BuildImpl.create( + buildOptions, + buildEnvironment, + builders, + >{ + 'flutter_tools|entrypoint': { + 'target': target, + } + }, + isReleaseBuild: false, + ); + await _builder.run(const {}); + } finally { + status.stop(); + } + } + + @override + Future invalidate({@required List inputs}) async { + final Status status = + logger.startProgress('Recompiling sources...', timeout: null); + final Map updates = {}; + for (Uri input in inputs) { + updates[AssetId.resolve( + _packageUriMapper.map(input.toFilePath()).toString())] = + ChangeType.MODIFY; + } + core.BuildResult result; + try { + result = await _builder.run(updates); + } finally { + status.cancel(); + } + return result.status == core.BuildStatus.success; + } +} + +/// A ddc-only entrypoint builder that respects the Flutter target flag. +class FlutterWebEntrypointBuilder implements Builder { + const FlutterWebEntrypointBuilder(this.target); + + final String target; + + @override + Map> get buildExtensions => const >{ + '.dart': [ + ddcBootstrapExtension, + jsEntrypointExtension, + jsEntrypointSourceMapExtension, + jsEntrypointArchiveExtension, + digestsEntrypointExtension, + ], + }; + + @override + Future build(BuildStep buildStep) async { + if (!buildStep.inputId.path.contains(target)) { + return; + } + log.info('building for target ${buildStep.inputId.path}'); + await bootstrapDdc(buildStep, platform: flutterWebPlatform); + } +} diff --git a/packages/flutter_tools/lib/src/commands/build_web.dart b/packages/flutter_tools/lib/src/commands/build_web.dart index 8a1fd9ecff..7ed5191f91 100644 --- a/packages/flutter_tools/lib/src/commands/build_web.dart +++ b/packages/flutter_tools/lib/src/commands/build_web.dart @@ -8,7 +8,8 @@ import '../base/common.dart'; import '../base/logger.dart'; import '../build_info.dart'; import '../globals.dart'; -import '../runner/flutter_command.dart' show DevelopmentArtifact, FlutterCommandResult; +import '../runner/flutter_command.dart' + show DevelopmentArtifact, FlutterCommandResult; import '../web/compile.dart'; import 'build.dart'; @@ -16,14 +17,15 @@ class BuildWebCommand extends BuildSubCommand { BuildWebCommand() { usesTargetOption(); usesPubOption(); - defaultBuildMode = BuildMode.release; + addBuildModeFlags(); } @override - Future> get requiredArtifacts async => const { - DevelopmentArtifact.universal, - DevelopmentArtifact.web, - }; + Future> get requiredArtifacts async => + const { + DevelopmentArtifact.universal, + DevelopmentArtifact.web, + }; @override final String name = 'web'; @@ -40,8 +42,29 @@ class BuildWebCommand extends BuildSubCommand { @override Future runCommand() async { final String target = argResults['target']; - final Status status = logger.startProgress('Compiling $target to JavaScript...', timeout: null); - final int result = await webCompiler.compile(target: target); + final Status status = logger + .startProgress('Compiling $target for the Web...', timeout: null); + final BuildInfo buildInfo = getBuildInfo(); + int result; + switch (buildInfo.mode) { + case BuildMode.release: + result = await webCompiler.compileDart2js(target: target); + break; + case BuildMode.profile: + result = await webCompiler.compileDart2js(target: target, minify: false); + break; + case BuildMode.debug: + throwToolExit( + 'Debug mode is not supported as a build target. Instead use ' + '"flutter run -d web".'); + break; + case BuildMode.dynamicProfile: + case BuildMode.dynamicRelease: + throwToolExit( + 'Build mode ${buildInfo.mode} is not supported with JavaScript ' + 'compilation'); + break; + } status.stop(); if (result == 1) { throwToolExit('Failed to compile $target to JavaScript.'); diff --git a/packages/flutter_tools/lib/src/commands/run.dart b/packages/flutter_tools/lib/src/commands/run.dart index 4e08dd165f..55292dcb32 100644 --- a/packages/flutter_tools/lib/src/commands/run.dart +++ b/packages/flutter_tools/lib/src/commands/run.dart @@ -15,11 +15,13 @@ import '../globals.dart'; import '../macos/xcode.dart'; import '../project.dart'; import '../resident_runner.dart'; +import '../resident_web_runner.dart'; import '../run_cold.dart'; import '../run_hot.dart'; import '../runner/flutter_command.dart'; import '../tracing.dart'; import '../usage.dart'; +import '../version.dart'; import 'daemon.dart'; abstract class RunCommandBase extends FlutterCommand with DeviceBasedDevelopmentArtifacts { @@ -397,10 +399,16 @@ class RunCommand extends RunCommandBase { ); flutterDevices.add(flutterDevice); } + // Only support "web mode" on non-stable branches with a single web device + // in a "hot mode". + final bool webMode = !FlutterVersion.instance.isStable + && devices.length == 1 + && await devices.single.targetPlatform == TargetPlatform.web + && hotMode; ResidentRunner runner; final String applicationBinaryPath = argResults['use-application-binary']; - if (hotMode) { + if (hotMode && !webMode) { runner = HotRunner( flutterDevices, target: targetFile, @@ -416,6 +424,13 @@ class RunCommand extends RunCommandBase { stayResident: stayResident, ipv6: ipv6, ); + } else if (webMode) { + runner = ResidentWebRunner( + flutterDevices, + target: targetFile, + flutterProject: flutterProject, + ipv6: ipv6, + ); } else { runner = ColdRunner( flutterDevices, diff --git a/packages/flutter_tools/lib/src/commands/update_packages.dart b/packages/flutter_tools/lib/src/commands/update_packages.dart index 2e33161e10..c3afb68932 100644 --- a/packages/flutter_tools/lib/src/commands/update_packages.dart +++ b/packages/flutter_tools/lib/src/commands/update_packages.dart @@ -23,6 +23,7 @@ import '../runner/flutter_command.dart'; const Map _kManuallyPinnedDependencies = { // Add pinned packages here. 'flutter_gallery_assets': '0.1.8', // See //examples/flutter_gallery/pubspec.yaml + 'build_daemon': '0.6.1', }; class UpdatePackagesCommand extends FlutterCommand { diff --git a/packages/flutter_tools/lib/src/resident_web_runner.dart b/packages/flutter_tools/lib/src/resident_web_runner.dart new file mode 100644 index 0000000000..1652628c72 --- /dev/null +++ b/packages/flutter_tools/lib/src/resident_web_runner.dart @@ -0,0 +1,161 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'dart:async'; + +import 'package:meta/meta.dart'; + +import 'asset.dart'; +import 'base/common.dart'; +import 'base/file_system.dart'; +import 'base/terminal.dart'; +import 'build_info.dart'; +import 'bundle.dart'; +import 'dart/package_map.dart'; +import 'device.dart'; +import 'globals.dart'; +import 'project.dart'; +import 'resident_runner.dart'; +import 'run_hot.dart'; +import 'web/asset_server.dart'; +import 'web/compile.dart'; +import 'web/web_device.dart'; + +/// A hot-runner which handles browser specific delegation. +class ResidentWebRunner extends ResidentRunner { + ResidentWebRunner( + List flutterDevices, { + String target, + @required this.flutterProject, + @required bool ipv6, + }) : super( + flutterDevices, + target: target, + usesTerminalUI: true, + stayResident: true, + saveCompilationTrace: false, + debuggingOptions: DebuggingOptions.enabled( + const BuildInfo(BuildMode.debug, ''), + ), + ipv6: ipv6, + ); + + WebAssetServer _server; + ProjectFileInvalidator projectFileInvalidator; + DateTime _lastCompiled; + final FlutterProject flutterProject; + + @override + Future attach( + {Completer connectionInfoCompleter, + Completer appStartedCompleter}) async { + connectionInfoCompleter?.complete(DebugConnectionInfo()); + setupTerminal(); + final int result = await waitForAppToFinish(); + await cleanupAtFinish(); + return result; + } + + @override + Future cleanupAfterSignal() { + return _server?.dispose(); + } + + @override + Future cleanupAtFinish() { + return _server?.dispose(); + } + + @override + Future handleTerminalCommand(String code) async { + if (code == 'R') { + // If hot restart is not supported for all devices, ignore the command. + if (!canHotRestart) { + return; + } + await restart(fullRestart: true); + } + } + + @override + void printHelp({bool details}) { + const String fire = '🔥'; + const String rawMessage = + ' To hot restart (and rebuild state), press "R".'; + final String message = terminal.color( + fire + terminal.bolden(rawMessage), + TerminalColor.red, + ); + printStatus(message); + const String quitMessage = 'To quit, press "q".'; + printStatus('For a more detailed help message, press "h". $quitMessage'); + } + + @override + Future run({ + Completer connectionInfoCompleter, + Completer appStartedCompleter, + String route, + bool shouldBuild = true, + }) async { + final FlutterProject currentProject = FlutterProject.current(); + if (!fs.isFileSync(mainPath)) { + String message = 'Tried to run $mainPath, but that file does not exist.'; + if (target == null) { + message += + '\nConsider using the -t option to specify the Dart file to start.'; + } + printError(message); + return 1; + } + // Start the web compiler and build the assets. + await webCompilationProxy.initialize( + projectDirectory: currentProject.directory, + target: target, + ); + _lastCompiled = DateTime.now(); + final AssetBundle assetBundle = AssetBundleFactory.instance.createBundle(); + final int build = await assetBundle.build(); + if (build != 0) { + throwToolExit('Error: Failed to build asset bundle'); + } + await writeBundle( + fs.directory(getAssetBuildDirectory()), assetBundle.entries); + + // Step 2: Start an HTTP server + _server = WebAssetServer(flutterProject, target, ipv6); + await _server.initialize(); + + // Step 3: Spawn an instance of Chrome and direct it to the created server. + await chromeLauncher.launch('http:localhost:${_server.port}'); + + // We don't support the debugging proxy yet. + appStartedCompleter?.complete(); + return attach( + connectionInfoCompleter: connectionInfoCompleter, + appStartedCompleter: appStartedCompleter, + ); + } + + @override + Future restart( + {bool fullRestart = false, + bool pauseAfterRestart = false, + String reason, + bool benchmarkMode = false}) async { + final List invalidatedSources = ProjectFileInvalidator.findInvalidated( + lastCompiled: _lastCompiled, + urisToMonitor: [ + for (FileSystemEntity entity in flutterProject.directory + .childDirectory('lib') + .listSync(recursive: true)) + if (entity is File && entity.path.endsWith('.dart')) entity.uri + ], // Add new class to track this for web. + packagesPath: PackageMap.globalPackagesPath, + ); + await webCompilationProxy.invalidate(inputs: invalidatedSources); + printStatus('Sources updated, refresh browser'); + return OperationResult.ok; + } +} diff --git a/packages/flutter_tools/lib/src/web/asset_server.dart b/packages/flutter_tools/lib/src/web/asset_server.dart new file mode 100644 index 0000000000..d4ad143b3c --- /dev/null +++ b/packages/flutter_tools/lib/src/web/asset_server.dart @@ -0,0 +1,186 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import '../artifacts.dart'; +import '../base/file_system.dart'; +import '../base/io.dart'; +import '../build_info.dart'; +import '../dart/package_map.dart'; +import '../globals.dart'; +import '../project.dart'; + +/// Handles mapping requests from a dartdevc compiled application to assets. +/// +/// The server will receive size different kinds of requests: +/// +/// 1. A request to assets in the form of `/assets/foo`. These are resolved +/// relative to `build/flutter_assets`. +/// 2. A request to a bootstrap file, such as `main.dart.js`. These are +/// resolved relative to the dart tool directory. +/// 3. A request to a JavaScript asset in the form of `/packages/foo/bar.js`. +/// These are looked up relative to the correct package root of the +/// dart_tool directory. +/// 4. A request to a Dart asset in the form of `/packages/foo/bar.dart` for +/// sourcemaps. These either need to be looked up from the application lib +/// directory (if the package is the same), or found in the .packages file. +/// 5. A request for a specific dart asset such as `stack_trace_mapper.js` or +/// `dart_sdk.js`. These have fixed locations determined by [artifacts]. +/// 6. A request to `/` which is translated into `index.html`. +class WebAssetServer { + WebAssetServer(this.flutterProject, this.target, this.ipv6); + + /// The flutter project corresponding to this application. + final FlutterProject flutterProject; + + /// The entrypoint we have compiled for. + final String target; + + /// Whether to serve from ipv6 localhost. + final bool ipv6; + + HttpServer _server; + Map _packages; + + /// The port being served, or null if not initialized. + int get port => _server?.port; + + /// Initialize the server. + /// + /// Throws a [StateError] if called multiple times. + Future initialize() async { + if (_server != null) { + throw StateError('Already serving.'); + } + _packages = PackageMap(PackageMap.globalPackagesPath).map; + _server = await HttpServer.bind( + ipv6 ? InternetAddress.loopbackIPv6 : InternetAddress.loopbackIPv4, 0) + ..autoCompress = false; + _server.listen(_onRequest); + } + + /// Clean up the server. + Future dispose() { + return _server.close(); + } + + /// An HTTP server which provides JavaScript and web assets to the browser. + Future _onRequest(HttpRequest request) async { + if (request.method != 'GET') { + request.response.statusCode = HttpStatus.forbidden; + await request.response.close(); + return; + } + final Uri uri = request.uri; + if (uri.path == '/') { + final File file = flutterProject.directory + .childDirectory('web') + .childFile('index.html'); + await _completeRequest(request, file, 'text/html'); + } else if (uri.path.contains('stack_trace_mapper')) { + final File file = fs.file(fs.path.join( + artifacts.getArtifactPath(Artifact.engineDartSdkPath), + 'lib', + 'dev_compiler', + 'web', + 'dart_stack_trace_mapper.js' + )); + await _completeRequest(request, file, 'text/javascript'); + } else if (uri.path.contains('require.js')) { + final File file = fs.file(fs.path.join( + artifacts.getArtifactPath(Artifact.engineDartSdkPath), + 'lib', + 'dev_compiler', + 'kernel', + 'amd', + 'require.js' + )); + await _completeRequest(request, file, 'text/javascript'); + } else if (uri.path.endsWith('main.dart.js')) { + final File file = fs.file(fs.path.join( + flutterProject.dartTool.path, + 'build', + 'flutter_web', + flutterProject.manifest.appName, + 'lib', + '${fs.path.basename(target)}.js', + )); + await _completeRequest(request, file, 'text/javascript'); + } else if (uri.path.endsWith('${fs.path.basename(target)}.bootstrap.js')) { + final File file = fs.file(fs.path.join( + flutterProject.dartTool.path, + 'build', + 'flutter_web', + flutterProject.manifest.appName, + 'lib', + '${fs.path.basename(target)}.bootstrap.js', + )); + await _completeRequest(request, file, 'text/javascript'); + } else if (uri.path.contains('dart_sdk')) { + final File file = fs.file(fs.path.join( + artifacts.getArtifactPath(Artifact.flutterWebSdk), + 'kernel', + 'amd', + 'dart_sdk.js', + )); + await _completeRequest(request, file, 'text/javascript'); + } else if (uri.path.startsWith('/packages') && uri.path.endsWith('.dart')) { + await _resolveDart(request); + } else if (uri.path.startsWith('/packages')) { + await _resolveJavascript(request); + } else if (uri.path.contains('assets')) { + await _resolveAsset(request); + } else { + request.response.statusCode = HttpStatus.notFound; + await request.response.close(); + } + } + + /// Resolves requests in the form of `/packages/foo/bar.js` or + /// `/packages/foo/bar.js.map`. + Future _resolveJavascript(HttpRequest request) async { + final List segments = fs.path.split(request.uri.path); + final String packageName = segments[2]; + final String filePath = fs.path.joinAll(segments.sublist(3)); + final Uri packageUri = flutterProject.dartTool + .childDirectory('build') + .childDirectory('flutter_web') + .childDirectory(packageName) + .childDirectory('lib') + .uri; + await _completeRequest( + request, fs.file(packageUri.resolve(filePath)), 'text/javascript'); + } + + /// Resolves requests in the form of `/packages/foo/bar.dart`. + Future _resolveDart(HttpRequest request) async { + final List segments = fs.path.split(request.uri.path); + final String packageName = segments[2]; + final String filePath = fs.path.joinAll(segments.sublist(3)); + final Uri packageUri = _packages[packageName]; + await _completeRequest(request, fs.file(packageUri.resolve(filePath))); + } + + /// Resolves requests in the form of `/assets/foo`. + Future _resolveAsset(HttpRequest request) async { + final String assetPath = request.uri.path.replaceFirst('/assets/', ''); + await _completeRequest( + request, fs.file(fs.path.join(getAssetBuildDirectory(), assetPath))); + } + + Future _completeRequest(HttpRequest request, File file, + [String contentType = 'text']) async { + printTrace('looking for ${request.uri} at ${file.path}'); + if (!file.existsSync()) { + request.response.statusCode = HttpStatus.notFound; + await request.response.close(); + return; + } + request.response.statusCode = HttpStatus.ok; + if (contentType != null) { + request.response.headers.add(HttpHeaders.contentTypeHeader, contentType); + } + await request.response.addStream(file.openRead()); + await request.response.close(); + } +} diff --git a/packages/flutter_tools/lib/src/web/compile.dart b/packages/flutter_tools/lib/src/web/compile.dart index 892b2ba818..b814d40779 100644 --- a/packages/flutter_tools/lib/src/web/compile.dart +++ b/packages/flutter_tools/lib/src/web/compile.dart @@ -17,7 +17,11 @@ import '../globals.dart'; /// The [WebCompiler] instance. WebCompiler get webCompiler => context.get(); -/// A wrapper around dart2js for web compilation. +/// The [WebCompilationProxy] instance. +WebCompilationProxy get webCompilationProxy => + context.get(); + +/// A wrapper around dart tools for web compilation. class WebCompiler { const WebCompiler(); @@ -25,11 +29,19 @@ class WebCompiler { /// /// `minify` controls whether minifaction of the source is enabled. Defaults to `true`. /// `enabledAssertions` controls whether assertions are enabled. Defaults to `false`. - Future compile({@required String target, bool minify = true, bool enabledAssertions = false}) async { - final String engineDartPath = artifacts.getArtifactPath(Artifact.engineDartBinary); - final String dart2jsPath = artifacts.getArtifactPath(Artifact.dart2jsSnapshot); - final String flutterWebSdkPath = artifacts.getArtifactPath(Artifact.flutterWebSdk); - final String librariesPath = fs.path.join(flutterWebSdkPath, 'libraries.json'); + Future compileDart2js({ + @required String target, + bool minify = true, + bool enabledAssertions = false, + }) async { + final String engineDartPath = + artifacts.getArtifactPath(Artifact.engineDartBinary); + final String dart2jsPath = + artifacts.getArtifactPath(Artifact.dart2jsSnapshot); + final String flutterWebSdkPath = + artifacts.getArtifactPath(Artifact.flutterWebSdk); + final String librariesPath = + fs.path.join(flutterWebSdkPath, 'libraries.json'); final Directory outputDir = fs.directory(getWebBuildDirectory()); if (!outputDir.existsSync()) { outputDir.createSync(recursive: true); @@ -38,6 +50,7 @@ class WebCompiler { if (!processManager.canRun(engineDartPath)) { throwToolExit('Unable to find Dart binary at $engineDartPath'); } + /// Compile Dart to JavaScript. final List command = [ engineDartPath, @@ -55,16 +68,35 @@ class WebCompiler { } printTrace(command.join(' ')); final Process result = await processManager.start(command); - result - .stdout + result.stdout .transform(utf8.decoder) .transform(const LineSplitter()) .listen(printStatus); - result - .stderr + result.stderr .transform(utf8.decoder) .transform(const LineSplitter()) .listen(printError); return result.exitCode; } } + +/// An indirection on web compilation. +/// +/// Avoids issues with syncing build_runner_core to other repos. +class WebCompilationProxy { + const WebCompilationProxy(); + + /// Initialize the web compiler output to `outputDirectory` from a project spawned at + /// `projectDirectory`. + Future initialize({ + @required Directory projectDirectory, + @required String target, + }) async { + throw UnimplementedError(); + } + + /// Invalidate the source files in `inputs` and recompile them to JavaScript. + Future invalidate({@required List inputs}) async { + throw UnimplementedError(); + } +} diff --git a/packages/flutter_tools/lib/src/web/web_device.dart b/packages/flutter_tools/lib/src/web/web_device.dart index 0c6905b77e..d8ce9ce3e5 100644 --- a/packages/flutter_tools/lib/src/web/web_device.dart +++ b/packages/flutter_tools/lib/src/web/web_device.dart @@ -50,10 +50,10 @@ class WebDevice extends Device { WebApplicationPackage _package; @override - bool get supportsHotReload => false; + bool get supportsHotReload => true; @override - bool get supportsHotRestart => false; + bool get supportsHotRestart => true; @override bool get supportsStartPaused => true; @@ -108,7 +108,7 @@ class WebDevice extends Device { bool ipv6 = false, }) async { final Status status = logger.startProgress('Compiling ${package.name} to JavaScript...', timeout: null); - final int result = await webCompiler.compile(target: mainPath, minify: false, enabledAssertions: true); + final int result = await webCompiler.compileDart2js(target: mainPath, minify: false, enabledAssertions: true); status.stop(); if (result != 0) { printError('Failed to compile ${package.name} to JavaScript'); @@ -125,7 +125,7 @@ class WebDevice extends Device { _server = await HttpServer.bind(InternetAddress.loopbackIPv4, 0); _server.listen(_basicAssetServer); printStatus('Serving assets from http:localhost:${_server.port}'); - await chromeLauncher.launch('http:localhost:${_server.port}'); + await chromeLauncher.launch('http://localhost:${_server.port}'); return LaunchResult.succeeded(observatoryUri: null); } @@ -201,22 +201,46 @@ class WebDevices extends PollingDeviceDiscovery { @override bool get supportsPlatform => flutterWebEnabled; - } +const String _klinuxExecutable = 'google-chrome'; +const String _kMacOSExecutable = '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'; +const String _kWindowsExecutable = r'Google\Chrome\Application\chrome.exe'; +final List _kWindowsPrefixes = [ + platform.environment['LOCALAPPDATA'], + platform.environment['PROGRAMFILES'], + platform.environment['PROGRAMFILES(X86)'], +]; + // Responsible for launching chrome with devtools configured. class ChromeLauncher { const ChromeLauncher(); - static const String _kMacosLocation = '/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome'; - - Future launch(String host) async { + /// Launch the chrome browser to a particular `host` page. + Future launch(String host) async { + String executable; if (platform.isMacOS) { - return processManager.start([ - _kMacosLocation, - host, - ]); + executable = _kMacOSExecutable; + } else if (platform.isLinux) { + executable = _klinuxExecutable; + } else if (platform.isWindows) { + final String filePath = _kWindowsPrefixes.firstWhere((String prefix) { + if (prefix == null) { + return false; + } + final String path = fs.path.join(prefix, _kWindowsExecutable); + return fs.file(path).existsSync(); + }, orElse: () => '.'); + executable = filePath; + } else { + throwToolExit('Platform ${platform.operatingSystem} is not supported.'); } - throw UnsupportedError('$platform is not supported'); + if (!fs.file(executable).existsSync()) { + throwToolExit('Chrome executable not found at $executable'); + } + return processManager.start([ + executable, + host, + ], mode: ProcessStartMode.detached); } } diff --git a/packages/flutter_tools/pubspec.yaml b/packages/flutter_tools/pubspec.yaml index ac57f13529..8521cedb8b 100644 --- a/packages/flutter_tools/pubspec.yaml +++ b/packages/flutter_tools/pubspec.yaml @@ -32,7 +32,7 @@ dependencies: stream_channel: 2.0.0 usage: 3.4.1 vm_service_client: 0.2.6+2 - web_socket_channel: 1.0.12 + web_socket_channel: 1.0.13 xml: 3.5.0 yaml: 2.1.15 flutter_goldens_client: @@ -49,8 +49,9 @@ dependencies: dart_style: 1.2.7 code_builder: 3.2.0 build: 1.1.4 - build_modules: 2.1.3 + build_modules: 2.2.0 build_daemon: 0.6.1 + build_web_compilers: 2.1.0 analyzer: 0.36.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -71,6 +72,7 @@ dependencies: http_multi_server: 2.0.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" io: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + js: 0.6.1+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" json_annotation: 2.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" kernel: 0.3.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" logging: 0.11.3+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -100,14 +102,13 @@ dev_dependencies: collection: 1.14.11 mockito: 4.0.0 file_testing: 2.1.0 - vm_service_lib: 3.15.1+2 + vm_service_lib: 3.17.0 test: 1.6.3 build_runner: 1.4.0 build_vm_compilers: 1.0.0 build_test: 0.10.7+3 - js: 0.6.1+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - mime: 0.9.6+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + mime: 0.9.6+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" multi_server_socket: 1.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" node_preamble: 1.4.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" shelf_packages_handler: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -117,4 +118,4 @@ dartdoc: # Exclude this package from the hosted API docs. nodoc: true -# PUBSPEC CHECKSUM: 087a +# PUBSPEC CHECKSUM: b34a diff --git a/packages/flutter_tools/test/forbidden_imports_test.dart b/packages/flutter_tools/test/forbidden_imports_test.dart index 7b8168be97..1eed76191d 100644 --- a/packages/flutter_tools/test/forbidden_imports_test.dart +++ b/packages/flutter_tools/test/forbidden_imports_test.dart @@ -12,7 +12,6 @@ void main() { test('no unauthorized imports of dart:io', () { final List whitelistedPaths = [ fs.path.join(flutterTools, 'lib', 'src', 'base', 'io.dart'), - fs.path.join(flutterTools, 'lib', 'src', 'build_runner', 'kernel_builder.dart'), ]; bool _isNotWhitelisted(FileSystemEntity entity) => whitelistedPaths.every((String path) => path != entity.path); @@ -35,7 +34,7 @@ void main() { }); test('no unauthorized imports of package:path', () { - final String whitelistedPath = fs.path.join(flutterTools, 'lib', 'src', 'build_runner', 'kernel_builder.dart'); + final String whitelistedPath = fs.path.join(flutterTools, 'lib', 'src', 'build_runner', 'web_compilation_delegate.dart'); for (String dirName in ['lib', 'bin', 'test']) { final Iterable files = fs.directory(fs.path.join(flutterTools, dirName)) .listSync(recursive: true) @@ -57,7 +56,6 @@ void main() { test('no unauthorized imports of dart:convert', () { final List whitelistedPaths = [ fs.path.join(flutterTools, 'lib', 'src', 'convert.dart'), - fs.path.join(flutterTools, 'lib', 'src', 'build_runner', 'kernel_builder.dart'), ]; bool _isNotWhitelisted(FileSystemEntity entity) => whitelistedPaths.every((String path) => path != entity.path); diff --git a/packages/flutter_tools/test/web/compile_test.dart b/packages/flutter_tools/test/web/compile_test.dart index 905dd83e27..edcb080b74 100644 --- a/packages/flutter_tools/test/web/compile_test.dart +++ b/packages/flutter_tools/test/web/compile_test.dart @@ -30,7 +30,7 @@ void main() { }); test('invokes dart2js with correct arguments', () => testBed.run(() async { - await webCompiler.compile(target: 'lib/main.dart'); + await webCompiler.compileDart2js(target: 'lib/main.dart'); verify(mockProcessManager.start([ 'bin/cache/dart-sdk/bin/dart', diff --git a/packages/flutter_tools/test/web/devices_test.dart b/packages/flutter_tools/test/web/devices_test.dart index 21ba7cf85a..77dac14e70 100644 --- a/packages/flutter_tools/test/web/devices_test.dart +++ b/packages/flutter_tools/test/web/devices_test.dart @@ -21,12 +21,14 @@ void main() { setUp(() async { flutterProject = FlutterProject.fromPath(fs.path.join(getFlutterRoot(), 'dev', 'integration_tests', 'web')); - when(mockWebCompiler.compile( + when(mockWebCompiler.compileDart2js( target: anyNamed('target'), minify: anyNamed('minify'), enabledAssertions: anyNamed('enabledAssertions'), )).thenAnswer((Invocation invocation) async => 0); - when(mockChromeLauncher.launch(any)).thenAnswer((Invocation invocation) async { }); + when(mockChromeLauncher.launch(any)).thenAnswer((Invocation invocation) async { + return null; + }); }); testUsingContext('can build and connect to chrome', () async { diff --git a/packages/fuchsia_remote_debug_protocol/pubspec.yaml b/packages/fuchsia_remote_debug_protocol/pubspec.yaml index 446541ebdf..67b6225b96 100644 --- a/packages/fuchsia_remote_debug_protocol/pubspec.yaml +++ b/packages/fuchsia_remote_debug_protocol/pubspec.yaml @@ -10,7 +10,7 @@ environment: dependencies: json_rpc_2: 2.1.0 process: 3.0.9 - web_socket_channel: 1.0.12 + web_socket_channel: 1.0.13 flutter_test: sdk: flutter flutter_driver: @@ -44,4 +44,4 @@ dependencies: dev_dependencies: mockito: 4.0.0 -# PUBSPEC CHECKSUM: b38c +# PUBSPEC CHECKSUM: b48d