Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ jobs:
- name: Run dart_firebase_admin tests with coverage
run: ${{ github.workspace }}/scripts/coverage.sh

- name: Run googleapis_firestore tests with coverage
- name: Run google_cloud_firestore tests with coverage
run: ${{ github.workspace }}/scripts/firestore-coverage.sh

- name: Run googleapis_storage tests with coverage
Expand All @@ -141,14 +141,14 @@ jobs:
run: |
# Save individual package coverage files before merging
cp coverage.lcov coverage_admin.lcov
cp ../googleapis_firestore/coverage.lcov coverage_firestore.lcov
cp ../google_cloud_firestore/coverage.lcov coverage_firestore.lcov
cp ../googleapis_storage/coverage.lcov coverage_storage.lcov

# Merge coverage reports from all packages (relative to packages/dart_firebase_admin)
# Only merge files that exist
COVERAGE_FILES=""
[ -f coverage.lcov ] && COVERAGE_FILES="$COVERAGE_FILES coverage.lcov"
[ -f ../googleapis_firestore/coverage.lcov ] && COVERAGE_FILES="$COVERAGE_FILES ../googleapis_firestore/coverage.lcov"
[ -f ../google_cloud_firestore/coverage.lcov ] && COVERAGE_FILES="$COVERAGE_FILES ../google_cloud_firestore/coverage.lcov"
[ -f ../googleapis_storage/coverage.lcov ] && COVERAGE_FILES="$COVERAGE_FILES ../googleapis_storage/coverage.lcov"

if [ -n "$COVERAGE_FILES" ]; then
Expand Down Expand Up @@ -219,7 +219,7 @@ jobs:
# Console output
echo "=== Coverage Report ==="
echo "dart_firebase_admin: ${ADMIN_PCT}% (${ADMIN_HIT}/${ADMIN_TOTAL} lines)"
echo "googleapis_firestore: ${FIRESTORE_PCT}% (${FIRESTORE_HIT}/${FIRESTORE_TOTAL} lines)"
echo "google_cloud_firestore: ${FIRESTORE_PCT}% (${FIRESTORE_HIT}/${FIRESTORE_TOTAL} lines)"
echo "googleapis_storage: ${STORAGE_PCT}% (${STORAGE_HIT}/${STORAGE_TOTAL} lines)"
echo "----------------------"
echo "Total: ${COVERAGE_PCT}% (${HIT_LINES}/${TOTAL_LINES} lines)"
Expand Down Expand Up @@ -256,7 +256,7 @@ jobs:
| Package | Coverage |
|---------|----------|
| dart_firebase_admin | ${adminCov}% |
| googleapis_firestore | ${firestoreCov}% |
| google_cloud_firestore | ${firestoreCov}% |
| googleapis_storage | ${storageCov}% |

_Minimum threshold: 40%_`;
Expand Down
4 changes: 2 additions & 2 deletions doc/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,9 @@ <h2>dart_firebase_admin</h2>
</li>

<li class="package-item">
<h2>googleapis_firestore</h2>
<h2>google_cloud_firestore</h2>
<p>Standalone Cloud Firestore client library for Dart. Provides direct access to Firestore database operations including documents, collections, queries, transactions, and batch writes.</p>
<a href="api/googleapis_firestore/index.html">View Documentation →</a>
<a href="api/google_cloud_firestore/index.html">View Documentation →</a>
</li>

<li class="package-item">
Expand Down
4 changes: 2 additions & 2 deletions packages/dart_firebase_admin/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ print('Token: ${result.token}');
```dart
import 'dart:async';
import 'package:dart_firebase_admin/dart_firebase_admin.dart';
import 'package:googleapis_firestore/googleapis_firestore.dart';
import 'package:google_cloud_firestore/google_cloud_firestore.dart';

final app = FirebaseApp.initializeApp();
final firestore = app.firestore();
Expand Down Expand Up @@ -543,7 +543,7 @@ The Firebase Admin Dart SDK currently supports the following Firebase services:

Alongside the Firebase Admin Dart SDK, this repository contains additional workspace/pub.dev packages to accomodate the SDK:

- [googleapis_firestore](/packages/googleapis_firestore/): Standalone Google APIs Firestore SDK, which the Firebase SDK extends.
- [google_cloud_firestore](/packages/google_cloud_firestore/): Standalone Google APIs Firestore SDK, which the Firebase SDK extends.
- [googleapis_storage](/packages/googleapis_storage/): Standalone Google APIs Storage SDK, which the Firebase SDK extends.

# Contributing
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'dart:async';
import 'package:dart_firebase_admin/dart_firebase_admin.dart';
import 'package:googleapis_firestore/googleapis_firestore.dart';
import 'package:google_cloud_firestore/google_cloud_firestore.dart';

/// Main entry point for all Firestore examples
Future<void> firestoreExample(FirebaseApp admin) async {
Expand Down
6 changes: 3 additions & 3 deletions packages/dart_firebase_admin/example/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ environment:

dependencies:
dart_firebase_admin: ^0.1.0
googleapis_firestore: ^0.1.0
google_cloud_firestore: ^0.1.0
googleapis_storage: ^0.1.0

dependency_overrides:
dart_firebase_admin:
path: ../../dart_firebase_admin
googleapis_firestore:
path: ../../googleapis_firestore
google_cloud_firestore:
path: ../../google_cloud_firestore
googleapis_storage:
path: ../../googleapis_storage

6 changes: 3 additions & 3 deletions packages/dart_firebase_admin/lib/src/app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ import 'dart:typed_data';
import 'package:equatable/equatable.dart';
import 'package:google_cloud/constants.dart' as google_cloud;
import 'package:google_cloud/google_cloud.dart' as google_cloud;
import 'package:google_cloud_firestore/google_cloud_firestore.dart'
as google_cloud_firestore;
import 'package:googleapis/identitytoolkit/v3.dart' as auth3;
import 'package:googleapis_auth/auth_io.dart' as googleapis_auth;
import 'package:googleapis_firestore/googleapis_firestore.dart'
as googleapis_firestore;
import 'package:http/http.dart';
import 'package:meta/meta.dart';

Expand All @@ -33,5 +33,5 @@ part 'app/emulator_client.dart';
part 'app/environment.dart';
part 'app/exception.dart';
part 'app/firebase_app.dart';
part 'app/firebase_user_agent_client.dart';
part 'app/firebase_service.dart';
part 'app/firebase_user_agent_client.dart';
4 changes: 2 additions & 2 deletions packages/dart_firebase_admin/lib/src/app/firebase_app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -193,8 +193,8 @@ class FirebaseApp {
///
/// For multi-database support, use [databaseId] to specify a named database.
/// Default is '(default)'.
googleapis_firestore.Firestore firestore({
googleapis_firestore.Settings? settings,
google_cloud_firestore.Firestore firestore({
google_cloud_firestore.Settings? settings,
String databaseId = kDefaultDatabaseId,
}) {
final service = Firestore.internal(this);
Expand Down
49 changes: 25 additions & 24 deletions packages/dart_firebase_admin/lib/src/firestore/firestore.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'dart:async';

import 'package:googleapis_firestore/googleapis_firestore.dart'
as googleapis_firestore;
import 'package:google_cloud_firestore/google_cloud_firestore.dart'
as google_cloud_firestore;
import 'package:meta/meta.dart';

import '../app.dart';
Expand All @@ -27,17 +27,17 @@ class Firestore implements FirebaseService {
final FirebaseApp app;

// Maps database IDs to Firestore delegate instances
final Map<String, googleapis_firestore.Firestore> _databases = {};
final Map<String, google_cloud_firestore.Firestore> _databases = {};

// Maps database IDs to their settings
final Map<String, googleapis_firestore.Settings?> _settings = {};
final Map<String, google_cloud_firestore.Settings?> _settings = {};

/// Gets the settings used to initialize a specific database.
/// Returns null if the database hasn't been initialized yet.
///
/// This is exposed for testing purposes to verify credential extraction.
@visibleForTesting
googleapis_firestore.Settings? getSettingsForDatabase(String databaseId) {
google_cloud_firestore.Settings? getSettingsForDatabase(String databaseId) {
return _settings[databaseId];
}

Expand All @@ -46,16 +46,16 @@ class Firestore implements FirebaseService {
///
/// This is exposed for testing purposes to verify settings construction.
@visibleForTesting
googleapis_firestore.Settings buildSettingsForTesting(
google_cloud_firestore.Settings buildSettingsForTesting(
String databaseId,
googleapis_firestore.Settings? userSettings,
google_cloud_firestore.Settings? userSettings,
) {
return _buildSettings(databaseId, userSettings);
}

/// Gets or creates a Firestore instance for the specified database.
@internal
googleapis_firestore.Firestore getDatabase([
google_cloud_firestore.Firestore getDatabase([
String databaseId = kDefaultDatabaseId,
]) {
var database = _databases[databaseId];
Expand All @@ -70,9 +70,9 @@ class Firestore implements FirebaseService {
/// Initializes a Firestore instance with specific settings.
/// Throws if the database was already initialized with different settings.
@internal
googleapis_firestore.Firestore initializeDatabase(
google_cloud_firestore.Firestore initializeDatabase(
String databaseId,
googleapis_firestore.Settings? settings,
google_cloud_firestore.Settings? settings,
) {
final existingInstance = _databases[databaseId];
if (existingInstance != null) {
Expand All @@ -99,27 +99,28 @@ class Firestore implements FirebaseService {
}

/// Creates Firestore settings from the Firebase app configuration
googleapis_firestore.Settings _buildSettings(
google_cloud_firestore.Settings _buildSettings(
String databaseId,
googleapis_firestore.Settings? userSettings,
google_cloud_firestore.Settings? userSettings,
) {
final projectId = app.projectId;
final appCredential = app.options.credential;

var settings = userSettings ?? const googleapis_firestore.Settings();
var settings = userSettings ?? const google_cloud_firestore.Settings();

if (settings.credential == null) {
if (appCredential is ServiceAccountCredential) {
settings = settings.copyWith(
credential: googleapis_firestore.Credential.fromServiceAccountParams(
email: appCredential.clientEmail,
privateKey: appCredential.privateKey,
projectId: appCredential.projectId,
),
credential:
google_cloud_firestore.Credential.fromServiceAccountParams(
email: appCredential.clientEmail,
privateKey: appCredential.privateKey,
projectId: appCredential.projectId,
),
);
} else if (appCredential is ApplicationDefaultCredential) {
settings = settings.copyWith(
credential: googleapis_firestore
credential: google_cloud_firestore
.Credential.fromApplicationDefaultCredentials(),
);
} else if (appCredential != null) {
Expand All @@ -140,17 +141,17 @@ class Firestore implements FirebaseService {
return settings;
}

googleapis_firestore.Firestore _initFirestore(
google_cloud_firestore.Firestore _initFirestore(
String databaseId,
googleapis_firestore.Settings? settings,
google_cloud_firestore.Settings? settings,
) {
final firestoreSettings = _buildSettings(databaseId, settings);
return googleapis_firestore.Firestore(settings: firestoreSettings);
return google_cloud_firestore.Firestore(settings: firestoreSettings);
}

bool _areSettingsEqual(
googleapis_firestore.Settings? a,
googleapis_firestore.Settings? b,
google_cloud_firestore.Settings? a,
google_cloud_firestore.Settings? b,
) {
if (a == null && b == null) return true;
if (a == null || b == null) return false;
Expand Down
2 changes: 1 addition & 1 deletion packages/dart_firebase_admin/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ dependencies:
dart_jsonwebtoken: ^3.0.0
equatable: ^2.0.7
google_cloud: ^0.3.0
google_cloud_firestore: ^0.1.0
googleapis: ^15.0.0
googleapis_auth: ^2.1.0
googleapis_beta: ^9.0.0
googleapis_firestore: ^0.1.0
googleapis_storage: ^0.1.0
http: ^1.0.0
intl: ^0.20.0
Expand Down
10 changes: 5 additions & 5 deletions packages/dart_firebase_admin/test/app/firebase_app_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import 'package:dart_firebase_admin/src/app.dart';
import 'package:dart_firebase_admin/src/app_check/app_check.dart';
import 'package:dart_firebase_admin/src/auth.dart';
import 'package:dart_firebase_admin/storage.dart';
import 'package:googleapis_firestore/googleapis_firestore.dart'
as googleapis_firestore;
import 'package:google_cloud_firestore/google_cloud_firestore.dart'
as google_cloud_firestore;
import 'package:mocktail/mocktail.dart';
import 'package:test/test.dart';

Expand Down Expand Up @@ -487,7 +487,7 @@ void main() {

test('firestore returns Firestore instance', () {
final firestore = app.firestore(settings: mockFirestoreSettings);
expect(firestore, isA<googleapis_firestore.Firestore>());
expect(firestore, isA<google_cloud_firestore.Firestore>());
// Verify we can use Firestore methods
expect(firestore.collection('test'), isNotNull);
});
Expand Down Expand Up @@ -516,7 +516,7 @@ void main() {
test('firestore throws when reinitializing with different settings', () {
// Initialize with first settings
app.firestore(
settings: const googleapis_firestore.Settings(
settings: const google_cloud_firestore.Settings(
host: 'localhost:8080',
environmentOverride: {'FIRESTORE_EMULATOR_HOST': 'localhost:8080'},
),
Expand All @@ -525,7 +525,7 @@ void main() {
// Try to initialize again with different settings - should throw
expect(
() => app.firestore(
settings: const googleapis_firestore.Settings(
settings: const google_cloud_firestore.Settings(
host: 'different:9090',
environmentOverride: {
'FIRESTORE_EMULATOR_HOST': 'localhost:8080',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:dart_firebase_admin/src/app.dart';
import 'package:googleapis_firestore/googleapis_firestore.dart' as gfs;
import 'package:google_cloud_firestore/google_cloud_firestore.dart' as gfs;
import 'package:test/test.dart';

import '../helpers.dart';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ import 'dart:io';

import 'package:dart_firebase_admin/dart_firebase_admin.dart';
import 'package:dart_firebase_admin/src/firestore/firestore.dart';
import 'package:google_cloud_firestore/google_cloud_firestore.dart' as gfs;
import 'package:googleapis_auth/auth_io.dart' as auth;
import 'package:googleapis_firestore/googleapis_firestore.dart' as gfs;
import 'package:mocktail/mocktail.dart';
import 'package:test/test.dart';

Expand Down
20 changes: 11 additions & 9 deletions packages/dart_firebase_admin/test/helpers.dart
Original file line number Diff line number Diff line change
@@ -1,27 +1,29 @@
import 'dart:async';
import 'dart:io';

import 'package:dart_firebase_admin/dart_firebase_admin.dart';
import 'package:google_cloud_firestore/google_cloud_firestore.dart'
as google_cloud_firestore;
import 'package:googleapis_auth/googleapis_auth.dart' as googleapis_auth;
import 'package:googleapis_firestore/googleapis_firestore.dart'
as googleapis_firestore;
import 'package:test/test.dart';

const projectId = 'dart-firebase-admin';

/// Mock Firestore settings that use emulator override to avoid ADC loading.
/// Use this in tests that need to initialize Firestore without real credentials.
const mockFirestoreSettings = googleapis_firestore.Settings(
const mockFirestoreSettings = google_cloud_firestore.Settings(
projectId: projectId,
environmentOverride: {'FIRESTORE_EMULATOR_HOST': 'localhost:8080'},
);

/// Creates mock Firestore settings with a custom database ID.
googleapis_firestore.Settings mockFirestoreSettingsWithDb(String databaseId) =>
googleapis_firestore.Settings(
projectId: projectId,
databaseId: databaseId,
environmentOverride: const {'FIRESTORE_EMULATOR_HOST': 'localhost:8080'},
);
google_cloud_firestore.Settings mockFirestoreSettingsWithDb(
String databaseId,
) => google_cloud_firestore.Settings(
projectId: projectId,
databaseId: databaseId,
environmentOverride: const {'FIRESTORE_EMULATOR_HOST': 'localhost:8080'},
);

/// Whether Google Application Default Credentials are available.
/// Used to skip tests that require production Firebase access.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'dart:async';
import 'dart:io';

import '../googleapis_firestore.dart';
import '../google_cloud_firestore.dart';

/// Environment variable names used by Google Cloud Firestore.
///
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import 'package:googleapis_auth/auth_io.dart' as googleapis_auth;
import 'package:http/http.dart';
import 'package:meta/meta.dart';

import '../googleapis_firestore.dart';
import '../google_cloud_firestore.dart';
import 'environment.dart';
import 'firestore_exception.dart';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: googleapis_firestore
name: google_cloud_firestore
description: Google Cloud Firestore client library for Dart.
resolution: workspace
version: 0.1.0
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import 'package:googleapis_firestore/googleapis_firestore.dart';
import 'package:google_cloud_firestore/google_cloud_firestore.dart';
import 'package:test/test.dart';

import 'helpers.dart';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'dart:async';

import 'package:googleapis_firestore/googleapis_firestore.dart';
import 'package:google_cloud_firestore/google_cloud_firestore.dart';
import 'package:test/test.dart';

import 'helpers.dart';
Expand Down
Loading
Loading