Skip to content

Commit 60996a7

Browse files
authored
feat: upgrade groq-js with support for synchronous evaluation (#637)
1 parent 2079b36 commit 60996a7

File tree

11 files changed

+38
-33
lines changed

11 files changed

+38
-33
lines changed

packages/core/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
"@sanity/mutate": "^0.12.4",
6767
"@sanity/types": "^3.83.0",
6868
"groq": "3.88.1-typegen-experimental.0",
69+
"groq-js": "^1.19.0",
6970
"lodash-es": "^4.17.21",
7071
"reselect": "^5.1.1",
7172
"rxjs": "^7.8.2",
@@ -83,7 +84,6 @@
8384
"@types/lodash-es": "^4.17.12",
8485
"@vitest/coverage-v8": "3.1.2",
8586
"eslint": "^9.22.0",
86-
"groq-js": "^1.16.1",
8787
"prettier": "^3.5.3",
8888
"rollup-plugin-visualizer": "^5.14.0",
8989
"typescript": "^5.8.3",

packages/core/src/document/_synchronous-groq-js.mjs

Lines changed: 0 additions & 4 deletions
This file was deleted.

packages/core/src/document/permissions.test.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import {type SanityDocument} from '@sanity/types'
2-
import {type ExprNode} from 'groq-js'
2+
import {evaluateSync, type ExprNode, parse} from 'groq-js'
33
import {describe, expect, it} from 'vitest'
44

55
import {createSanityInstance} from '../store/createSanityInstance'
66
import {getDraftId, getPublishedId} from '../utils/ids'
7-
import {evaluateSync, parse} from './_synchronous-groq-js.mjs'
87
import {type DocumentAction} from './actions'
98
import {calculatePermissions, createGrantsLookup, type DatasetAcl, type Grant} from './permissions'
109
import {type SyncTransactionState} from './reducers'
@@ -50,7 +49,7 @@ describe('createGrantsLookup', () => {
5049
;(['read', 'update', 'create', 'history'] as Grant[]).forEach((key) => {
5150
expect(grants[key]).toBeDefined()
5251
// Evaluate the expression for the dummy document.
53-
expect(evaluateSync(grants[key], {params: {document: dummyDoc}}).get()).toBe(true)
52+
expect(evaluateSync(grants[key], {params: {document: dummyDoc}}).data).toBe(true)
5453
})
5554
})
5655
})

packages/core/src/document/permissions.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
import {type SanityDocument} from '@sanity/types'
2-
import {type ExprNode} from 'groq-js'
2+
import {evaluateSync, type ExprNode, parse} from 'groq-js'
33
import {createSelector} from 'reselect'
44

55
import {type SelectorContext} from '../store/createStateSourceAction'
66
import {getDraftId, getPublishedId} from '../utils/ids'
77
import {MultiKeyWeakMap} from '../utils/MultiKeyWeakMap'
8-
import {evaluateSync, parse} from './_synchronous-groq-js.mjs'
98
import {type DocumentAction} from './actions'
109
import {ActionError, PermissionActionError, processActions} from './processActions'
1110
import {type DocumentSet} from './processMutations'
@@ -127,7 +126,8 @@ const memoizedActionsSelector = createSelector(
127126
)
128127

129128
function checkGrant(grantExpr: ExprNode, document: SanityDocument): boolean {
130-
return evaluateSync(grantExpr, {params: {document}}).get()
129+
const value = evaluateSync(grantExpr, {params: {document}})
130+
return value.type === 'boolean' && value.data
131131
}
132132

133133
/** @beta */

packages/core/src/document/processActions.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {type Reference, type SanityDocument} from '@sanity/types'
2+
import {parse} from 'groq-js'
23
import {describe, expect, it} from 'vitest'
34

4-
import {parse} from './_synchronous-groq-js.mjs'
55
import {type DocumentAction} from './actions'
66
import {ActionError, processActions} from './processActions'
77
import {type DocumentSet} from './processMutations'

packages/core/src/document/processActions.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,18 @@ import {
55
type Reference,
66
type SanityDocument,
77
} from '@sanity/types'
8-
import {type ExprNode} from 'groq-js'
8+
import {evaluateSync, type ExprNode} from 'groq-js'
99
import {isEqual} from 'lodash-es'
1010

1111
import {getDraftId, getPublishedId} from '../utils/ids'
12-
import {evaluateSync} from './_synchronous-groq-js.mjs'
1312
import {type DocumentAction} from './actions'
1413
import {type Grant} from './permissions'
1514
import {type DocumentSet, getId, processMutations} from './processMutations'
1615
import {type HttpAction} from './reducers'
1716

1817
function checkGrant(grantExpr: ExprNode, document: SanityDocument): boolean {
19-
return evaluateSync(grantExpr, {params: {document}}).get()
18+
const value = evaluateSync(grantExpr, {params: {document}})
19+
return value.type === 'boolean' && value.data
2020
}
2121

2222
interface ProcessActionsOptions {

packages/react/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
"@vitest/coverage-v8": "3.1.2",
8686
"babel-plugin-react-compiler": "19.1.0-rc.1",
8787
"eslint": "^9.22.0",
88+
"groq-js": "^1.19.0",
8889
"jsdom": "^25.0.1",
8990
"prettier": "^3.5.3",
9091
"react": "^19.1.0",

packages/react/src/hooks/_synchronous-groq-js.mjs

Lines changed: 0 additions & 4 deletions
This file was deleted.

packages/react/src/hooks/documents/useDocuments.test.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import {type SanityInstance} from '@sanity/sdk'
22
import {act, renderHook} from '@testing-library/react'
3+
import {evaluateSync, parse, toJS} from 'groq-js'
34
import {describe, vi} from 'vitest'
45

5-
import {evaluateSync, parse} from '../_synchronous-groq-js.mjs'
66
import {useSanityInstance} from '../context/useSanityInstance'
77
import {useQuery} from '../query/useQuery'
88
import {useDocuments} from './useDocuments'
@@ -69,7 +69,7 @@ describe('useDocuments', () => {
6969
]
7070

7171
vi.mocked(useQuery).mockImplementation(({query, ...options}) => {
72-
const result = evaluateSync(parse(query), {dataset, params: options?.params}).get()
72+
const result = toJS(evaluateSync(parse(query), {dataset, params: options?.params}))
7373
return {
7474
data: result,
7575
isPending: false,

packages/react/src/hooks/paginatedDocuments/usePaginatedDocuments.test.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import {act, renderHook} from '@testing-library/react'
2+
import {evaluateSync, parse, toJS} from 'groq-js'
23
import {describe, vi} from 'vitest'
34

45
import {ResourceProvider} from '../../context/ResourceProvider'
5-
import {evaluateSync, parse} from '../_synchronous-groq-js.mjs'
66
import {useQuery} from '../query/useQuery'
77
import {usePaginatedDocuments} from './usePaginatedDocuments'
88

@@ -73,7 +73,7 @@ describe('usePaginatedDocuments', () => {
7373
]
7474

7575
vi.mocked(useQuery).mockImplementation(({query, ...options}) => {
76-
const result = evaluateSync(parse(query), {dataset, params: options?.params}).get()
76+
const result = toJS(evaluateSync(parse(query), {dataset, params: options?.params}))
7777
return {
7878
data: result,
7979
isPending: false,

0 commit comments

Comments
 (0)