UNPKG

sanity

Version:

Sanity is a real-time content infrastructure with a scalable, hosted backend featuring a Graph Oriented Query Language (GROQ), asset pipelines and fast edge caches

56 lines (50 loc) 1.54 kB
import {type Role} from '@sanity/types' import {satisfies} from 'semver' import {type AudienceRole, audienceRoles, type StudioAnnouncementDocument} from './types' /** * @internal * @hidden */ export function isValidAnnouncementAudience( document: { audience: StudioAnnouncementDocument['audience'] studioVersion: StudioAnnouncementDocument['studioVersion'] }, sanityVersion: string, ): boolean { switch (document.audience) { case 'everyone': return true case 'specific-version': return satisfies(sanityVersion, `= ${document.studioVersion}`, { includePrerelease: true, }) case 'greater-than-or-equal-version': return satisfies(sanityVersion, `>= ${document.studioVersion}`, { includePrerelease: true, }) case 'less-than-or-equal-version': return satisfies(sanityVersion, `<= ${document.studioVersion}`, { includePrerelease: true, }) default: return true } } /** * @internal * @hidden */ export function isValidAnnouncementRole( audience: StudioAnnouncementDocument['audienceRole'] | undefined, userRoles: Role[] | undefined, ): boolean { if (!audience || !audience.length) return true if (!userRoles || !userRoles.length) return false if (userRoles.some((role) => audience.includes(role.name as AudienceRole))) return true // Check if the user has a custom role if (userRoles.some((role) => !audienceRoles.includes(role.name as AudienceRole))) { return audience.includes('custom') } return false }