import { Group } from "../../../coValues/group.js"; import { ID, SubscribeListenerOptions, SubscribeRestArgs, } from "../../../coValues/interfaces.js"; import { Account, Settled, RefsToResolve, RefsToResolveStrict, Resolved, ResolveQuery, } from "../../../internal.js"; import { CoreCoValueSchema } from "./CoValueSchema.js"; import { coOptionalDefiner } from "../zodCo.js"; import { CoOptionalSchema } from "./CoOptionalSchema.js"; import type { AccountRole, InviteSecret } from "cojson"; import { z } from "../zodReExport.js"; export interface CoreGroupSchema extends CoreCoValueSchema { builtin: "Group"; } export function createCoreGroupSchema(): CoreGroupSchema { return { collaborative: true as const, builtin: "Group" as const, resolveQuery: true as const, getValidationSchema: () => z.any(), }; } export class GroupSchema implements CoreGroupSchema { readonly collaborative = true as const; readonly builtin = "Group" as const; readonly resolveQuery = true as const; #validationSchema: z.ZodType | undefined = undefined; getValidationSchema = () => { if (this.#validationSchema) { return this.#validationSchema; } this.#validationSchema = z.instanceof(Group); return this.#validationSchema; }; getCoValueClass(): typeof Group { return Group; } optional(): CoOptionalSchema { return coOptionalDefiner(this); } create(options?: { owner: Account } | Account) { return Group.create(options); } load>( id: ID, options?: { loadAs?: Account; resolve?: RefsToResolveStrict; }, ): Promise> { return Group.load(id, options); } createInvite( id: ID, options?: { role?: AccountRole; loadAs?: Account }, ): Promise { return Group.createInvite(id, options); } subscribe>( id: ID, listener: (value: Resolved, unsubscribe: () => void) => void, ): () => void; subscribe>( id: ID, options: SubscribeListenerOptions, listener: (value: Resolved, unsubscribe: () => void) => void, ): () => void; subscribe>( id: ID, ...args: SubscribeRestArgs ): () => void { // @ts-expect-error return Group.subscribe(id, ...args); } }