From 4246bbc5e03d46584444c0c859d69ade1d8233ba Mon Sep 17 00:00:00 2001 From: Jessy Yameogo Date: Tue, 11 Feb 2025 10:34:14 -0500 Subject: [PATCH] Added method findPackageConfigFilePath to find the package_config.json file (#2587) * added findPackageConfigFilePath to find the package_config.json file * updated Changelog * updated strategy providers to allow clients to specify package config path * added util method for webdev to compute package config path and pass it to the load strategy * updated docstring * revert changes to webdev * Set DWDS version to 24.3.5 to prepare for release --- dwds/CHANGELOG.md | 3 +++ .../lib/src/loaders/build_runner_require.dart | 7 +++-- dwds/lib/src/loaders/ddc.dart | 4 +-- dwds/lib/src/loaders/ddc_library_bundle.dart | 4 +-- .../frontend_server_strategy_provider.dart | 27 ++++++++++++------- dwds/lib/src/loaders/require.dart | 5 ++-- dwds/lib/src/loaders/strategy.dart | 26 +++++++++++++++++- dwds/lib/src/version.dart | 2 +- dwds/pubspec.yaml | 2 +- 9 files changed, 59 insertions(+), 21 deletions(-) diff --git a/dwds/CHANGELOG.md b/dwds/CHANGELOG.md index 06e6ac816..9f24df85c 100644 --- a/dwds/CHANGELOG.md +++ b/dwds/CHANGELOG.md @@ -1,3 +1,6 @@ +## 24.3.5 +- Allow clients to specify the `packageConfigPath` in `LoadStrategy` class and associated providers. + ## 24.3.4 - Added support for some debugging APIs with the DDC library bundle format. - [#2566](https://github.com/dart-lang/webdev/issues/2566), [#2573](https://github.com/dart-lang/webdev/issues/2573) diff --git a/dwds/lib/src/loaders/build_runner_require.dart b/dwds/lib/src/loaders/build_runner_require.dart index 91dda5f26..f034a3fd8 100644 --- a/dwds/lib/src/loaders/build_runner_require.dart +++ b/dwds/lib/src/loaders/build_runner_require.dart @@ -22,6 +22,7 @@ class BuildRunnerRequireStrategyProvider { final ReloadConfiguration _configuration; final AssetReader _assetReader; final BuildSettings _buildSettings; + final String? _packageConfigPath; late final RequireStrategy _requireStrategy = RequireStrategy( _configuration, @@ -34,14 +35,16 @@ class BuildRunnerRequireStrategyProvider { _moduleInfoForProvider, _assetReader, _buildSettings, + packageConfigPath: _packageConfigPath, ); BuildRunnerRequireStrategyProvider( this._assetHandler, this._configuration, this._assetReader, - this._buildSettings, - ); + this._buildSettings, { + String? packageConfigPath, + }) : _packageConfigPath = packageConfigPath; RequireStrategy get strategy => _requireStrategy; diff --git a/dwds/lib/src/loaders/ddc.dart b/dwds/lib/src/loaders/ddc.dart index b3338afb5..384142388 100644 --- a/dwds/lib/src/loaders/ddc.dart +++ b/dwds/lib/src/loaders/ddc.dart @@ -141,9 +141,9 @@ class DdcStrategy extends LoadStrategy { this._moduleInfoForProvider, AssetReader assetReader, this._buildSettings, - this._g3RelativePath, + this._g3RelativePath, { String? packageConfigPath, - ) : super(assetReader, packageConfigPath: packageConfigPath); + }) : super(assetReader, packageConfigPath: packageConfigPath); @override Handler get handler => (request) async { diff --git a/dwds/lib/src/loaders/ddc_library_bundle.dart b/dwds/lib/src/loaders/ddc_library_bundle.dart index 54d0dac97..fb3fba017 100644 --- a/dwds/lib/src/loaders/ddc_library_bundle.dart +++ b/dwds/lib/src/loaders/ddc_library_bundle.dart @@ -111,9 +111,9 @@ class DdcLibraryBundleStrategy extends LoadStrategy { this._moduleInfoForProvider, AssetReader assetReader, this._buildSettings, - this._g3RelativePath, + this._g3RelativePath, { String? packageConfigPath, - ) : super(assetReader, packageConfigPath: packageConfigPath); + }) : super(assetReader, packageConfigPath: packageConfigPath); @override Handler get handler => (request) async { diff --git a/dwds/lib/src/loaders/frontend_server_strategy_provider.dart b/dwds/lib/src/loaders/frontend_server_strategy_provider.dart index d46362645..a12cf7d9e 100644 --- a/dwds/lib/src/loaders/frontend_server_strategy_provider.dart +++ b/dwds/lib/src/loaders/frontend_server_strategy_provider.dart @@ -18,14 +18,17 @@ abstract class FrontendServerStrategyProvider { final Future> Function() _digestsProvider; final String _basePath; final BuildSettings _buildSettings; + final String? _packageConfigPath; FrontendServerStrategyProvider( this._configuration, this._assetReader, this._packageUriMapper, this._digestsProvider, - this._buildSettings, - ) : _basePath = _assetReader.basePath; + this._buildSettings, { + String? packageConfigPath, + }) : _basePath = _assetReader.basePath, + _packageConfigPath = packageConfigPath; T get strategy; @@ -118,7 +121,7 @@ class FrontendServerDdcStrategyProvider _assetReader, _buildSettings, (String _) => null, - null, + packageConfigPath: _packageConfigPath, ); FrontendServerDdcStrategyProvider( @@ -126,8 +129,9 @@ class FrontendServerDdcStrategyProvider super._assetReader, super._packageUriMapper, super._digestsProvider, - super._buildSettings, - ); + super._buildSettings, { + super.packageConfigPath, + }); @override DdcStrategy get strategy => _ddcStrategy; @@ -150,7 +154,7 @@ class FrontendServerDdcLibraryBundleStrategyProvider _assetReader, _buildSettings, (String _) => null, - null, + packageConfigPath: _packageConfigPath, ); FrontendServerDdcLibraryBundleStrategyProvider( @@ -158,8 +162,9 @@ class FrontendServerDdcLibraryBundleStrategyProvider super._assetReader, super._packageUriMapper, super._digestsProvider, - super._buildSettings, - ); + super._buildSettings, { + super.packageConfigPath, + }); @override DdcLibraryBundleStrategy get strategy => _libraryBundleStrategy; @@ -179,6 +184,7 @@ class FrontendServerRequireStrategyProvider _moduleInfoForProvider, _assetReader, _buildSettings, + packageConfigPath: _packageConfigPath, ); FrontendServerRequireStrategyProvider( @@ -186,8 +192,9 @@ class FrontendServerRequireStrategyProvider super._assetReader, super._packageUriMapper, super._digestsProvider, - super._buildSettings, - ); + super._buildSettings, { + super.packageConfigPath, + }); @override RequireStrategy get strategy => _requireStrategy; diff --git a/dwds/lib/src/loaders/require.dart b/dwds/lib/src/loaders/require.dart index ba189174b..a78a58eaa 100644 --- a/dwds/lib/src/loaders/require.dart +++ b/dwds/lib/src/loaders/require.dart @@ -137,8 +137,9 @@ class RequireStrategy extends LoadStrategy { this._serverPathForAppUri, this._moduleInfoForProvider, AssetReader assetReader, - this._buildSettings, - ) : super(assetReader); + this._buildSettings, { + String? packageConfigPath, + }) : super(assetReader, packageConfigPath: packageConfigPath); @override Handler get handler => (request) async { diff --git a/dwds/lib/src/loaders/strategy.dart b/dwds/lib/src/loaders/strategy.dart index 1527e13d2..8c26a38c5 100644 --- a/dwds/lib/src/loaders/strategy.dart +++ b/dwds/lib/src/loaders/strategy.dart @@ -2,6 +2,7 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. +import 'dart:io'; import 'dart:typed_data'; import 'package:dwds/src/debugging/dart_runtime_debugger.dart'; @@ -20,7 +21,7 @@ abstract class LoadStrategy { LoadStrategy( this._assetReader, { String? packageConfigPath, - }) : _packageConfigPath = packageConfigPath; + }) : _packageConfigPath = packageConfigPath ?? _findPackageConfigFilePath(); /// The ID for this strategy. /// @@ -83,6 +84,29 @@ abstract class LoadStrategy { 'package_config.json', ); + /// Returns the absolute file path of the `package_config.json` file in the `.dart_tool` + /// directory, searching recursively from the current directory hierarchy. + static String? _findPackageConfigFilePath() { + var candidateDir = Directory(DartUri.currentDirectory).absolute; + + while (true) { + final candidatePackageConfigFile = + File(p.join(candidateDir.path, '.dart_tool', 'package_config.json')); + + if (candidatePackageConfigFile.existsSync()) { + return candidatePackageConfigFile.path; + } + + final parentDir = candidateDir.parent; + if (parentDir.path == candidateDir.path) { + // We've reached the root directory + return null; + } + + candidateDir = parentDir; + } + } + /// Returns the bootstrap required for this [LoadStrategy]. /// /// The bootstrap is appended to the end of the entry point module. diff --git a/dwds/lib/src/version.dart b/dwds/lib/src/version.dart index 27fbeb7b9..a432a47cf 100644 --- a/dwds/lib/src/version.dart +++ b/dwds/lib/src/version.dart @@ -1,2 +1,2 @@ // Generated code. Do not modify. -const packageVersion = '24.3.4'; +const packageVersion = '24.3.5'; diff --git a/dwds/pubspec.yaml b/dwds/pubspec.yaml index 4c8257ca0..423146af7 100644 --- a/dwds/pubspec.yaml +++ b/dwds/pubspec.yaml @@ -1,6 +1,6 @@ name: dwds # Every time this changes you need to run `dart run build_runner build`. -version: 24.3.4 +version: 24.3.5 description: >- A service that proxies between the Chrome debug protocol and the Dart VM service protocol.