OLD | NEW |
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 |
11 import 'package:analyzer/file_system/file_system.dart' | 11 import 'package:analyzer/file_system/file_system.dart' show ResourceUriResolver; |
12 show ResourceUriResolver; | |
13 import 'package:analyzer/file_system/memory_file_system.dart' | 12 import 'package:analyzer/file_system/memory_file_system.dart' |
14 show MemoryResourceProvider; | 13 show MemoryResourceProvider; |
15 import 'package:analyzer/src/context/context.dart' show AnalysisContextImpl; | 14 import 'package:analyzer/src/context/context.dart' show AnalysisContextImpl; |
16 import 'package:analyzer/src/generated/source.dart' | 15 import 'package:analyzer/src/generated/source.dart' show DartUriResolver; |
17 show DartUriResolver; | |
18 import 'package:analyzer/src/summary/idl.dart' show PackageBundle; | 16 import 'package:analyzer/src/summary/idl.dart' show PackageBundle; |
19 import 'package:analyzer/src/summary/package_bundle_reader.dart' | 17 import 'package:analyzer/src/summary/package_bundle_reader.dart' |
20 show | 18 show |
21 SummaryDataStore, | 19 SummaryDataStore, |
22 InSummaryPackageUriResolver, | 20 InSummaryPackageUriResolver, |
23 InputPackagesResultProvider, | 21 InputPackagesResultProvider, |
24 InSummarySource; | 22 InSummarySource; |
25 import 'package:analyzer/src/summary/summary_sdk.dart' show SummaryBasedDartSdk; | 23 import 'package:analyzer/src/summary/summary_sdk.dart' show SummaryBasedDartSdk; |
26 | 24 |
27 import 'package:args/command_runner.dart'; | 25 import 'package:args/command_runner.dart'; |
28 | 26 |
29 import 'package:dev_compiler/src/analyzer/context.dart' show AnalyzerOptions; | 27 import 'package:dev_compiler/src/analyzer/context.dart' show AnalyzerOptions; |
30 import 'package:dev_compiler/src/compiler/compiler.dart' | 28 import 'package:dev_compiler/src/compiler/compiler.dart' |
31 show BuildUnit, CompilerOptions, JSModuleFile, ModuleCompiler; | 29 show BuildUnit, CompilerOptions, JSModuleFile, ModuleCompiler; |
32 | 30 |
| 31 import 'package:dev_compiler/src/compiler/module_builder.dart'; |
33 import 'package:js/js.dart'; | 32 import 'package:js/js.dart'; |
34 | 33 |
35 typedef void MessageHandler(Object message); | 34 typedef void MessageHandler(Object message); |
36 | 35 |
37 /// The command for invoking the modular compiler. | 36 /// The command for invoking the modular compiler. |
38 class WebCompileCommand extends Command { | 37 class WebCompileCommand extends Command { |
39 get name => 'compile'; | 38 get name => 'compile'; |
40 | 39 |
41 get description => 'Compile a set of Dart files into a JavaScript module.'; | 40 get description => 'Compile a set of Dart files into a JavaScript module.'; |
42 final MessageHandler messageHandler; | 41 final MessageHandler messageHandler; |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
97 | 96 |
98 var fileResolvers = [summaryResolver, resourceUriResolver]; | 97 var fileResolvers = [summaryResolver, resourceUriResolver]; |
99 | 98 |
100 var compiler = new ModuleCompiler( | 99 var compiler = new ModuleCompiler( |
101 new AnalyzerOptions(dartSdkPath: '/dart-sdk'), | 100 new AnalyzerOptions(dartSdkPath: '/dart-sdk'), |
102 sdkResolver: sdkResolver, | 101 sdkResolver: sdkResolver, |
103 fileResolvers: fileResolvers, | 102 fileResolvers: fileResolvers, |
104 resourceProvider: resourceProvider); | 103 resourceProvider: resourceProvider); |
105 | 104 |
106 (compiler.context as AnalysisContextImpl).resultProvider = | 105 (compiler.context as AnalysisContextImpl).resultProvider = |
107 new InputPackagesResultProvider(compiler.context, summaryDataStore); | 106 new InputPackagesResultProvider(compiler.context, summaryDataStore); |
108 | 107 |
109 var compilerOptions = new CompilerOptions.fromArguments(argResults); | 108 var compilerOptions = new CompilerOptions.fromArguments(argResults); |
110 | 109 |
111 var compileFn = (String dart, int number) { | 110 var compileFn = (String dart, int number) { |
112 // Create a new virtual File that contains the given Dart source. | 111 // Create a new virtual File that contains the given Dart source. |
113 resourceProvider.newFile("/expression${number}.dart", dart); | 112 resourceProvider.newFile("/expression${number}.dart", dart); |
114 | 113 |
115 var unit = new BuildUnit("expression${number}", "", | 114 var unit = new BuildUnit("expression${number}", "", |
116 ["file:///expression${number}.dart"], _moduleForLibrary); | 115 ["file:///expression${number}.dart"], _moduleForLibrary); |
117 | 116 |
118 JSModuleFile module = compiler.compile(unit, compilerOptions); | 117 JSModuleFile module = compiler.compile(unit, compilerOptions); |
119 module.errors.forEach(messageHandler); | 118 module.errors.forEach(messageHandler); |
120 | 119 |
121 if (!module.isValid) throw new CompileErrorException(); | 120 if (!module.isValid) throw new CompileErrorException(); |
122 return module.code; | 121 |
| 122 var code = |
| 123 module.getCode(ModuleFormat.amd, unit.name, unit.name + '.map'); |
| 124 return code.code; |
123 }; | 125 }; |
124 | 126 |
125 return allowInterop(compileFn); | 127 return allowInterop(compileFn); |
126 } | 128 } |
127 } | 129 } |
128 | 130 |
129 // Given path, determine corresponding dart library. | 131 // Given path, determine corresponding dart library. |
130 String _moduleForLibrary(source) { | 132 String _moduleForLibrary(source) { |
131 if (source is InSummarySource) { | 133 if (source is InSummarySource) { |
132 return source.summaryPath.substring(1).replaceAll('.api.ds', ''); | 134 return source.summaryPath.substring(1).replaceAll('.api.ds', ''); |
133 } | 135 } |
134 return source.toString().substring(1).replaceAll('.dart', ''); | 136 return source.toString().substring(1).replaceAll('.dart', ''); |
135 } | 137 } |
136 | 138 |
137 /// Thrown when the input source code has errors. | 139 /// Thrown when the input source code has errors. |
138 class CompileErrorException implements Exception { | 140 class CompileErrorException implements Exception { |
139 toString() => '\nPlease fix all errors before compiling (warnings are okay).'; | 141 toString() => '\nPlease fix all errors before compiling (warnings are okay).'; |
140 } | 142 } |
OLD | NEW |