SENTINEL_VOCABULARY
A frozen, human-readable catalog of the sentinel-token vocabulary: for each context, its owning resolver, a description, and its member grammar. This is the documentation-facing source (it feeds schema-generated docs); the machine-checkable truth lives in the token pattern set the resolver enforces.
Shape
import { SENTINEL_VOCABULARY } from '@conduction/nextcloud-vue'
// Readonly<Record<string, { resolver: string, description: string, members: string[] }>>
SENTINEL_VOCABULARY.route // → { resolver: 'resolveRouteSentinels', description: …, members: ['@route.<param>'] }
Each key is a context (filter, config, object, workspace, route,
declarative); each value describes the resolver that owns it, what the context
is for, and the member token grammar. The object is Object.freezed — treat it
as read-only.
The filter context
@me, @me.displayName, @me.email, @myGroups, @now, @today,
@today±Nd, @monthStart, @monthEnd, @nextMonthStart, @quarterStart and
@yearStart.
@monthEnd is the last day of the current month. Use it with lte on a date
field. On a date-time field lte stops at midnight of that day, so write
lt: "@nextMonthStart" there: "closes this month" is
{ "expectedCloseDate": { "gte": "@monthStart", "lt": "@nextMonthStart" } }.
@myGroups resolves to an array: the ids of the Nextcloud groups the current
user is in, so { "assignedGroup": "@myGroups" } becomes an IN filter. Inside
an IN list (["@myGroups", "archive"]) the ids are spread in place. The groups
come from peekCurrentUserGroups: while they
load, and when the user is in no group, the token stays unresolved and the
caller waits instead of sending an empty list.
See also
SENTINEL_RESOLVERS— the compact context → resolver map.classifyToken— classifies a token against this vocabulary.SENTINEL_DEPRECATIONS— the companion deprecation map.