OLD | NEW |
(Empty) | |
| 1 library dromaeo.transformer; |
| 2 |
| 3 import 'dart:async'; |
| 4 import 'package:barback/barback.dart'; |
| 5 |
| 6 /// Transformer used by `pub build` and `pub serve` to rewrite dromaeo html |
| 7 /// files to run performance tests. |
| 8 class DromaeoTransformer extends Transformer { |
| 9 |
| 10 final BarbackSettings settings; |
| 11 |
| 12 DromaeoTransformer.asPlugin(this.settings); |
| 13 |
| 14 /// The index.html file and the tests/dom-*-html.html files are the ones we |
| 15 /// apply this transform to. |
| 16 Future<bool> isPrimary(Asset asset) { |
| 17 var reg = new RegExp('(tests/dom-.+-html\.html\$)|(index\.html\$)'); |
| 18 return new Future.value(reg.hasMatch(asset.id.path)); |
| 19 } |
| 20 |
| 21 Future apply(Transform transform) { |
| 22 Asset primaryAsset = transform.primaryInput; |
| 23 AssetId primaryAssetId = primaryAsset.id; |
| 24 |
| 25 return primaryAsset.readAsString().then((String fileContents) { |
| 26 var filename = primaryAssetId.toString(); |
| 27 var outputFileContents = fileContents; |
| 28 |
| 29 if (filename.endsWith('index.html')) { |
| 30 var index = outputFileContents.indexOf( |
| 31 '<script src="packages/browser/dart.js">'); |
| 32 outputFileContents = outputFileContents.substring(0, index) + |
| 33 '<script src="packages/browser_controller' + |
| 34 '/perf_test_controller.js"></script>\n' + |
| 35 outputFileContents.substring(index); |
| 36 transform.addOutput(new Asset.fromString(new AssetId.parse( |
| 37 primaryAssetId.toString().replaceAll('.html', '-dart.html')), |
| 38 outputFileContents)); |
| 39 } |
| 40 |
| 41 outputFileContents = _sourceJsNotDart(outputFileContents); |
| 42 // Rename the script to take the JavaScript source. |
| 43 transform.addOutput(new Asset.fromString(new AssetId.parse( |
| 44 _appendJs(primaryAssetId.toString())), |
| 45 outputFileContents)); |
| 46 }); |
| 47 } |
| 48 |
| 49 String _appendJs(String path) => path.replaceAll('.html', '-js.html'); |
| 50 |
| 51 /// Given an html file that sources a Dart file, rewrite the html to instead |
| 52 /// source the compiled JavaScript file. |
| 53 String _sourceJsNotDart(String fileContents) { |
| 54 var dartScript = new RegExp( |
| 55 '<script type="application/dart" src="([\\w-]+)\.dart">'); |
| 56 var match = dartScript.firstMatch(fileContents); |
| 57 return fileContents.replaceAll(dartScript, '<script type="text/javascript"' |
| 58 ' src="${match.group(1)+ ".dart.js"}" defer>'); |
| 59 } |
| 60 } |
OLD | NEW |