@sanity/migrate
Version:
Tooling for running data migrations on Sanity.io projects
168 lines (147 loc) • 3.12 kB
text/typescript
import {type KeyedSegment} from '@sanity/types'
import {type AnyArray} from '../typeUtils.js'
/**
* @public
*
* Represents an indexed segment in a document.
*/
type IndexedSegment = number
export type {IndexedSegment}
/**
* @public
*
* Represents a set-operation that can be applied to any value
*/
export type SetOp<T> = {
type: 'set'
value: T
}
/**
* @public
*
* Represents an unset operation that can be applied to any value
*/
export type UnsetOp = {
type: 'unset'
}
/**
* @public
*
* Represents a setIfMissing operation that can be applied to any value
*/
export type SetIfMissingOp<T> = {
type: 'setIfMissing'
value: T
}
/**
* @public
*
* Represents an increment-operation that can be applied to a number
*/
export type IncOp<Amount extends number> = {
amount: Amount
type: 'inc'
}
/**
* @public
*
* Represents a decrement-operation that can be applied to a number
*/
export type DecOp<Amount extends number> = {
amount: Amount
type: 'dec'
}
/**
* @public
*
* Represents a relative position in a document.
*/
export type RelativePosition = 'after' | 'before'
/**
* @public
*
* Represents an insert-operation that can be applied to an array
*/
export type InsertOp<
Items extends AnyArray,
Pos extends RelativePosition,
ReferenceItem extends IndexedSegment | KeyedSegment,
> = {
items: Items
position: Pos
referenceItem: ReferenceItem
type: 'insert'
}
/**
* @public
*
* Represents a truncate-operation that can be applied to an array
*/
export type TruncateOp = {
endIndex?: number
startIndex: number
type: 'truncate'
}
/**
* @public
*
* Represents a replace-operation that can be applied to an array
*/
export type ReplaceOp<
Items extends AnyArray,
ReferenceItem extends IndexedSegment | KeyedSegment,
> = {
items: Items
referenceItem: ReferenceItem
type: 'replace'
}
/**
* @public
*
* Represents a diff-match-patch operation that can be applied to a string
* {@link https://www.npmjs.com/package/@sanity/diff-match-patch}
*/
export type DiffMatchPatchOp = {
type: 'diffMatchPatch'
value: string
}
/**
* @public
*
* Represents an operation that can be applied to values of all types
*/
export type Operation = ArrayOp | PrimitiveOp
/**
* @public
*
* Represents an operation that can be applied to values of all types
*/
export type AnyOp = SetIfMissingOp<unknown> | SetOp<unknown> | UnsetOp
/**
* @public
*
* Represents an operation that can be applied to a number
*/
export type NumberOp = DecOp<number> | IncOp<number>
/**
* @public
*
* Represents an operation that can be applied to a string
*/
export type StringOp = DiffMatchPatchOp
/**
* @public
*
* Represents ann operation that can be applied to an array
*/
export type ArrayOp =
| InsertOp<AnyArray, RelativePosition, IndexedSegment | KeyedSegment>
| ReplaceOp<AnyArray, IndexedSegment | KeyedSegment>
| TruncateOp
/**
* @public
*
* Represents an operation that can be applied to any primitive value
*/
export type PrimitiveOp = AnyOp | NumberOp | StringOp
export {type KeyedSegment} from '@sanity/types'