diff options
Diffstat (limited to 'src/state/queries/nuxs/util.ts')
-rw-r--r-- | src/state/queries/nuxs/util.ts | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/state/queries/nuxs/util.ts b/src/state/queries/nuxs/util.ts new file mode 100644 index 000000000..d65b86a34 --- /dev/null +++ b/src/state/queries/nuxs/util.ts @@ -0,0 +1,52 @@ +import {AppBskyActorDefs, nuxSchema} from '@atproto/api' + +import { + AppNux, + Nux, + nuxNames, + NuxSchemas, +} from '#/state/queries/nuxs/definitions' + +export function parseAppNux(nux: AppBskyActorDefs.Nux): AppNux | undefined { + if (!nuxNames.has(nux.id as Nux)) return + if (!nuxSchema.safeParse(nux).success) return + + const {data, ...rest} = nux + + const schema = NuxSchemas[nux.id as Nux] + + if (schema && data) { + const parsedData = JSON.parse(data) + + if (!schema.safeParse(parsedData).success) return + + return { + ...rest, + data: parsedData, + } as AppNux + } + + return { + ...rest, + data: undefined, + } as AppNux +} + +export function serializeAppNux(nux: AppNux): AppBskyActorDefs.Nux { + const {data, ...rest} = nux + const schema = NuxSchemas[nux.id as Nux] + + const result: AppBskyActorDefs.Nux = { + ...rest, + data: undefined, + } + + if (schema) { + schema.parse(data) + result.data = JSON.stringify(data) + } + + nuxSchema.parse(result) + + return result +} |