Skip to content

Commit 699fd19

Browse files
Example of hoisting devtools dependency (#1303)
1 parent ffa619e commit 699fd19

File tree

12 files changed

+132
-103
lines changed

12 files changed

+132
-103
lines changed

dwds/CHANGELOG.md

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## 10.0.2-dev
1+
## 11.0.0-dev
22

33
- Support `vm_service` version `6.2.0`.
44
- Fix missing sdk libraries in `getObject()` calls.
@@ -9,6 +9,10 @@
99
- Fix intermittent failure caused by evaluation not waiting for dependencies
1010
to be updated.
1111

12+
**Breaking changes:**
13+
- `Dwds.start` no longer supports automatically injecting a devtools server. A `devtoolsLauncher`
14+
callback must be provided to support launching devtools.
15+
1216
## 10.0.1
1317

1418
- Support `webkit_inspection_protocol` version `^1.0.0`.
@@ -36,14 +40,14 @@
3640
## 9.0.0
3741

3842
- Fix an issue where relative worker paths provided to the `ExpressionCompilerService`
39-
would cause a crash.
43+
would cause a crash.
4044
- Fix an issue where the injected client connection could be lost while the application
4145
is paused.
4246
- Support keep-alive for debug service connections.
4347
- Depend on the latest `package:sse`.
4448
- Filter out DDC temporary variables from the variable inspection view.
4549
- Add `DwdsEvent`s around stepping and evaluation.
46-
- Send an event to the Dart Debug Extension that contains VM service protocol URI.
50+
- Send an event to the Dart Debug Extension that contains VM service protocol URI.
4751
- Depend on `package:vm_service` version `6.1.0+1`.
4852
- Update the `keepAlive` configs to prevent accidental reuse of a connection after stopping
4953
a debug session.
@@ -55,7 +59,7 @@
5559

5660
## 8.0.3
5761

58-
- Fix an issue where failed hot restarts would hang indefinitely.
62+
- Fix an issue where failed hot restarts would hang indefinitely.
5963

6064
## 8.0.2
6165

@@ -204,7 +208,7 @@
204208
- Update the `require_restarter` to rerun main after a hot restart to align with
205209
the legacy strategy. We therefore no longer send a `RunRequest` after a hot
206210
restart.
207-
- Compute only the required top frame for a paused event.
211+
- Compute only the required top frame for a paused event.
208212
- Change `streamListen` to return an `RPCError` / error code `-32601` for streams
209213
that are not handled.
210214
- Populate information about async Dart frames.

dwds/debug_extension/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ dependencies:
1515
pedantic: ^1.5.0
1616
pub_semver: ^2.0.0
1717
sse: ^3.8.1
18-
web_socket_channel: ^1.0.0
18+
web_socket_channel: ^2.0.0
1919

2020
dev_dependencies:
2121
webdev: ^2.0.0

dwds/lib/dwds.dart

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export 'src/readers/asset_reader.dart' show AssetReader;
4343
export 'src/readers/frontend_server_asset_reader.dart'
4444
show FrontendServerAssetReader;
4545
export 'src/readers/proxy_server_asset_reader.dart' show ProxyServerAssetReader;
46+
export 'src/servers/devtools.dart';
4647
export 'src/services/chrome_proxy_service.dart' show ChromeDebugException;
4748
export 'src/services/expression_compiler.dart'
4849
show ExpressionCompilationResult, ExpressionCompiler, ModuleInfo;
@@ -104,18 +105,17 @@ class Dwds {
104105
bool useSseForDebugProxy,
105106
bool useSseForDebugBackend,
106107
bool useSseForInjectedClient,
107-
bool serveDevTools,
108108
UrlEncoder urlEncoder,
109109
bool spawnDds,
110110
bool enableDevtoolsLaunch,
111+
DevtoolsLauncher devtoolsLauncher,
111112
}) async {
112113
hostname ??= 'localhost';
113114
enableDebugging ??= true;
114115
enableDebugExtension ??= false;
115116
useSseForDebugProxy ??= true;
116117
useSseForDebugBackend ??= true;
117118
useSseForInjectedClient ??= true;
118-
serveDevTools ??= true;
119119
enableDevtoolsLaunch ??= true;
120120
spawnDds ??= true;
121121
globalLoadStrategy = loadStrategy;
@@ -143,8 +143,9 @@ class Dwds {
143143
if (urlEncoder != null) extensionUri = await urlEncoder(extensionUri);
144144
}
145145

146+
var serveDevTools = devtoolsLauncher != null;
146147
if (serveDevTools) {
147-
devTools = await DevTools.start(hostname);
148+
devTools = await devtoolsLauncher(hostname);
148149
var uri =
149150
Uri(scheme: 'http', host: devTools.hostname, port: devTools.port);
150151
_logger.info('Serving DevTools at $uri\n');

dwds/lib/src/injected/client.js

Lines changed: 63 additions & 49 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dwds/lib/src/servers/devtools.dart

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import 'dart:io';
88

9-
import 'package:devtools_server/devtools_server.dart';
9+
typedef DevtoolsLauncher = Future<DevTools> Function(String hostname);
1010

1111
/// A server for Dart Devtools.
1212
class DevTools {
@@ -19,13 +19,7 @@ class DevTools {
1919
/// All subsequent calls to [close] will return this future.
2020
Future<void> _closed;
2121

22-
DevTools._(this.hostname, this.port, this._server);
22+
DevTools(this.hostname, this.port, this._server);
2323

2424
Future<void> close() => _closed ??= _server.close();
25-
26-
static Future<DevTools> start(String hostname) async {
27-
var server =
28-
await serveDevTools(hostname: hostname, enableStdinCommands: false);
29-
return DevTools._(server.address.host, server.port, server);
30-
}
3125
}

dwds/lib/src/version.dart

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dwds/pubspec.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: dwds
22
# Every time this changes you need to run `pub run build_runner build`.
3-
version: 10.0.2-dev
3+
version: 11.0.0-dev
44
homepage: https://github.com/dart-lang/webdev/tree/master/dwds
55
description: >-
66
A service that proxies between the Chrome debug protocol and the Dart VM
@@ -15,9 +15,6 @@ dependencies:
1515
built_value: '>=6.7.0 <9.0.0'
1616
crypto: '>=2.0.6 < 4.0.0'
1717
dds: ^1.4.1
18-
# devtools_server indirectly depends on devtools so keep this around.
19-
devtools: ^2.0.0
20-
devtools_server: ^2.0.0
2118
http: '>=0.12.0 < 0.14.0'
2219
http_multi_server: ^3.0.0
2320
logging: '>=0.11.3 < 2.0.0'
@@ -55,3 +52,6 @@ dev_dependencies:
5552
test: ^1.6.0
5653
uuid: '>=2.0.0 < 4.0.0'
5754
webdriver: '>=2.0.0 < 4.0.0'
55+
# devtools_server indirectly depends on devtools so keep this around.
56+
devtools: ^2.0.0
57+
devtools_server: ^2.0.0

dwds/test/fixtures/server.dart

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import 'package:http_multi_server/http_multi_server.dart';
1414
import 'package:shelf/shelf.dart';
1515
import 'package:shelf/shelf_io.dart' as shelf_io;
1616
import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart';
17+
import 'package:devtools_server/devtools_server.dart' as devtools_lancher;
1718

1819
Handler _interceptFavicon(Handler handler) {
1920
return (request) async {
@@ -94,21 +95,26 @@ class TestServer {
9495
});
9596

9697
var dwds = await Dwds.start(
97-
assetReader: assetReader,
98-
buildResults: filteredBuildResults,
99-
chromeConnection: chromeConnection,
100-
loadStrategy: strategy,
101-
spawnDds: spawnDds,
102-
serveDevTools: serveDevTools,
103-
enableDebugExtension: enableDebugExtension,
104-
enableDebugging: enableDebugging,
105-
useSseForDebugProxy: useSse,
106-
useSseForDebugBackend: useSse,
107-
useSseForInjectedClient: useSse,
108-
hostname: hostname,
109-
urlEncoder: urlEncoder,
110-
expressionCompiler: expressionCompiler,
111-
);
98+
assetReader: assetReader,
99+
buildResults: filteredBuildResults,
100+
chromeConnection: chromeConnection,
101+
loadStrategy: strategy,
102+
spawnDds: spawnDds,
103+
enableDebugExtension: enableDebugExtension,
104+
enableDebugging: enableDebugging,
105+
useSseForDebugProxy: useSse,
106+
useSseForDebugBackend: useSse,
107+
useSseForInjectedClient: useSse,
108+
hostname: hostname,
109+
urlEncoder: urlEncoder,
110+
expressionCompiler: expressionCompiler,
111+
devtoolsLauncher: serveDevTools
112+
? (hostname) async {
113+
var server = await devtools_lancher.serveDevTools(
114+
hostname: hostname, enableStdinCommands: false);
115+
return DevTools(server.address.host, server.port, server);
116+
}
117+
: null);
112118

113119
var server = await HttpMultiServer.bind('localhost', port);
114120
var cascade = Cascade();

frontend_server_common/pubspec.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@ environment:
77

88
dependencies:
99
file: ^6.0.0
10+
usage: ^4.0.0
1011
dwds:
1112
path: ../dwds

webdev/lib/src/serve/webdev_server.dart

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import 'package:http_multi_server/http_multi_server.dart';
1616
import 'package:shelf/shelf.dart';
1717
import 'package:shelf/shelf_io.dart' as shelf_io;
1818
import 'package:shelf_proxy/shelf_proxy.dart';
19+
import 'package:devtools_server/devtools_server.dart';
1920

2021
import '../command/configuration.dart';
2122
import 'chrome.dart';
@@ -128,21 +129,26 @@ class WebDevServer {
128129
options.configuration.verbose,
129130
);
130131
}
131-
132+
var shouldServeDevTools =
133+
options.configuration.debug || options.configuration.debugExtension;
132134
dwds = await Dwds.start(
133-
hostname: options.configuration.hostname,
134-
assetReader: assetReader,
135-
buildResults: filteredBuildResults,
136-
chromeConnection: () async =>
137-
(await Chrome.connectedInstance).chromeConnection,
138-
loadStrategy: loadStrategy,
139-
serveDevTools:
140-
options.configuration.debug || options.configuration.debugExtension,
141-
enableDebugExtension: options.configuration.debugExtension,
142-
enableDebugging: options.configuration.debug,
143-
spawnDds: !options.configuration.disableDds,
144-
expressionCompiler: ddcService,
145-
);
135+
hostname: options.configuration.hostname,
136+
assetReader: assetReader,
137+
buildResults: filteredBuildResults,
138+
chromeConnection: () async =>
139+
(await Chrome.connectedInstance).chromeConnection,
140+
loadStrategy: loadStrategy,
141+
enableDebugExtension: options.configuration.debugExtension,
142+
enableDebugging: options.configuration.debug,
143+
spawnDds: !options.configuration.disableDds,
144+
expressionCompiler: ddcService,
145+
devtoolsLauncher: shouldServeDevTools
146+
? (String hostname) async {
147+
var server = await serveDevTools(
148+
hostname: hostname, enableStdinCommands: false);
149+
return DevTools(server.address.host, server.port, server);
150+
}
151+
: null);
146152
pipeline = pipeline.addMiddleware(dwds.middleware);
147153
cascade = cascade.add(dwds.handler);
148154
cascade = cascade.add(assetHandler);

webdev/lib/src/version.dart

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

webdev/pubspec.yaml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: webdev
22
# Every time this changes you need to run `pub run build_runner build`.
3-
version: 2.7.2
3+
version: 2.7.3
44
# We should not depend on a dev SDK before publishing.
55
# publish_to: none
66
homepage: https://github.com/dart-lang/webdev
@@ -18,7 +18,7 @@ dependencies:
1818
browser_launcher: ^0.1.5
1919
crypto: ^3.0.0
2020
dds: ^1.4.1
21-
dwds: ^10.0.0
21+
dwds: ^11.0.0
2222
http: ^0.13.0
2323
http_multi_server: ^3.0.0
2424
io: ^0.3.2+1
@@ -36,6 +36,9 @@ dependencies:
3636
vm_service: '>=3.0.0 <7.0.0'
3737
webkit_inspection_protocol: '>=0.4.0 <2.0.0'
3838
yaml: ^3.0.0
39+
# devtools_server indirectly depends on devtools so keep this around.
40+
devtools: ^2.0.0
41+
devtools_server: ^2.0.0
3942

4043
dev_dependencies:
4144
build: ^2.0.0

0 commit comments

Comments
 (0)