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
88 lines (77 loc) • 1.83 kB
text/typescript
import {type Path, type PathSegment} from '@sanity/types'
import {
type FormDecPatch,
type FormDiffMatchPatch,
type FormIncPatch,
type FormInsertPatch,
type FormInsertPatchPosition,
type FormSetIfMissingPatch,
type FormSetPatch,
type FormUnsetPatch,
} from './types'
/** @internal */
export const SANITY_PATCH_TYPE = Symbol.for('sanity.patch')
/**
* @hidden
* @beta */
export function setIfMissing(value: any, path: Path = []): FormSetIfMissingPatch {
return {
patchType: SANITY_PATCH_TYPE,
type: 'setIfMissing',
path,
value,
}
}
/**
* @hidden
* @beta */
export function insert(
items: any[],
position: FormInsertPatchPosition,
path: Path = [],
): FormInsertPatch {
return {
patchType: SANITY_PATCH_TYPE,
type: 'insert',
path,
position,
items,
}
}
/**
* @hidden
* @beta */
export function set(value: any, path: Path = []): FormSetPatch {
return {patchType: SANITY_PATCH_TYPE, type: 'set', path, value}
}
/**
* @hidden
* @beta */
export function unset(path: Path = []): FormUnsetPatch {
return {patchType: SANITY_PATCH_TYPE, type: 'unset', path}
}
/**
* @hidden
* @beta */
export function diffMatchPatch(value: string, path: Path = []): FormDiffMatchPatch {
return {patchType: SANITY_PATCH_TYPE, type: 'diffMatchPatch', path, value}
}
/**
* @hidden
* @beta */
export function inc(amount = 1, path: Path = []): FormIncPatch {
return {patchType: SANITY_PATCH_TYPE, type: 'inc', path, value: amount}
}
/**
* @hidden
* @beta */
export function dec(amount = 1, path: Path = []): FormDecPatch {
return {patchType: SANITY_PATCH_TYPE, type: 'dec', path, value: amount}
}
/** @internal */
export function prefixPath<T extends {path: Path}>(patch: T, segment: PathSegment): T {
return {
...patch,
path: [segment, ...patch.path],
}
}