From 67ae17372b621ce5f5bed5a5c7903c68aad5d38d Mon Sep 17 00:00:00 2001 From: russellwheatley Date: Thu, 12 Jun 2025 11:32:49 +0100 Subject: [PATCH 1/2] feat: update dependencies to latest + rm discontinued pubspec --- .../lib/src/common/package.dart | 25 +++++------------ .../firebase/firebase_android_options.dart | 2 +- .../src/firebase/firebase_apple_options.dart | 2 +- .../src/firebase/firebase_dart_options.dart | 2 +- packages/flutterfire_cli/pubspec.yaml | 14 +++++----- .../flutterfire_cli/test/install_test.dart | 27 +++++++++++-------- 6 files changed, 33 insertions(+), 39 deletions(-) diff --git a/packages/flutterfire_cli/lib/src/common/package.dart b/packages/flutterfire_cli/lib/src/common/package.dart index cd6aaa2b..a22a6b81 100644 --- a/packages/flutterfire_cli/lib/src/common/package.dart +++ b/packages/flutterfire_cli/lib/src/common/package.dart @@ -17,7 +17,7 @@ import 'dart:io'; -import 'package:pubspec/pubspec.dart'; +import 'package:pubspec_parse/pubspec_parse.dart'; import 'strings.dart'; import 'utils.dart'; @@ -46,14 +46,16 @@ class Package { } final String path; - final PubSpec pubSpec; + final Pubspec pubSpec; /// Loads the package located in the [projectDirectory] static Future load(Directory projectDirectory) async { - if (!File(pubspecPathForDirectory(projectDirectory)).existsSync()) { + final pubspecFile = File(pubspecPathForDirectory(projectDirectory)); + if (!pubspecFile.existsSync()) { throw FlutterAppRequiredException(); } - final pubSpec = await PubSpec.load(projectDirectory); + final pubspecContent = await pubspecFile.readAsString(); + final pubSpec = Pubspec.parse(pubspecContent); return Package( path: projectDirectory.path, pubSpec: pubSpec, @@ -90,18 +92,5 @@ class Package { /// Returns whether this package is a Flutter plugin. /// This is determined by whether the pubspec contains a flutter.plugin definition. - bool get isFlutterPlugin => pubSpec.flutter?.isPlugin ?? false; -} - -extension on PubSpec { - Flutter? get flutter => - (unParsedYaml?['flutter'] as Map?).let(Flutter.new); -} - -class Flutter { - Flutter(this._flutter); - - final Map _flutter; - - bool get isPlugin => _flutter['plugin'] != null; + bool get isFlutterPlugin => pubSpec.flutter?.containsKey('plugin') ?? false; } diff --git a/packages/flutterfire_cli/lib/src/firebase/firebase_android_options.dart b/packages/flutterfire_cli/lib/src/firebase/firebase_android_options.dart index 7b1c9538..a66e7c99 100644 --- a/packages/flutterfire_cli/lib/src/firebase/firebase_android_options.dart +++ b/packages/flutterfire_cli/lib/src/firebase/firebase_android_options.dart @@ -56,7 +56,7 @@ extension FirebaseAndroidOptions on FirebaseOptions { ); final firebaseApp = await firebase.findOrCreateFirebaseApp( packageNameOrBundleIdentifier: selectedAndroidApplicationId, - displayName: flutterApp.package.pubSpec.name ?? 'flutterfire_app', + displayName: flutterApp.package.pubSpec.name, platform: kAndroid, project: firebaseProjectId, account: firebaseAccount, diff --git a/packages/flutterfire_cli/lib/src/firebase/firebase_apple_options.dart b/packages/flutterfire_cli/lib/src/firebase/firebase_apple_options.dart index 26bf94b6..36debd88 100644 --- a/packages/flutterfire_cli/lib/src/firebase/firebase_apple_options.dart +++ b/packages/flutterfire_cli/lib/src/firebase/firebase_apple_options.dart @@ -58,7 +58,7 @@ extension FirebaseAppleOptions on FirebaseOptions { ); final firebaseApp = await firebase.findOrCreateFirebaseApp( packageNameOrBundleIdentifier: selectedAppleBundleId, - displayName: flutterApp.package.pubSpec.name ?? 'flutterfire_app', + displayName: flutterApp.package.pubSpec.name, platform: platformIdentifier, project: firebaseProjectId, account: firebaseAccount, diff --git a/packages/flutterfire_cli/lib/src/firebase/firebase_dart_options.dart b/packages/flutterfire_cli/lib/src/firebase/firebase_dart_options.dart index e579cd54..edadd712 100644 --- a/packages/flutterfire_cli/lib/src/firebase/firebase_dart_options.dart +++ b/packages/flutterfire_cli/lib/src/firebase/firebase_dart_options.dart @@ -34,7 +34,7 @@ extension FirebaseDartOptions on FirebaseOptions { required String? serviceAccount, }) async { final firebaseApp = await firebase.findOrCreateFirebaseApp( - displayName: flutterApp.package.pubSpec.name ?? 'flutterfire_app', + displayName: flutterApp.package.pubSpec.name, platform: platform, project: firebaseProjectId, account: firebaseAccount, diff --git a/packages/flutterfire_cli/pubspec.yaml b/packages/flutterfire_cli/pubspec.yaml index 9689853a..1bda31de 100644 --- a/packages/flutterfire_cli/pubspec.yaml +++ b/packages/flutterfire_cli/pubspec.yaml @@ -8,25 +8,25 @@ environment: dependencies: ansi_styles: ^0.3.2+1 - args: ^2.3.0 + args: ^2.7.0 ci: ^0.1.0 cli_util: ^0.4.0 collection: ^1.18.0 deep_pick: ^1.0.0 file: ^7.0.0 - http: ^1.2.1 + http: ^1.4.0 interact: ^2.2.0 - meta: ^1.7.0 + meta: ^1.17.0 path: ^1.8.0 platform: ^3.0.2 - pub_updater: ^0.4.0 - pubspec: ^2.1.0 + pub_updater: ^0.5.0 + pubspec_parse: ^1.5.0 xml: ^6.1.0 yaml: ^3.1.2 dev_dependencies: - googleapis_auth: ^1.4.0 - test: ^1.24.3 + googleapis_auth: ^2.0.0 + test: ^1.26.2 executables: flutterfire: diff --git a/packages/flutterfire_cli/test/install_test.dart b/packages/flutterfire_cli/test/install_test.dart index c6f46dfc..de79628b 100644 --- a/packages/flutterfire_cli/test/install_test.dart +++ b/packages/flutterfire_cli/test/install_test.dart @@ -1,7 +1,7 @@ import 'dart:io'; import 'package:path/path.dart' as p; -import 'package:pubspec/pubspec.dart'; +import 'package:pubspec_parse/pubspec_parse.dart'; import 'package:test/test.dart'; import 'test_utils.dart'; @@ -34,8 +34,9 @@ void main() { fail(result.stderr as String); } - final parsedPubspec = - await PubSpec.loadFile(p.join(projectPath!, 'pubspec.yaml')); + final parsedPubspec = Pubspec.parse( + await File(p.join(projectPath!, 'pubspec.yaml')).readAsString(), + ); expect(parsedPubspec.dependencies['firebase_auth'], isNotNull); expect(parsedPubspec.dependencies['firebase_core'], isNotNull); @@ -91,8 +92,9 @@ void main() { fail(result.stderr as String); } - final parsedPubspec = - await PubSpec.loadFile(p.join(projectPath!, 'pubspec.yaml')); + final parsedPubspec = Pubspec.parse( + await File(p.join(projectPath!, 'pubspec.yaml')).readAsString(), + ); expect(parsedPubspec.dependencies['firebase_auth'], isNotNull); expect(parsedPubspec.dependencies['firebase_core'], isNotNull); @@ -115,8 +117,9 @@ void main() { fail(result2.stderr as String); } - final parsedPubspec2 = - await PubSpec.loadFile(p.join(projectPath!, 'pubspec.yaml')); + final parsedPubspec2 = Pubspec.parse( + await File(p.join(projectPath!, 'pubspec.yaml')).readAsString(), + ); expect(parsedPubspec2.dependencies['firebase_auth'], isNull); expect(parsedPubspec2.dependencies['firebase_core'], isNotNull); @@ -147,8 +150,9 @@ void main() { fail(result.stderr as String); } - final parsedPubspec = - await PubSpec.loadFile(p.join(projectPath!, 'pubspec.yaml')); + final parsedPubspec = Pubspec.parse( + await File(p.join(projectPath!, 'pubspec.yaml')).readAsString(), + ); expect(parsedPubspec.dependencies['firebase_auth'], isNotNull); expect(parsedPubspec.dependencies['firebase_core'], isNotNull); @@ -171,8 +175,9 @@ void main() { fail(result2.stderr as String); } - final parsedPubspec2 = - await PubSpec.loadFile(p.join(projectPath!, 'pubspec.yaml')); + final parsedPubspec2 = Pubspec.parse( + await File(p.join(projectPath!, 'pubspec.yaml')).readAsString(), + ); expect(parsedPubspec2.dependencies['firebase_auth'], isNotNull); expect(parsedPubspec2.dependencies['firebase_core'], isNotNull); From e354dc832d3bd38b87c8bffc52762e104a623bfc Mon Sep 17 00:00:00 2001 From: russellwheatley Date: Fri, 13 Jun 2025 10:46:30 +0100 Subject: [PATCH 2/2] chore: rm pubspec package from CLI --- .../lib/src/firebase/firebase_android_writes.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/flutterfire_cli/lib/src/firebase/firebase_android_writes.dart b/packages/flutterfire_cli/lib/src/firebase/firebase_android_writes.dart index 4418be53..51fca337 100644 --- a/packages/flutterfire_cli/lib/src/firebase/firebase_android_writes.dart +++ b/packages/flutterfire_cli/lib/src/firebase/firebase_android_writes.dart @@ -3,7 +3,6 @@ import 'dart:io'; import 'package:cli_util/cli_logging.dart'; import 'package:collection/collection.dart'; import 'package:path/path.dart' as path; -import 'package:pubspec/pubspec.dart'; import 'package:yaml/yaml.dart'; import '../common/strings.dart'; import '../common/utils.dart'; @@ -1104,8 +1103,9 @@ Future getFirebaseCorePubSpec() async { final firebaseCorePubspecFile = pubspecPathForDirectory(firebaseCoreDirectory); - final pubSpec = await PubSpec.loadFile(firebaseCorePubspecFile); - final unparsedJson = pubSpec.unParsedYaml?['firebase'] as YamlMap?; + final content = await File(firebaseCorePubspecFile).readAsString(); + final yamlMap = loadYaml(content) as YamlMap; + final unparsedJson = yamlMap['firebase'] as YamlMap?; if (unparsedJson != null) { return FirebasePubSpecModel.fromJson( unparsedJson.cast(),