Skip to content

Commit b244b89

Browse files
authored
Allow client to specify how to find the package config (#2199)
1 parent fc876cb commit b244b89

File tree

17 files changed

+160
-20
lines changed

17 files changed

+160
-20
lines changed

dwds/CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
## 20.0.2-wip
1+
## 21.0.0-wip
2+
3+
**Breaking changes**
4+
5+
- Allow clients to specify where to find the package config. - [#2199](https://github.com/dart-lang/webdev/pull/2199).
26

37
## 20.0.1
48

dwds/lib/src/loaders/legacy.dart

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,16 @@ class LegacyStrategy extends LoadStrategy {
6666
/// an app URI.
6767
final String? Function(String appUri) _serverPathForAppUri;
6868

69+
/// Returns the absolute path to the app's package config, determined by the
70+
/// app's [entrypoint] path.
71+
///
72+
/// Example:
73+
///
74+
/// main_module.bootstrap.js
75+
/// -> /Users/john_doe/my_dart_app/.dart_tool/package_config.json
76+
///
77+
final String? Function(String entrypoint) _packageConfigLocator;
78+
6979
final Uri? _appEntrypoint;
7080

7181
LegacyStrategy(
@@ -77,6 +87,7 @@ class LegacyStrategy extends LoadStrategy {
7787
this._moduleInfoForProvider,
7888
AssetReader assetReader,
7989
this._appEntrypoint,
90+
this._packageConfigLocator,
8091
) : super(assetReader);
8192

8293
@override
@@ -122,4 +133,8 @@ class LegacyStrategy extends LoadStrategy {
122133

123134
@override
124135
Uri? get appEntrypoint => _appEntrypoint;
136+
137+
@override
138+
String? packageConfigLocator(String entrypoint) =>
139+
_packageConfigLocator(entrypoint);
125140
}

dwds/lib/src/loaders/require.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,4 +283,7 @@ if(!window.\$requireLoader) {
283283
@override
284284
Future<Map<String, ModuleInfo>> moduleInfoForEntrypoint(String entrypoint) =>
285285
_moduleInfoForProvider(metadataProviderFor(entrypoint));
286+
287+
@override
288+
String? packageConfigLocator(String entrypoint) => null;
286289
}

dwds/lib/src/loaders/strategy.dart

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import 'package:dwds/src/debugging/metadata/provider.dart';
66
import 'package:dwds/src/readers/asset_reader.dart';
77
import 'package:dwds/src/services/expression_compiler.dart';
8+
import 'package:dwds/src/utilities/dart_uri.dart';
9+
import 'package:path/path.dart' as p;
810
import 'package:shelf/shelf.dart';
911

1012
late LoadStrategy _globalLoadStrategy;
@@ -16,6 +18,7 @@ LoadStrategy get globalLoadStrategy => _globalLoadStrategy;
1618
abstract 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
}

dwds/lib/src/utilities/dart_uri.dart

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,11 +151,8 @@ class DartUri {
151151

152152
/// Record library and script uris to enable resolving library and script paths.
153153
static Future<void> initialize() async {
154-
final packagesUri =
155-
p.toUri(p.join(currentDirectory, '.dart_tool/package_config.json'));
156-
157154
clear();
158-
await _loadPackageConfig(packagesUri);
155+
await _loadPackageConfig(p.toUri(globalLoadStrategy.packageConfigPath));
159156
}
160157

161158
/// Clear the uri resolution tables.

dwds/lib/src/version.dart

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dwds/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: dwds
22
# Every time this changes you need to run `dart run build_runner build`.
3-
version: 20.0.2-wip
3+
version: 21.0.0-wip
44
description: >-
55
A service that proxies between the Chrome debug protocol and the Dart VM
66
service protocol.

dwds/test/dart_uri_test.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
@TestOn('vm')
66
@Timeout(Duration(minutes: 2))
77

8+
import 'package:dwds/asset_reader.dart';
89
import 'package:dwds/src/loaders/strategy.dart';
910
import 'package:dwds/src/utilities/dart_uri.dart';
1011
import 'package:test/test.dart';
@@ -13,6 +14,10 @@ import 'package:test_common/logging.dart';
1314
import 'fixtures/fakes.dart';
1415

1516
class TestStrategy extends FakeStrategy {
17+
TestStrategy(
18+
AssetReader assetReader,
19+
) : super(assetReader);
20+
1621
@override
1722
String? serverPathForAppUri(String appUrl) {
1823
final appUri = Uri.parse(appUrl);
@@ -30,7 +35,7 @@ class TestStrategy extends FakeStrategy {
3035
}
3136

3237
void main() {
33-
globalLoadStrategy = TestStrategy();
38+
globalLoadStrategy = TestStrategy(FakeAssetReader());
3439
group('DartUri', () {
3540
test('parses package : paths', () {
3641
final uri = DartUri('package:path/path.dart');

dwds/test/debugger_test.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
@Timeout(Duration(minutes: 2))
77
import 'dart:async';
88

9+
import 'package:dwds/asset_reader.dart';
910
import 'package:dwds/src/debugging/debugger.dart';
1011
import 'package:dwds/src/debugging/frame_computer.dart';
1112
import 'package:dwds/src/debugging/inspector.dart';
@@ -29,6 +30,10 @@ late Locations locations;
2930
late SkipLists skipLists;
3031

3132
class TestStrategy extends FakeStrategy {
33+
TestStrategy(
34+
AssetReader assetReader,
35+
) : super(assetReader);
36+
3237
@override
3338
Future<String> moduleForServerPath(String entrypoint, String appUri) async =>
3439
'foo.ddc.js';
@@ -82,7 +87,7 @@ void main() async {
8287
webkitDebugger = FakeWebkitDebugger(scripts: scripts);
8388
pausedController = StreamController<DebuggerPausedEvent>();
8489
webkitDebugger.onPaused = pausedController.stream;
85-
globalLoadStrategy = TestStrategy();
90+
globalLoadStrategy = TestStrategy(FakeAssetReader());
8691
final root = 'fakeRoot';
8792
locations = Locations(
8893
FakeAssetReader(sourceMap: sourceMapContents),

dwds/test/expression_evaluator_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ void main() async {
3535
late StreamController<DebuggerPausedEvent> pausedController;
3636
late StreamController<Event> debugEventController;
3737
setUp(() async {
38-
globalLoadStrategy = FakeStrategy();
39-
4038
final assetReader = FakeAssetReader(sourceMap: '');
39+
globalLoadStrategy = FakeStrategy(assetReader);
40+
4141
final modules = FakeModules();
4242

4343
final webkitDebugger = FakeWebkitDebugger();

0 commit comments

Comments
 (0)