| OLD | NEW |
| 1 #!/usr/bin/env dart | 1 #!/usr/bin/env dart |
| 2 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 2 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 3 // for details. All rights reserved. Use of this source code is governed by a | 3 // for details. All rights reserved. Use of this source code is governed by a |
| 4 // BSD-style license that can be found in the LICENSE file. | 4 // BSD-style license that can be found in the LICENSE file. |
| 5 | 5 |
| 6 /// Runs io.js with dev_compiler's generated code. | 6 /// Runs io.js with dev_compiler's generated code. |
| 7 library dev_compiler.bin.devrun; | 7 library dev_compiler.bin.devrun; |
| 8 | 8 |
| 9 import 'dart:io'; | 9 import 'dart:io'; |
| 10 | 10 |
| 11 import 'package:dev_compiler/src/compiler.dart' show validateOptions, compile; | 11 import 'package:dev_compiler/src/compiler.dart' show validateOptions, compile; |
| 12 import 'package:dev_compiler/src/options.dart'; | 12 import 'package:dev_compiler/src/options.dart'; |
| 13 import 'package:dev_compiler/src/runner/runtime_utils.dart' show | 13 import 'package:dev_compiler/src/runner/runtime_utils.dart' |
| 14 listOutputFiles, getMainModuleName; | 14 show listOutputFiles, getMainModuleName; |
| 15 import 'package:dev_compiler/src/runner/v8_runner.dart' show V8Runner; | 15 import 'package:dev_compiler/src/runner/v8_runner.dart' show V8Runner; |
| 16 | 16 |
| 17 import 'package:path/path.dart'; | 17 import 'package:path/path.dart'; |
| 18 | 18 |
| 19 | |
| 20 void _showUsageAndExit() { | 19 void _showUsageAndExit() { |
| 21 print('usage: dartdevrun [<options>] <file.dart>\n'); | 20 print('usage: dartdevrun [<options>] <file.dart>\n'); |
| 22 print('<file.dart> is a single Dart file to run.\n'); | 21 print('<file.dart> is a single Dart file to run.\n'); |
| 23 print('<options> include:\n'); | 22 print('<options> include:\n'); |
| 24 print(argParser.usage); | 23 print(argParser.usage); |
| 25 exit(1); | 24 exit(1); |
| 26 } | 25 } |
| 27 | 26 |
| 28 main(List<String> args) async { | 27 main(List<String> args) async { |
| 29 args = []..add('--arrow-fn-bind-this')..addAll(args); | 28 args = [] |
| 29 ..add('--arrow-fn-bind-this') |
| 30 ..addAll(args); |
| 30 | 31 |
| 31 CompilerOptions options = validateOptions(args, forceOutDir: true); | 32 CompilerOptions options = validateOptions(args, forceOutDir: true); |
| 32 if (options == null || options.help) { | 33 if (options == null || options.help) { |
| 33 _showUsageAndExit(); | 34 _showUsageAndExit(); |
| 34 } | 35 } |
| 35 if (options.inputs.length != 1) { | 36 if (options.inputs.length != 1) { |
| 36 stderr.writeln("Please only specify one input to run"); | 37 stderr.writeln("Please only specify one input to run"); |
| 37 _showUsageAndExit(); | 38 _showUsageAndExit(); |
| 38 } | 39 } |
| 39 var runner = new V8Runner(options); | 40 var runner = new V8Runner(options); |
| 40 | 41 |
| 41 if (!await compile(options)) exit(1); | 42 if (!await compile(options)) exit(1); |
| 42 | 43 |
| 43 var files = await listOutputFiles(options); | 44 var files = await listOutputFiles(options); |
| 44 var startStatement = 'dart_library.start("${getMainModuleName(options)}");'; | 45 var startStatement = 'dart_library.start("${getMainModuleName(options)}");'; |
| 45 | 46 |
| 46 // TODO(ochafik): Only generate the html when some flag is set. | 47 // TODO(ochafik): Only generate the html when some flag is set. |
| 47 await _writeHtmlRunner(options, files, startStatement); | 48 await _writeHtmlRunner(options, files, startStatement); |
| 48 | 49 |
| 49 // Give our soul (and streams) away to iojs. | 50 // Give our soul (and streams) away to iojs. |
| 50 Process process = await runner.start(files, startStatement); | 51 Process process = await runner.start(files, startStatement); |
| 51 stdin.pipe(process.stdin); | 52 stdin.pipe(process.stdin); |
| 52 stdout.addStream(process.stdout); | 53 stdout.addStream(process.stdout); |
| 53 stderr.addStream(process.stderr); | 54 stderr.addStream(process.stderr); |
| 54 exit(await process.exitCode); | 55 exit(await process.exitCode); |
| 55 } | 56 } |
| 56 | 57 |
| 57 /// Generates an HTML file that can be used to run the output with Chrome Dev. | 58 /// Generates an HTML file that can be used to run the output with Chrome Dev. |
| 58 _writeHtmlRunner(CompilerOptions options, List<File> files, | 59 _writeHtmlRunner( |
| 59 String startStatement) async { | 60 CompilerOptions options, List<File> files, String startStatement) async { |
| 60 String outputDir = options.codegenOptions.outputDir; | 61 String outputDir = options.codegenOptions.outputDir; |
| 61 String htmlOutput = join(outputDir, "run.html"); | 62 String htmlOutput = join(outputDir, "run.html"); |
| 62 await new File(htmlOutput).writeAsString(''' | 63 await new File(htmlOutput).writeAsString(''' |
| 63 <html><head></head><body> | 64 <html><head></head><body> |
| 64 ${files.map((f) => | 65 ${files.map((f) => |
| 65 '<script src="${relative(f.path, from: outputDir)}"></script>') | 66 '<script src="${relative(f.path, from: outputDir)}"></script>') |
| 66 .join("\n")} | 67 .join("\n")} |
| 67 <script>$startStatement</script> | 68 <script>$startStatement</script> |
| 68 </body></html> | 69 </body></html> |
| 69 '''); | 70 '''); |
| 70 | 71 |
| 71 stderr.writeln( | 72 stderr.writeln( |
| 72 'Wrote $htmlOutput. It can be opened in Chrome Dev with the following flag
s:\n' | 73 'Wrote $htmlOutput. It can be opened in Chrome Dev with the following flag
s:\n' |
| 73 '--js-flags="--harmony-arrow-functions ' | 74 '--js-flags="--harmony-arrow-functions ' |
| 74 '--harmony-classes ' | 75 '--harmony-classes ' |
| 75 '--harmony-computed-property-names ' | 76 '--harmony-computed-property-names ' |
| 76 '--harmony-spreadcalls"' | 77 '--harmony-spreadcalls"' |
| 77 '\n'); | 78 '\n'); |
| 78 } | 79 } |
| OLD | NEW |