mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
[flutter_tools] Generate correct entrypoint module name for experimental web compiler (#49486)
This commit is contained in:
parent
7f715628b0
commit
ace2c2297f
@ -68,7 +68,6 @@ class WebAssetServer {
|
|||||||
// RandomAccessFile and read on demand.
|
// RandomAccessFile and read on demand.
|
||||||
final Map<String, Uint8List> _files = <String, Uint8List>{};
|
final Map<String, Uint8List> _files = <String, Uint8List>{};
|
||||||
final Map<String, Uint8List> _sourcemaps = <String, Uint8List>{};
|
final Map<String, Uint8List> _sourcemaps = <String, Uint8List>{};
|
||||||
|
|
||||||
final RegExp _drivePath = RegExp(r'\/[A-Z]:\/');
|
final RegExp _drivePath = RegExp(r'\/[A-Z]:\/');
|
||||||
|
|
||||||
final Packages _packages;
|
final Packages _packages;
|
||||||
@ -92,6 +91,7 @@ class WebAssetServer {
|
|||||||
await response.close();
|
await response.close();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(jonahwilliams): better path normalization in frontend_server to remove
|
// TODO(jonahwilliams): better path normalization in frontend_server to remove
|
||||||
// this workaround.
|
// this workaround.
|
||||||
String requestPath = request.uri.path;
|
String requestPath = request.uri.path;
|
||||||
@ -347,17 +347,20 @@ class WebDevFS implements DevFS {
|
|||||||
'web',
|
'web',
|
||||||
'dart_stack_trace_mapper.js',
|
'dart_stack_trace_mapper.js',
|
||||||
));
|
));
|
||||||
|
final String entrypoint = PackageUriMapper(mainPath, '.packages', null, null)
|
||||||
|
.map(mainPath)
|
||||||
|
?.pathSegments?.join('/');
|
||||||
_webAssetServer.writeFile(
|
_webAssetServer.writeFile(
|
||||||
'/main.dart.js',
|
'/main.dart.js',
|
||||||
generateBootstrapScript(
|
generateBootstrapScript(
|
||||||
requireUrl: _filePathToUriFragment(requireJS.path),
|
requireUrl: _filePathToUriFragment(requireJS.path),
|
||||||
mapperUrl: _filePathToUriFragment(stackTraceMapper.path),
|
mapperUrl: _filePathToUriFragment(stackTraceMapper.path),
|
||||||
entrypoint: '${_filePathToUriFragment(mainPath)}.lib.js',
|
entrypoint: entrypoint != null ? '/packages/$entrypoint.lib.js' : '$mainPath.lib.js',
|
||||||
));
|
));
|
||||||
_webAssetServer.writeFile(
|
_webAssetServer.writeFile(
|
||||||
'/main_module.js',
|
'/main_module.js',
|
||||||
generateMainModule(
|
generateMainModule(
|
||||||
entrypoint: '${_filePathToUriFragment(mainPath)}.lib.js',
|
entrypoint: entrypoint != null ? '/packages/$entrypoint.lib.js' : '$mainPath.lib.js',
|
||||||
));
|
));
|
||||||
_webAssetServer.writeFile('/dart_sdk.js', dartSdk.readAsStringSync());
|
_webAssetServer.writeFile('/dart_sdk.js', dartSdk.readAsStringSync());
|
||||||
_webAssetServer.writeFile(
|
_webAssetServer.writeFile(
|
||||||
|
@ -35,21 +35,23 @@ void main() {
|
|||||||
MockHttpHeaders headers;
|
MockHttpHeaders headers;
|
||||||
Completer<void> closeCompleter;
|
Completer<void> closeCompleter;
|
||||||
WebAssetServer webAssetServer;
|
WebAssetServer webAssetServer;
|
||||||
MockPlatform windows;
|
|
||||||
MockPlatform linux;
|
MockPlatform linux;
|
||||||
Packages packages;
|
Packages packages;
|
||||||
|
MockPlatform windows;
|
||||||
|
|
||||||
setUpAll(() async {
|
setUpAll(() async {
|
||||||
packages = await loadPackagesFile(Uri.base.resolve('.packages'));
|
packages = await loadPackagesFile(Uri.base.resolve('.packages'), loader: (Uri uri) async {
|
||||||
|
return utf8.encode('\n');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
setUp(() {
|
setUp(() {
|
||||||
windows = MockPlatform();
|
|
||||||
linux = MockPlatform();
|
linux = MockPlatform();
|
||||||
when(windows.environment).thenReturn(const <String, String>{});
|
windows = MockPlatform();
|
||||||
when(windows.isWindows).thenReturn(true);
|
|
||||||
when(linux.isWindows).thenReturn(false);
|
when(linux.isWindows).thenReturn(false);
|
||||||
when(linux.environment).thenReturn(const <String, String>{});
|
when(linux.environment).thenReturn(const <String, String>{});
|
||||||
|
when(windows.environment).thenReturn(const <String, String>{});
|
||||||
|
when(windows.isWindows).thenReturn(true);
|
||||||
testbed = Testbed(setup: () {
|
testbed = Testbed(setup: () {
|
||||||
mockHttpServer = MockHttpServer();
|
mockHttpServer = MockHttpServer();
|
||||||
requestController = StreamController<HttpRequest>.broadcast();
|
requestController = StreamController<HttpRequest>.broadcast();
|
||||||
@ -139,29 +141,6 @@ void main() {
|
|||||||
Platform: () => linux,
|
Platform: () => linux,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
test('serves JavaScript files from in memory cache on Windows', () => testbed.run(() async {
|
|
||||||
final File source = globals.fs.file('source')
|
|
||||||
..writeAsStringSync('main() {}');
|
|
||||||
final File sourcemap = globals.fs.file('sourcemap')
|
|
||||||
..writeAsStringSync('{}');
|
|
||||||
final File manifest = globals.fs.file('manifest')
|
|
||||||
..writeAsStringSync(json.encode(<String, Object>{'/C:/foo.js': <String, Object>{
|
|
||||||
'code': <int>[0, source.lengthSync()],
|
|
||||||
'sourcemap': <int>[0, 2],
|
|
||||||
}}));
|
|
||||||
webAssetServer.write(source, manifest, sourcemap);
|
|
||||||
|
|
||||||
when(request.uri).thenReturn(Uri.parse('http://foobar/C:/foo.js'));
|
|
||||||
requestController.add(request);
|
|
||||||
await closeCompleter.future;
|
|
||||||
|
|
||||||
verify(headers.add('Content-Length', source.lengthSync())).called(1);
|
|
||||||
verify(headers.add('Content-Type', 'application/javascript')).called(1);
|
|
||||||
verify(response.add(source.readAsBytesSync())).called(1);
|
|
||||||
}, overrides: <Type, Generator>{
|
|
||||||
Platform: () => windows,
|
|
||||||
}));
|
|
||||||
|
|
||||||
test('serves JavaScript files from in memory cache not from manifest', () => testbed.run(() async {
|
test('serves JavaScript files from in memory cache not from manifest', () => testbed.run(() async {
|
||||||
webAssetServer.writeFile('/foo.js', 'main() {}');
|
webAssetServer.writeFile('/foo.js', 'main() {}');
|
||||||
|
|
||||||
@ -193,7 +172,30 @@ void main() {
|
|||||||
verify(response.statusCode = 404).called(1);
|
verify(response.statusCode = 404).called(1);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
test('serves Dart files from in filesystem on Windows', () => testbed.run(() async {
|
test('serves JavaScript files from in memory cache on Windows', () => testbed.run(() async {
|
||||||
|
final File source = globals.fs.file('source')
|
||||||
|
..writeAsStringSync('main() {}');
|
||||||
|
final File sourcemap = globals.fs.file('sourcemap')
|
||||||
|
..writeAsStringSync('{}');
|
||||||
|
final File manifest = globals.fs.file('manifest')
|
||||||
|
..writeAsStringSync(json.encode(<String, Object>{'/C:/foo.js': <String, Object>{
|
||||||
|
'code': <int>[0, source.lengthSync()],
|
||||||
|
'sourcemap': <int>[0, 2],
|
||||||
|
}}));
|
||||||
|
webAssetServer.write(source, manifest, sourcemap);
|
||||||
|
|
||||||
|
when(request.uri).thenReturn(Uri.parse('http://foobar/C:/foo.js'));
|
||||||
|
requestController.add(request);
|
||||||
|
await closeCompleter.future;
|
||||||
|
|
||||||
|
verify(headers.add('Content-Length', source.lengthSync())).called(1);
|
||||||
|
verify(headers.add('Content-Type', 'application/javascript')).called(1);
|
||||||
|
verify(response.add(source.readAsBytesSync())).called(1);
|
||||||
|
}, overrides: <Type, Generator>{
|
||||||
|
Platform: () => windows,
|
||||||
|
}));
|
||||||
|
|
||||||
|
test('serves Dart files from in filesystem on Windows', () => testbed.run(() async {
|
||||||
final File source = globals.fs.file('foo.dart').absolute
|
final File source = globals.fs.file('foo.dart').absolute
|
||||||
..createSync(recursive: true)
|
..createSync(recursive: true)
|
||||||
..writeAsStringSync('void main() {}');
|
..writeAsStringSync('void main() {}');
|
||||||
@ -208,6 +210,22 @@ void main() {
|
|||||||
Platform: () => windows,
|
Platform: () => windows,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
test('serves asset files from in filesystem with known mime type on Windows', () => testbed.run(() async {
|
||||||
|
final File source = globals.fs.file(globals.fs.path.join('build', 'flutter_assets', 'foo.png'))
|
||||||
|
..createSync(recursive: true)
|
||||||
|
..writeAsBytesSync(kTransparentImage);
|
||||||
|
|
||||||
|
when(request.uri).thenReturn(Uri.parse('http://foobar/assets/foo.png'));
|
||||||
|
requestController.add(request);
|
||||||
|
await closeCompleter.future;
|
||||||
|
|
||||||
|
verify(headers.add('Content-Length', source.lengthSync())).called(1);
|
||||||
|
verify(headers.add('Content-Type', 'image/png')).called(1);
|
||||||
|
verify(response.addStream(any)).called(1);
|
||||||
|
}, overrides: <Type, Generator>{
|
||||||
|
Platform: () => windows,
|
||||||
|
}));
|
||||||
|
|
||||||
test('serves Dart files from in filesystem on Linux/macOS', () => testbed.run(() async {
|
test('serves Dart files from in filesystem on Linux/macOS', () => testbed.run(() async {
|
||||||
final File source = globals.fs.file('foo.dart').absolute
|
final File source = globals.fs.file('foo.dart').absolute
|
||||||
..createSync(recursive: true)
|
..createSync(recursive: true)
|
||||||
@ -245,23 +263,6 @@ void main() {
|
|||||||
verify(response.addStream(any)).called(1);
|
verify(response.addStream(any)).called(1);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
test('serves asset files from in filesystem with known mime type on Windows', () => testbed.run(() async {
|
|
||||||
final File source = globals.fs.file(globals.fs.path.join('build', 'flutter_assets', 'foo.png'))
|
|
||||||
..createSync(recursive: true)
|
|
||||||
..writeAsBytesSync(kTransparentImage);
|
|
||||||
|
|
||||||
when(request.uri).thenReturn(Uri.parse('http://foobar/assets/foo.png'));
|
|
||||||
requestController.add(request);
|
|
||||||
await closeCompleter.future;
|
|
||||||
|
|
||||||
verify(headers.add('Content-Length', source.lengthSync())).called(1);
|
|
||||||
verify(headers.add('Content-Type', 'image/png')).called(1);
|
|
||||||
verify(response.addStream(any)).called(1);
|
|
||||||
}, overrides: <Type, Generator>{
|
|
||||||
Platform: () => windows,
|
|
||||||
}));
|
|
||||||
|
|
||||||
|
|
||||||
test('serves asset files files from in filesystem with unknown mime type and length > 12', () => testbed.run(() async {
|
test('serves asset files files from in filesystem with unknown mime type and length > 12', () => testbed.run(() async {
|
||||||
final File source = globals.fs.file(globals.fs.path.join('build', 'flutter_assets', 'foo'))
|
final File source = globals.fs.file(globals.fs.path.join('build', 'flutter_assets', 'foo'))
|
||||||
..createSync(recursive: true)
|
..createSync(recursive: true)
|
||||||
|
Loading…
Reference in New Issue
Block a user