• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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