@@ -7,28 +7,26 @@ import {
7
7
} from '#app'
8
8
9
9
/**
10
- * Handles Firestore Timestamps and other JSONifiable objects
10
+ * Handles Firestore Timestamps, GeoPoint, and other types that needs special handling for serialization.
11
11
*/
12
12
export default definePayloadPlugin ( ( ) => {
13
13
definePayloadReducer (
14
- 'JSONifiable' ,
15
- ( data : any ) =>
16
- data != null &&
17
- typeof data . toJSON === 'function' &&
18
- JSON . stringify ( data . toJSON ( ) )
14
+ 'FirebaseTimestamp' ,
15
+ ( data : unknown ) =>
16
+ data instanceof Timestamp && JSON . stringify ( data . toJSON ( ) )
19
17
)
20
- definePayloadReviver ( 'JSONifiable ' , ( data : string ) => {
18
+ definePayloadReviver ( 'FirebaseTimestamp ' , ( data : string ) => {
21
19
const parsed = JSON . parse ( data )
20
+ return markRaw ( new Timestamp ( parsed . seconds , parsed . nanoseconds ) )
21
+ } )
22
22
23
- if ( 'seconds' in parsed && 'nanoseconds' in parsed ) {
24
- return markRaw ( new Timestamp ( parsed . seconds , parsed . nanoseconds ) )
25
- }
26
-
27
- if ( 'latitude' in parsed && 'longitude' in parsed ) {
28
- return markRaw ( new GeoPoint ( parsed . latitude , parsed . longitude ) )
29
- }
30
-
31
- return parsed
23
+ definePayloadReducer (
24
+ 'FirebaseGeoPoint' ,
25
+ ( data : unknown ) => data instanceof GeoPoint && JSON . stringify ( data . toJSON ( ) )
26
+ )
27
+ definePayloadReviver ( 'FirebaseGeoPoint' , ( data : string ) => {
28
+ const parsed = JSON . parse ( data )
29
+ return markRaw ( new GeoPoint ( parsed . latitude , parsed . longitude ) )
32
30
} )
33
31
34
32
// to handle the `id` non-enumerable property
0 commit comments