@sanity/mutate
Version:
Experimental toolkit for working with Sanity mutations in JavaScript & TypeScript
55 lines (49 loc) • 1.4 kB
text/typescript
import {expect, test} from 'vitest'
import {at, autoKeys, createIfNotExists, patch, setIfMissing} from '../src'
import {applyInCollection} from '../src/apply'
// Example of automatic key generation of object
let i = 0
const {insert, append, insertAfter, insertBefore, prepend} = autoKeys(
() => `a-very-random-key-${i++}`,
)
const mutations = [
createIfNotExists({_id: 'some-doc', _type: 'testing'}),
patch('some-doc', [
at('array', setIfMissing([])),
at('array', insert('after', 0, [{order: 'second'}])),
at('array', append([{_key: 'third', order: 'third'}])),
at('array', insertBefore({_key: 'third'}, [{order: 'after-second'}])),
at('array', prepend([{_key: 'first', order: 'first'}])),
at('array', insertAfter({_key: 'first'}, [{order: 'after-first'}])),
]),
]
test('it works as expected', () => {
expect(applyInCollection([], mutations)).toEqual([
{
_id: 'some-doc',
_type: 'testing',
array: [
{
_key: 'first',
order: 'first',
},
{
_key: 'a-very-random-key-2',
order: 'after-first',
},
{
_key: 'a-very-random-key-0',
order: 'second',
},
{
_key: 'a-very-random-key-1',
order: 'after-second',
},
{
_key: 'third',
order: 'third',
},
],
},
])
})