Skip to content

Commit d2dae56

Browse files
authored
Refactor: Update the parameters for DWDS.start (#2231)
1 parent 3078f48 commit d2dae56

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+781
-643
lines changed

dwds/CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
## 21.1.0-wip
1+
## 22.0.0-wip
2+
3+
**Breaking changes**
4+
5+
- Refactor the parameters to `Dwds.start`. - [#2231](https://github.com/dart-lang/webdev/pull/2231).
26

37
- Update the interface for ChromeProxyService.getSourceReport to match the VM service. - [#2235](https://github.com/dart-lang/webdev/pull/2235)
48

dwds/lib/asset_reader.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
// BSD-style license that can be found in the LICENSE file.
44

55
export 'src/readers/asset_reader.dart'
6-
show AssetReader, UrlEncoder, PackageUriMapper, stripLeadingSlashes;
6+
show AssetReader, PackageUriMapper, stripLeadingSlashes;

dwds/lib/config.dart

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// Copyright (c) 2023, 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+
export 'src/config/tool_configuration.dart'
6+
show
7+
AppMetadata,
8+
ToolConfiguration,
9+
UrlEncoder,
10+
DevToolsLauncher,
11+
DebugSettings;

dwds/lib/dart_web_debug_service.dart

Lines changed: 25 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,16 @@
55
import 'dart:async';
66

77
import 'package:dwds/data/build_result.dart';
8+
import 'package:dwds/src/config/tool_configuration.dart';
89
import 'package:dwds/src/connections/app_connection.dart';
910
import 'package:dwds/src/connections/debug_connection.dart';
1011
import 'package:dwds/src/events.dart';
1112
import 'package:dwds/src/handlers/dev_handler.dart';
1213
import 'package:dwds/src/handlers/injector.dart';
1314
import 'package:dwds/src/handlers/socket_connections.dart';
14-
import 'package:dwds/src/loaders/strategy.dart';
1515
import 'package:dwds/src/readers/asset_reader.dart';
1616
import 'package:dwds/src/servers/devtools.dart';
1717
import 'package:dwds/src/servers/extension_backend.dart';
18-
import 'package:dwds/src/services/expression_compiler.dart';
19-
import 'package:dwds/src/utilities/globals.dart';
2018
import 'package:logging/logging.dart';
2119
import 'package:shelf/shelf.dart';
2220
import 'package:sse/server/sse_handler.dart';
@@ -66,36 +64,16 @@ class Dwds {
6664
required AssetReader assetReader,
6765
required Stream<BuildResult> buildResults,
6866
required ConnectionProvider chromeConnection,
69-
required LoadStrategy loadStrategy,
70-
required bool enableDebugging,
71-
// TODO(annagrin): make expressionCompiler argument required
72-
// [issue 881](https://github.com/dart-lang/webdev/issues/881)
73-
ExpressionCompiler? expressionCompiler,
74-
bool enableDebugExtension = false,
75-
String hostname = 'localhost',
76-
bool useSseForDebugProxy = true,
77-
bool useSseForDebugBackend = true,
78-
bool useSseForInjectedClient = true,
79-
UrlEncoder? urlEncoder,
80-
bool spawnDds = true,
81-
// TODO(elliette): DevTools is inconsistently capitalized throughout this
82-
// file. Change all occurrences of devtools/Devtools to devTools/DevTools.
83-
bool enableDevtoolsLaunch = true,
84-
DevtoolsLauncher? devtoolsLauncher,
85-
bool launchDevToolsInNewWindow = true,
86-
bool emitDebugEvents = true,
87-
bool isInternalBuild = false,
88-
Future<bool> Function()? isFlutterApp,
67+
required ToolConfiguration toolConfiguration,
8968
}) async {
90-
globalLoadStrategy = loadStrategy;
91-
globalIsInternalBuild = isInternalBuild;
92-
isFlutterApp ??= () => Future.value(true);
93-
69+
globalToolConfiguration = toolConfiguration;
70+
final debugSettings = toolConfiguration.debugSettings;
71+
final appMetadata = toolConfiguration.appMetadata;
9472
DevTools? devTools;
9573
Future<String>? extensionUri;
9674
ExtensionBackend? extensionBackend;
97-
if (enableDebugExtension) {
98-
final handler = useSseForDebugBackend
75+
if (debugSettings.enableDebugExtension) {
76+
final handler = debugSettings.useSseForDebugBackend
9977
? SseSocketHandler(
10078
SseHandler(
10179
Uri.parse('/\$debug'),
@@ -108,58 +86,56 @@ class Dwds {
10886
)
10987
: WebSocketSocketHandler();
11088

111-
extensionBackend = await ExtensionBackend.start(handler, hostname);
89+
extensionBackend =
90+
await ExtensionBackend.start(handler, appMetadata.hostname);
11291
extensionUri = Future.value(
11392
Uri(
114-
scheme: useSseForDebugBackend ? 'http' : 'ws',
93+
scheme: debugSettings.useSseForDebugBackend ? 'http' : 'ws',
11594
host: extensionBackend.hostname,
11695
port: extensionBackend.port,
11796
path: r'$debug',
11897
).toString(),
11998
);
120-
if (urlEncoder != null) extensionUri = urlEncoder(await extensionUri);
99+
final urlEncoder = debugSettings.urlEncoder;
100+
if (urlEncoder != null) {
101+
extensionUri = urlEncoder(await extensionUri);
102+
}
121103
}
122104

123-
final serveDevTools = devtoolsLauncher != null;
124-
if (serveDevTools) {
125-
devTools = await devtoolsLauncher(hostname);
105+
final devToolsLauncher = debugSettings.devToolsLauncher;
106+
if (devToolsLauncher != null) {
107+
devTools = await devToolsLauncher(appMetadata.hostname);
126108
final uri =
127109
Uri(scheme: 'http', host: devTools.hostname, port: devTools.port);
128110
_logger.info('Serving DevTools at $uri\n');
129111
}
130112

131113
final injected = DwdsInjector(
132-
loadStrategy,
133-
useSseForInjectedClient: useSseForInjectedClient,
134114
extensionUri: extensionUri,
135-
enableDevtoolsLaunch: enableDevtoolsLaunch,
136-
emitDebugEvents: emitDebugEvents,
137-
isInternalBuild: isInternalBuild,
138-
isFlutterApp: isFlutterApp,
139115
);
140116

141117
final devHandler = DevHandler(
142118
chromeConnection,
143119
buildResults,
144120
devTools,
145121
assetReader,
146-
hostname,
122+
appMetadata.hostname,
147123
extensionBackend,
148-
urlEncoder,
149-
useSseForDebugProxy,
150-
useSseForInjectedClient,
151-
expressionCompiler,
124+
debugSettings.urlEncoder,
125+
debugSettings.useSseForDebugProxy,
126+
debugSettings.useSseForInjectedClient,
127+
debugSettings.expressionCompiler,
152128
injected,
153-
spawnDds,
154-
launchDevToolsInNewWindow,
129+
debugSettings.spawnDds,
130+
debugSettings.launchDevToolsInNewWindow,
155131
);
156132

157133
return Dwds._(
158134
injected.middleware,
159135
devTools,
160136
devHandler,
161137
assetReader,
162-
enableDebugging,
138+
debugSettings.enableDebugging,
163139
);
164140
}
165141
}

dwds/lib/dwds.dart

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,13 @@
33
// BSD-style license that can be found in the LICENSE file.
44

55
export 'dart_web_debug_service.dart' show Dwds, ConnectionProvider;
6+
export 'src/config/tool_configuration.dart'
7+
show
8+
AppMetadata,
9+
UrlEncoder,
10+
DevToolsLauncher,
11+
DebugSettings,
12+
ToolConfiguration;
613
export 'src/connections/app_connection.dart' show AppConnection;
714
export 'src/connections/debug_connection.dart' show DebugConnection;
815
export 'src/debugging/metadata/provider.dart'
@@ -17,8 +24,7 @@ export 'src/loaders/frontend_server_require.dart'
1724
export 'src/loaders/legacy.dart' show LegacyStrategy;
1825
export 'src/loaders/require.dart' show RequireStrategy;
1926
export 'src/loaders/strategy.dart' show LoadStrategy, ReloadConfiguration;
20-
export 'src/readers/asset_reader.dart'
21-
show AssetReader, UrlEncoder, PackageUriMapper;
27+
export 'src/readers/asset_reader.dart' show AssetReader, PackageUriMapper;
2228
export 'src/readers/frontend_server_asset_reader.dart'
2329
show FrontendServerAssetReader;
2430
export 'src/readers/proxy_server_asset_reader.dart' show ProxyServerAssetReader;
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
// Copyright (c) 2023, 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+
import 'package:dwds/src/loaders/strategy.dart';
6+
import 'package:dwds/src/servers/devtools.dart';
7+
import 'package:dwds/src/services/expression_compiler.dart';
8+
9+
/// Configuration about the app, debug settings, and file system.
10+
///
11+
/// This is set by the code runner and passed to DWDS on start up.
12+
class ToolConfiguration {
13+
final LoadStrategy loadStrategy;
14+
final DebugSettings debugSettings;
15+
final AppMetadata appMetadata;
16+
17+
ToolConfiguration({
18+
required this.loadStrategy,
19+
required this.debugSettings,
20+
required this.appMetadata,
21+
});
22+
}
23+
24+
/// The tool configuration for the connected app.
25+
///
26+
/// TODO(elliette): Consider making this final (would require updating tests
27+
/// that currently depend on changing the configuration between test cases).
28+
late ToolConfiguration _globalToolConfiguration;
29+
set globalToolConfiguration(ToolConfiguration configuration) =>
30+
_globalToolConfiguration = configuration;
31+
ToolConfiguration get globalToolConfiguration => _globalToolConfiguration;
32+
33+
/// Metadata for the connected app.
34+
///
35+
/// These are set by the code runner and passed to DWDS on start up.
36+
class AppMetadata {
37+
final String hostname;
38+
final bool isInternalBuild;
39+
Future<bool> Function() isFlutterApp;
40+
41+
AppMetadata({
42+
this.hostname = 'localhost',
43+
this.isInternalBuild = false,
44+
Future<bool> Function()? isFlutterApp,
45+
}) : isFlutterApp = isFlutterApp ?? (() => Future.value(true));
46+
}
47+
48+
typedef UrlEncoder = Future<String> Function(String url);
49+
50+
typedef DevToolsLauncher = Future<DevTools> Function(String hostname);
51+
52+
/// Debug settings for the connected app.
53+
///
54+
/// These are set by the code runner and passed to DWDS on start up.
55+
class DebugSettings {
56+
final bool enableDebugging;
57+
final bool enableDebugExtension;
58+
final bool useSseForDebugProxy;
59+
final bool useSseForDebugBackend;
60+
final bool useSseForInjectedClient;
61+
final bool spawnDds;
62+
final bool enableDevToolsLaunch;
63+
final bool launchDevToolsInNewWindow;
64+
final bool emitDebugEvents;
65+
final DevToolsLauncher? devToolsLauncher;
66+
final ExpressionCompiler? expressionCompiler;
67+
final UrlEncoder? urlEncoder;
68+
69+
DebugSettings({
70+
this.enableDebugging = true,
71+
this.enableDebugExtension = false,
72+
this.useSseForDebugProxy = true,
73+
this.useSseForDebugBackend = true,
74+
this.useSseForInjectedClient = true,
75+
this.spawnDds = true,
76+
this.enableDevToolsLaunch = true,
77+
this.launchDevToolsInNewWindow = true,
78+
this.emitDebugEvents = true,
79+
this.devToolsLauncher,
80+
this.expressionCompiler,
81+
this.urlEncoder,
82+
});
83+
}

dwds/lib/src/debugging/classes.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5+
import 'package:dwds/src/config/tool_configuration.dart';
56
import 'package:dwds/src/debugging/metadata/class.dart';
67
import 'package:dwds/src/services/chrome_debug_exception.dart';
78
import 'package:dwds/src/utilities/domain.dart';
8-
import 'package:dwds/src/utilities/globals.dart';
99
import 'package:dwds/src/utilities/shared.dart';
1010
import 'package:vm_service/vm_service.dart';
1111
import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart';
@@ -79,7 +79,7 @@ class ClassHelper extends Domain {
7979

8080
final expression = '''
8181
(function() {
82-
const sdk = ${globalLoadStrategy.loadModuleSnippet}('dart_sdk');
82+
const sdk = ${globalToolConfiguration.loadStrategy.loadModuleSnippet}('dart_sdk');
8383
const dart = sdk.dart;
8484
return dart.getClassMetadata('$libraryUri', '$className');
8585
})()

dwds/lib/src/debugging/debugger.dart

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

55
import 'dart:async';
66

7+
import 'package:dwds/src/config/tool_configuration.dart';
78
import 'package:dwds/src/debugging/dart_scope.dart';
89
import 'package:dwds/src/debugging/frame_computer.dart';
910
import 'package:dwds/src/debugging/location.dart';
@@ -12,7 +13,6 @@ import 'package:dwds/src/debugging/skip_list.dart';
1213
import 'package:dwds/src/services/chrome_debug_exception.dart';
1314
import 'package:dwds/src/utilities/dart_uri.dart';
1415
import 'package:dwds/src/utilities/domain.dart';
15-
import 'package:dwds/src/utilities/globals.dart';
1616
import 'package:dwds/src/utilities/objects.dart' show Property;
1717
import 'package:dwds/src/utilities/server.dart';
1818
import 'package:dwds/src/utilities/shared.dart';
@@ -585,7 +585,9 @@ class Debugger extends Domain {
585585
throw StateError('Stepping failed in script $scriptId');
586586
}
587587

588-
if (url.contains(globalLoadStrategy.loadLibrariesModule)) {
588+
if (url.contains(
589+
globalToolConfiguration.loadStrategy.loadLibrariesModule,
590+
)) {
589591
await _remoteDebugger.stepOut();
590592
return;
591593
} else if ((await _sourceLocation(e)) == null) {

dwds/lib/src/debugging/inspector.dart

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'dart:math' as math;
66

77
import 'package:async/async.dart';
88
import 'package:collection/collection.dart';
9+
import 'package:dwds/src/config/tool_configuration.dart';
910
import 'package:dwds/src/connections/app_connection.dart';
1011
import 'package:dwds/src/debugging/classes.dart';
1112
import 'package:dwds/src/debugging/debugger.dart';
@@ -18,7 +19,6 @@ import 'package:dwds/src/readers/asset_reader.dart';
1819
import 'package:dwds/src/utilities/conversions.dart';
1920
import 'package:dwds/src/utilities/dart_uri.dart';
2021
import 'package:dwds/src/utilities/domain.dart';
21-
import 'package:dwds/src/utilities/globals.dart';
2222
import 'package:dwds/src/utilities/objects.dart';
2323
import 'package:dwds/src/utilities/server.dart';
2424
import 'package:dwds/src/utilities/shared.dart';
@@ -195,7 +195,7 @@ class AppInspector implements AppInspectorInterface {
195195
Future<RemoteObject> loadField(RemoteObject receiver, String fieldName) {
196196
final load = '''
197197
function() {
198-
return ${globalLoadStrategy.loadModuleSnippet}("dart_sdk").dart.dloadRepl(this, "$fieldName");
198+
return ${globalToolConfiguration.loadStrategy.loadModuleSnippet}("dart_sdk").dart.dloadRepl(this, "$fieldName");
199199
}
200200
''';
201201
return jsCallFunctionOn(receiver, load, []);
@@ -217,7 +217,7 @@ class AppInspector implements AppInspectorInterface {
217217
final send = '''
218218
function () {
219219
if (!(this.__proto__)) { return 'Instance of PlainJavaScriptObject';}
220-
return ${globalLoadStrategy.loadModuleSnippet}("dart_sdk").dart.dsendRepl(this, "$methodName", arguments);
220+
return ${globalToolConfiguration.loadStrategy.loadModuleSnippet}("dart_sdk").dart.dsendRepl(this, "$methodName", arguments);
221221
}
222222
''';
223223
final remote = await jsCallFunctionOn(receiver, send, positionalArgs);
@@ -350,7 +350,7 @@ class AppInspector implements AppInspectorInterface {
350350
}
351351
final findLibrary = '''
352352
(function() {
353-
const sdk = ${globalLoadStrategy.loadModuleSnippet}('dart_sdk');
353+
const sdk = ${globalToolConfiguration.loadStrategy.loadModuleSnippet}('dart_sdk');
354354
const dart = sdk.dart;
355355
const library = dart.getLibrary('$libraryUri');
356356
if (!library) throw 'cannot find library for $libraryUri';
@@ -637,7 +637,7 @@ class AppInspector implements AppInspectorInterface {
637637
// want. To make those alternatives easier in JS, pass both count and end.
638638
final expression = '''
639639
function (offset, count) {
640-
const sdk = ${globalLoadStrategy.loadModuleSnippet}("dart_sdk");
640+
const sdk = ${globalToolConfiguration.loadStrategy.loadModuleSnippet}("dart_sdk");
641641
const dart = sdk.dart;
642642
return dart.getSubRange(this, offset, count);
643643
}
@@ -695,7 +695,7 @@ class AppInspector implements AppInspectorInterface {
695695
/// Returns the list of scripts refs cached.
696696
Future<List<ScriptRef>> _populateScriptCaches() {
697697
return _scriptCacheMemoizer.runOnce(() async {
698-
final scripts = await globalLoadStrategy
698+
final scripts = await globalToolConfiguration.loadStrategy
699699
.metadataProviderFor(appConnection.request.entrypointPath)
700700
.scripts;
701701
// For all the non-dart: libraries, find their parts and create scriptRefs
@@ -746,7 +746,7 @@ class AppInspector implements AppInspectorInterface {
746746
/// Runs an eval on the page to compute all existing registered extensions.
747747
Future<List<String>> _getExtensionRpcs() async {
748748
final expression =
749-
"${globalLoadStrategy.loadModuleSnippet}('dart_sdk').developer._extensions.keys.toList();";
749+
"${globalToolConfiguration.loadStrategy.loadModuleSnippet}('dart_sdk').developer._extensions.keys.toList();";
750750
final extensionRpcs = <String>[];
751751
final params = {
752752
'expression': expression,

0 commit comments

Comments
 (0)