Skip to content

Commit 18ab1d5

Browse files
authored
Consolidate FrontendServerDdcStrategyProvider and FrontendServerRequireStrategyProvider under a shared parent class. - [#2517](https://gith… (#2518)
* Consolidate and under a shared parent class. - [#2517](#2517) * clean up lib/src/loaders/frontend_server_strategy_provider.dart * updated copyright date, make T extend loadstrategy and define strategies as late * code formatting * combine load strategies into one file and make fields/methods private * updated path to load strategy providers and added a throw statement when new module format (ddc library bundle) is requested
1 parent 472511d commit 18ab1d5

File tree

5 files changed

+85
-149
lines changed

5 files changed

+85
-149
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/dwds.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ export 'src/handlers/socket_connections.dart';
2020
export 'src/loaders/build_runner_require.dart'
2121
show BuildRunnerRequireStrategyProvider;
2222
export 'src/loaders/ddc.dart' show DdcStrategy;
23-
export 'src/loaders/frontend_server_ddc.dart'
24-
show FrontendServerDdcStrategyProvider;
25-
export 'src/loaders/frontend_server_require.dart'
26-
show FrontendServerRequireStrategyProvider;
23+
export 'src/loaders/frontend_server_strategy_provider.dart'
24+
show
25+
FrontendServerDdcStrategyProvider,
26+
FrontendServerRequireStrategyProvider;
2727
export 'src/loaders/require.dart' show RequireStrategy;
2828
export 'src/loaders/strategy.dart'
2929
show LoadStrategy, ReloadConfiguration, BuildSettings;

dwds/lib/src/loaders/frontend_server_require.dart

Lines changed: 0 additions & 114 deletions
This file was deleted.

dwds/lib/src/loaders/frontend_server_ddc.dart renamed to dwds/lib/src/loaders/frontend_server_strategy_provider.dart

Lines changed: 67 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,35 @@
1-
// Copyright 2023 The Dart Authors. All rights reserved.
1+
// Copyright 2024 The Dart Authors. All rights reserved.
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

55
import 'package:dwds/src/debugging/metadata/provider.dart';
66
import 'package:dwds/src/loaders/ddc.dart';
7+
import 'package:dwds/src/loaders/require.dart';
78
import 'package:dwds/src/loaders/strategy.dart';
89
import 'package:dwds/src/readers/asset_reader.dart';
910
import 'package:dwds/src/services/expression_compiler.dart';
1011
import 'package:path/path.dart' as p;
1112

12-
/// Provides a [DdcStrategy] suitable for use with Frontend Server.
13-
class FrontendServerDdcStrategyProvider {
13+
abstract class FrontendServerStrategyProvider<T extends LoadStrategy> {
1414
final ReloadConfiguration _configuration;
1515
final AssetReader _assetReader;
1616
final PackageUriMapper _packageUriMapper;
1717
final Future<Map<String, String>> Function() _digestsProvider;
1818
final String _basePath;
1919
final BuildSettings _buildSettings;
2020

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-
36-
FrontendServerDdcStrategyProvider(
21+
FrontendServerStrategyProvider(
3722
this._configuration,
3823
this._assetReader,
3924
this._packageUriMapper,
4025
this._digestsProvider,
4126
this._buildSettings,
4227
) : _basePath = _assetReader.basePath;
4328

44-
DdcStrategy get strategy => _ddcStrategy;
29+
T get strategy;
4530

4631
String _removeBasePath(String path) {
4732
if (_basePath.isEmpty) return path;
48-
4933
final stripped = stripLeadingSlashes(path);
5034
return stripLeadingSlashes(stripped.substring(_basePath.length));
5135
}
@@ -54,12 +38,15 @@ class FrontendServerDdcStrategyProvider {
5438
? stripLeadingSlashes(serverPath)
5539
: '$_basePath/${stripLeadingSlashes(serverPath)}';
5640

41+
String _removeJsExtension(String path) =>
42+
path.endsWith('.js') ? p.withoutExtension(path) : path;
43+
5744
Future<Map<String, String>> _moduleProvider(
5845
MetadataProvider metadataProvider,
5946
) async =>
6047
(await metadataProvider.moduleToModulePath).map(
6148
(key, value) =>
62-
MapEntry(key, stripLeadingSlashes(removeJsExtension(value))),
49+
MapEntry(key, stripLeadingSlashes(_removeJsExtension(value))),
6350
);
6451

6552
Future<String?> _moduleForServerPath(
@@ -114,3 +101,61 @@ class FrontendServerDdcStrategyProvider {
114101
return result;
115102
}
116103
}
104+
105+
/// Provides a [DdcStrategy] suitable for use with Frontend Server.
106+
class FrontendServerDdcStrategyProvider
107+
extends FrontendServerStrategyProvider<DdcStrategy> {
108+
late final DdcStrategy _ddcStrategy = DdcStrategy(
109+
_configuration,
110+
_moduleProvider,
111+
(_) => _digestsProvider(),
112+
_moduleForServerPath,
113+
_serverPathForModule,
114+
_sourceMapPathForModule,
115+
_serverPathForAppUri,
116+
_moduleInfoForProvider,
117+
_assetReader,
118+
_buildSettings,
119+
(String _) => null,
120+
null,
121+
);
122+
123+
FrontendServerDdcStrategyProvider(
124+
super._configuration,
125+
super._assetReader,
126+
super._packageUriMapper,
127+
super._digestsProvider,
128+
super._buildSettings,
129+
);
130+
131+
@override
132+
DdcStrategy get strategy => _ddcStrategy;
133+
}
134+
135+
/// Provides a [RequireStrategy] suitable for use with Frontend Server.
136+
class FrontendServerRequireStrategyProvider
137+
extends FrontendServerStrategyProvider<RequireStrategy> {
138+
late final RequireStrategy _requireStrategy = RequireStrategy(
139+
_configuration,
140+
_moduleProvider,
141+
(_) => _digestsProvider(),
142+
_moduleForServerPath,
143+
_serverPathForModule,
144+
_sourceMapPathForModule,
145+
_serverPathForAppUri,
146+
_moduleInfoForProvider,
147+
_assetReader,
148+
_buildSettings,
149+
);
150+
151+
FrontendServerRequireStrategyProvider(
152+
super._configuration,
153+
super._assetReader,
154+
super._packageUriMapper,
155+
super._digestsProvider,
156+
super._buildSettings,
157+
);
158+
159+
@override
160+
RequireStrategy get strategy => _requireStrategy;
161+
}

dwds/test/fixtures/context.dart

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ import 'package:dwds/src/connections/app_connection.dart';
1515
import 'package:dwds/src/connections/debug_connection.dart';
1616
import 'package:dwds/src/debugging/webkit_debugger.dart';
1717
import 'package:dwds/src/loaders/build_runner_require.dart';
18-
import 'package:dwds/src/loaders/frontend_server_ddc.dart';
19-
import 'package:dwds/src/loaders/frontend_server_require.dart';
18+
import 'package:dwds/src/loaders/frontend_server_strategy_provider.dart';
2019
import 'package:dwds/src/loaders/strategy.dart';
2120
import 'package:dwds/src/readers/proxy_server_asset_reader.dart';
2221
import 'package:dwds/src/services/chrome_proxy_service.dart';
@@ -348,13 +347,18 @@ class TestContext {
348347
() async => {},
349348
buildSettings,
350349
).strategy,
351-
ModuleFormat.ddc => FrontendServerDdcStrategyProvider(
352-
testSettings.reloadConfiguration,
353-
assetReader,
354-
packageUriMapper,
355-
() async => {},
356-
buildSettings,
357-
).strategy,
350+
ModuleFormat.ddc => buildSettings.canaryFeatures
351+
? throw Exception(
352+
'''Unsupported DDC module format ${testSettings.moduleFormat.name}
353+
with canaryFeatures set to ${buildSettings.canaryFeatures}.''',
354+
)
355+
: FrontendServerDdcStrategyProvider(
356+
testSettings.reloadConfiguration,
357+
assetReader,
358+
packageUriMapper,
359+
() async => {},
360+
buildSettings,
361+
).strategy,
358362
_ => throw Exception(
359363
'Unsupported DDC module format ${testSettings.moduleFormat.name}.',
360364
)

0 commit comments

Comments
 (0)