55import 'package:dwds/src/debugging/metadata/provider.dart' ;
66import 'package:dwds/src/readers/asset_reader.dart' ;
77import 'package:dwds/src/services/expression_compiler.dart' ;
8+ import 'package:dwds/src/utilities/dart_uri.dart' ;
9+ import 'package:path/path.dart' as p;
810import 'package:shelf/shelf.dart' ;
911
1012late LoadStrategy _globalLoadStrategy;
@@ -16,6 +18,7 @@ LoadStrategy get globalLoadStrategy => _globalLoadStrategy;
1618abstract class LoadStrategy {
1719 final AssetReader _assetReader;
1820 final _providers = < String , MetadataProvider > {};
21+ String ? _packageConfigPath;
1922
2023 LoadStrategy (this ._assetReader);
2124
@@ -103,6 +106,29 @@ abstract class LoadStrategy {
103106 /// an app URI.
104107 String ? serverPathForAppUri (String appUri);
105108
109+ /// Returns the absolute path to the app's package config, determined by the
110+ /// app's [entrypoint] path.
111+ ///
112+ /// Example:
113+ ///
114+ /// main_module.bootstrap.js
115+ /// -> /Users/john_doe/my_dart_app/.dart_tool/package_config.json
116+ ///
117+ String ? packageConfigLocator (String entrypoint);
118+
119+ /// The absolute path to the app's package config, or null if not provided by
120+ /// [packageConfigLocator] .
121+ String get packageConfigPath {
122+ return _packageConfigPath ?? _defaultPackageConfigPath;
123+ }
124+
125+ /// The default package config path, if none is provided by the load strategy.
126+ String get _defaultPackageConfigPath => p.join (
127+ DartUri .currentDirectory,
128+ '.dart_tool' ,
129+ 'package_config.json' ,
130+ );
131+
106132 /// Returns the [MetadataProvider] for the application located at the provided
107133 /// [entrypoint] .
108134 MetadataProvider metadataProviderFor (String entrypoint) {
@@ -117,6 +143,7 @@ abstract class LoadStrategy {
117143 /// provided [entrypoint] .
118144 void trackEntrypoint (String entrypoint) {
119145 final metadataProvider = MetadataProvider (entrypoint, _assetReader);
146+ _packageConfigPath = packageConfigLocator (entrypoint);
120147 _providers[metadataProvider.entrypoint] = metadataProvider;
121148 }
122149}
0 commit comments