Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(39)

Side by Side Diff: pkg/dev_compiler/web/web_command.dart

Issue 2303163002: Update web_command code so that it continues to use the legacy module loader. Drive by removal of m… (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 @JS() 4 @JS()
5 library dev_compiler.web.web_command; 5 library dev_compiler.web.web_command;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:html' show HttpRequest; 8 import 'dart:html' show HttpRequest;
9 import 'dart:convert' show BASE64; 9 import 'dart:convert' show BASE64;
10 10
(...skipping 15 matching lines...) Expand all
26 26
27 import 'package:dev_compiler/src/analyzer/context.dart' show AnalyzerOptions; 27 import 'package:dev_compiler/src/analyzer/context.dart' show AnalyzerOptions;
28 import 'package:dev_compiler/src/compiler/compiler.dart' 28 import 'package:dev_compiler/src/compiler/compiler.dart'
29 show BuildUnit, CompilerOptions, JSModuleFile, ModuleCompiler; 29 show BuildUnit, CompilerOptions, JSModuleFile, ModuleCompiler;
30 30
31 import 'package:dev_compiler/src/compiler/module_builder.dart'; 31 import 'package:dev_compiler/src/compiler/module_builder.dart';
32 import 'package:js/js.dart'; 32 import 'package:js/js.dart';
33 33
34 typedef void MessageHandler(Object message); 34 typedef void MessageHandler(Object message);
35 35
36 @JS()
37 @anonymous
38 class CompileResult {
39 external factory CompileResult(
40 {String code, List<String> errors, bool isValid});
41 }
42
43 typedef CompileResult CompileModule(
44 String code, String libraryName, String fileName);
45
36 /// The command for invoking the modular compiler. 46 /// The command for invoking the modular compiler.
37 class WebCompileCommand extends Command { 47 class WebCompileCommand extends Command {
38 get name => 'compile'; 48 get name => 'compile';
39 49
40 get description => 'Compile a set of Dart files into a JavaScript module.'; 50 get description => 'Compile a set of Dart files into a JavaScript module.';
41 final MessageHandler messageHandler; 51 final MessageHandler messageHandler;
42 52
43 WebCompileCommand({MessageHandler messageHandler}) 53 WebCompileCommand({MessageHandler messageHandler})
44 : this.messageHandler = messageHandler ?? print { 54 : this.messageHandler = messageHandler ?? print {
45 CompilerOptions.addArguments(argParser); 55 CompilerOptions.addArguments(argParser);
(...skipping 22 matching lines...) Expand all
68 summaryBytes.add(BASE64.decode(response.responseText)); 78 summaryBytes.add(BASE64.decode(response.responseText));
69 } 79 }
70 80
71 var compileFn = setUpCompile(sdkBytes, summaryBytes, summaryUrls); 81 var compileFn = setUpCompile(sdkBytes, summaryBytes, summaryUrls);
72 onCompileReady(compileFn); 82 onCompileReady(compileFn);
73 }).catchError((error) => onError('Summaries failed to load: $error')); 83 }).catchError((error) => onError('Summaries failed to load: $error'));
74 }).catchError( 84 }).catchError(
75 (error) => onError('Dart sdk summaries failed to load: $error')); 85 (error) => onError('Dart sdk summaries failed to load: $error'));
76 } 86 }
77 87
78 Function setUpCompile(List<int> sdkBytes, List<List<int>> summaryBytes, 88 CompileModule setUpCompile(List<int> sdkBytes, List<List<int>> summaryBytes,
79 List<String> summaryUrls) { 89 List<String> summaryUrls) {
80 var resourceProvider = new MemoryResourceProvider(); 90 var resourceProvider = new MemoryResourceProvider();
81 var resourceUriResolver = new ResourceUriResolver(resourceProvider); 91 var resourceUriResolver = new ResourceUriResolver(resourceProvider);
82 92
83 var packageBundle = new PackageBundle.fromBuffer(sdkBytes); 93 var packageBundle = new PackageBundle.fromBuffer(sdkBytes);
84 var webDartSdk = new SummaryBasedDartSdk.fromBundle( 94 var webDartSdk = new SummaryBasedDartSdk.fromBundle(
85 true, packageBundle, resourceProvider); 95 true, packageBundle, resourceProvider);
86 var sdkResolver = new DartUriResolver(webDartSdk); 96 var sdkResolver = new DartUriResolver(webDartSdk);
87 97
88 var summaryDataStore = new SummaryDataStore([]); 98 var summaryDataStore = new SummaryDataStore([]);
(...skipping 11 matching lines...) Expand all
100 new AnalyzerOptions(dartSdkPath: '/dart-sdk'), 110 new AnalyzerOptions(dartSdkPath: '/dart-sdk'),
101 sdkResolver: sdkResolver, 111 sdkResolver: sdkResolver,
102 fileResolvers: fileResolvers, 112 fileResolvers: fileResolvers,
103 resourceProvider: resourceProvider); 113 resourceProvider: resourceProvider);
104 114
105 (compiler.context as AnalysisContextImpl).resultProvider = 115 (compiler.context as AnalysisContextImpl).resultProvider =
106 new InputPackagesResultProvider(compiler.context, summaryDataStore); 116 new InputPackagesResultProvider(compiler.context, summaryDataStore);
107 117
108 var compilerOptions = new CompilerOptions.fromArguments(argResults); 118 var compilerOptions = new CompilerOptions.fromArguments(argResults);
109 119
110 var compileFn = (String dart, int number) { 120 CompileModule compileFn =
121 (String sourceCode, String libraryName, String fileName) {
111 // Create a new virtual File that contains the given Dart source. 122 // Create a new virtual File that contains the given Dart source.
112 resourceProvider.newFile("/expression${number}.dart", dart); 123 resourceProvider.newFile("/$fileName", sourceCode);
113 124
114 var unit = new BuildUnit("expression${number}", "", 125 var unit = new BuildUnit(
115 ["file:///expression${number}.dart"], _moduleForLibrary); 126 libraryName, "", ["file:///$fileName"], _moduleForLibrary);
116 127
117 JSModuleFile module = compiler.compile(unit, compilerOptions); 128 JSModuleFile module = compiler.compile(unit, compilerOptions);
118 module.errors.forEach(messageHandler);
119 129
120 if (!module.isValid) throw new CompileErrorException(); 130 var moduleCode = module.isValid
131 ? module
132 .getCode(ModuleFormat.legacy, unit.name, unit.name + '.map')
133 .code
134 : '';
121 135
122 var code = 136 return new CompileResult(
123 module.getCode(ModuleFormat.amd, unit.name, unit.name + '.map'); 137 code: moduleCode, isValid: module.isValid, errors: module.errors);
124 return code.code;
125 }; 138 };
126 139
127 return allowInterop(compileFn); 140 return allowInterop(compileFn);
128 } 141 }
129 } 142 }
130 143
131 // Given path, determine corresponding dart library. 144 // Given path, determine corresponding dart library.
132 String _moduleForLibrary(source) { 145 String _moduleForLibrary(source) {
133 if (source is InSummarySource) { 146 if (source is InSummarySource) {
134 return source.summaryPath.substring(1).replaceAll('.api.ds', ''); 147 return source.summaryPath.substring(1).replaceAll('.api.ds', '');
135 } 148 }
136 return source.toString().substring(1).replaceAll('.dart', ''); 149 return source.toString().substring(1).replaceAll('.dart', '');
137 } 150 }
138 151
139 /// Thrown when the input source code has errors. 152 /// Thrown when the input source code has errors.
140 class CompileErrorException implements Exception { 153 class CompileErrorException implements Exception {
141 toString() => '\nPlease fix all errors before compiling (warnings are okay).'; 154 toString() => '\nPlease fix all errors before compiling (warnings are okay).';
142 } 155 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698