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
19 lines (15 loc) • 878 B
text/typescript
import {isKeyedObject, isKeySegment, type Path, type PathSegment} from '@sanity/types'
// Tests whether a keyed value matches a given keyed pathSegment
function matchesSegment(segment: PathSegment, value: unknown) {
return isKeyedObject(value) && isKeySegment(segment) && value._key === segment._key
}
// Utility to check if the given focusPath terminates at the given keyed value
// E.g. focus is on the value itself and not a child node
export function hasFocusAtPath(path: Path, value: unknown): boolean {
return path.length === 1 && matchesSegment(path[0], value)
}
// Utility to check if the given focusPath terminates at a child node of the given keyed value
// E.g. focus is on a child node of the value and not the value itself
export function hasFocusWithinPath(path: Path, value: unknown): boolean {
return path.length > 1 && matchesSegment(path[0], value)
}