Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(59)

Unified Diff: lib/build/web_components.dart

Issue 950883003: fix bug in scriptcompactors bootstrap and added transform function which can be used by other trans… (Closed) Base URL: git@github.com:dart-lang/web-components.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: lib/build/web_components.dart
diff --git a/lib/build/web_components.dart b/lib/build/web_components.dart
index 63cdc4a67945bc4230e233cda6f81f42f9f69719..d1028b2b9b7e2023274fcaf7e8921665e0295078 100644
--- a/lib/build/web_components.dart
+++ b/lib/build/web_components.dart
@@ -12,10 +12,35 @@ import 'package:code_transformers/messages/build_logger.dart';
import 'package:code_transformers/resolver.dart';
import 'package:html5lib/dom.dart' as dom;
import 'package:initialize/transformer.dart' show generateBootstrapFile;
+import 'package:initialize/build/initializer_plugin.dart';
import 'package:path/path.dart' as path;
import 'package:web_components/transformer.dart';
import 'common.dart';
+/// Public method that can be used inside any [Transformer] which already has a
+/// [Resolver] and [Transform] to generate a bootstrap file for the
+/// web_components package.
+Asset generateWebComponentsBootstrap(Resolver resolver, Transform transform,
+ dom.Document document, AssetId scriptId, AssetId newScriptId,
+ {List<InitializerPlugin> extraPlugins: const []}) {
+ var htmlImportRecorder = new HtmlImportAnnotationRecorder();
+ var plugins = [htmlImportRecorder]..addAll(extraPlugins);
+
+ // Bootstrap the application using the `initialize` package and our
+ // plugins.
+ var initializeBootstrap = generateBootstrapFile(
+ resolver, transform, scriptId, newScriptId,
+ errorIfNotFound: false, plugins: plugins);
+
+ // Add all seen imports to the document.
+ for (var importPath in htmlImportRecorder.importPaths) {
+ document.head.append(new dom.Element.tag('link')
+ ..attributes = {'rel': 'import', 'href': importPath,});
+ }
+
+ return initializeBootstrap;
+}
+
/// A [Transformer] which runs the `initialize` transformer with
/// some special plugins and also inlines the html imports.
class WebComponentsTransformer extends Transformer {
@@ -91,27 +116,17 @@ class WebComponentsTransformer extends Transformer {
var newScriptId = new AssetId(scriptId.package,
'${path.url.withoutExtension(scriptId.path)}.initialize.dart');
- // Bootstrap the application using the `initialize` package and the
- // html import annotation recorder plugin.
- var htmlImportRecorder = new HtmlImportAnnotationRecorder();
- var initializeBootstrap = generateBootstrapFile(
- resolver, transform, scriptId, newScriptId,
- errorIfNotFound: false, plugins: [htmlImportRecorder]);
- transform.addOutput(initializeBootstrap);
-
- // Add all seen imports to the document.
- for (var importPath in htmlImportRecorder.importPaths) {
- doc.head.append(new dom.Element.tag('link')
- ..attributes = {'rel': 'import', 'href': importPath,});
- }
+ var bootstrap = generateWebComponentsBootstrap(
+ resolver, transform, doc, scriptId, newScriptId);
// Swap out the main script tag for the bootstrap version.
- mainScriptTag.attributes['src'] = path.url.relative(
- initializeBootstrap.id.path,
+ mainScriptTag.attributes['src'] = path.url.relative(bootstrap.id.path,
from: path.url.dirname(primaryInput.id.path));
+ // Output the new document and bootstrap file.
transform
.addOutput(new Asset.fromString(primaryInput.id, doc.outerHtml));
+ transform.addOutput(bootstrap);
});
});
}

Powered by Google App Engine
This is Rietveld 408576698