in dwds/lib/dwds.dart [97:200]
static Future<Dwds> start({
@required AssetReader assetReader,
@required Stream<BuildResult> buildResults,
@required ConnectionProvider chromeConnection,
@required LoadStrategy loadStrategy,
@required bool enableDebugging,
// TODO(annagrin): make expressionCompiler argument required
// [issue 881](https://github.com/dart-lang/webdev/issues/881)
ExpressionCompiler expressionCompiler,
bool enableDebugExtension,
String hostname,
bool useSseForDebugProxy,
bool useSseForDebugBackend,
bool useSseForInjectedClient,
UrlEncoder urlEncoder,
bool spawnDds,
// TODO(elliette): DevTools is inconsistently capitalized throughout this
// file. Change all occurances of devtools/Devtools to devTools/DevTools.
bool enableDevtoolsLaunch,
DevtoolsLauncher devtoolsLauncher,
bool launchDevToolsInNewWindow,
Uri sdkDir,
Uri librariesPath,
bool emitDebugEvents,
}) async {
hostname ??= 'localhost';
enableDebugging ??= true;
enableDebugExtension ??= false;
useSseForDebugProxy ??= true;
useSseForDebugBackend ??= true;
useSseForInjectedClient ??= true;
enableDevtoolsLaunch ??= true;
launchDevToolsInNewWindow ??= true;
spawnDds ??= true;
globalLoadStrategy = loadStrategy;
emitDebugEvents ??= true;
await DartUri.initialize(sdkDir: sdkDir, librariesPath: librariesPath);
DevTools devTools;
Future<String> extensionUri;
ExtensionBackend extensionBackend;
if (enableDebugExtension) {
final handler = useSseForDebugBackend
? SseSocketHandler(SseHandler(Uri.parse('/\$debug'),
// Proxy servers may actively kill long standing connections.
// Allow for clients to reconnect in a short window. Making the
// window too long may cause issues if the user closes a debug
// session and initites a new one during the keepAlive window.
keepAlive: const Duration(seconds: 5)))
: WebSocketSocketHandler();
extensionBackend = await ExtensionBackend.start(handler, hostname);
extensionUri = Future.value(Uri(
scheme: useSseForDebugBackend ? 'http' : 'ws',
host: extensionBackend.hostname,
port: extensionBackend.port,
path: r'$debug')
.toString());
if (urlEncoder != null) extensionUri = urlEncoder(await extensionUri);
}
var serveDevTools = devtoolsLauncher != null;
if (serveDevTools) {
devTools = await devtoolsLauncher(hostname);
var uri =
Uri(scheme: 'http', host: devTools.hostname, port: devTools.port);
_logger.info('Serving DevTools at $uri\n');
}
var injected = DwdsInjector(
loadStrategy,
useSseForInjectedClient: useSseForInjectedClient,
extensionUri: extensionUri,
enableDevtoolsLaunch: enableDevtoolsLaunch,
emitDebugEvents: emitDebugEvents,
);
var devHandler = DevHandler(
chromeConnection,
buildResults,
devTools,
assetReader,
loadStrategy,
hostname,
extensionBackend,
urlEncoder,
useSseForDebugProxy,
useSseForInjectedClient,
serveDevTools,
expressionCompiler,
injected,
spawnDds,
launchDevToolsInNewWindow,
);
return Dwds._(
injected.middleware,
devTools,
devHandler,
assetReader,
enableDebugging,
);
}