2023-04-07 16:02:47 +00:00
|
|
|
import { isReactive, isRef, isShallow, toRaw } from 'vue'
|
2023-10-30 21:05:02 +00:00
|
|
|
import { definePayloadReducer } from '../composables/payload'
|
|
|
|
import { isNuxtError } from '../composables/error'
|
|
|
|
import { defineNuxtPlugin } from '../nuxt'
|
2023-04-07 10:34:35 +00:00
|
|
|
|
2023-06-14 09:09:27 +00:00
|
|
|
// @ts-expect-error Virtual file.
|
|
|
|
import { componentIslands } from '#build/nuxt.config.mjs'
|
|
|
|
|
|
|
|
const reducers: Record<string, (data: any) => any> = {
|
|
|
|
NuxtError: data => isNuxtError(data) && data.toJSON(),
|
|
|
|
EmptyShallowRef: data => isRef(data) && isShallow(data) && !data.value && (typeof data.value === 'bigint' ? '0n' : (JSON.stringify(data.value) || '_')),
|
|
|
|
EmptyRef: data => isRef(data) && !data.value && (typeof data.value === 'bigint' ? '0n' : (JSON.stringify(data.value) || '_')),
|
|
|
|
ShallowRef: data => isRef(data) && isShallow(data) && data.value,
|
|
|
|
ShallowReactive: data => isReactive(data) && isShallow(data) && toRaw(data),
|
|
|
|
Ref: data => isRef(data) && data.value,
|
|
|
|
Reactive: data => isReactive(data) && toRaw(data)
|
|
|
|
}
|
|
|
|
|
|
|
|
if (componentIslands) {
|
|
|
|
reducers.Island = data => data && data?.__nuxt_island
|
2023-04-07 10:34:35 +00:00
|
|
|
}
|
|
|
|
|
2023-04-11 11:58:43 +00:00
|
|
|
export default defineNuxtPlugin({
|
|
|
|
name: 'nuxt:revive-payload:server',
|
|
|
|
setup () {
|
|
|
|
for (const reducer in reducers) {
|
|
|
|
definePayloadReducer(reducer, reducers[reducer as keyof typeof reducers])
|
|
|
|
}
|
2023-04-07 10:34:35 +00:00
|
|
|
}
|
|
|
|
})
|