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

Unified Diff: lib/src/codegen/html_codegen.dart

Issue 1235503010: fixes #219, able to compile multiple entry points (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 5 years, 5 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/src/codegen/html_codegen.dart
diff --git a/lib/src/codegen/html_codegen.dart b/lib/src/codegen/html_codegen.dart
index f6f2332f630837fa433cc075ae561acfc3a4fd39..08ea0dc796c0b11a64d8349bea695069da905a41 100644
--- a/lib/src/codegen/html_codegen.dart
+++ b/lib/src/codegen/html_codegen.dart
@@ -9,12 +9,10 @@ import 'package:html/parser.dart' show parseFragment;
import 'package:logging/logging.dart' show Logger;
import 'package:path/path.dart' as path;
-import 'package:dev_compiler/src/dependency_graph.dart';
-import 'package:dev_compiler/src/options.dart';
+import 'package:dev_compiler/src/compiler.dart' show AbstractCompiler;
+import 'package:dev_compiler/src/server/dependency_graph.dart';
import 'package:dev_compiler/src/utils.dart' show colorOf, resourceOutputPath;
-import 'js_codegen.dart' show jsOutputPath, jsOutputBase;
-
/// Emits an entry point HTML file corresponding to [inputFile] that can load
/// the code generated by the dev compiler.
///
@@ -24,7 +22,8 @@ import 'js_codegen.dart' show jsOutputPath, jsOutputBase;
/// application. When compiling to Dart, we ensure that the document contains a
/// single Dart script tag, but otherwise emit the original document
/// unmodified.
-String generateEntryHtml(HtmlSourceNode root, CompilerOptions options) {
+String generateEntryHtml(HtmlSourceNode root, AbstractCompiler compiler) {
+ var options = compiler.options;
var document = root.document.clone(true);
var scripts = document.querySelectorAll('script[type="application/dart"]');
if (scripts.isEmpty) {
@@ -73,7 +72,7 @@ String generateEntryHtml(HtmlSourceNode root, CompilerOptions options) {
resourcePath = _addHash(resourcePath, resource.cachingHash);
}
if (ext == '.js') {
- fragment.nodes.add(_libraryInclude(resourcePath));
+ fragment.nodes.add(libraryInclude(resourcePath));
} else if (ext == '.css') {
var stylesheetLink = '<link rel="stylesheet" href="$resourcePath">\n';
fragment.nodes.add(parseFragment(stylesheetLink));
@@ -84,24 +83,29 @@ String generateEntryHtml(HtmlSourceNode root, CompilerOptions options) {
for (var lib in libraries) {
var info = lib.info;
if (info == null) continue;
- var jsPath = jsOutputPath(info.library, root.uri);
- if (info.isEntry) mainLibraryName = jsOutputBase(info.library, root.uri);
+ var uri = info.library.source.uri;
+ var jsPath = compiler.getModulePath(uri);
+ if (info.isEntry) mainLibraryName = compiler.getModuleName(uri);
if (lib.cachingHash != null) {
jsPath = _addHash(jsPath, lib.cachingHash);
}
- fragment.nodes.add(_libraryInclude(jsPath));
+ fragment.nodes.add(libraryInclude(jsPath));
}
- fragment.nodes.add(_invokeMain(mainLibraryName));
+ fragment.nodes.add(invokeMain(mainLibraryName));
scripts[0].replaceWith(fragment);
return '${document.outerHtml}\n';
}
+// TODO(jmesserly): the string interpolation in these could lead to injection
+// bugs. Not really a security issue since input is trusted, but the resulting
+// parse tree may not match expectations if interpolated strings contain quotes.
+
/// A script tag that loads the .js code for a compiled library.
-Node _libraryInclude(String jsUrl) =>
+Node libraryInclude(String jsUrl) =>
parseFragment('<script src="$jsUrl"></script>\n');
/// A script tag that invokes the main function on the entry point library.
-Node _invokeMain(String mainLibraryName) {
+Node invokeMain(String mainLibraryName) {
var code = mainLibraryName == null
? 'console.error("dev_compiler error: main was not generated");'
// TODO(vsm): Can we simplify this?

Powered by Google App Engine
This is Rietveld 408576698