import { isEqualByD } from 'libs/utils/lodash' import { getArraySchema } from 'libs/utils/zod' import { z } from 'zod' import { PermissionsSchema } from './Permission' import { PersonSchema } from './Person' export const RoleSchema = z.object({ person: PersonSchema, permissions: PermissionsSchema, }).describe('Role') export const RoleUidSchema = RoleSchema.pick({ }) export const RolesSchema = getArraySchema(RoleSchema, parseRoleUid) export type Role = z.infer export type RoleUid = z.infer export function parseRole(role: Role): Role { return RoleSchema.parse(role) } export function parseRoles(roles: Role[]): Role[] { return RolesSchema.parse(roles) } export function parseRoleUid(roleUid: RoleUid): RoleUid { return RoleUidSchema.parse(roleUid) } export const isEqualRole = (a: Role) => (b: Role) => isEqualByD(a, b, parseRoleUid)