Skip to content

Commit

Permalink
[Emulator] has default constructor and factory to load env string
Browse files Browse the repository at this point in the history
  • Loading branch information
willie-chang committed Jun 10, 2024
1 parent 2c11321 commit 20f11f8
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 11 deletions.
25 changes: 23 additions & 2 deletions packages/dart_firebase_admin/lib/src/app/emulator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,29 @@ part of '../app.dart';
/// Represents a Firebase Emulator.
/// Now for Auth and Firestore.
class Emulator {
Emulator(this.host, this.port);
const Emulator._(this.host, this.port);

const Emulator.defaultAuth()
: host = '127.0.0.1',
port = 9099;

const Emulator.defaultFirestore()
: host = '127.0.0.1',
port = 8080;

factory Emulator.fromEnvString(String envString) {
final parts = envString.split(':');
if (parts.length != 2) {
throw ArgumentError.value(envString, 'envString', 'Invalid format');
}
final host = parts[0];
final port = int.tryParse(parts[1]);
if (port == null) {
throw ArgumentError.value(envString, 'envString', 'Invalid port');
}
return Emulator._(host, port);
}

final String host;
final int port;
}
}
25 changes: 16 additions & 9 deletions packages/dart_firebase_admin/lib/src/app/firebase_admin.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,11 @@ class FirebaseAdminApp {
final Credential credential;

bool get isUsingAuthEmulator => _isUsingAuthEmulator;

bool get isUsingFirestoreEmulator => _isUsingFirestoreEmulator;

bool get isUsingEmulator => _isUsingAuthEmulator || _isUsingFirestoreEmulator;

var _isUsingAuthEmulator = false;
var _isUsingFirestoreEmulator = false;

Expand All @@ -21,25 +24,29 @@ class FirebaseAdminApp {
Uri firestoreApiHost = Uri.https('firestore.googleapis.com', '/');

/// Use the Firebase Emulator suite to run the app locally.
void useEmulator({Emulator? authEmulator, Emulator? firestoreEmulator}) {
void useEmulator({
Emulator authEmulator = const Emulator.defaultAuth(),
Emulator firestoreEmulator = const Emulator.defaultFirestore(),
}) {
useAuthEmulator(emulator: authEmulator);
useFirestoreEmulator(emulator: firestoreEmulator);
}

/// Use the Firebase Auth Emulator to run the app locally.
void useAuthEmulator({Emulator? emulator}) {
void useAuthEmulator({
Emulator emulator = const Emulator.defaultAuth(),
}) {
_isUsingAuthEmulator = true;
final host = emulator?.host ?? '127.0.0.1';
final port = emulator?.port ?? 9099;
authApiHost = Uri.http('$host:$port', 'identitytoolkit.googleapis.com/');
authApiHost = Uri.http(
'${emulator.host}:${emulator.port}', 'identitytoolkit.googleapis.com/');
}

/// Use the Firebase Firestore Emulator to run the app locally.
void useFirestoreEmulator({Emulator? emulator}) {
void useFirestoreEmulator({
Emulator emulator = const Emulator.defaultFirestore(),
}) {
_isUsingFirestoreEmulator = true;
final host = emulator?.host ?? '127.0.0.1';
final port = emulator?.port ?? 8080;
firestoreApiHost = Uri.http('$host:$port', '/');
firestoreApiHost = Uri.http('${emulator.host}:${emulator.port}', '/');
}

/// Stops the app and releases any resources associated with it.
Expand Down

0 comments on commit 20f11f8

Please sign in to comment.