mirror of https://github.com/AMT-Cheif/drift.git
Migrator: Apply changes to pubspec
This commit is contained in:
parent
6877cf9673
commit
2a67edec33
|
@ -9,6 +9,7 @@ import 'package:analyzer/dart/ast/visitor.dart';
|
|||
import 'package:moor_generator/src/utils/string_escaper.dart';
|
||||
import 'package:path/path.dart' as p;
|
||||
import 'package:sqlparser/sqlparser.dart' hide AnalysisContext, StringLiteral;
|
||||
import 'package:yaml/yaml.dart';
|
||||
import 'package:yaml_edit/yaml_edit.dart';
|
||||
|
||||
import '../cli.dart';
|
||||
|
@ -100,7 +101,44 @@ class MigrateCommand extends MoorCommand {
|
|||
|
||||
Future<void> _transformBuildYaml(File file) async {}
|
||||
|
||||
Future<void> _transformPubspec(File file) async {}
|
||||
Future<void> _transformPubspec(File file) async {
|
||||
dynamic originalPubspec;
|
||||
YamlEditor editor;
|
||||
|
||||
try {
|
||||
final content = await file.readAsString();
|
||||
originalPubspec = loadYaml(content, sourceUrl: file.uri);
|
||||
editor = YamlEditor(content);
|
||||
} on Exception {
|
||||
cli.logger.warning('Could not parse ${file.path}, ignoring...');
|
||||
}
|
||||
|
||||
const newPackages = {'moor': 'drift', 'moor_generator': 'drift_dev'};
|
||||
|
||||
void replaceIn(String key) {
|
||||
if (originalPubspec is! Map) return;
|
||||
|
||||
final dependencyBlock = originalPubspec[key];
|
||||
if (dependencyBlock is! Map) return;
|
||||
|
||||
final block = dependencyBlock as Map;
|
||||
for (final package in newPackages.keys) {
|
||||
if (block.containsKey(package)) {
|
||||
final newPackage = newPackages[package];
|
||||
|
||||
editor
|
||||
..remove([key, package])
|
||||
..update([key, newPackage], block[package]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
replaceIn('dependencies');
|
||||
replaceIn('dev_dependencies');
|
||||
replaceIn('dependency_overrides');
|
||||
|
||||
await file.writeAsString(editor.toString());
|
||||
}
|
||||
}
|
||||
|
||||
class _Moor2DriftDartRewriter extends GeneralizingAstVisitor<void> {
|
||||
|
|
|
@ -22,6 +22,7 @@ dependencies:
|
|||
logging: '>=0.11.0 <2.0.0'
|
||||
cli_util: '>=0.2.0 <0.4.0'
|
||||
yaml_edit: ^2.0.1
|
||||
yaml: ^3.1.0
|
||||
|
||||
# Moor-specific analysis and apis
|
||||
moor: ^4.4.0
|
||||
|
|
|
@ -101,6 +101,44 @@ import 'package:drift/src/some/internal/file.dart';
|
|||
|
||||
export 'package:drift/web.dart';
|
||||
export 'package:drift/native.dart';
|
||||
'''),
|
||||
]).validate();
|
||||
});
|
||||
|
||||
_test('updates pubspec.yaml', () async {
|
||||
await _setup(const [], pubspec: '''
|
||||
name: app
|
||||
|
||||
environment:
|
||||
sdk: ^2.12.0
|
||||
|
||||
dependencies:
|
||||
moor: ^1.2.3
|
||||
something_else:
|
||||
|
||||
# comment
|
||||
dev_dependencies:
|
||||
moor_generator: ^4.5.6
|
||||
build_runner: ^2.0.0
|
||||
''');
|
||||
|
||||
await _apply();
|
||||
|
||||
await d.dir('app', [
|
||||
d.file('pubspec.yaml', '''
|
||||
name: app
|
||||
|
||||
environment:
|
||||
sdk: ^2.12.0
|
||||
|
||||
dependencies:
|
||||
drift: ^1.2.3
|
||||
something_else:
|
||||
|
||||
# comment
|
||||
dev_dependencies:
|
||||
build_runner: ^2.0.0
|
||||
drift_dev: ^4.5.6
|
||||
'''),
|
||||
]).validate();
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue