Skip to content

Commit dad87d8

Browse files
committed
Consolidate and under a shared parent class. - [#2517](#2517)
1 parent 472511d commit dad87d8

File tree

4 files changed

+150
-208
lines changed

4 files changed

+150
-208
lines changed

dwds/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
## 24.2.0-wip
22

3+
- Consolidate `FrontendServerDdcStrategyProvider` and `FrontendServerRequireStrategyProvider` under a shared parent class. - [#2517](https://github.com/dart-lang/webdev/issues/2517)
34
- Remove `build_daemon_ddc_and_canary_evaluate_test`. - [2512](https://github.com/dart-lang/webdev/issues/2512)
45
- Replace deprecated JS code `this.__proto__` with `Object.getPrototypeOf(this)`. - [#2500](https://github.com/dart-lang/webdev/pull/2500)
56
- Migrate injected client code to `package:web`. - [#2491](https://github.com/dart-lang/webdev/pull/2491)

dwds/lib/src/loaders/frontend_server_ddc.dart

Lines changed: 23 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -2,115 +2,33 @@
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

5-
import 'package:dwds/src/debugging/metadata/provider.dart';
65
import 'package:dwds/src/loaders/ddc.dart';
7-
import 'package:dwds/src/loaders/strategy.dart';
8-
import 'package:dwds/src/readers/asset_reader.dart';
9-
import 'package:dwds/src/services/expression_compiler.dart';
10-
import 'package:path/path.dart' as p;
6+
import 'package:dwds/src/loaders/frontend_server_strategy_provider.dart';
117

128
/// Provides a [DdcStrategy] suitable for use with Frontend Server.
13-
class FrontendServerDdcStrategyProvider {
14-
final ReloadConfiguration _configuration;
15-
final AssetReader _assetReader;
16-
final PackageUriMapper _packageUriMapper;
17-
final Future<Map<String, String>> Function() _digestsProvider;
18-
final String _basePath;
19-
final BuildSettings _buildSettings;
20-
21-
late final DdcStrategy _ddcStrategy = DdcStrategy(
22-
_configuration,
23-
_moduleProvider,
24-
(_) => _digestsProvider(),
25-
_moduleForServerPath,
26-
_serverPathForModule,
27-
_sourceMapPathForModule,
28-
_serverPathForAppUri,
29-
_moduleInfoForProvider,
30-
_assetReader,
31-
_buildSettings,
32-
(String _) => null,
33-
null,
34-
);
35-
9+
class FrontendServerDdcStrategyProvider
10+
extends FrontendServerStrategyProvider<DdcStrategy> {
3611
FrontendServerDdcStrategyProvider(
37-
this._configuration,
38-
this._assetReader,
39-
this._packageUriMapper,
40-
this._digestsProvider,
41-
this._buildSettings,
42-
) : _basePath = _assetReader.basePath;
43-
44-
DdcStrategy get strategy => _ddcStrategy;
45-
46-
String _removeBasePath(String path) {
47-
if (_basePath.isEmpty) return path;
48-
49-
final stripped = stripLeadingSlashes(path);
50-
return stripLeadingSlashes(stripped.substring(_basePath.length));
51-
}
52-
53-
String _addBasePath(String serverPath) => _basePath.isEmpty
54-
? stripLeadingSlashes(serverPath)
55-
: '$_basePath/${stripLeadingSlashes(serverPath)}';
56-
57-
Future<Map<String, String>> _moduleProvider(
58-
MetadataProvider metadataProvider,
59-
) async =>
60-
(await metadataProvider.moduleToModulePath).map(
61-
(key, value) =>
62-
MapEntry(key, stripLeadingSlashes(removeJsExtension(value))),
63-
);
64-
65-
Future<String?> _moduleForServerPath(
66-
MetadataProvider metadataProvider,
67-
String serverPath,
68-
) async {
69-
final modulePathToModule = await metadataProvider.modulePathToModule;
70-
final relativeServerPath = _removeBasePath(serverPath);
71-
return modulePathToModule[relativeServerPath];
72-
}
73-
74-
Future<String> _serverPathForModule(
75-
MetadataProvider metadataProvider,
76-
String module,
77-
) async =>
78-
_addBasePath((await metadataProvider.moduleToModulePath)[module] ?? '');
79-
80-
Future<String> _sourceMapPathForModule(
81-
MetadataProvider metadataProvider,
82-
String module,
83-
) async =>
84-
_addBasePath((await metadataProvider.moduleToSourceMap)[module] ?? '');
85-
86-
String? _serverPathForAppUri(String appUrl) {
87-
final appUri = Uri.parse(appUrl);
88-
if (appUri.isScheme('org-dartlang-app')) {
89-
return _addBasePath(appUri.path);
90-
}
91-
if (appUri.isScheme('package')) {
92-
final resolved = _packageUriMapper.packageUriToServerPath(appUri);
93-
if (resolved != null) {
94-
return resolved;
95-
}
96-
}
97-
return null;
98-
}
12+
super.configuration,
13+
super.assetReader,
14+
super.packageUriMapper,
15+
super.digestsProvider,
16+
super.buildSettings,
17+
);
9918

100-
Future<Map<String, ModuleInfo>> _moduleInfoForProvider(
101-
MetadataProvider metadataProvider,
102-
) async {
103-
final modules = await metadataProvider.moduleToModulePath;
104-
final result = <String, ModuleInfo>{};
105-
for (final module in modules.keys) {
106-
final modulePath = modules[module]!;
107-
result[module] = ModuleInfo(
108-
// TODO: Save locations of full kernel files in ddc metadata.
109-
// Issue: https://github.com/dart-lang/sdk/issues/43684
110-
p.setExtension(modulePath, '.full.dill'),
111-
p.setExtension(modulePath, '.dill'),
19+
@override
20+
DdcStrategy get strategy => DdcStrategy(
21+
configuration,
22+
moduleProvider,
23+
(_) => digestsProvider(),
24+
moduleForServerPath,
25+
serverPathForModule,
26+
sourceMapPathForModule,
27+
serverPathForAppUri,
28+
moduleInfoForProvider,
29+
assetReader,
30+
buildSettings,
31+
(String _) => null,
32+
null,
11233
);
113-
}
114-
return result;
115-
}
11634
}

dwds/lib/src/loaders/frontend_server_require.dart

Lines changed: 21 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -2,113 +2,31 @@
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

5-
import 'package:dwds/src/debugging/metadata/provider.dart';
5+
import 'package:dwds/src/loaders/frontend_server_strategy_provider.dart';
66
import 'package:dwds/src/loaders/require.dart';
7-
import 'package:dwds/src/loaders/strategy.dart';
8-
import 'package:dwds/src/readers/asset_reader.dart';
9-
import 'package:dwds/src/services/expression_compiler.dart';
10-
import 'package:path/path.dart' as p;
117

128
/// Provides a [RequireStrategy] suitable for use with Frontend Server.
13-
class FrontendServerRequireStrategyProvider {
14-
final ReloadConfiguration _configuration;
15-
final AssetReader _assetReader;
16-
final PackageUriMapper _packageUriMapper;
17-
final Future<Map<String, String>> Function() _digestsProvider;
18-
final String _basePath;
19-
final BuildSettings _buildSettings;
20-
21-
late final RequireStrategy _requireStrategy = RequireStrategy(
22-
_configuration,
23-
_moduleProvider,
24-
(_) => _digestsProvider(),
25-
_moduleForServerPath,
26-
_serverPathForModule,
27-
_sourceMapPathForModule,
28-
_serverPathForAppUri,
29-
_moduleInfoForProvider,
30-
_assetReader,
31-
_buildSettings,
32-
);
33-
9+
class FrontendServerRequireStrategyProvider
10+
extends FrontendServerStrategyProvider<RequireStrategy> {
3411
FrontendServerRequireStrategyProvider(
35-
this._configuration,
36-
this._assetReader,
37-
this._packageUriMapper,
38-
this._digestsProvider,
39-
this._buildSettings,
40-
) : _basePath = _assetReader.basePath;
41-
42-
RequireStrategy get strategy => _requireStrategy;
43-
44-
String _removeBasePath(String path) {
45-
if (_basePath.isEmpty) return path;
46-
47-
final stripped = stripLeadingSlashes(path);
48-
return stripLeadingSlashes(stripped.substring(_basePath.length));
49-
}
50-
51-
String _addBasePath(String serverPath) => _basePath.isEmpty
52-
? stripLeadingSlashes(serverPath)
53-
: '$_basePath/${stripLeadingSlashes(serverPath)}';
54-
55-
Future<Map<String, String>> _moduleProvider(
56-
MetadataProvider metadataProvider,
57-
) async =>
58-
(await metadataProvider.moduleToModulePath).map(
59-
(key, value) =>
60-
MapEntry(key, stripLeadingSlashes(removeJsExtension(value))),
61-
);
62-
63-
Future<String?> _moduleForServerPath(
64-
MetadataProvider metadataProvider,
65-
String serverPath,
66-
) async {
67-
final modulePathToModule = await metadataProvider.modulePathToModule;
68-
final relativeServerPath = _removeBasePath(serverPath);
69-
return modulePathToModule[relativeServerPath];
70-
}
71-
72-
Future<String> _serverPathForModule(
73-
MetadataProvider metadataProvider,
74-
String module,
75-
) async =>
76-
_addBasePath((await metadataProvider.moduleToModulePath)[module] ?? '');
77-
78-
Future<String> _sourceMapPathForModule(
79-
MetadataProvider metadataProvider,
80-
String module,
81-
) async =>
82-
_addBasePath((await metadataProvider.moduleToSourceMap)[module] ?? '');
83-
84-
String? _serverPathForAppUri(String appUrl) {
85-
final appUri = Uri.parse(appUrl);
86-
if (appUri.isScheme('org-dartlang-app')) {
87-
return _addBasePath(appUri.path);
88-
}
89-
if (appUri.isScheme('package')) {
90-
final resolved = _packageUriMapper.packageUriToServerPath(appUri);
91-
if (resolved != null) {
92-
return resolved;
93-
}
94-
}
95-
return null;
96-
}
12+
super.configuration,
13+
super.assetReader,
14+
super.packageUriMapper,
15+
super.digestsProvider,
16+
super.buildSettings,
17+
);
9718

98-
Future<Map<String, ModuleInfo>> _moduleInfoForProvider(
99-
MetadataProvider metadataProvider,
100-
) async {
101-
final modules = await metadataProvider.moduleToModulePath;
102-
final result = <String, ModuleInfo>{};
103-
for (final module in modules.keys) {
104-
final modulePath = modules[module]!;
105-
result[module] = ModuleInfo(
106-
// TODO: Save locations of full kernel files in ddc metadata.
107-
// Issue: https://github.com/dart-lang/sdk/issues/43684
108-
p.setExtension(modulePath, '.full.dill'),
109-
p.setExtension(modulePath, '.dill'),
19+
@override
20+
RequireStrategy get strategy => RequireStrategy(
21+
configuration,
22+
moduleProvider,
23+
(_) => digestsProvider(),
24+
moduleForServerPath,
25+
serverPathForModule,
26+
sourceMapPathForModule,
27+
serverPathForAppUri,
28+
moduleInfoForProvider,
29+
assetReader,
30+
buildSettings,
11031
);
111-
}
112-
return result;
113-
}
11432
}
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
// Copyright 2023 The Dart Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
// frontend_server_strategy_provider.dart
6+
7+
// ignore_for_file: unused_element
8+
9+
import 'package:dwds/src/debugging/metadata/provider.dart';
10+
import 'package:dwds/src/loaders/strategy.dart';
11+
import 'package:dwds/src/readers/asset_reader.dart';
12+
import 'package:dwds/src/services/expression_compiler.dart';
13+
import 'package:path/path.dart' as p;
14+
15+
abstract class FrontendServerStrategyProvider<T> {
16+
final ReloadConfiguration configuration;
17+
final AssetReader assetReader;
18+
final PackageUriMapper packageUriMapper;
19+
final Future<Map<String, String>> Function() digestsProvider;
20+
final String basePath;
21+
final BuildSettings buildSettings;
22+
23+
FrontendServerStrategyProvider(
24+
this.configuration,
25+
this.assetReader,
26+
this.packageUriMapper,
27+
this.digestsProvider,
28+
this.buildSettings,
29+
) : basePath = assetReader.basePath;
30+
31+
T get strategy;
32+
33+
String removeBasePath(String path) {
34+
if (basePath.isEmpty) return path;
35+
final stripped = stripLeadingSlashes(path);
36+
return stripLeadingSlashes(stripped.substring(basePath.length));
37+
}
38+
39+
String addBasePath(String serverPath) => basePath.isEmpty
40+
? stripLeadingSlashes(serverPath)
41+
: '$basePath/${stripLeadingSlashes(serverPath)}';
42+
43+
String removeJsExtension(String path) =>
44+
path.endsWith('.js') ? p.withoutExtension(path) : path;
45+
46+
Future<Map<String, String>> moduleProvider(
47+
MetadataProvider metadataProvider,
48+
) async =>
49+
(await metadataProvider.moduleToModulePath).map(
50+
(key, value) =>
51+
MapEntry(key, stripLeadingSlashes(removeJsExtension(value))),
52+
);
53+
54+
Future<String?> moduleForServerPath(
55+
MetadataProvider metadataProvider,
56+
String serverPath,
57+
) async {
58+
final modulePathToModule = await metadataProvider.modulePathToModule;
59+
final relativeServerPath = removeBasePath(serverPath);
60+
return modulePathToModule[relativeServerPath];
61+
}
62+
63+
Future<String> serverPathForModule(
64+
MetadataProvider metadataProvider,
65+
String module,
66+
) async =>
67+
addBasePath((await metadataProvider.moduleToModulePath)[module] ?? '');
68+
69+
Future<String> sourceMapPathForModule(
70+
MetadataProvider metadataProvider,
71+
String module,
72+
) async =>
73+
addBasePath((await metadataProvider.moduleToSourceMap)[module] ?? '');
74+
75+
String? serverPathForAppUri(String appUrl) {
76+
final appUri = Uri.parse(appUrl);
77+
if (appUri.isScheme('org-dartlang-app')) {
78+
return addBasePath(appUri.path);
79+
}
80+
if (appUri.isScheme('package')) {
81+
final resolved = packageUriMapper.packageUriToServerPath(appUri);
82+
if (resolved != null) {
83+
return resolved;
84+
}
85+
}
86+
return null;
87+
}
88+
89+
Future<Map<String, ModuleInfo>> moduleInfoForProvider(
90+
MetadataProvider metadataProvider,
91+
) async {
92+
final modules = await metadataProvider.moduleToModulePath;
93+
final result = <String, ModuleInfo>{};
94+
for (final module in modules.keys) {
95+
final modulePath = modules[module]!;
96+
result[module] = ModuleInfo(
97+
// TODO: Save locations of full kernel files in ddc metadata.
98+
// Issue: https://github.com/dart-lang/sdk/issues/43684
99+
p.setExtension(modulePath, '.full.dill'),
100+
p.setExtension(modulePath, '.dill'),
101+
);
102+
}
103+
return result;
104+
}
105+
}

0 commit comments

Comments
 (0)