Skip to content

Commit cc9801a

Browse files
Copilotstipsan
andauthored
Setup Sanity TypeGen testing suite (#302)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: stipsan <81981+stipsan@users.noreply.github.com>
1 parent 16111b4 commit cc9801a

9 files changed

Lines changed: 11173 additions & 1837 deletions

File tree

.oxlintrc.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"$schema": "./node_modules/oxlint/configuration_schema.json",
3-
"ignorePatterns": ["dist/**", "coverage/**", "demo/dist/**", ".nyc_output/**"],
3+
"ignorePatterns": ["dist/**", "coverage/**", "demo/dist/**", ".nyc_output/**", "test/typegen/sanity.types.ts"],
44
"plugins": ["eslint", "typescript", "unicorn", "react", "react-perf", "oxc", "import"],
55
"categories": {
66
"correctness": "error",

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
"devDependencies": {
5656
"@changesets/changelog-github": "^0.6.0",
5757
"@changesets/cli": "^2.30.0",
58+
"@sanity/client": "^7.22.0",
5859
"@sanity/tsconfig": "^2.1.0",
5960
"@sanity/tsdown-config": "^0.5.8",
6061
"@sanity/ui": "^3.1.14",
@@ -66,6 +67,7 @@
6667
"babel-plugin-react-compiler": "^1.0.0",
6768
"esbuild": "^0.28.0",
6869
"esbuild-register": "^3.6.0",
70+
"groq": "^5.23.0",
6971
"leaflet": "^1.9.4",
7072
"oxfmt": "^0.44.0",
7173
"oxlint": "^1.59.0",
@@ -78,6 +80,7 @@
7880
"refractor": "^5.0.0",
7981
"rimraf": "^5.0.1",
8082
"rollup-plugin-visualizer": "^7.0.1",
83+
"sanity": "^5.23.0",
8184
"styled-components": "npm:@sanity/css-in-js@6.2.1",
8285
"tsdown": "^0.21.7",
8386
"typescript": "5.9.3",

pnpm-lock.yaml

Lines changed: 8935 additions & 1836 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/typegen/sanity.cli.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import {defineCliConfig} from 'sanity/cli'
2+
3+
export default defineCliConfig({
4+
api: {
5+
projectId: 'test-project',
6+
dataset: 'production',
7+
},
8+
typegen: {
9+
path: './**/*.{ts,tsx}',
10+
schema: 'schema.json',
11+
generates: './sanity.types.ts',
12+
},
13+
})

test/typegen/sanity.config.ts

Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
import {defineConfig, defineType, defineField, defineArrayMember} from 'sanity'
2+
3+
const post = defineType({
4+
name: 'post',
5+
title: 'Post',
6+
type: 'document',
7+
fields: [
8+
defineField({
9+
name: 'title',
10+
title: 'Title',
11+
type: 'string',
12+
}),
13+
defineField({
14+
name: 'slug',
15+
title: 'Slug',
16+
type: 'slug',
17+
options: {source: 'title'},
18+
}),
19+
defineField({
20+
name: 'author',
21+
title: 'Author',
22+
type: 'reference',
23+
to: [{type: 'author'}],
24+
}),
25+
defineField({
26+
name: 'content',
27+
title: 'Content',
28+
type: 'array',
29+
of: [
30+
defineArrayMember({
31+
type: 'block',
32+
styles: [
33+
{title: 'Normal', value: 'normal'},
34+
{title: 'H2', value: 'h2'},
35+
{title: 'H3', value: 'h3'},
36+
{title: 'Quote', value: 'blockquote'},
37+
],
38+
marks: {
39+
decorators: [
40+
{title: 'Strong', value: 'strong'},
41+
{title: 'Emphasis', value: 'em'},
42+
{title: 'Code', value: 'code'},
43+
{title: 'Underline', value: 'underline'},
44+
{title: 'Strike', value: 'strike-through'},
45+
],
46+
annotations: [
47+
{
48+
name: 'link',
49+
type: 'object',
50+
title: 'Link',
51+
fields: [
52+
defineField({
53+
name: 'href',
54+
type: 'url',
55+
title: 'URL',
56+
}),
57+
],
58+
},
59+
],
60+
},
61+
}),
62+
defineArrayMember({
63+
name: 'image',
64+
type: 'image',
65+
title: 'Image',
66+
options: {hotspot: true},
67+
fields: [
68+
defineField({
69+
name: 'alt',
70+
type: 'string',
71+
title: 'Alternative text',
72+
}),
73+
defineField({
74+
name: 'caption',
75+
type: 'string',
76+
title: 'Caption',
77+
}),
78+
],
79+
}),
80+
defineArrayMember({
81+
type: 'object',
82+
name: 'quote',
83+
title: 'Quote',
84+
fields: [
85+
defineField({
86+
name: 'text',
87+
type: 'text',
88+
title: 'Quote Text',
89+
}),
90+
defineField({
91+
name: 'attribution',
92+
type: 'string',
93+
title: 'Attribution',
94+
}),
95+
],
96+
}),
97+
defineArrayMember({
98+
type: 'object',
99+
name: 'code',
100+
title: 'Code Block',
101+
fields: [
102+
defineField({
103+
name: 'language',
104+
type: 'string',
105+
title: 'Language',
106+
}),
107+
defineField({
108+
name: 'code',
109+
type: 'text',
110+
title: 'Code',
111+
}),
112+
defineField({
113+
name: 'filename',
114+
type: 'string',
115+
title: 'Filename',
116+
}),
117+
],
118+
}),
119+
],
120+
}),
121+
],
122+
})
123+
124+
const author = defineType({
125+
name: 'author',
126+
title: 'Author',
127+
type: 'document',
128+
fields: [
129+
defineField({
130+
name: 'name',
131+
title: 'Name',
132+
type: 'string',
133+
}),
134+
defineField({
135+
name: 'avatar',
136+
title: 'Avatar',
137+
type: 'image',
138+
options: {hotspot: true},
139+
}),
140+
defineField({
141+
name: 'bio',
142+
title: 'Bio',
143+
type: 'array',
144+
of: [
145+
defineArrayMember({
146+
type: 'block',
147+
styles: [{title: 'Normal', value: 'normal'}],
148+
marks: {
149+
decorators: [
150+
{title: 'Strong', value: 'strong'},
151+
{title: 'Emphasis', value: 'em'},
152+
],
153+
annotations: [
154+
{
155+
name: 'link',
156+
type: 'object',
157+
title: 'Link',
158+
fields: [
159+
defineField({
160+
name: 'href',
161+
type: 'url',
162+
title: 'URL',
163+
}),
164+
],
165+
},
166+
],
167+
},
168+
lists: [],
169+
}),
170+
],
171+
}),
172+
],
173+
})
174+
175+
export default defineConfig({
176+
name: 'default',
177+
title: 'Typegen Test',
178+
projectId: 'test-project',
179+
dataset: 'production',
180+
schema: {
181+
types: [post, author],
182+
},
183+
})

0 commit comments

Comments
 (0)