@@ -7,28 +7,26 @@ import {
77} from '#app'
88
99/**
10- * Handles Firestore Timestamps and other JSONifiable objects
10+ * Handles Firestore Timestamps, GeoPoint, and other types that needs special handling for serialization.
1111 */
1212export default definePayloadPlugin ( ( ) => {
1313 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 ( ) )
1917 )
20- definePayloadReviver ( 'JSONifiable ' , ( data : string ) => {
18+ definePayloadReviver ( 'FirebaseTimestamp ' , ( data : string ) => {
2119 const parsed = JSON . parse ( data )
20+ return markRaw ( new Timestamp ( parsed . seconds , parsed . nanoseconds ) )
21+ } )
2222
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 ) )
3230 } )
3331
3432 // to handle the `id` non-enumerable property
0 commit comments