From 51e96a47ee4a80d36e563d161d8f6079b0067097 Mon Sep 17 00:00:00 2001 From: Anna Gringauze Date: Thu, 16 Dec 2021 14:51:07 -0800 Subject: [PATCH] Fixed issues discovered in integration - some scenarios require libraries.json to be a different path from the SDK installation directory, update DartUri and ExpressionCompilerService to allow for that. - Fix a bug where `dartEmitDebugEvents` was set as a `String` instead of `bool` in the injected client. --- dwds/CHANGELOG.md | 6 +++++- dwds/lib/dwds.dart | 3 ++- dwds/lib/src/handlers/injector.dart | 2 +- dwds/lib/src/services/expression_compiler_service.dart | 10 +++++++--- dwds/lib/src/utilities/dart_uri.dart | 4 ++-- 5 files changed, 17 insertions(+), 8 deletions(-) diff --git a/dwds/CHANGELOG.md b/dwds/CHANGELOG.md index 57f765e7e..8941f9ea2 100644 --- a/dwds/CHANGELOG.md +++ b/dwds/CHANGELOG.md @@ -5,12 +5,16 @@ - Make `ExpressionCompilerService` infer location of `libraries.json` from `sdkDir` parameter. - Show an alert in the Dart Debug Extension for a multi-app scenario. +- Fix a bug where `dartEmitDebugEvents` was set as a `String` instead of `bool` + in the injected client. **Breaking changes:** -- Add `sdkDir` argument to `Dwds.start` to help file resolution for sdk uris. +- Add `sdkDir` and `librariesPath` arguments to `Dwds.start` to help file + resolution for sdk uris. - Add `emitDebugEvents` argument to `Dwds.start` to suppress emitting debug events from the injected client. +- Replace `sdkRoot` parameter by `sdkDir` in `ExpressionCompilerService`. ## 11.5.1 diff --git a/dwds/lib/dwds.dart b/dwds/lib/dwds.dart index d3d08f0f4..5454308c1 100644 --- a/dwds/lib/dwds.dart +++ b/dwds/lib/dwds.dart @@ -113,6 +113,7 @@ class Dwds { bool enableDevtoolsLaunch, DevtoolsLauncher devtoolsLauncher, Uri sdkDir, + Uri librariesPath, bool emitDebugEvents, }) async { hostname ??= 'localhost'; @@ -126,7 +127,7 @@ class Dwds { globalLoadStrategy = loadStrategy; emitDebugEvents ??= true; - await DartUri.initialize(sdkDir: sdkDir); + await DartUri.initialize(sdkDir: sdkDir, librariesPath: librariesPath); DevTools devTools; Future extensionUri; diff --git a/dwds/lib/src/handlers/injector.dart b/dwds/lib/src/handlers/injector.dart index 6e1268b02..954d65121 100644 --- a/dwds/lib/src/handlers/injector.dart +++ b/dwds/lib/src/handlers/injector.dart @@ -205,7 +205,7 @@ String _injectedClientSnippet( 'window.\$dwdsDevHandlerPath = "$devHandlerPath";\n' 'window.\$dwdsEnableDevtoolsLaunch = $enableDevtoolsLaunch;\n' 'window.\$dartEntrypointPath = "$entrypointPath";\n' - 'window.\$dartEmitDebugEvents = "$emitDebugEvents";\n' + 'window.\$dartEmitDebugEvents = $emitDebugEvents;\n' '${loadStrategy.loadClientSnippet(_clientScript)}'; if (extensionUri != null) { injectedBody += 'window.\$dartExtensionUri = "$extensionUri";\n'; diff --git a/dwds/lib/src/services/expression_compiler_service.dart b/dwds/lib/src/services/expression_compiler_service.dart index 76fe5cc35..719cdb027 100644 --- a/dwds/lib/src/services/expression_compiler_service.dart +++ b/dwds/lib/src/services/expression_compiler_service.dart @@ -237,6 +237,7 @@ class _Compiler { /// /// [_sdkDir] is the path to the SDK installation directory. /// [_workerPath] is the path to the DDC worker snapshot. +/// [_librariesPath] is the path to the libraries.json spec. /// /// Users need to stop the service by calling [stop]. class ExpressionCompilerService implements ExpressionCompiler { @@ -248,12 +249,14 @@ class ExpressionCompilerService implements ExpressionCompiler { final String _sdkDir; final String _workerPath; + final String _librariesPath; ExpressionCompilerService( this._address, this._port, this._assetHandler, this._verbose, - {String sdkDir, String workerPath}) + {String sdkDir, String workerPath, String librariesPath}) : _sdkDir = sdkDir, - _workerPath = workerPath; + _workerPath = workerPath, + _librariesPath = librariesPath; @override Future compileExpressionToJs( @@ -280,7 +283,8 @@ class ExpressionCompilerService implements ExpressionCompiler { var sdkSummaryPath = soundNullSafety ? p.join(sdkSummaryRoot, 'ddc_outline_sound.dill') : p.join(sdkSummaryRoot, 'ddc_sdk.dill'); - var librariesPath = p.join(sdkDir, 'lib', 'libraries.json'); + var librariesPath = + _librariesPath ?? p.join(sdkDir, 'lib', 'libraries.json'); var workerPath = _workerPath ?? p.join(binDir, 'snapshots', 'dartdevc.dart.snapshot'); diff --git a/dwds/lib/src/utilities/dart_uri.dart b/dwds/lib/src/utilities/dart_uri.dart index 4d270df7e..b9a3ab311 100644 --- a/dwds/lib/src/utilities/dart_uri.dart +++ b/dwds/lib/src/utilities/dart_uri.dart @@ -154,11 +154,11 @@ class DartUri { static String currentDirectoryUri = '${p.toUri(currentDirectory)}'; /// Record library and script uris to enable resolving library and script paths. - static Future initialize({Uri sdkDir}) async { + static Future initialize({Uri sdkDir, Uri librariesPath}) async { _sdkDir = sdkDir ?? p.toUri(p.dirname(p.dirname(Platform.resolvedExecutable))); - var librariesPath = + librariesPath ??= p.toUri(p.join(_sdkDir.toFilePath(), 'lib', 'libraries.json')); var packagesUri = p.toUri(p.join(currentDirectory, '.packages'));