Skip to content

Commit 05ec18d

Browse files
committed
fix(database): handle serialize for ServerValue
1 parent 8f8c0a1 commit 05ec18d

File tree

2 files changed

+32
-18
lines changed

2 files changed

+32
-18
lines changed

packages/firebase-database/index.android.ts

+18-13
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@ Object.defineProperty(fb, 'database', {
2020
const NSOnDisconnect = lazy(() => org.nativescript.firebase.database.FirebaseDatabase.OnDisconnect);
2121
const NSDatabaseReference = lazy(() => org.nativescript.firebase.database.FirebaseDatabase.DatabaseReference);
2222

23+
function serializeItems(data, wrapPrimitives = false) {
24+
if (data instanceof ServerValue) {
25+
return data.native;
26+
}
27+
return serialize(data, wrapPrimitives);
28+
}
29+
2330
export class OnDisconnect implements IOnDisconnect {
2431
#native: com.google.firebase.database.OnDisconnect;
2532
static fromNative(disconnect: com.google.firebase.database.OnDisconnect) {
@@ -79,7 +86,7 @@ export class OnDisconnect implements IOnDisconnect {
7986
return new Promise((resolve, reject) => {
8087
NSOnDisconnect().set(
8188
this.native,
82-
serialize(value, true),
89+
serializeItems(value, true),
8390
new org.nativescript.firebase.database.FirebaseDatabase.Callback<java.lang.Void>({
8491
onError(error) {
8592
const err = FirebaseError.fromNative(error);
@@ -98,7 +105,7 @@ export class OnDisconnect implements IOnDisconnect {
98105
return new Promise((resolve, reject) => {
99106
NSOnDisconnect().setWithPriority(
100107
this.native,
101-
serialize(value, true),
108+
serializeItems(value, true),
102109
priority as any,
103110
new org.nativescript.firebase.database.FirebaseDatabase.Callback<java.lang.Void>({
104111
onError(error) {
@@ -443,7 +450,7 @@ export class Reference extends Query implements IReference {
443450
return new Promise((resolve, reject) => {
444451
NSDatabaseReference().set(
445452
this.native,
446-
serialize(value, true),
453+
serializeItems(value, true),
447454
new org.nativescript.firebase.database.FirebaseDatabase.Callback({
448455
onSuccess(param0) {
449456
onComplete?.(null);
@@ -481,7 +488,7 @@ export class Reference extends Query implements IReference {
481488
return new Promise((resolve, reject) => {
482489
NSDatabaseReference().setWithPriority(
483490
this.native,
484-
serialize(newVal, true),
491+
serializeItems(newVal, true),
485492
newPriority as any,
486493
new org.nativescript.firebase.database.FirebaseDatabase.Callback({
487494
onSuccess(param0) {
@@ -506,7 +513,7 @@ export class Reference extends Query implements IReference {
506513
doTransaction(data: any): any {
507514
const newData = transactionUpdate(deserialize(data));
508515
// TODO improve
509-
return serialize(newData, true);
516+
return serializeItems(newData, true);
510517
},
511518
onComplete(error: com.google.firebase.database.DatabaseError, commited: boolean, snapshot: com.google.firebase.database.DataSnapshot): void {
512519
const ss = DataSnapshot.fromNative(snapshot);
@@ -530,7 +537,7 @@ export class Reference extends Query implements IReference {
530537
return new Promise((resolve, reject) => {
531538
NSDatabaseReference().update(
532539
this.native,
533-
serialize(values, true),
540+
serializeItems(values, true),
534541
new org.nativescript.firebase.database.FirebaseDatabase.Callback({
535542
onSuccess(param0) {
536543
onComplete?.(null);
@@ -631,21 +638,19 @@ export class Database implements IDatabase {
631638
if (app?.native) {
632639
this.#native = com.google.firebase.database.FirebaseDatabase.getInstance(app.native);
633640
} else {
634-
if(defaultDatabase){
641+
if (defaultDatabase) {
635642
return defaultDatabase;
636643
}
637644
defaultDatabase = this;
638645
this.#native = com.google.firebase.database.FirebaseDatabase.getInstance();
639646
}
640647
}
641648

649+
useEmulator(host: string, port: number) {
650+
this.native.useEmulator(host === 'localhost' ? '10.0.2.2' : host, port);
651+
}
642652

643-
useEmulator(host: string, port: number) {
644-
this.native.useEmulator(host === 'localhost' ? '10.0.2.2' : host, port);
645-
}
646-
647-
648-
#persistenceCacheSizeBytes = 10 * 1024 * 1024;
653+
#persistenceCacheSizeBytes = 10 * 1024 * 1024;
649654
get persistenceCacheSizeBytes(): number {
650655
return this.#persistenceCacheSizeBytes;
651656
}

packages/firebase-database/index.ios.ts

+14-5
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,15 @@ Object.defineProperty(fb, 'database', {
1616
writable: false,
1717
});
1818

19+
20+
function serializeItems(data, wrapPrimitives = false) {
21+
if (data instanceof ServerValue) {
22+
return data.native;
23+
}
24+
return serialize(data, wrapPrimitives);
25+
}
26+
27+
1928
export class OnDisconnect implements IOnDisconnect {
2029
#native: FIRDatabaseReference;
2130

@@ -102,7 +111,7 @@ export class OnDisconnect implements IOnDisconnect {
102111

103112
update(values: { [key: string]: any }, onComplete?: (error: FirebaseError) => void): Promise<void> {
104113
return new Promise((resolve, reject) => {
105-
this.native.onDisconnectUpdateChildValuesWithCompletionBlock(serialize(values), (error, ref) => {
114+
this.native.onDisconnectUpdateChildValuesWithCompletionBlock(serializeItems(values), (error, ref) => {
106115
if (error) {
107116
const err = FirebaseError.fromNative(error);
108117
onComplete?.(err);
@@ -378,7 +387,7 @@ export class Reference extends Query implements IReference {
378387

379388
set(value: any, onComplete?: (error: FirebaseError) => void): Promise<void> {
380389
return new Promise((resolve, reject) => {
381-
this.native.setValueWithCompletionBlock(serialize(value), (error, ref) => {
390+
this.native.setValueWithCompletionBlock(serializeItems(value), (error, ref) => {
382391
if (error) {
383392
const err = FirebaseError.fromNative(error);
384393
onComplete?.(err);
@@ -412,7 +421,7 @@ export class Reference extends Query implements IReference {
412421

413422
setWithPriority(newVal: any, newPriority: string | number, onComplete?: (error: FirebaseError) => void): Promise<void> {
414423
return new Promise((resolve, reject) => {
415-
this.native.setValueAndPriorityWithCompletionBlock(serialize(newVal), newPriority, (error, ref) => {
424+
this.native.setValueAndPriorityWithCompletionBlock(serializeItems(newVal), newPriority, (error, ref) => {
416425
if (error) {
417426
const err = FirebaseError.fromNative(error);
418427
onComplete?.(err);
@@ -430,7 +439,7 @@ export class Reference extends Query implements IReference {
430439
this.native.runTransactionBlockAndCompletionBlockWithLocalEvents(
431440
(data) => {
432441
const newData = transactionUpdate(deserialize(data.value));
433-
data.value = serialize(newData);
442+
data.value = serializeItems(newData);
434443
return FIRTransactionResult.successWithValue(data);
435444
},
436445
(error, commited, snapshot) => {
@@ -454,7 +463,7 @@ export class Reference extends Query implements IReference {
454463

455464
update(values: { [key: string]: any }, onComplete?: (error: FirebaseError) => void): Promise<void> {
456465
return new Promise((resolve, reject) => {
457-
this.native.updateChildValuesWithCompletionBlock(serialize(values), (error, ref) => {
466+
this.native.updateChildValuesWithCompletionBlock(serializeItems(values), (error, ref) => {
458467
if (error) {
459468
const err = FirebaseError.fromNative(error);
460469
onComplete?.(err);

0 commit comments

Comments
 (0)