UNPKG

@atproto/repo

Version:

atproto repo and MST implementation

45 lines (41 loc) 1.19 kB
import { check } from '@atproto/common-web' import { decode } from '@atproto/lex-cbor' import { Cid, LexMap } from '@atproto/lex-data' import { BlockMap } from './block-map.js' import { MissingBlockError, UnexpectedObjectError } from './error.js' import { cborToLexRecord } from './util.js' export const getAndParseRecord = async ( blocks: BlockMap, cid: Cid, ): Promise<{ record: LexMap; bytes: Uint8Array }> => { const bytes = blocks.get(cid) if (!bytes) { throw new MissingBlockError(cid, 'record') } const record = cborToLexRecord(bytes) return { record, bytes } } export const getAndParseByDef = async <T>( blocks: BlockMap, cid: Cid, def: check.Def<T>, ): Promise<{ obj: T; bytes: Uint8Array }> => { const bytes = blocks.get(cid) if (!bytes) { throw new MissingBlockError(cid, def.name) } return parseObjByDef(bytes, cid, def) } export const parseObjByDef = <T>( bytes: Uint8Array, cid: Cid, def: check.Def<T>, ): { obj: T; bytes: Uint8Array } => { const obj = decode(bytes) const res = def.schema.safeParse(obj) if (res.success) { return { obj: res.data, bytes } } else { throw new UnexpectedObjectError(cid, def.name) } }