[{"data":1,"prerenderedAt":983},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-typegen":71,"-getting-started-typegen-surround":979},[4,34,58],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,14,18,22,26,30],{"title":11,"path":12,"stem":13},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation",{"title":15,"path":16,"stem":17},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F3.configuration",{"title":19,"path":20,"stem":21},"Usage","\u002Fgetting-started\u002Fusage","1.getting-started\u002F4.usage",{"title":23,"path":24,"stem":25},"Visual Editing","\u002Fgetting-started\u002Fvisual-editing","1.getting-started\u002F5.visual-editing",{"title":27,"path":28,"stem":29},"Live Content","\u002Fgetting-started\u002Flive-content","1.getting-started\u002F6.live-content",{"title":31,"path":32,"stem":33},"Typegen","\u002Fgetting-started\u002Ftypegen","1.getting-started\u002F7.typegen",{"title":35,"icon":6,"path":36,"stem":37,"children":38,"page":6},"Helpers","\u002Fhelpers","2.helpers",[39,43,47,51,55],{"title":40,"path":41,"stem":42},"Portable Text","\u002Fhelpers\u002Fportable-text","2.helpers\u002F1.portable-text",{"title":44,"path":45,"stem":46},"Images","\u002Fhelpers\u002Fimages","2.helpers\u002F2.images",{"title":48,"path":49,"stem":50},"Files","\u002Fhelpers\u002Ffiles","2.helpers\u002F3.files",{"title":52,"path":53,"stem":54},"Groq","\u002Fhelpers\u002Fgroq","2.helpers\u002F4.groq",{"title":23,"path":56,"stem":57},"\u002Fhelpers\u002Fvisual-editing","2.helpers\u002F5.visual-editing",{"title":59,"icon":6,"path":60,"stem":61,"children":62,"page":6},"Community","\u002Fcommunity","3.community",[63,67],{"title":64,"path":65,"stem":66},"Credits","\u002Fcommunity\u002Fcredits","3.community\u002F1.credits",{"title":68,"path":69,"stem":70},"Changelog","\u002Fcommunity\u002Fchangelog","3.community\u002F2.changelog",{"id":72,"title":31,"body":73,"description":973,"extension":974,"links":975,"meta":976,"navigation":179,"path":32,"seo":977,"stem":33,"__hash__":978},"docs\u002F1.getting-started\u002F7.typegen.md",{"type":74,"value":75,"toc":951},"minimark",[76,94,99,104,111,206,209,215,349,352,359,363,370,481,488,493,575,584,588,591,646,649,653,656,756,760,766,785,788,794,811,814,820,833,840,846,867,870,876,888,898,902,922,926,929,944,947],[77,78,79,83,84,93],"p",{},[80,81,82],"code",{},"@nuxtjs\u002Fsanity"," supports automatic TypeScript type generation for your GROQ queries using ",[85,86,90],"a",{"href":87,"rel":88},"https:\u002F\u002Fgithub.com\u002Fsanity-io\u002Fsanity\u002Ftree\u002Fnext\u002Fpackages\u002F@sanity\u002Fcodegen",[89],"nofollow",[80,91,92],{},"@sanity\u002Fcodegen",". This enables end-to-end type safety from your Sanity schema to your Vue components.",[95,96,98],"h2",{"id":97},"setup","Setup",[100,101,103],"h3",{"id":102},"prerequisites","Prerequisites",[77,105,106,107,110],{},"Your project must have a Sanity schema types file that exports an array of schema type definitions. This is typically located at ",[80,108,109],{},"cms\u002FschemaTypes\u002Findex.ts",":",[112,113,118],"pre",{"className":114,"code":115,"filename":109,"language":116,"meta":117,"style":117},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { movie } from '.\u002Fmovie'\nimport { person } from '.\u002Fperson'\n\nexport const schemaTypes = [movie, person]\n","ts","",[80,119,120,153,174,181],{"__ignoreMap":117},[121,122,125,129,133,137,140,143,146,150],"span",{"class":123,"line":124},"line",1,[121,126,128],{"class":127},"s7zQu","import",[121,130,132],{"class":131},"sMK4o"," {",[121,134,136],{"class":135},"sTEyZ"," movie",[121,138,139],{"class":131}," }",[121,141,142],{"class":127}," from",[121,144,145],{"class":131}," '",[121,147,149],{"class":148},"sfazB",".\u002Fmovie",[121,151,152],{"class":131},"'\n",[121,154,156,158,160,163,165,167,169,172],{"class":123,"line":155},2,[121,157,128],{"class":127},[121,159,132],{"class":131},[121,161,162],{"class":135}," person",[121,164,139],{"class":131},[121,166,142],{"class":127},[121,168,145],{"class":131},[121,170,171],{"class":148},".\u002Fperson",[121,173,152],{"class":131},[121,175,177],{"class":123,"line":176},3,[121,178,180],{"emptyLinePlaceholder":179},true,"\n",[121,182,184,187,191,194,197,200,203],{"class":123,"line":183},4,[121,185,186],{"class":127},"export",[121,188,190],{"class":189},"spNyl"," const",[121,192,193],{"class":135}," schemaTypes ",[121,195,196],{"class":131},"=",[121,198,199],{"class":135}," [movie",[121,201,202],{"class":131},",",[121,204,205],{"class":135}," person]\n",[100,207,15],{"id":208},"configuration",[77,210,211,212,110],{},"Enable type generation in your ",[80,213,214],{},"nuxt.config.ts",[112,216,218],{"className":114,"code":217,"filename":214,"language":116,"meta":117,"style":117},"export default defineNuxtConfig({\n  modules: ['@nuxtjs\u002Fsanity'],\n  sanity: {\n    projectId: 'your-project-id',\n    typegen: {\n      enabled: true,\n      schemaTypesPath: '.\u002Fcms\u002FschemaTypes',\n    },\n  },\n})\n",[80,219,220,237,261,271,287,297,311,328,334,340],{"__ignoreMap":117},[121,221,222,224,227,231,234],{"class":123,"line":124},[121,223,186],{"class":127},[121,225,226],{"class":127}," default",[121,228,230],{"class":229},"s2Zo4"," defineNuxtConfig",[121,232,233],{"class":135},"(",[121,235,236],{"class":131},"{\n",[121,238,239,243,245,248,251,253,255,258],{"class":123,"line":155},[121,240,242],{"class":241},"swJcz","  modules",[121,244,110],{"class":131},[121,246,247],{"class":135}," [",[121,249,250],{"class":131},"'",[121,252,82],{"class":148},[121,254,250],{"class":131},[121,256,257],{"class":135},"]",[121,259,260],{"class":131},",\n",[121,262,263,266,268],{"class":123,"line":176},[121,264,265],{"class":241},"  sanity",[121,267,110],{"class":131},[121,269,270],{"class":131}," {\n",[121,272,273,276,278,280,283,285],{"class":123,"line":183},[121,274,275],{"class":241},"    projectId",[121,277,110],{"class":131},[121,279,145],{"class":131},[121,281,282],{"class":148},"your-project-id",[121,284,250],{"class":131},[121,286,260],{"class":131},[121,288,290,293,295],{"class":123,"line":289},5,[121,291,292],{"class":241},"    typegen",[121,294,110],{"class":131},[121,296,270],{"class":131},[121,298,300,303,305,309],{"class":123,"line":299},6,[121,301,302],{"class":241},"      enabled",[121,304,110],{"class":131},[121,306,308],{"class":307},"sfNiH"," true",[121,310,260],{"class":131},[121,312,314,317,319,321,324,326],{"class":123,"line":313},7,[121,315,316],{"class":241},"      schemaTypesPath",[121,318,110],{"class":131},[121,320,145],{"class":131},[121,322,323],{"class":148},".\u002Fcms\u002FschemaTypes",[121,325,250],{"class":131},[121,327,260],{"class":131},[121,329,331],{"class":123,"line":330},8,[121,332,333],{"class":131},"    },\n",[121,335,337],{"class":123,"line":336},9,[121,338,339],{"class":131},"  },\n",[121,341,343,346],{"class":123,"line":342},10,[121,344,345],{"class":131},"}",[121,347,348],{"class":135},")\n",[95,350,19],{"id":351},"usage",[77,353,354,355,358],{},"Once configured, types are automatically generated during ",[80,356,357],{},"nuxt prepare"," and whenever schema or query files change in development mode.",[100,360,362],{"id":361},"writing-queries","Writing Queries",[77,364,365,366,369],{},"Use the ",[80,367,368],{},"groq"," template tag to write your queries. Generated types follow a naming convention based on your query variable name:",[112,371,375],{"className":372,"code":373,"language":374,"meta":117,"style":117},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\n\u002F\u002F Query variable: moviesQuery -> Generated type: MoviesQueryResult\nconst moviesQuery = groq`*[_type == \"movie\"] { title, slug }`\n\n\u002F\u002F Use the generated type for full type safety\nconst { data } = await useSanityQuery\u003CMoviesQueryResult>(moviesQuery)\n\u003C\u002Fscript>\n","vue",[80,376,377,403,409,431,435,440,472],{"__ignoreMap":117},[121,378,379,382,385,388,391,393,396,398,400],{"class":123,"line":124},[121,380,381],{"class":131},"\u003C",[121,383,384],{"class":241},"script",[121,386,387],{"class":189}," setup",[121,389,390],{"class":189}," lang",[121,392,196],{"class":131},[121,394,395],{"class":131},"\"",[121,397,116],{"class":148},[121,399,395],{"class":131},[121,401,402],{"class":131},">\n",[121,404,405],{"class":123,"line":155},[121,406,408],{"class":407},"sHwdD","\u002F\u002F Query variable: moviesQuery -> Generated type: MoviesQueryResult\n",[121,410,411,414,417,419,422,425,428],{"class":123,"line":176},[121,412,413],{"class":189},"const",[121,415,416],{"class":135}," moviesQuery ",[121,418,196],{"class":131},[121,420,421],{"class":229}," groq",[121,423,424],{"class":131},"`",[121,426,427],{"class":148},"*[_type == \"movie\"] { title, slug }",[121,429,430],{"class":131},"`\n",[121,432,433],{"class":123,"line":183},[121,434,180],{"emptyLinePlaceholder":179},[121,436,437],{"class":123,"line":289},[121,438,439],{"class":407},"\u002F\u002F Use the generated type for full type safety\n",[121,441,442,444,446,449,451,454,457,460,462,466,469],{"class":123,"line":299},[121,443,413],{"class":189},[121,445,132],{"class":131},[121,447,448],{"class":135}," data ",[121,450,345],{"class":131},[121,452,453],{"class":131}," =",[121,455,456],{"class":127}," await",[121,458,459],{"class":229}," useSanityQuery",[121,461,381],{"class":131},[121,463,465],{"class":464},"sBMFI","MoviesQueryResult",[121,467,468],{"class":131},">",[121,470,471],{"class":135},"(moviesQuery)\n",[121,473,474,477,479],{"class":123,"line":313},[121,475,476],{"class":131},"\u003C\u002F",[121,478,384],{"class":241},[121,480,402],{"class":131},[100,482,484,485],{"id":483},"using-definequery","Using ",[80,486,487],{},"defineQuery",[77,489,490,491,110],{},"For better editor support and explicit query definition, you can use ",[80,492,487],{},[112,494,496],{"className":372,"code":495,"language":374,"meta":117,"style":117},"\u003Cscript setup lang=\"ts\">\nconst moviesQuery = defineQuery(`*[_type == \"movie\"] { title, slug }`)\n\nconst { data } = await useSanityQuery\u003CMoviesQueryResult>(moviesQuery)\n\u003C\u002Fscript>\n",[80,497,498,518,539,543,567],{"__ignoreMap":117},[121,499,500,502,504,506,508,510,512,514,516],{"class":123,"line":124},[121,501,381],{"class":131},[121,503,384],{"class":241},[121,505,387],{"class":189},[121,507,390],{"class":189},[121,509,196],{"class":131},[121,511,395],{"class":131},[121,513,116],{"class":148},[121,515,395],{"class":131},[121,517,402],{"class":131},[121,519,520,522,524,526,529,531,533,535,537],{"class":123,"line":155},[121,521,413],{"class":189},[121,523,416],{"class":135},[121,525,196],{"class":131},[121,527,528],{"class":229}," defineQuery",[121,530,233],{"class":135},[121,532,424],{"class":131},[121,534,427],{"class":148},[121,536,424],{"class":131},[121,538,348],{"class":135},[121,540,541],{"class":123,"line":176},[121,542,180],{"emptyLinePlaceholder":179},[121,544,545,547,549,551,553,555,557,559,561,563,565],{"class":123,"line":183},[121,546,413],{"class":189},[121,548,132],{"class":131},[121,550,448],{"class":135},[121,552,345],{"class":131},[121,554,453],{"class":131},[121,556,456],{"class":127},[121,558,459],{"class":229},[121,560,381],{"class":131},[121,562,465],{"class":464},[121,564,468],{"class":131},[121,566,471],{"class":135},[121,568,569,571,573],{"class":123,"line":289},[121,570,476],{"class":131},[121,572,384],{"class":241},[121,574,402],{"class":131},[77,576,577,578,580,581,583],{},"Both ",[80,579,368],{}," and ",[80,582,487],{}," are auto-imported and available throughout your application.",[100,585,587],{"id":586},"generated-types","Generated Types",[77,589,590],{},"The module generates types based on your query variable names:",[592,593,594,607],"table",{},[595,596,597],"thead",{},[598,599,600,604],"tr",{},[601,602,603],"th",{},"Query Variable",[601,605,606],{},"Generated Type",[608,609,610,622,634],"tbody",{},[598,611,612,618],{},[613,614,615],"td",{},[80,616,617],{},"moviesQuery",[613,619,620],{},[80,621,465],{},[598,623,624,629],{},[613,625,626],{},[80,627,628],{},"movieBySlugQuery",[613,630,631],{},[80,632,633],{},"MovieBySlugQueryResult",[598,635,636,641],{},[613,637,638],{},[80,639,640],{},"allPostsQuery",[613,642,643],{},[80,644,645],{},"AllPostsQueryResult",[77,647,648],{},"These types are automatically available via auto-imports - no manual import statements required.",[100,650,652],{"id":651},"server-routes","Server Routes",[77,654,655],{},"Type generation also works in your Nitro server routes:",[112,657,660],{"className":114,"code":658,"filename":659,"language":116,"meta":117,"style":117},"export default defineEventHandler(async () => {\n  const sanity = useSanity()\n  const query = groq`*[_type == \"movie\"] { title }`\n  \n  return sanity.fetch\u003CFetchMoviesQueryResult>(query)\n})\n","server\u002Fapi\u002Fmovies.ts",[80,661,662,684,700,718,723,750],{"__ignoreMap":117},[121,663,664,666,668,671,673,676,679,682],{"class":123,"line":124},[121,665,186],{"class":127},[121,667,226],{"class":127},[121,669,670],{"class":229}," defineEventHandler",[121,672,233],{"class":135},[121,674,675],{"class":189},"async",[121,677,678],{"class":131}," ()",[121,680,681],{"class":189}," =>",[121,683,270],{"class":131},[121,685,686,689,692,694,697],{"class":123,"line":155},[121,687,688],{"class":189},"  const",[121,690,691],{"class":135}," sanity",[121,693,453],{"class":131},[121,695,696],{"class":229}," useSanity",[121,698,699],{"class":241},"()\n",[121,701,702,704,707,709,711,713,716],{"class":123,"line":176},[121,703,688],{"class":189},[121,705,706],{"class":135}," query",[121,708,453],{"class":131},[121,710,421],{"class":229},[121,712,424],{"class":131},[121,714,715],{"class":148},"*[_type == \"movie\"] { title }",[121,717,430],{"class":131},[121,719,720],{"class":123,"line":183},[121,721,722],{"class":241},"  \n",[121,724,725,728,730,733,736,738,741,743,745,748],{"class":123,"line":289},[121,726,727],{"class":127},"  return",[121,729,691],{"class":135},[121,731,732],{"class":131},".",[121,734,735],{"class":229},"fetch",[121,737,381],{"class":131},[121,739,740],{"class":464},"FetchMoviesQueryResult",[121,742,468],{"class":131},[121,744,233],{"class":241},[121,746,747],{"class":135},"query",[121,749,348],{"class":241},[121,751,752,754],{"class":123,"line":299},[121,753,345],{"class":131},[121,755,348],{"class":135},[95,757,759],{"id":758},"configuration-options","Configuration Options",[100,761,763],{"id":762},"typegenenabled",[80,764,765],{},"typegen.enabled",[767,768,769,777],"ul",{},[770,771,772,773],"li",{},"Type: ",[774,775,776],"strong",{},"boolean",[770,778,779,780],{},"Default: ",[774,781,782],{},[80,783,784],{},"false",[77,786,787],{},"Enable or disable type generation.",[100,789,791],{"id":790},"typegenschematypespath",[80,792,793],{},"typegen.schemaTypesPath",[767,795,796,801],{},[770,797,772,798],{},[774,799,800],{},"string",[770,802,803,804,807,808],{},"Required when ",[80,805,806],{},"enabled"," is ",[80,809,810],{},"true",[77,812,813],{},"Path to your schema types module. This should be a file that exports an array of Sanity schema type definitions.",[100,815,817],{"id":816},"typegenschematypesexport",[80,818,819],{},"typegen.schemaTypesExport",[767,821,822,826],{},[770,823,772,824],{},[774,825,800],{},[770,827,779,828],{},[774,829,830],{},[80,831,832],{},"'schemaTypes'",[77,834,835,836,839],{},"The export name to read schema types from. By default, the module looks for a named export called ",[80,837,838],{},"schemaTypes",", or falls back to the default export.",[100,841,843],{"id":842},"typegenquerypaths",[80,844,845],{},"typegen.queryPaths",[767,847,848,855],{},[770,849,772,850],{},[774,851,852,853],{},"string | string",[121,854],{},[770,856,779,857,862,863,866],{},[774,858,859],{},[80,860,861],{},"['**\u002F*.{ts,tsx,js,jsx,mjs,cjs,vue,astro}']"," (relative to ",[80,864,865],{},"srcDir",")",[77,868,869],{},"Glob pattern(s) specifying which files to scan for GROQ queries.",[100,871,873],{"id":872},"typegenoverloadclientmethods",[80,874,875],{},"typegen.overloadClientMethods",[767,877,878,882],{},[770,879,772,880],{},[774,881,776],{},[770,883,779,884],{},[774,885,886],{},[80,887,810],{},[77,889,890,891,894,895,897],{},"When enabled, generates ",[80,892,893],{},"@sanity\u002Fclient"," method overloads that provide type inference for the ",[80,896,735],{}," method.",[95,899,901],{"id":900},"current-limitations","Current Limitations",[903,904,906,907,910,911,913,914,916,917,919,920,732],"callout",{"type":905},"info","Currently, you must manually specify the result type in composables (e.g., ",[80,908,909],{},"useSanityQuery\u003CMoviesQueryResult>","). This is because ",[80,912,92],{}," checks for explicit imports of ",[80,915,368],{}," or ",[80,918,487],{},", but Nuxt uses auto-imports. Automatic type inference based on the query variable may be supported in a future update to ",[80,921,92],{},[95,923,925],{"id":924},"file-watching","File Watching",[77,927,928],{},"In development mode, the module watches for changes to:",[767,930,931,937],{},[770,932,933,934,866],{},"Your schema types file (",[80,935,936],{},"schemaTypesPath",[770,938,939,940,943],{},"Any files matching ",[80,941,942],{},"queryPaths"," patterns",[77,945,946],{},"Types are automatically regenerated when these files change.",[948,949,950],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":117,"searchDepth":155,"depth":155,"links":952},[953,957,964,971,972],{"id":97,"depth":155,"text":98,"children":954},[955,956],{"id":102,"depth":176,"text":103},{"id":208,"depth":176,"text":15},{"id":351,"depth":155,"text":19,"children":958},[959,960,962,963],{"id":361,"depth":176,"text":362},{"id":483,"depth":176,"text":961},"Using defineQuery",{"id":586,"depth":176,"text":587},{"id":651,"depth":176,"text":652},{"id":758,"depth":155,"text":759,"children":965},[966,967,968,969,970],{"id":762,"depth":176,"text":765},{"id":790,"depth":176,"text":793},{"id":816,"depth":176,"text":819},{"id":842,"depth":176,"text":845},{"id":872,"depth":176,"text":875},{"id":900,"depth":155,"text":901},{"id":924,"depth":155,"text":925},"@nuxtjs\u002Fsanity supports automatic TypeScript type generation for your GROQ queries using @sanity\u002Fcodegen. This enables end-to-end type safety from your Sanity schema to your Vue components.","md",null,{},{"description":973},"tREcD4xoLk91RmKFNH6Uhn21JolKhCvDXj_rxbpRnp4",[980,982],{"title":27,"path":28,"stem":29,"description":981,"children":-1},"The Live Content API allows your app to subscribe to changes in your Sanity dataset and receive updates whenever documents are created, updated, or deleted.",{"title":40,"path":41,"stem":42,"description":117,"children":-1},1775664329741]