Skip to content

Commit df020b5

Browse files
authored
Split up dwds.dart file (#1681)
1 parent 95ce058 commit df020b5

File tree

3 files changed

+180
-169
lines changed

3 files changed

+180
-169
lines changed

dwds/lib/dart_web_debug_service.dart

Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
// @dart = 2.9
6+
7+
import 'dart:async';
8+
9+
import 'package:logging/logging.dart';
10+
import 'package:meta/meta.dart';
11+
import 'package:shelf/shelf.dart';
12+
import 'package:sse/server/sse_handler.dart';
13+
import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart';
14+
15+
import 'data/build_result.dart';
16+
import 'src/connections/app_connection.dart';
17+
import 'src/connections/debug_connection.dart';
18+
import 'src/events.dart';
19+
import 'src/handlers/dev_handler.dart';
20+
import 'src/handlers/injector.dart';
21+
import 'src/handlers/socket_connections.dart';
22+
import 'src/loaders/strategy.dart';
23+
import 'src/readers/asset_reader.dart';
24+
import 'src/servers/devtools.dart';
25+
import 'src/servers/extension_backend.dart';
26+
import 'src/services/expression_compiler.dart';
27+
import 'src/utilities/sdk_configuration.dart';
28+
29+
typedef ConnectionProvider = Future<ChromeConnection> Function();
30+
31+
/// The Dart Web Debug Service.
32+
class Dwds {
33+
static final _logger = Logger('DWDS');
34+
final Middleware middleware;
35+
final Handler handler;
36+
final DevTools _devTools;
37+
final DevHandler _devHandler;
38+
final AssetReader _assetReader;
39+
final bool _enableDebugging;
40+
41+
Dwds._(
42+
this.middleware,
43+
this._devTools,
44+
this._devHandler,
45+
this._assetReader,
46+
this._enableDebugging,
47+
) : handler = _devHandler.handler;
48+
49+
Stream<AppConnection> get connectedApps => _devHandler.connectedApps;
50+
51+
Stream<DwdsEvent> get events => eventStream;
52+
53+
StreamController<DebugConnection> get extensionDebugConnections =>
54+
_devHandler.extensionDebugConnections;
55+
56+
Future<void> stop() async {
57+
await _devTools?.close();
58+
await _devHandler.close();
59+
await _assetReader.close();
60+
}
61+
62+
Future<DebugConnection> debugConnection(AppConnection appConnection) async {
63+
if (!_enableDebugging) throw StateError('Debugging is not enabled.');
64+
final appDebugServices = await _devHandler.loadAppServices(appConnection);
65+
await appDebugServices.chromeProxyService.isInitialized;
66+
return DebugConnection(appDebugServices);
67+
}
68+
69+
static Future<Dwds> start({
70+
@required AssetReader assetReader,
71+
@required Stream<BuildResult> buildResults,
72+
@required ConnectionProvider chromeConnection,
73+
@required LoadStrategy loadStrategy,
74+
@required bool enableDebugging,
75+
// TODO(annagrin): make expressionCompiler argument required
76+
// [issue 881](https://github.com/dart-lang/webdev/issues/881)
77+
ExpressionCompiler expressionCompiler,
78+
bool enableDebugExtension,
79+
String hostname,
80+
bool useSseForDebugProxy,
81+
bool useSseForDebugBackend,
82+
bool useSseForInjectedClient,
83+
UrlEncoder urlEncoder,
84+
bool spawnDds,
85+
// TODO(elliette): DevTools is inconsistently capitalized throughout this
86+
// file. Change all occurances of devtools/Devtools to devTools/DevTools.
87+
bool enableDevtoolsLaunch,
88+
DevtoolsLauncher devtoolsLauncher,
89+
bool launchDevToolsInNewWindow,
90+
SdkConfigurationProvider sdkConfigurationProvider,
91+
bool emitDebugEvents,
92+
}) async {
93+
hostname ??= 'localhost';
94+
enableDebugging ??= true;
95+
enableDebugExtension ??= false;
96+
useSseForDebugProxy ??= true;
97+
useSseForDebugBackend ??= true;
98+
useSseForInjectedClient ??= true;
99+
enableDevtoolsLaunch ??= true;
100+
launchDevToolsInNewWindow ??= true;
101+
spawnDds ??= true;
102+
globalLoadStrategy = loadStrategy;
103+
emitDebugEvents ??= true;
104+
105+
sdkConfigurationProvider ??= DefaultSdkConfigurationProvider();
106+
107+
DevTools devTools;
108+
Future<String> extensionUri;
109+
ExtensionBackend extensionBackend;
110+
if (enableDebugExtension) {
111+
final handler = useSseForDebugBackend
112+
? SseSocketHandler(SseHandler(Uri.parse('/\$debug'),
113+
// Proxy servers may actively kill long standing connections.
114+
// Allow for clients to reconnect in a short window. Making the
115+
// window too long may cause issues if the user closes a debug
116+
// session and initites a new one during the keepAlive window.
117+
keepAlive: const Duration(seconds: 5)))
118+
: WebSocketSocketHandler();
119+
120+
extensionBackend = await ExtensionBackend.start(handler, hostname);
121+
extensionUri = Future.value(Uri(
122+
scheme: useSseForDebugBackend ? 'http' : 'ws',
123+
host: extensionBackend.hostname,
124+
port: extensionBackend.port,
125+
path: r'$debug')
126+
.toString());
127+
if (urlEncoder != null) extensionUri = urlEncoder(await extensionUri);
128+
}
129+
130+
final serveDevTools = devtoolsLauncher != null;
131+
if (serveDevTools) {
132+
devTools = await devtoolsLauncher(hostname);
133+
final uri =
134+
Uri(scheme: 'http', host: devTools.hostname, port: devTools.port);
135+
_logger.info('Serving DevTools at $uri\n');
136+
}
137+
138+
final injected = DwdsInjector(
139+
loadStrategy,
140+
useSseForInjectedClient: useSseForInjectedClient,
141+
extensionUri: extensionUri,
142+
enableDevtoolsLaunch: enableDevtoolsLaunch,
143+
emitDebugEvents: emitDebugEvents,
144+
);
145+
146+
final devHandler = DevHandler(
147+
chromeConnection,
148+
buildResults,
149+
devTools,
150+
assetReader,
151+
loadStrategy,
152+
hostname,
153+
extensionBackend,
154+
urlEncoder,
155+
useSseForDebugProxy,
156+
useSseForInjectedClient,
157+
serveDevTools,
158+
expressionCompiler,
159+
injected,
160+
spawnDds,
161+
launchDevToolsInNewWindow,
162+
sdkConfigurationProvider,
163+
);
164+
165+
return Dwds._(
166+
injected.middleware,
167+
devTools,
168+
devHandler,
169+
assetReader,
170+
enableDebugging,
171+
);
172+
}
173+
}

dwds/lib/dwds.dart

Lines changed: 1 addition & 168 deletions
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,7 @@
44

55
// @dart = 2.9
66

7-
import 'dart:async';
8-
9-
import 'package:logging/logging.dart';
10-
import 'package:meta/meta.dart';
11-
import 'package:shelf/shelf.dart';
12-
import 'package:sse/server/sse_handler.dart';
13-
import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart';
14-
15-
import 'data/build_result.dart';
16-
import 'src/connections/app_connection.dart';
17-
import 'src/connections/debug_connection.dart';
18-
import 'src/events.dart';
19-
import 'src/handlers/dev_handler.dart';
20-
import 'src/handlers/injector.dart';
21-
import 'src/handlers/socket_connections.dart';
22-
import 'src/loaders/strategy.dart';
23-
import 'src/readers/asset_reader.dart';
24-
import 'src/servers/devtools.dart';
25-
import 'src/servers/extension_backend.dart';
26-
import 'src/services/expression_compiler.dart';
27-
import 'src/utilities/sdk_configuration.dart';
28-
7+
export 'dart_web_debug_service.dart' show Dwds, ConnectionProvider;
298
export 'src/connections/app_connection.dart' show AppConnection;
309
export 'src/connections/debug_connection.dart' show DebugConnection;
3110
export 'src/debugging/metadata/provider.dart'
@@ -52,149 +31,3 @@ export 'src/services/expression_compiler_service.dart'
5231
show ExpressionCompilerService;
5332
export 'src/utilities/sdk_configuration.dart'
5433
show SdkConfiguration, SdkConfigurationProvider;
55-
56-
typedef ConnectionProvider = Future<ChromeConnection> Function();
57-
58-
/// The Dart Web Debug Service.
59-
class Dwds {
60-
static final _logger = Logger('DWDS');
61-
final Middleware middleware;
62-
final Handler handler;
63-
final DevTools _devTools;
64-
final DevHandler _devHandler;
65-
final AssetReader _assetReader;
66-
final bool _enableDebugging;
67-
68-
Dwds._(
69-
this.middleware,
70-
this._devTools,
71-
this._devHandler,
72-
this._assetReader,
73-
this._enableDebugging,
74-
) : handler = _devHandler.handler;
75-
76-
Stream<AppConnection> get connectedApps => _devHandler.connectedApps;
77-
78-
Stream<DwdsEvent> get events => eventStream;
79-
80-
StreamController<DebugConnection> get extensionDebugConnections =>
81-
_devHandler.extensionDebugConnections;
82-
83-
Future<void> stop() async {
84-
await _devTools?.close();
85-
await _devHandler.close();
86-
await _assetReader.close();
87-
}
88-
89-
Future<DebugConnection> debugConnection(AppConnection appConnection) async {
90-
if (!_enableDebugging) throw StateError('Debugging is not enabled.');
91-
final appDebugServices = await _devHandler.loadAppServices(appConnection);
92-
await appDebugServices.chromeProxyService.isInitialized;
93-
return DebugConnection(appDebugServices);
94-
}
95-
96-
static Future<Dwds> start({
97-
@required AssetReader assetReader,
98-
@required Stream<BuildResult> buildResults,
99-
@required ConnectionProvider chromeConnection,
100-
@required LoadStrategy loadStrategy,
101-
@required bool enableDebugging,
102-
// TODO(annagrin): make expressionCompiler argument required
103-
// [issue 881](https://github.com/dart-lang/webdev/issues/881)
104-
ExpressionCompiler expressionCompiler,
105-
bool enableDebugExtension,
106-
String hostname,
107-
bool useSseForDebugProxy,
108-
bool useSseForDebugBackend,
109-
bool useSseForInjectedClient,
110-
UrlEncoder urlEncoder,
111-
bool spawnDds,
112-
// TODO(elliette): DevTools is inconsistently capitalized throughout this
113-
// file. Change all occurances of devtools/Devtools to devTools/DevTools.
114-
bool enableDevtoolsLaunch,
115-
DevtoolsLauncher devtoolsLauncher,
116-
bool launchDevToolsInNewWindow,
117-
SdkConfigurationProvider sdkConfigurationProvider,
118-
bool emitDebugEvents,
119-
}) async {
120-
hostname ??= 'localhost';
121-
enableDebugging ??= true;
122-
enableDebugExtension ??= false;
123-
useSseForDebugProxy ??= true;
124-
useSseForDebugBackend ??= true;
125-
useSseForInjectedClient ??= true;
126-
enableDevtoolsLaunch ??= true;
127-
launchDevToolsInNewWindow ??= true;
128-
spawnDds ??= true;
129-
globalLoadStrategy = loadStrategy;
130-
emitDebugEvents ??= true;
131-
132-
sdkConfigurationProvider ??= DefaultSdkConfigurationProvider();
133-
134-
DevTools devTools;
135-
Future<String> extensionUri;
136-
ExtensionBackend extensionBackend;
137-
if (enableDebugExtension) {
138-
final handler = useSseForDebugBackend
139-
? SseSocketHandler(SseHandler(Uri.parse('/\$debug'),
140-
// Proxy servers may actively kill long standing connections.
141-
// Allow for clients to reconnect in a short window. Making the
142-
// window too long may cause issues if the user closes a debug
143-
// session and initites a new one during the keepAlive window.
144-
keepAlive: const Duration(seconds: 5)))
145-
: WebSocketSocketHandler();
146-
147-
extensionBackend = await ExtensionBackend.start(handler, hostname);
148-
extensionUri = Future.value(Uri(
149-
scheme: useSseForDebugBackend ? 'http' : 'ws',
150-
host: extensionBackend.hostname,
151-
port: extensionBackend.port,
152-
path: r'$debug')
153-
.toString());
154-
if (urlEncoder != null) extensionUri = urlEncoder(await extensionUri);
155-
}
156-
157-
final serveDevTools = devtoolsLauncher != null;
158-
if (serveDevTools) {
159-
devTools = await devtoolsLauncher(hostname);
160-
final uri =
161-
Uri(scheme: 'http', host: devTools.hostname, port: devTools.port);
162-
_logger.info('Serving DevTools at $uri\n');
163-
}
164-
165-
final injected = DwdsInjector(
166-
loadStrategy,
167-
useSseForInjectedClient: useSseForInjectedClient,
168-
extensionUri: extensionUri,
169-
enableDevtoolsLaunch: enableDevtoolsLaunch,
170-
emitDebugEvents: emitDebugEvents,
171-
);
172-
173-
final devHandler = DevHandler(
174-
chromeConnection,
175-
buildResults,
176-
devTools,
177-
assetReader,
178-
loadStrategy,
179-
hostname,
180-
extensionBackend,
181-
urlEncoder,
182-
useSseForDebugProxy,
183-
useSseForInjectedClient,
184-
serveDevTools,
185-
expressionCompiler,
186-
injected,
187-
spawnDds,
188-
launchDevToolsInNewWindow,
189-
sdkConfigurationProvider,
190-
);
191-
192-
return Dwds._(
193-
injected.middleware,
194-
devTools,
195-
devHandler,
196-
assetReader,
197-
enableDebugging,
198-
);
199-
}
200-
}

dwds/test/fixtures/server.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,13 @@ import 'dart:io';
88

99
import 'package:build_daemon/data/build_status.dart' as daemon;
1010
import 'package:dds/devtools_server.dart';
11+
import 'package:dwds/asset_reader.dart';
12+
import 'package:dwds/dart_web_debug_service.dart';
1113
import 'package:dwds/data/build_result.dart';
12-
import 'package:dwds/dwds.dart';
14+
import 'package:dwds/expression_compiler.dart';
15+
import 'package:dwds/src/loaders/require.dart';
16+
import 'package:dwds/src/servers/devtools.dart';
17+
import 'package:dwds/src/services/expression_compiler_service.dart';
1318
import 'package:dwds/src/utilities/shared.dart';
1419
import 'package:logging/logging.dart';
1520
import 'package:shelf/shelf.dart';

0 commit comments

Comments
 (0)