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

Side by Side Diff: web_components/lib/build/web_components.dart

Issue 1400473008: Roll Observatory packages and add a roll script (Closed) Base URL: git@github.com:dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years, 2 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 /// Transformer used for pub serve and pub build
6 library web_components.build.web_components;
7
8 import 'dart:async';
9 import 'package:barback/barback.dart';
10 import 'package:code_transformers/assets.dart';
11 import 'package:code_transformers/messages/build_logger.dart';
12 import 'package:code_transformers/resolver.dart';
13 import 'package:code_transformers/src/dart_sdk.dart' as dart_sdk;
14 import 'package:html/dom.dart' as dom;
15 import 'package:initialize/transformer.dart' show generateBootstrapFile;
16 import 'package:initialize/build/initializer_plugin.dart';
17 import 'package:path/path.dart' as path;
18 import 'package:web_components/transformer.dart';
19 import 'common.dart';
20
21 /// Public method that can be used inside any [Transformer] which already has a
22 /// [Resolver] and [Transform] to generate a bootstrap file for the
23 /// web_components package.
24 Asset generateWebComponentsBootstrap(Resolver resolver, Transform transform,
25 dom.Document document, AssetId scriptId, AssetId newScriptId,
26 {List<InitializerPlugin> extraPlugins: const []}) {
27 var htmlImportRecorder = new HtmlImportAnnotationRecorder();
28 var plugins = [htmlImportRecorder]..addAll(extraPlugins);
29
30 // Bootstrap the application using the `initialize` package and our
31 // plugins.
32 var initializeBootstrap = generateBootstrapFile(
33 resolver, transform, scriptId, newScriptId,
34 errorIfNotFound: false, plugins: plugins);
35
36 // Add all seen imports to the document, before the first dart script tag if
37 // it exists.
38 var dartScript =
39 document.head.querySelector('script[type="application/dart"]');
40 for (var importPath in htmlImportRecorder.importPaths) {
41 var import = new dom.Element.tag('link')
42 ..attributes = {'rel': 'import', 'href': importPath,};
43 document.head.insertBefore(import, dartScript);
44 }
45
46 return initializeBootstrap;
47 }
48
49 /// A [Transformer] which runs the `initialize` transformer with
50 /// some special plugins and also inlines the html imports.
51 class WebComponentsTransformer extends Transformer {
52 final Resolvers _resolvers;
53 TransformOptions options;
54
55 WebComponentsTransformer(this.options)
56 : _resolvers = new Resolvers.fromMock(dart_sdk.mockSdkSources);
57
58 bool isPrimary(AssetId id) {
59 if (options.entryPoints != null) {
60 return options.entryPoints.contains(id.path);
61 }
62 if (id.path == 'web/index.bootstrap.dart') return true;
63 // If no entry point is supplied, then any html file under web/ or test/ is
64 // an entry point.
65 return (id.path.startsWith('web/') || id.path.startsWith('test/')) &&
66 id.path.endsWith('.html');
67 }
68
69 Future apply(Transform transform) {
70 var logger = new BuildLogger(transform);
71 var primaryInput = transform.primaryInput;
72 return primaryInput.readAsString().then((html) {
73 // Find the dart script in the page.
74 var doc = parseHtml(html, primaryInput.id.path);
75 var mainScriptTag = doc.querySelector('script[type="$dartType"]');
76 var scriptId = uriToAssetId(primaryInput.id,
77 mainScriptTag.attributes['src'], logger, mainScriptTag.sourceSpan);
78
79 return _resolvers.get(transform, [scriptId]).then((resolver) {
80 var newScriptId = new AssetId(scriptId.package,
81 '${path.url.withoutExtension(scriptId.path)}.initialize.dart');
82
83 var bootstrap = generateWebComponentsBootstrap(
84 resolver, transform, doc, scriptId, newScriptId);
85
86 // Swap out the main script tag for the bootstrap version.
87 mainScriptTag.attributes['src'] = path.url.relative(bootstrap.id.path,
88 from: path.url.dirname(primaryInput.id.path));
89
90 // Output the new document and bootstrap file.
91 transform
92 .addOutput(new Asset.fromString(primaryInput.id, doc.outerHtml));
93 transform.addOutput(bootstrap);
94 });
95 });
96 }
97 }
OLDNEW
« no previous file with comments | « web_components/lib/build/test_compatibility.dart ('k') | web_components/lib/custom_element_proxy.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698