| 84 | * `next-auth` expects `null` to be returned |
| 85 | */ |
| 86 | export function query(f: FaunaClient, format: (...args: any) => any) { |
| 87 | return async function <T>(expr: ExprArg): Promise<T | null> { |
| 88 | try { |
| 89 | const result = await f.query<{ |
| 90 | data: T |
| 91 | ref: { id: string } |
| 92 | } | null>(expr) |
| 93 | if (!result) return null |
| 94 | return format({ ...result.data, id: result.ref.id }) |
| 95 | } catch (error) { |
| 96 | if ((error as errors.FaunaError).name === "NotFound") return null |
| 97 | if ( |
| 98 | (error as errors.FaunaError).description?.includes( |
| 99 | "Number or numeric String expected" |
| 100 | ) |
| 101 | ) |
| 102 | return null |
| 103 | |
| 104 | if (process.env.NODE_ENV === "test") console.error(error) |
| 105 | |
| 106 | throw error |
| 107 | } |
| 108 | } |
| 109 | } |
| 110 | |
| 111 | export function FaunaAdapter(f: FaunaClient): Adapter { |
| 112 | const { Users, Accounts, Sessions, VerificationTokens } = collections |