Index: third_party/pkg/angular/lib/tools/template_cache_generator.dart |
diff --git a/third_party/pkg/angular/lib/tools/template_cache_generator.dart b/third_party/pkg/angular/lib/tools/template_cache_generator.dart |
deleted file mode 100644 |
index 3c896b8c35ffd72c7d8b9aef0c122c5a0a3ce933..0000000000000000000000000000000000000000 |
--- a/third_party/pkg/angular/lib/tools/template_cache_generator.dart |
+++ /dev/null |
@@ -1,229 +0,0 @@ |
-library angular.template_cache_generator; |
- |
-import 'dart:io'; |
-import 'dart:async'; |
-import 'dart:collection'; |
- |
-import 'package:analyzer/src/generated/ast.dart'; |
-import 'package:analyzer/src/generated/source.dart'; |
-import 'package:analyzer/src/generated/element.dart'; |
-import 'package:di/generator.dart'; |
- |
-const String PACKAGE_PREFIX = 'package:'; |
-const String DART_PACKAGE_PREFIX = 'dart:'; |
- |
-String fileHeader(String library) => '''// GENERATED, DO NOT EDIT! |
-library ${library}; |
- |
-import 'package:angular/angular.dart'; |
- |
-primeTemplateCache(TemplateCache tc) { |
-'''; |
- |
-const String FILE_FOOTER = '}'; |
-const SYSTEM_PACKAGE_ROOT = '%SYSTEM_PACKAGE_ROOT%'; |
- |
-main(args) { |
- if (args.length < 4) { |
- print('Usage: templace_cache_generator path_to_entry_point sdk_path ' |
- 'output package_root1,package_root2,...|$SYSTEM_PACKAGE_ROOT ' |
- 'patternUrl1,rewriteTo1;patternUrl2,rewriteTo2 ' |
- 'blacklistClass1,blacklistClass2'); |
- exit(1); |
- } |
- |
- var entryPoint = args[0]; |
- var sdkPath = args[1]; |
- var output = args[2]; |
- var outputLibrary = args[3]; |
- var packageRoots = args[4] == SYSTEM_PACKAGE_ROOT ? |
- [Platform.packageRoot] : args[4].split(','); |
- Map<RegExp, String> urlRewriters = parseUrlRemapping(args[5]); |
- Set<String> blacklistedClasses = (args.length > 6) |
- ? new Set.from(args[6].split(',')) |
- : new Set(); |
- |
- print('sdkPath: $sdkPath'); |
- print('entryPoint: $entryPoint'); |
- print('output: $output'); |
- print('outputLibrary: $outputLibrary'); |
- print('packageRoots: $packageRoots'); |
- print('url rewritters: ' + args[5]); |
- print('blacklistedClasses: ' + blacklistedClasses.join(', ')); |
- |
- |
- Map<String, String> templates = {}; |
- |
- var c = new SourceCrawler(sdkPath, packageRoots); |
- var visitor = |
- new TemplateCollectingVisitor(templates, blacklistedClasses, c); |
- c.crawl(entryPoint, |
- (CompilationUnitElement compilationUnit, SourceFile source) => |
- visitor(compilationUnit, source.canonicalPath)); |
- |
- var sink = new File(output).openWrite(); |
- return printTemplateCache( |
- templates, urlRewriters, outputLibrary, sink).then((_) { |
- return sink.flush(); |
- }); |
-} |
- |
-Map<RegExp, String> parseUrlRemapping(String argument) { |
- Map<RegExp, String> result = new LinkedHashMap(); |
- if (argument.isEmpty) { |
- return result; |
- } |
- |
- argument.split(";").forEach((String pair) { |
- List<String> remapping = pair.split(","); |
- result[new RegExp(remapping[0])] = remapping[1]; |
- }); |
- return result; |
-} |
- |
-printTemplateCache(Map<String, String> templateKeyMap, |
- Map<RegExp, String> urlRewriters, |
- String outputLibrary, |
- IOSink outSink) { |
- |
- outSink.write(fileHeader(outputLibrary)); |
- |
- Future future = new Future.value(0); |
- List uris = templateKeyMap.keys.toList()..sort()..forEach((uri) { |
- var templateFile = templateKeyMap[uri]; |
- future = future.then((_) { |
- return new File(templateFile).readAsString().then((fileStr) { |
- fileStr = fileStr.replaceAll('"""', r'\"\"\"'); |
- String resultUri = uri; |
- urlRewriters.forEach((regexp, replacement) { |
- resultUri = resultUri.replaceFirst(regexp, replacement); |
- }); |
- outSink.write( |
- 'tc.put("$resultUri", new HttpResponse(200, r"""$fileStr"""));\n'); |
- }); |
- }); |
- }); |
- |
- // Wait until all templates files are processed. |
- return future.then((_) { |
- outSink.write(FILE_FOOTER); |
- }); |
-} |
- |
-class TemplateCollectingVisitor { |
- Map<String, String> templates; |
- Set<String> blacklistedClasses; |
- SourceCrawler sourceCrawler; |
- |
- TemplateCollectingVisitor(this.templates, this.blacklistedClasses, |
- this.sourceCrawler); |
- |
- call(CompilationUnitElement cue, String srcPath) { |
- CompilationUnit cu = sourceCrawler.context |
- .resolveCompilationUnit(cue.source, cue.library); |
- cu.declarations.forEach((CompilationUnitMember declaration) { |
- // We only care about classes. |
- if (declaration is! ClassDeclaration) return; |
- ClassDeclaration clazz = declaration; |
- List<String> cacheUris = []; |
- bool cache = true; |
- clazz.metadata.forEach((Annotation ann) { |
- if (ann.arguments == null) return; // Ignore non-class annotations. |
- if (blacklistedClasses.contains(clazz.name.name)) return; |
- |
- switch (ann.name.name) { |
- case 'NgComponent': |
- extractNgComponentMetadata(ann, cacheUris); break; |
- case 'NgTemplateCache': |
- cache = extractNgTemplateCache(ann, cacheUris); break; |
- } |
- }); |
- if (cache && cacheUris.isNotEmpty) { |
- var srcDirUri = new Uri.file(srcPath); |
- Source currentSrcDir = sourceCrawler.context.sourceFactory |
- .resolveUri2(null, srcDirUri); |
- cacheUris..sort()..forEach((uri) => storeUriAsset(uri, currentSrcDir)); |
- } |
- }); |
- } |
- |
- void extractNgComponentMetadata(Annotation ann, List<String> cacheUris) { |
- ann.arguments.arguments.forEach((Expression arg) { |
- if (arg is NamedExpression) { |
- NamedExpression namedArg = arg; |
- var paramName = namedArg.name.label.name; |
- if (paramName == 'templateUrl') { |
- cacheUris.add(assertString(namedArg.expression).stringValue); |
- } else if (paramName == 'cssUrl') { |
- if (namedArg.expression is StringLiteral) { |
- cacheUris.add(assertString(namedArg.expression).stringValue); |
- } else { |
- cacheUris.addAll(assertList(namedArg.expression).elements.map((e) => |
- assertString(e).stringValue)); |
- } |
- } |
- } |
- }); |
- } |
- |
- bool extractNgTemplateCache( |
- Annotation ann, List<String> cacheUris) { |
- bool cache = true; |
- ann.arguments.arguments.forEach((Expression arg) { |
- if (arg is NamedExpression) { |
- NamedExpression namedArg = arg; |
- var paramName = namedArg.name.label.name; |
- if (paramName == 'preCacheUrls') { |
- assertList(namedArg.expression).elements |
- ..forEach((expression) => |
- cacheUris.add(assertString(expression).stringValue)); |
- } |
- if (paramName == 'cache') { |
- cache = assertBoolean(namedArg.expression).value; |
- } |
- } |
- }); |
- return cache; |
- } |
- |
- void storeUriAsset(String uri, Source srcPath) { |
- String assetFileLocation = findAssetFileLocation(uri, srcPath); |
- if (assetFileLocation == null) { |
- print("Could not find asset for uri: $uri"); |
- } else { |
- templates[uri] = assetFileLocation; |
- } |
- } |
- |
- String findAssetFileLocation(String uri, Source srcPath) { |
- if (uri.startsWith('/')) { |
- // Absolute Path from working directory. |
- return '.${uri}'; |
- } |
- // Otherwise let the sourceFactory resolve for packages, and relative paths. |
- Source source = sourceCrawler.context.sourceFactory |
- .resolveUri(srcPath, uri); |
- return (source != null) ? source.fullName : null; |
- } |
- |
- BooleanLiteral assertBoolean(Expression key) { |
- if (key is! BooleanLiteral) { |
- throw 'must be a boolean literal: ${key.runtimeType}'; |
- } |
- return key; |
- } |
- |
- ListLiteral assertList(Expression key) { |
- if (key is! ListLiteral) { |
- throw 'must be a list literal: ${key.runtimeType}'; |
- } |
- return key; |
- } |
- |
- StringLiteral assertString(Expression key) { |
- if (key is! StringLiteral) { |
- throw 'must be a string literal: ${key.runtimeType}'; |
- } |
- return key; |
- } |
-} |