Index: samples/third_party/dromaeo/lib/transformer.dart |
diff --git a/samples/third_party/dromaeo/lib/transformer.dart b/samples/third_party/dromaeo/lib/transformer.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..88fb58485fdd0040d3ed427a19fe0bde0c0fffeb |
--- /dev/null |
+++ b/samples/third_party/dromaeo/lib/transformer.dart |
@@ -0,0 +1,60 @@ |
+library dromaeo.transformer; |
+ |
+import 'dart:async'; |
+import 'package:barback/barback.dart'; |
+ |
+/// Transformer used by `pub build` and `pub serve` to rewrite dromaeo html |
+/// files to run performance tests. |
+class DromaeoTransformer extends Transformer { |
+ |
+ final BarbackSettings settings; |
+ |
+ DromaeoTransformer.asPlugin(this.settings); |
+ |
+ /// The index.html file and the tests/dom-*-html.html files are the ones we |
+ /// apply this transform to. |
+ Future<bool> isPrimary(Asset asset) { |
+ var reg = new RegExp('(tests/dom-.+-html\.html\$)|(index\.html\$)'); |
+ return new Future.value(reg.hasMatch(asset.id.path)); |
+ } |
+ |
+ Future apply(Transform transform) { |
+ Asset primaryAsset = transform.primaryInput; |
+ AssetId primaryAssetId = primaryAsset.id; |
+ |
+ return primaryAsset.readAsString().then((String fileContents) { |
+ var filename = primaryAssetId.toString(); |
+ var outputFileContents = fileContents; |
+ |
+ if (filename.endsWith('index.html')) { |
+ var index = outputFileContents.indexOf( |
+ '<script src="packages/browser/dart.js">'); |
+ outputFileContents = outputFileContents.substring(0, index) + |
+ '<script src="packages/browser_controller' + |
+ '/perf_test_controller.js"></script>\n' + |
+ outputFileContents.substring(index); |
+ transform.addOutput(new Asset.fromString(new AssetId.parse( |
+ primaryAssetId.toString().replaceAll('.html', '-dart.html')), |
+ outputFileContents)); |
+ } |
+ |
+ outputFileContents = _sourceJsNotDart(outputFileContents); |
+ // Rename the script to take the JavaScript source. |
+ transform.addOutput(new Asset.fromString(new AssetId.parse( |
+ _appendJs(primaryAssetId.toString())), |
+ outputFileContents)); |
+ }); |
+ } |
+ |
+ String _appendJs(String path) => path.replaceAll('.html', '-js.html'); |
+ |
+ /// Given an html file that sources a Dart file, rewrite the html to instead |
+ /// source the compiled JavaScript file. |
+ String _sourceJsNotDart(String fileContents) { |
+ var dartScript = new RegExp( |
+ '<script type="application/dart" src="([\\w-]+)\.dart">'); |
+ var match = dartScript.firstMatch(fileContents); |
+ return fileContents.replaceAll(dartScript, '<script type="text/javascript"' |
+ ' src="${match.group(1)+ ".dart.js"}" defer>'); |
+ } |
+} |