1// Copyright 2013 The Flutter Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5import 'dart:io'; 6 7import 'package:args/args.dart'; 8import 'package:path/path.dart' as path; 9 10final ArgParser argParser = ArgParser() 11 ..addOption('output-dir') 12 ..addOption('input-dir') 13 ..addFlag('ui', defaultsTo: false) 14 ..addFlag('engine', defaultsTo: false) 15 ..addMultiOption('input'); 16 17const List<List<String>> uiPatterns = <List<String>>[ 18 <String>['library ui;', 'library dart.ui;'], 19 <String>['part of ui;', 'part of dart.ui;'], 20 <String>[ 21r''' 22import 'src/engine.dart' as engine; 23''', 24r''' 25import 'dart:_engine' as engine; 26''' 27 ], 28 <String>[ 29r''' 30export 'src/engine.dart' 31 show persistedPictureFactory, houdiniPictureFactory, platformViewRegistry; 32''', 33r''' 34export 'dart:_engine' show persistedPictureFactory, houdiniPictureFactory, webOnlyInitializeEngine; 35''', 36 ] 37]; 38 39const List<List<String>> enginePatterns = <List<String>>[ 40 <String>['library engine;', 'library dart._engine;'], 41 <String>['part of engine;', 'part of dart._engine;'], 42 <String>[ 43r''' 44import '../ui.dart' as ui; 45''', 46r''' 47import 'dart:ui' as ui; 48''' 49 ] 50]; 51 52const List<List<String>> sharedPatterns = <List<String>>[ 53 <String>["import 'package:meta/meta.dart';" ,''], 54 <String>['@required', ''], 55 <String>['@protected', ''], 56 <String>['@mustCallSuper', ''], 57 <String>['@immutable', ''], 58 <String>['@visibleForTesting', ''] 59]; 60 61// Rewrites the "package"-style web ui library into a dart:ui implementation. 62// So far this only requires a replace of the library declarations. 63void main(List<String> arguments) { 64 final ArgResults results = argParser.parse(arguments); 65 final Directory directory = Directory(results['output-dir']); 66 final String inputDirectoryPath = results['input-dir']; 67 for (String inputFilePath in results['input']) { 68 final File inputFile = File(inputFilePath); 69 final File outputFile = File(path.join(directory.path, inputFile.path.substring(inputDirectoryPath.length))) 70 ..createSync(recursive: true); 71 String source = inputFile.readAsStringSync(); 72 final List<List<String>> replacementPatterns = <List<String>>[]; 73 replacementPatterns.addAll(sharedPatterns); 74 if (results['ui']) { 75 replacementPatterns.addAll(uiPatterns); 76 } else if (results['engine']) { 77 replacementPatterns.addAll(enginePatterns); 78 } 79 for (List<String> patterns in replacementPatterns) { 80 source = source.replaceAll(patterns.first, patterns.last); 81 } 82 outputFile.writeAsStringSync(source); 83 } 84} 85