Skip to content

Commit

Permalink
Allow client to specify a way to convert an absolute path into a g3-r…
Browse files Browse the repository at this point in the history
…elative path (#2200)
  • Loading branch information
elliette authored Aug 23, 2023
1 parent b244b89 commit 6183f27
Show file tree
Hide file tree
Showing 28 changed files with 134 additions and 29 deletions.
1 change: 1 addition & 0 deletions dwds/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
**Breaking changes**

- Allow clients to specify where to find the package config. - [#2199](https://github.com/dart-lang/webdev/pull/2199).
- Allow clients to specify a way to convert absolute paths to g3-relative paths. - [#2200](https://github.com/dart-lang/webdev/pull/2200)

## 20.0.1

Expand Down
2 changes: 2 additions & 0 deletions dwds/lib/dart_web_debug_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import 'package:dwds/src/readers/asset_reader.dart';
import 'package:dwds/src/servers/devtools.dart';
import 'package:dwds/src/servers/extension_backend.dart';
import 'package:dwds/src/services/expression_compiler.dart';
import 'package:dwds/src/utilities/globals.dart';
import 'package:logging/logging.dart';
import 'package:shelf/shelf.dart';
import 'package:sse/server/sse_handler.dart';
Expand Down Expand Up @@ -87,6 +88,7 @@ class Dwds {
Future<bool> Function()? isFlutterApp,
}) async {
globalLoadStrategy = loadStrategy;
globalIsInternalBuild = isInternalBuild;
isFlutterApp ??= () => Future.value(true);

DevTools? devTools;
Expand Down
2 changes: 1 addition & 1 deletion dwds/lib/src/debugging/classes.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
// BSD-style license that can be found in the LICENSE file.

import 'package:dwds/src/debugging/metadata/class.dart';
import 'package:dwds/src/loaders/strategy.dart';
import 'package:dwds/src/services/chrome_debug_exception.dart';
import 'package:dwds/src/utilities/domain.dart';
import 'package:dwds/src/utilities/globals.dart';
import 'package:dwds/src/utilities/shared.dart';
import 'package:vm_service/vm_service.dart';
import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart';
Expand Down
2 changes: 1 addition & 1 deletion dwds/lib/src/debugging/debugger.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ import 'package:dwds/src/debugging/frame_computer.dart';
import 'package:dwds/src/debugging/location.dart';
import 'package:dwds/src/debugging/remote_debugger.dart';
import 'package:dwds/src/debugging/skip_list.dart';
import 'package:dwds/src/loaders/strategy.dart';
import 'package:dwds/src/services/chrome_debug_exception.dart';
import 'package:dwds/src/utilities/dart_uri.dart';
import 'package:dwds/src/utilities/domain.dart';
import 'package:dwds/src/utilities/globals.dart';
import 'package:dwds/src/utilities/objects.dart' show Property;
import 'package:dwds/src/utilities/server.dart';
import 'package:dwds/src/utilities/shared.dart';
Expand Down
2 changes: 1 addition & 1 deletion dwds/lib/src/debugging/inspector.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@ import 'package:dwds/src/debugging/instance.dart';
import 'package:dwds/src/debugging/libraries.dart';
import 'package:dwds/src/debugging/location.dart';
import 'package:dwds/src/debugging/remote_debugger.dart';
import 'package:dwds/src/loaders/strategy.dart';
import 'package:dwds/src/readers/asset_reader.dart';
import 'package:dwds/src/utilities/conversions.dart';
import 'package:dwds/src/utilities/dart_uri.dart';
import 'package:dwds/src/utilities/domain.dart';
import 'package:dwds/src/utilities/globals.dart';
import 'package:dwds/src/utilities/objects.dart';
import 'package:dwds/src/utilities/server.dart';
import 'package:dwds/src/utilities/shared.dart';
Expand Down
2 changes: 1 addition & 1 deletion dwds/lib/src/debugging/instance.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ import 'dart:math';
import 'package:dwds/src/debugging/inspector.dart';
import 'package:dwds/src/debugging/metadata/class.dart';
import 'package:dwds/src/debugging/metadata/function.dart';
import 'package:dwds/src/loaders/strategy.dart';
import 'package:dwds/src/utilities/conversions.dart';
import 'package:dwds/src/utilities/domain.dart';
import 'package:dwds/src/utilities/globals.dart';
import 'package:dwds/src/utilities/objects.dart';
import 'package:dwds/src/utilities/shared.dart';
import 'package:logging/logging.dart';
Expand Down
2 changes: 1 addition & 1 deletion dwds/lib/src/debugging/libraries.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@

import 'package:collection/collection.dart';
import 'package:dwds/src/debugging/metadata/class.dart';
import 'package:dwds/src/loaders/strategy.dart';
import 'package:dwds/src/services/chrome_debug_exception.dart';
import 'package:dwds/src/utilities/domain.dart';
import 'package:dwds/src/utilities/globals.dart';
import 'package:logging/logging.dart';
import 'package:vm_service/vm_service.dart';
import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart';
Expand Down
2 changes: 1 addition & 1 deletion dwds/lib/src/debugging/location.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@

import 'package:async/async.dart';
import 'package:dwds/src/debugging/modules.dart';
import 'package:dwds/src/loaders/strategy.dart';
import 'package:dwds/src/readers/asset_reader.dart';
import 'package:dwds/src/utilities/dart_uri.dart';
import 'package:dwds/src/utilities/globals.dart';
import 'package:logging/logging.dart';
import 'package:path/path.dart' as p;
import 'package:source_maps/parser.dart';
Expand Down
2 changes: 1 addition & 1 deletion dwds/lib/src/debugging/metadata/class.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
// 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 'package:dwds/src/loaders/strategy.dart';
import 'package:dwds/src/services/chrome_debug_exception.dart';
import 'package:dwds/src/utilities/domain.dart';
import 'package:dwds/src/utilities/globals.dart';
import 'package:logging/logging.dart';
import 'package:vm_service/vm_service.dart';
import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart';
Expand Down
2 changes: 1 addition & 1 deletion dwds/lib/src/debugging/metadata/function.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.

import 'package:dwds/src/debugging/remote_debugger.dart';
import 'package:dwds/src/loaders/strategy.dart';
import 'package:dwds/src/utilities/globals.dart';
import 'package:dwds/src/utilities/server.dart';
import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart';

Expand Down
2 changes: 1 addition & 1 deletion dwds/lib/src/debugging/modules.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
// BSD-style license that can be found in the LICENSE file.

import 'package:async/async.dart';
import 'package:dwds/src/loaders/strategy.dart';
import 'package:dwds/src/utilities/dart_uri.dart';
import 'package:dwds/src/utilities/globals.dart';
import 'package:logging/logging.dart';

/// Tracks modules for the compiled application.
Expand Down
9 changes: 9 additions & 0 deletions dwds/lib/src/loaders/legacy.dart
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,11 @@ class LegacyStrategy extends LoadStrategy {
///
final String? Function(String entrypoint) _packageConfigLocator;

/// Returns the relative path in google3, determined by the [absolutePath].
///
/// Returns `null` if not a google3 app.
final String? Function(String absolutePath) _g3RelativePath;

final Uri? _appEntrypoint;

LegacyStrategy(
Expand All @@ -88,6 +93,7 @@ class LegacyStrategy extends LoadStrategy {
AssetReader assetReader,
this._appEntrypoint,
this._packageConfigLocator,
this._g3RelativePath,
) : super(assetReader);

@override
Expand Down Expand Up @@ -137,4 +143,7 @@ class LegacyStrategy extends LoadStrategy {
@override
String? packageConfigLocator(String entrypoint) =>
_packageConfigLocator(entrypoint);

@override
String? g3RelativePath(String absolutePath) => _g3RelativePath(absolutePath);
}
3 changes: 3 additions & 0 deletions dwds/lib/src/loaders/require.dart
Original file line number Diff line number Diff line change
Expand Up @@ -286,4 +286,7 @@ if(!window.\$requireLoader) {

@override
String? packageConfigLocator(String entrypoint) => null;

@override
String? g3RelativePath(String absolutePath) => null;
}
11 changes: 5 additions & 6 deletions dwds/lib/src/loaders/strategy.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,6 @@ import 'package:dwds/src/utilities/dart_uri.dart';
import 'package:path/path.dart' as p;
import 'package:shelf/shelf.dart';

late LoadStrategy _globalLoadStrategy;

set globalLoadStrategy(LoadStrategy strategy) => _globalLoadStrategy = strategy;

LoadStrategy get globalLoadStrategy => _globalLoadStrategy;

abstract class LoadStrategy {
final AssetReader _assetReader;
final _providers = <String, MetadataProvider>{};
Expand Down Expand Up @@ -116,6 +110,11 @@ abstract class LoadStrategy {
///
String? packageConfigLocator(String entrypoint);

/// Returns the relative path in google3, determined by the [absolutePath].
///
/// Returns `null` if not a google3 app.
String? g3RelativePath(String absolutePath);

/// The absolute path to the app's package config, or null if not provided by
/// [packageConfigLocator].
String get packageConfigPath {
Expand Down
4 changes: 3 additions & 1 deletion dwds/lib/src/services/chrome_proxy_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,12 @@ import 'package:dwds/src/debugging/modules.dart';
import 'package:dwds/src/debugging/remote_debugger.dart';
import 'package:dwds/src/debugging/skip_list.dart';
import 'package:dwds/src/events.dart';
import 'package:dwds/src/loaders/strategy.dart';
import 'package:dwds/src/readers/asset_reader.dart';
import 'package:dwds/src/services/batched_expression_evaluator.dart';
import 'package:dwds/src/services/expression_compiler.dart';
import 'package:dwds/src/services/expression_evaluator.dart';
import 'package:dwds/src/utilities/dart_uri.dart';
import 'package:dwds/src/utilities/globals.dart';
import 'package:dwds/src/utilities/shared.dart';
import 'package:logging/logging.dart' hide LogRecord;
import 'package:pub_semver/pub_semver.dart' as semver;
Expand Down Expand Up @@ -989,6 +989,8 @@ ${globalLoadStrategy.loadModuleSnippet}("dart_sdk").developer.invokeExtension(

// Note: Ignore the optional local parameter, it is there to keep the method
// signature consistent with the VM service interface.
// TODO(https://github.com/dart-lang/webdev/issues/2198): Add support for g3-
// relative URIs, and support the `local` parameter.
@override
Future<UriList> lookupResolvedPackageUris(
String isolateId,
Expand Down
2 changes: 1 addition & 1 deletion dwds/lib/src/services/expression_evaluator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@ import 'package:dwds/src/debugging/dart_scope.dart';
import 'package:dwds/src/debugging/debugger.dart';
import 'package:dwds/src/debugging/location.dart';
import 'package:dwds/src/debugging/modules.dart';
import 'package:dwds/src/loaders/strategy.dart';
import 'package:dwds/src/services/expression_compiler.dart';
import 'package:dwds/src/services/javascript_builder.dart';
import 'package:dwds/src/utilities/conversions.dart';
import 'package:dwds/src/utilities/domain.dart';
import 'package:dwds/src/utilities/globals.dart';
import 'package:dwds/src/utilities/objects.dart' as chrome;
import 'package:logging/logging.dart';
import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart';
Expand Down
35 changes: 33 additions & 2 deletions dwds/lib/src/utilities/dart_uri.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +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 'package:dwds/src/loaders/strategy.dart';
import 'package:dwds/src/utilities/globals.dart';
import 'package:logging/logging.dart';
import 'package:package_config/package_config.dart';
import 'package:path/path.dart' as p;
Expand Down Expand Up @@ -134,11 +134,29 @@ class DartUri {
static final Map<String, String> _resolvedUriToUri = {};

/// Returns package, app, or dart uri for a resolved path.
static String? toPackageUri(String uri) => _resolvedUriToUri[uri];
static String? toPackageUri(String uri) {
final packageUri = _resolvedUriToUri[uri];
if (packageUri != null) return packageUri;

// If this is an internal app, then the given uri might be g3-relative:
if (globalIsInternalBuild) {
// TODO(https://github.com/dart-lang/webdev/issues/2198): Verify if the
// intermediary conversion to resolvedUri is causing performance issues.
final resolvedUri = _g3RelativeUriToResolvedUri[uri];
return _resolvedUriToUri[resolvedUri];
}

return null;
}

/// Returns resolved path for a package, app, or dart uri.
static String? toResolvedUri(String uri) => _uriToResolvedUri[uri];

/// Returns a resolved path for a g3-relative URI.
///
/// This map is empty if not a google3 app.
static final Map<String, String> _g3RelativeUriToResolvedUri = {};

/// The directory in which we're running.
///
/// We store this here because for tests we may want to act as if we're
Expand Down Expand Up @@ -166,6 +184,19 @@ class DartUri {
static void recordAbsoluteUris(Iterable<String> libraryUris) {
for (var uri in libraryUris) {
_recordAbsoluteUri(uri);
if (globalIsInternalBuild) {
_recordG3RelativeUri(uri);
}
}
}

static void _recordG3RelativeUri(String libraryUri) {
final absoluteUri = _uriToResolvedUri[libraryUri];
if (absoluteUri == null) return;

final g3RelativeUri = globalLoadStrategy.g3RelativePath(absoluteUri);
if (g3RelativeUri != null) {
_g3RelativeUriToResolvedUri[g3RelativeUri] = absoluteUri;
}
}

Expand Down
16 changes: 16 additions & 0 deletions dwds/lib/src/utilities/globals.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// 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 'package:dwds/src/loaders/strategy.dart';

/// The load strategy for the connected app.
late LoadStrategy _globalLoadStrategy;
set globalLoadStrategy(LoadStrategy strategy) => _globalLoadStrategy = strategy;
LoadStrategy get globalLoadStrategy => _globalLoadStrategy;

/// Whether or not the connected app is an internal (e.g. google3) app.
bool get globalIsInternalBuild => _isInternalBuild ?? false;
bool? _isInternalBuild;
set globalIsInternalBuild(bool isInternalBuild) =>
_isInternalBuild = isInternalBuild;
2 changes: 1 addition & 1 deletion dwds/test/chrome_proxy_service_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ import 'dart:async';
import 'dart:convert';
import 'dart:io';

import 'package:dwds/src/loaders/strategy.dart';
import 'package:dwds/src/services/chrome_proxy_service.dart';
import 'package:dwds/src/utilities/dart_uri.dart';
import 'package:dwds/src/utilities/globals.dart';
import 'package:dwds/src/utilities/shared.dart';
import 'package:http/http.dart' as http;
import 'package:path/path.dart' as path;
Expand Down
42 changes: 40 additions & 2 deletions dwds/test/dart_uri_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@
@Timeout(Duration(minutes: 2))

import 'package:dwds/asset_reader.dart';
import 'package:dwds/src/loaders/strategy.dart';
import 'package:dwds/src/utilities/dart_uri.dart';
import 'package:dwds/src/utilities/globals.dart';
import 'package:path/path.dart' as p;
import 'package:test/test.dart';
import 'package:test_common/logging.dart';

Expand All @@ -34,9 +35,21 @@ class TestStrategy extends FakeStrategy {
}
}

class G3TestStrategy extends FakeStrategy {
G3TestStrategy(
AssetReader assetReader,
) : super(assetReader);

@override
String? g3RelativePath(String absolutePath) =>
'g3:///${p.split(absolutePath).last}';
}

void main() {
globalLoadStrategy = TestStrategy(FakeAssetReader());
group('DartUri', () {
setUpAll(() {
globalLoadStrategy = TestStrategy(FakeAssetReader());
});
test('parses package : paths', () {
final uri = DartUri('package:path/path.dart');
expect(uri.serverPath, 'packages/path/path.dart');
Expand Down Expand Up @@ -185,4 +198,29 @@ void main() {
);
});
});

group('initialized to handle g3-relative paths', () {
setUpAll(() {
globalLoadStrategy = G3TestStrategy(FakeAssetReader());
});

setUpAll(() async {
await DartUri.initialize();
globalIsInternalBuild = true;
DartUri.recordAbsoluteUris(['package:path/path.dart']);
});

tearDownAll(() {
DartUri.clear();
globalIsInternalBuild = false;
});

test(
'can resolve g3-relative paths',
() {
final resolved = DartUri.toPackageUri('g3:///path.dart');
expect(resolved, 'package:path/path.dart');
},
);
});
}
2 changes: 1 addition & 1 deletion dwds/test/debugger_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import 'package:dwds/src/debugging/frame_computer.dart';
import 'package:dwds/src/debugging/inspector.dart';
import 'package:dwds/src/debugging/location.dart';
import 'package:dwds/src/debugging/skip_list.dart';
import 'package:dwds/src/loaders/strategy.dart';
import 'package:dwds/src/utilities/globals.dart';
import 'package:logging/logging.dart';
import 'package:test/test.dart';
import 'package:vm_service/vm_service.dart' hide LogRecord;
Expand Down
2 changes: 1 addition & 1 deletion dwds/test/expression_evaluator_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ import 'dart:async';
import 'package:dwds/src/debugging/debugger.dart';
import 'package:dwds/src/debugging/location.dart';
import 'package:dwds/src/debugging/skip_list.dart';
import 'package:dwds/src/loaders/strategy.dart';
import 'package:dwds/src/services/batched_expression_evaluator.dart';
import 'package:dwds/src/services/expression_evaluator.dart';
import 'package:dwds/src/utilities/globals.dart';

import 'package:test/test.dart';
import 'package:vm_service/vm_service.dart' hide LogRecord;
Expand Down
Loading

0 comments on commit 6183f27

Please sign in to comment.