Skip to content

Allow client to specify a way to convert an absolute path into a g3-relative path #2200

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Aug 23, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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