Skip to content

Commit 1c22769

Browse files
committed
fix(ssr): stricter payload plugin
This version only matches Firebase data types rather than doing anything with toJSON()
1 parent 04b006b commit 1c22769

File tree

1 file changed

+14
-16
lines changed

1 file changed

+14
-16
lines changed

packages/nuxt/src/runtime/payload-plugin.ts

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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
*/
1212
export 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

Comments
 (0)