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