[{"data":1,"prerenderedAt":1767},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-usage":71,"-getting-started-usage-surround":1763},[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":19,"body":73,"description":1757,"extension":1758,"links":1759,"meta":1760,"navigation":661,"path":20,"seo":1761,"stem":21,"__hash__":1762},"docs\u002F1.getting-started\u002F4.usage.md",{"type":74,"value":75,"toc":1746},"minimark",[76,84,104,108,123,133,143,148,243,248,324,328,335,437,452,456,463,536,543,546,556,559,566,576,588,592,598,605,613,616,878,882,885,1044,1050,1053,1147,1152,1159,1313,1317,1328,1398,1402,1412,1415,1422,1603,1742],[77,78,79,83],"p",{},[80,81,82],"code",{},"@nuxtjs\u002Fsanity"," provides key composables to interact with data from your Sanity project.",[85,86,87,98],"ol",{},[88,89,90,93,94,97],"li",{},[80,91,92],{},"useSanityQuery"," and ",[80,95,96],{},"useLazySanityQuery",". These composables allow automatic fetching of Sanity queries.",[88,99,100,103],{},[80,101,102],{},"useSanity",". This is the most customisable way to access data from your Sanity project, and exposes a Sanity client you can use to perform fetches or more advanced patterns (like subscribing to updates).",[105,106,92],"h2",{"id":107},"usesanityquery",[77,109,110,111,114,115,122],{},"This is a data fetching composable that wraps ",[80,112,113],{},"useAsyncData"," from Nuxt (see ",[116,117,121],"a",{"href":118,"rel":119},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fgetting-started\u002Fdata-fetching#useasyncdata",[120],"nofollow","docs",").",[77,124,125,126,128,129,132],{},"The only mandatory argument is the query for it to fetch. You can also pass params, and an options object. In addition to the options you can pass to ",[80,127,113],{},", there is also a ",[80,130,131],{},"client"," option for specifying which configured Sanity client you would like to use.",[77,134,135,136,139,140,142],{},"If you pass any ref\u002Fcomputed parameters in ",[80,137,138],{},"params",", ",[80,141,92],{}," will automatically refetch the query when these parameters change.",[144,145,147],"h3",{"id":146},"example","Example",[149,150,155],"pre",{"className":151,"code":152,"language":153,"meta":154,"style":154},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const query = groq`*[_type == \"post\" && topic == $topic][0..10]`\nconst { data, refresh } = useSanityQuery(query, { topic: 'News' })\n","ts","",[80,156,157,188],{"__ignoreMap":154},[158,159,162,166,170,174,178,181,185],"span",{"class":160,"line":161},"line",1,[158,163,165],{"class":164},"spNyl","const",[158,167,169],{"class":168},"sTEyZ"," query ",[158,171,173],{"class":172},"sMK4o","=",[158,175,177],{"class":176},"s2Zo4"," groq",[158,179,180],{"class":172},"`",[158,182,184],{"class":183},"sfazB","*[_type == \"post\" && topic == $topic][0..10]",[158,186,187],{"class":172},"`\n",[158,189,191,193,196,199,202,205,208,211,214,217,219,221,225,228,231,234,237,240],{"class":160,"line":190},2,[158,192,165],{"class":164},[158,194,195],{"class":172}," {",[158,197,198],{"class":168}," data",[158,200,201],{"class":172},",",[158,203,204],{"class":168}," refresh ",[158,206,207],{"class":172},"}",[158,209,210],{"class":172}," =",[158,212,213],{"class":176}," useSanityQuery",[158,215,216],{"class":168},"(query",[158,218,201],{"class":172},[158,220,195],{"class":172},[158,222,224],{"class":223},"swJcz"," topic",[158,226,227],{"class":172},":",[158,229,230],{"class":172}," '",[158,232,233],{"class":183},"News",[158,235,236],{"class":172},"'",[158,238,239],{"class":172}," }",[158,241,242],{"class":168},")\n",[77,244,245,246,227],{},"You can also type the result of your query by passing a generic to ",[80,247,92],{},[149,249,251],{"className":151,"code":250,"language":153,"meta":154,"style":154},"\u002F\u002F data will be typed as Ref\u003CPost | null>\nconst query = groq`*[_type == \"post\" && topic == $topic][0..10]`\nconst { data, refresh } = useSanityQuery\u003CPost>(query, { topic: 'News' })\n",[80,252,253,259,275],{"__ignoreMap":154},[158,254,255],{"class":160,"line":161},[158,256,258],{"class":257},"sHwdD","\u002F\u002F data will be typed as Ref\u003CPost | null>\n",[158,260,261,263,265,267,269,271,273],{"class":160,"line":190},[158,262,165],{"class":164},[158,264,169],{"class":168},[158,266,173],{"class":172},[158,268,177],{"class":176},[158,270,180],{"class":172},[158,272,184],{"class":183},[158,274,187],{"class":172},[158,276,278,280,282,284,286,288,290,292,294,297,301,304,306,308,310,312,314,316,318,320,322],{"class":160,"line":277},3,[158,279,165],{"class":164},[158,281,195],{"class":172},[158,283,198],{"class":168},[158,285,201],{"class":172},[158,287,204],{"class":168},[158,289,207],{"class":172},[158,291,210],{"class":172},[158,293,213],{"class":176},[158,295,296],{"class":172},"\u003C",[158,298,300],{"class":299},"sBMFI","Post",[158,302,303],{"class":172},">",[158,305,216],{"class":168},[158,307,201],{"class":172},[158,309,195],{"class":172},[158,311,224],{"class":223},[158,313,227],{"class":172},[158,315,230],{"class":172},[158,317,233],{"class":183},[158,319,236],{"class":172},[158,321,239],{"class":172},[158,323,242],{"class":168},[144,325,327],{"id":326},"query-options","Query Options",[77,329,330,331,334],{},"You can pass a ",[80,332,333],{},"queryOptions"," object to customise the options sent to the underlying Sanity client fetch call. This allows you to override the automatically resolved options for specific queries.",[149,336,338],{"className":151,"code":337,"language":153,"meta":154,"style":154},"const { data } = useSanityQuery(query, params, {\n  queryOptions: {\n    perspective: 'published',\n    tag: 'my-custom-tag',\n    useCdn: false,\n  },\n})\n",[80,339,340,367,376,393,410,424,430],{"__ignoreMap":154},[158,341,342,344,346,349,351,353,355,357,359,362,364],{"class":160,"line":161},[158,343,165],{"class":164},[158,345,195],{"class":172},[158,347,348],{"class":168}," data ",[158,350,207],{"class":172},[158,352,210],{"class":172},[158,354,213],{"class":176},[158,356,216],{"class":168},[158,358,201],{"class":172},[158,360,361],{"class":168}," params",[158,363,201],{"class":172},[158,365,366],{"class":172}," {\n",[158,368,369,372,374],{"class":160,"line":190},[158,370,371],{"class":223},"  queryOptions",[158,373,227],{"class":172},[158,375,366],{"class":172},[158,377,378,381,383,385,388,390],{"class":160,"line":277},[158,379,380],{"class":223},"    perspective",[158,382,227],{"class":172},[158,384,230],{"class":172},[158,386,387],{"class":183},"published",[158,389,236],{"class":172},[158,391,392],{"class":172},",\n",[158,394,396,399,401,403,406,408],{"class":160,"line":395},4,[158,397,398],{"class":223},"    tag",[158,400,227],{"class":172},[158,402,230],{"class":172},[158,404,405],{"class":183},"my-custom-tag",[158,407,236],{"class":172},[158,409,392],{"class":172},[158,411,413,416,418,422],{"class":160,"line":412},5,[158,414,415],{"class":223},"    useCdn",[158,417,227],{"class":172},[158,419,421],{"class":420},"sfNiH"," false",[158,423,392],{"class":172},[158,425,427],{"class":160,"line":426},6,[158,428,429],{"class":172},"  },\n",[158,431,433,435],{"class":160,"line":432},7,[158,434,207],{"class":172},[158,436,242],{"class":168},[77,438,439,440,442,443,451],{},"Any options passed via ",[80,441,333],{}," will take priority over the module's automatically resolved values. See the ",[116,444,447,450],{"href":445,"rel":446},"https:\u002F\u002Fwww.sanity.io\u002Fdocs\u002Fjs-client#fetch",[120],[80,448,449],{},"@sanity\u002Fclient"," documentation"," for the full list of available options.",[144,453,455],{"id":454},"automatic-type-generation","Automatic Type Generation",[77,457,458,459,462],{},"When ",[116,460,461],{"href":32},"type generation"," is enabled, you can use auto-generated types based on your query variable names:",[149,464,466],{"className":151,"code":465,"language":153,"meta":154,"style":154},"\u002F\u002F Query variable: postsQuery -> Generated type: PostsQueryResult\nconst postsQuery = groq`*[_type == \"post\" && topic == $topic][0..10]`\nconst { data, refresh } = useSanityQuery\u003CPostsQueryResult>(postsQuery, { topic: 'News' })\n",[80,467,468,473,490],{"__ignoreMap":154},[158,469,470],{"class":160,"line":161},[158,471,472],{"class":257},"\u002F\u002F Query variable: postsQuery -> Generated type: PostsQueryResult\n",[158,474,475,477,480,482,484,486,488],{"class":160,"line":190},[158,476,165],{"class":164},[158,478,479],{"class":168}," postsQuery ",[158,481,173],{"class":172},[158,483,177],{"class":176},[158,485,180],{"class":172},[158,487,184],{"class":183},[158,489,187],{"class":172},[158,491,492,494,496,498,500,502,504,506,508,510,513,515,518,520,522,524,526,528,530,532,534],{"class":160,"line":277},[158,493,165],{"class":164},[158,495,195],{"class":172},[158,497,198],{"class":168},[158,499,201],{"class":172},[158,501,204],{"class":168},[158,503,207],{"class":172},[158,505,210],{"class":172},[158,507,213],{"class":176},[158,509,296],{"class":172},[158,511,512],{"class":299},"PostsQueryResult",[158,514,303],{"class":172},[158,516,517],{"class":168},"(postsQuery",[158,519,201],{"class":172},[158,521,195],{"class":172},[158,523,224],{"class":223},[158,525,227],{"class":172},[158,527,230],{"class":172},[158,529,233],{"class":183},[158,531,236],{"class":172},[158,533,239],{"class":172},[158,535,242],{"class":168},[77,537,538,539,542],{},"See the ",[116,540,541],{"href":32},"Type Generation"," guide for setup instructions.",[105,544,96],{"id":545},"uselazysanityquery",[77,547,548,549,552,553,555],{},"This is an equivalent query that does not block client-side navigation and uses ",[80,550,551],{},"useLazyAsyncData"," under the hood. Other than that, the API is identical to ",[80,554,92],{}," above.",[105,557,102],{"id":558},"usesanity",[77,560,561,562,565],{},"You can access a Sanity helper\u002Fclient throught your application with the globally available ",[80,563,564],{},"useSanity()"," composable.",[77,567,568,569,93,571,139,573,575],{},"Unlike ",[80,570,92],{},[80,572,96],{},[80,574,102],{}," is also available within your Nitro server routes in exactly the same way as within your Nuxt app.",[577,578,579,580,583,584,587],"tip",{},"If you want to access this helper globally through ",[80,581,582],{},"$sanity"," - as in a prior version of this module - ensure you've set the ",[80,585,586],{},"globalHelper"," option to true.",[144,589,591],{"id":590},"reference","Reference",[593,594,596],"h4",{"id":595},"fetch",[80,597,595],{},[77,599,600,601,604],{},"This enables you to perform a GROQ query against your Sanity dataset. By default it returns a ",[80,602,603],{},"Promise\u003Cunknown>"," although you can customise the type of the return.",[606,607,609,610],"h5",{"id":608},"example-with-asyncdata","Example with ",[80,611,612],{},"asyncData",[614,615],"br",{},[617,618,619,739],"code-group",{},[149,620,625],{"className":621,"code":622,"filename":623,"language":624,"meta":154,"style":154},"language-html shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup>\nconst query = groq`{ \"articles\": *[_type == \"article\"] }`\n\nconst sanity = useSanity()\n\nconst { data } = await useAsyncData('articles', () => sanity.fetch(query))\n\u003C\u002Fscript>\n","JavaScript","html",[80,626,627,640,657,663,678,682,730],{"__ignoreMap":154},[158,628,629,631,634,637],{"class":160,"line":161},[158,630,296],{"class":172},[158,632,633],{"class":223},"script",[158,635,636],{"class":164}," setup",[158,638,639],{"class":172},">\n",[158,641,642,644,646,648,650,652,655],{"class":160,"line":190},[158,643,165],{"class":164},[158,645,169],{"class":168},[158,647,173],{"class":172},[158,649,177],{"class":176},[158,651,180],{"class":172},[158,653,654],{"class":183},"{ \"articles\": *[_type == \"article\"] }",[158,656,187],{"class":172},[158,658,659],{"class":160,"line":277},[158,660,662],{"emptyLinePlaceholder":661},true,"\n",[158,664,665,667,670,672,675],{"class":160,"line":395},[158,666,165],{"class":164},[158,668,669],{"class":168}," sanity ",[158,671,173],{"class":172},[158,673,674],{"class":176}," useSanity",[158,676,677],{"class":168},"()\n",[158,679,680],{"class":160,"line":412},[158,681,662],{"emptyLinePlaceholder":661},[158,683,684,686,688,690,692,694,698,701,704,706,709,711,713,716,719,722,725,727],{"class":160,"line":426},[158,685,165],{"class":164},[158,687,195],{"class":172},[158,689,348],{"class":168},[158,691,207],{"class":172},[158,693,210],{"class":172},[158,695,697],{"class":696},"s7zQu"," await",[158,699,700],{"class":176}," useAsyncData",[158,702,703],{"class":168},"(",[158,705,236],{"class":172},[158,707,708],{"class":183},"articles",[158,710,236],{"class":172},[158,712,201],{"class":172},[158,714,715],{"class":172}," ()",[158,717,718],{"class":164}," =>",[158,720,721],{"class":168}," sanity",[158,723,724],{"class":172},".",[158,726,595],{"class":176},[158,728,729],{"class":168},"(query))\n",[158,731,732,735,737],{"class":160,"line":432},[158,733,734],{"class":172},"\u003C\u002F",[158,736,633],{"class":223},[158,738,639],{"class":172},[149,740,743],{"className":621,"code":741,"filename":742,"language":624,"meta":154,"style":154},"\u003Cscript setup lang=\"ts\">\nconst query = groq`{ \"articles\": *[_type == \"article\"] }`\n\nconst sanity = useSanity()\n\n\u002F\u002F By default it returns a `Promise\u003Cunknown>`,\n\u002F\u002F but you can customise the type of the return.\nconst { data } = await useAsyncData('articles', () => sanity.fetch\u003C{ articles: Article[] }>(query))\n\u003C\u002Fscript>\n","TypeScript",[80,744,745,767,783,787,799,803,808,813,869],{"__ignoreMap":154},[158,746,747,749,751,753,756,758,761,763,765],{"class":160,"line":161},[158,748,296],{"class":172},[158,750,633],{"class":223},[158,752,636],{"class":164},[158,754,755],{"class":164}," lang",[158,757,173],{"class":172},[158,759,760],{"class":172},"\"",[158,762,153],{"class":183},[158,764,760],{"class":172},[158,766,639],{"class":172},[158,768,769,771,773,775,777,779,781],{"class":160,"line":190},[158,770,165],{"class":164},[158,772,169],{"class":168},[158,774,173],{"class":172},[158,776,177],{"class":176},[158,778,180],{"class":172},[158,780,654],{"class":183},[158,782,187],{"class":172},[158,784,785],{"class":160,"line":277},[158,786,662],{"emptyLinePlaceholder":661},[158,788,789,791,793,795,797],{"class":160,"line":395},[158,790,165],{"class":164},[158,792,669],{"class":168},[158,794,173],{"class":172},[158,796,674],{"class":176},[158,798,677],{"class":168},[158,800,801],{"class":160,"line":412},[158,802,662],{"emptyLinePlaceholder":661},[158,804,805],{"class":160,"line":426},[158,806,807],{"class":257},"\u002F\u002F By default it returns a `Promise\u003Cunknown>`,\n",[158,809,810],{"class":160,"line":432},[158,811,812],{"class":257},"\u002F\u002F but you can customise the type of the return.\n",[158,814,816,818,820,822,824,826,828,830,832,834,836,838,840,842,844,846,848,850,853,856,858,861,864,867],{"class":160,"line":815},8,[158,817,165],{"class":164},[158,819,195],{"class":172},[158,821,348],{"class":168},[158,823,207],{"class":172},[158,825,210],{"class":172},[158,827,697],{"class":696},[158,829,700],{"class":176},[158,831,703],{"class":168},[158,833,236],{"class":172},[158,835,708],{"class":183},[158,837,236],{"class":172},[158,839,201],{"class":172},[158,841,715],{"class":172},[158,843,718],{"class":164},[158,845,721],{"class":168},[158,847,724],{"class":172},[158,849,595],{"class":176},[158,851,852],{"class":172},"\u003C{",[158,854,855],{"class":223}," articles",[158,857,227],{"class":172},[158,859,860],{"class":299}," Article",[158,862,863],{"class":168},"[] ",[158,865,866],{"class":172},"}>",[158,868,729],{"class":168},[158,870,872,874,876],{"class":160,"line":871},9,[158,873,734],{"class":172},[158,875,633],{"class":223},[158,877,639],{"class":172},[593,879,880],{"id":131},[80,881,131],{},[77,883,884],{},"You can access the underlying client with this property. This is most useful if not using the minimal client.",[149,886,888],{"className":151,"code":887,"language":153,"meta":154,"style":154},"const query = groq`*[_type == \"article\"][0].title`\n\nexport default defineComponent({\n  setup() {\n    const sanity = useSanity()\n    onMounted(() => {\n      const observable = sanity.client.listen(query)\n      observable.subscribe(event => {\n        \u002F\u002F Do something\n      })\n    })\n  },\n})\n",[80,889,890,907,911,927,937,950,963,991,1011,1016,1024,1032,1037],{"__ignoreMap":154},[158,891,892,894,896,898,900,902,905],{"class":160,"line":161},[158,893,165],{"class":164},[158,895,169],{"class":168},[158,897,173],{"class":172},[158,899,177],{"class":176},[158,901,180],{"class":172},[158,903,904],{"class":183},"*[_type == \"article\"][0].title",[158,906,187],{"class":172},[158,908,909],{"class":160,"line":190},[158,910,662],{"emptyLinePlaceholder":661},[158,912,913,916,919,922,924],{"class":160,"line":277},[158,914,915],{"class":696},"export",[158,917,918],{"class":696}," default",[158,920,921],{"class":176}," defineComponent",[158,923,703],{"class":168},[158,925,926],{"class":172},"{\n",[158,928,929,932,935],{"class":160,"line":395},[158,930,931],{"class":223},"  setup",[158,933,934],{"class":172},"()",[158,936,366],{"class":172},[158,938,939,942,944,946,948],{"class":160,"line":412},[158,940,941],{"class":164},"    const",[158,943,721],{"class":168},[158,945,210],{"class":172},[158,947,674],{"class":176},[158,949,677],{"class":223},[158,951,952,955,957,959,961],{"class":160,"line":426},[158,953,954],{"class":176},"    onMounted",[158,956,703],{"class":223},[158,958,934],{"class":172},[158,960,718],{"class":164},[158,962,366],{"class":172},[158,964,965,968,971,973,975,977,979,981,984,986,989],{"class":160,"line":432},[158,966,967],{"class":164},"      const",[158,969,970],{"class":168}," observable",[158,972,210],{"class":172},[158,974,721],{"class":168},[158,976,724],{"class":172},[158,978,131],{"class":168},[158,980,724],{"class":172},[158,982,983],{"class":176},"listen",[158,985,703],{"class":223},[158,987,988],{"class":168},"query",[158,990,242],{"class":223},[158,992,993,996,998,1001,1003,1007,1009],{"class":160,"line":815},[158,994,995],{"class":168},"      observable",[158,997,724],{"class":172},[158,999,1000],{"class":176},"subscribe",[158,1002,703],{"class":223},[158,1004,1006],{"class":1005},"sHdIc","event",[158,1008,718],{"class":164},[158,1010,366],{"class":172},[158,1012,1013],{"class":160,"line":871},[158,1014,1015],{"class":257},"        \u002F\u002F Do something\n",[158,1017,1019,1022],{"class":160,"line":1018},10,[158,1020,1021],{"class":172},"      }",[158,1023,242],{"class":223},[158,1025,1027,1030],{"class":160,"line":1026},11,[158,1028,1029],{"class":172},"    }",[158,1031,242],{"class":223},[158,1033,1035],{"class":160,"line":1034},12,[158,1036,429],{"class":172},[158,1038,1040,1042],{"class":160,"line":1039},13,[158,1041,207],{"class":172},[158,1043,242],{"class":168},[593,1045,1047],{"id":1046},"settoken",[80,1048,1049],{},"setToken",[77,1051,1052],{},"You can securely set the token for your Sanity client in a Nuxt plugin.",[149,1054,1059],{"className":1055,"code":1056,"filename":1057,"language":1058,"meta":154,"style":154},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtPlugin((nuxtApp) => {\n  const sanity = useSanity()\n  const token = getTokenFromReq(nuxtApp.ssrContext.req)\n  sanity.setToken(token)\n})\n","plugins\u002Fsanity.server.ts","js",[80,1060,1061,1084,1097,1125,1141],{"__ignoreMap":154},[158,1062,1063,1065,1067,1070,1072,1074,1077,1080,1082],{"class":160,"line":161},[158,1064,915],{"class":696},[158,1066,918],{"class":696},[158,1068,1069],{"class":176}," defineNuxtPlugin",[158,1071,703],{"class":168},[158,1073,703],{"class":172},[158,1075,1076],{"class":1005},"nuxtApp",[158,1078,1079],{"class":172},")",[158,1081,718],{"class":164},[158,1083,366],{"class":172},[158,1085,1086,1089,1091,1093,1095],{"class":160,"line":190},[158,1087,1088],{"class":164},"  const",[158,1090,721],{"class":168},[158,1092,210],{"class":172},[158,1094,674],{"class":176},[158,1096,677],{"class":223},[158,1098,1099,1101,1104,1106,1109,1111,1113,1115,1118,1120,1123],{"class":160,"line":277},[158,1100,1088],{"class":164},[158,1102,1103],{"class":168}," token",[158,1105,210],{"class":172},[158,1107,1108],{"class":176}," getTokenFromReq",[158,1110,703],{"class":223},[158,1112,1076],{"class":168},[158,1114,724],{"class":172},[158,1116,1117],{"class":168},"ssrContext",[158,1119,724],{"class":172},[158,1121,1122],{"class":168},"req",[158,1124,242],{"class":223},[158,1126,1127,1130,1132,1134,1136,1139],{"class":160,"line":395},[158,1128,1129],{"class":168},"  sanity",[158,1131,724],{"class":172},[158,1133,1049],{"class":176},[158,1135,703],{"class":223},[158,1137,1138],{"class":168},"token",[158,1140,242],{"class":223},[158,1142,1143,1145],{"class":160,"line":412},[158,1144,207],{"class":172},[158,1146,242],{"class":168},[593,1148,1150],{"id":1149},"config",[80,1151,1149],{},[77,1153,1154,1155,1158],{},"You can access the Sanity config you have passed into the module if you need to do so (for example, with ",[80,1156,1157],{},"@sanity\u002Fimage-url","):",[149,1160,1163],{"className":1055,"code":1161,"filename":1162,"language":1058,"meta":154,"style":154},"import imageUrlBuilder from '@sanity\u002Fimage-url'\nexport default defineNuxtPlugin(() => {\n  const sanity = useSanity()\n  const builder = imageUrlBuilder(sanity.config)\n\n  function urlFor(source) {\n    return builder.image(source)\n  }\n\n  return {\n    provide: { urlFor }\n  }\n})\n","plugins\u002Fsanity.ts",[80,1164,1165,1183,1199,1211,1234,1238,1255,1273,1278,1282,1289,1303,1307],{"__ignoreMap":154},[158,1166,1167,1170,1173,1176,1178,1180],{"class":160,"line":161},[158,1168,1169],{"class":696},"import",[158,1171,1172],{"class":168}," imageUrlBuilder ",[158,1174,1175],{"class":696},"from",[158,1177,230],{"class":172},[158,1179,1157],{"class":183},[158,1181,1182],{"class":172},"'\n",[158,1184,1185,1187,1189,1191,1193,1195,1197],{"class":160,"line":190},[158,1186,915],{"class":696},[158,1188,918],{"class":696},[158,1190,1069],{"class":176},[158,1192,703],{"class":168},[158,1194,934],{"class":172},[158,1196,718],{"class":164},[158,1198,366],{"class":172},[158,1200,1201,1203,1205,1207,1209],{"class":160,"line":277},[158,1202,1088],{"class":164},[158,1204,721],{"class":168},[158,1206,210],{"class":172},[158,1208,674],{"class":176},[158,1210,677],{"class":223},[158,1212,1213,1215,1218,1220,1223,1225,1228,1230,1232],{"class":160,"line":395},[158,1214,1088],{"class":164},[158,1216,1217],{"class":168}," builder",[158,1219,210],{"class":172},[158,1221,1222],{"class":176}," imageUrlBuilder",[158,1224,703],{"class":223},[158,1226,1227],{"class":168},"sanity",[158,1229,724],{"class":172},[158,1231,1149],{"class":168},[158,1233,242],{"class":223},[158,1235,1236],{"class":160,"line":412},[158,1237,662],{"emptyLinePlaceholder":661},[158,1239,1240,1243,1246,1248,1251,1253],{"class":160,"line":426},[158,1241,1242],{"class":164},"  function",[158,1244,1245],{"class":176}," urlFor",[158,1247,703],{"class":172},[158,1249,1250],{"class":1005},"source",[158,1252,1079],{"class":172},[158,1254,366],{"class":172},[158,1256,1257,1260,1262,1264,1267,1269,1271],{"class":160,"line":432},[158,1258,1259],{"class":696},"    return",[158,1261,1217],{"class":168},[158,1263,724],{"class":172},[158,1265,1266],{"class":176},"image",[158,1268,703],{"class":223},[158,1270,1250],{"class":168},[158,1272,242],{"class":223},[158,1274,1275],{"class":160,"line":815},[158,1276,1277],{"class":172},"  }\n",[158,1279,1280],{"class":160,"line":871},[158,1281,662],{"emptyLinePlaceholder":661},[158,1283,1284,1287],{"class":160,"line":1018},[158,1285,1286],{"class":696},"  return",[158,1288,366],{"class":172},[158,1290,1291,1294,1296,1298,1300],{"class":160,"line":1026},[158,1292,1293],{"class":223},"    provide",[158,1295,227],{"class":172},[158,1297,195],{"class":172},[158,1299,1245],{"class":168},[158,1301,1302],{"class":172}," }\n",[158,1304,1305],{"class":160,"line":1034},[158,1306,1277],{"class":172},[158,1308,1309,1311],{"class":160,"line":1039},[158,1310,207],{"class":172},[158,1312,242],{"class":168},[593,1314,1316],{"id":1315},"additional-clients","Additional clients",[77,1318,1319,1320,1324,1325,1327],{},"If you have ",[116,1321,1323],{"href":1322},"\u002Fgetting-started\u002Fconfiguration#additionalclients","configured additional clients"," you can access them by passing in a client name to ",[80,1326,102],{},". It returns a sanity helper, with all the same properties and methods as specified above. So, for example:",[149,1329,1332],{"className":1055,"code":1330,"filename":1331,"language":1058,"meta":154,"style":154},"export default defineNuxtPlugin(() => {\n  const otherSanityHelper = useSanity('other')\n  otherSanityHelper.fetch('*[type == \"article\"][0]')\n})\n","plugins\u002Ffetch.ts",[80,1333,1334,1350,1372,1392],{"__ignoreMap":154},[158,1335,1336,1338,1340,1342,1344,1346,1348],{"class":160,"line":161},[158,1337,915],{"class":696},[158,1339,918],{"class":696},[158,1341,1069],{"class":176},[158,1343,703],{"class":168},[158,1345,934],{"class":172},[158,1347,718],{"class":164},[158,1349,366],{"class":172},[158,1351,1352,1354,1357,1359,1361,1363,1365,1368,1370],{"class":160,"line":190},[158,1353,1088],{"class":164},[158,1355,1356],{"class":168}," otherSanityHelper",[158,1358,210],{"class":172},[158,1360,674],{"class":176},[158,1362,703],{"class":223},[158,1364,236],{"class":172},[158,1366,1367],{"class":183},"other",[158,1369,236],{"class":172},[158,1371,242],{"class":223},[158,1373,1374,1377,1379,1381,1383,1385,1388,1390],{"class":160,"line":277},[158,1375,1376],{"class":168},"  otherSanityHelper",[158,1378,724],{"class":172},[158,1380,595],{"class":176},[158,1382,703],{"class":223},[158,1384,236],{"class":172},[158,1386,1387],{"class":183},"*[type == \"article\"][0]",[158,1389,236],{"class":172},[158,1391,242],{"class":223},[158,1393,1394,1396],{"class":160,"line":395},[158,1395,207],{"class":172},[158,1397,242],{"class":168},[593,1399,1401],{"id":1400},"private-datasets","Private Datasets",[77,1403,1404,1405,1408,1409,1411],{},"You can use the ",[80,1406,1407],{},"queryEndpoint"," configuration option to set the endpoint for all requests made with ",[80,1410,92],{},". This is especially useful when querying private datasets or making requests that require tokens that cannot be safely exposed on the client.",[77,1413,1414],{},"This module does not provide a built-in handler for proxying queries to private datasets. Instead, it includes a convenience function that makes it straightforward to implement a server-side handler for most use cases.",[77,1416,1417,1418,1421],{},"To control which queries can be made against a private dataset, you can use ",[80,1419,1420],{},"validateSanityQuery",". At build time, the module scans your codebase, extracts all GROQ queries, and compiles them into a whitelist. At runtime, incoming queries are checked against this list, and by default an error is thrown if a query is not recognized. You can optionally limit extraction to specific files via the function’s second argument.",[149,1423,1426],{"className":151,"code":1424,"filename":1425,"language":153,"meta":154,"style":154},"export default defineEventHandler(async (event) => {\n  const { query, params = {}, options } = await readBody(event)\n\n  await validateSanityQuery(query)\n\n  const sanity = useSanity()\n  const client = sanity.client.withConfig({ token: process.env.NUXT_SANITY_READ_TOKEN })\n\n  return client.fetch(query, params, options)\n})\n","server\u002Fapi\u002Ffetch.ts",[80,1427,1428,1453,1489,1493,1507,1511,1523,1569,1573,1597],{"__ignoreMap":154},[158,1429,1430,1432,1434,1437,1439,1442,1445,1447,1449,1451],{"class":160,"line":161},[158,1431,915],{"class":696},[158,1433,918],{"class":696},[158,1435,1436],{"class":176}," defineEventHandler",[158,1438,703],{"class":168},[158,1440,1441],{"class":164},"async",[158,1443,1444],{"class":172}," (",[158,1446,1006],{"class":1005},[158,1448,1079],{"class":172},[158,1450,718],{"class":164},[158,1452,366],{"class":172},[158,1454,1455,1457,1459,1462,1464,1466,1468,1471,1474,1476,1478,1480,1483,1485,1487],{"class":160,"line":190},[158,1456,1088],{"class":164},[158,1458,195],{"class":172},[158,1460,1461],{"class":168}," query",[158,1463,201],{"class":172},[158,1465,361],{"class":168},[158,1467,210],{"class":172},[158,1469,1470],{"class":172}," {},",[158,1472,1473],{"class":168}," options",[158,1475,239],{"class":172},[158,1477,210],{"class":172},[158,1479,697],{"class":696},[158,1481,1482],{"class":176}," readBody",[158,1484,703],{"class":223},[158,1486,1006],{"class":168},[158,1488,242],{"class":223},[158,1490,1491],{"class":160,"line":277},[158,1492,662],{"emptyLinePlaceholder":661},[158,1494,1495,1498,1501,1503,1505],{"class":160,"line":395},[158,1496,1497],{"class":696},"  await",[158,1499,1500],{"class":176}," validateSanityQuery",[158,1502,703],{"class":223},[158,1504,988],{"class":168},[158,1506,242],{"class":223},[158,1508,1509],{"class":160,"line":412},[158,1510,662],{"emptyLinePlaceholder":661},[158,1512,1513,1515,1517,1519,1521],{"class":160,"line":426},[158,1514,1088],{"class":164},[158,1516,721],{"class":168},[158,1518,210],{"class":172},[158,1520,674],{"class":176},[158,1522,677],{"class":223},[158,1524,1525,1527,1530,1532,1534,1536,1538,1540,1543,1545,1548,1550,1552,1555,1557,1560,1562,1565,1567],{"class":160,"line":432},[158,1526,1088],{"class":164},[158,1528,1529],{"class":168}," client",[158,1531,210],{"class":172},[158,1533,721],{"class":168},[158,1535,724],{"class":172},[158,1537,131],{"class":168},[158,1539,724],{"class":172},[158,1541,1542],{"class":176},"withConfig",[158,1544,703],{"class":223},[158,1546,1547],{"class":172},"{",[158,1549,1103],{"class":223},[158,1551,227],{"class":172},[158,1553,1554],{"class":168}," process",[158,1556,724],{"class":172},[158,1558,1559],{"class":168},"env",[158,1561,724],{"class":172},[158,1563,1564],{"class":168},"NUXT_SANITY_READ_TOKEN",[158,1566,239],{"class":172},[158,1568,242],{"class":223},[158,1570,1571],{"class":160,"line":815},[158,1572,662],{"emptyLinePlaceholder":661},[158,1574,1575,1577,1579,1581,1583,1585,1587,1589,1591,1593,1595],{"class":160,"line":871},[158,1576,1286],{"class":696},[158,1578,1529],{"class":168},[158,1580,724],{"class":172},[158,1582,595],{"class":176},[158,1584,703],{"class":223},[158,1586,988],{"class":168},[158,1588,201],{"class":172},[158,1590,361],{"class":168},[158,1592,201],{"class":172},[158,1594,1473],{"class":168},[158,1596,242],{"class":223},[158,1598,1599,1601],{"class":160,"line":1018},[158,1600,207],{"class":172},[158,1602,242],{"class":168},[1604,1605,1606,1611],"warning",{},[77,1607,1608,1610],{},[80,1609,1420],{}," only validates query strings, not parameters. If you define queries that use dynamic parameters, you must ensure those queries are safe to run with any parameter value.",[149,1612,1614],{"className":151,"code":1613,"language":153,"meta":154,"style":154},"\u002F\u002F Validate parameter values before executing queries\nconst allowedCategories = ['tech', 'news', 'sports']\nif (params.category && !allowedCategories.includes(params.category)) {\n  throw createError({ statusCode: 400, message: 'Invalid category' })\n}\n",[80,1615,1616,1621,1661,1698,1737],{"__ignoreMap":154},[158,1617,1618],{"class":160,"line":161},[158,1619,1620],{"class":257},"\u002F\u002F Validate parameter values before executing queries\n",[158,1622,1623,1625,1628,1630,1633,1635,1638,1640,1642,1644,1647,1649,1651,1653,1656,1658],{"class":160,"line":190},[158,1624,165],{"class":164},[158,1626,1627],{"class":168}," allowedCategories ",[158,1629,173],{"class":172},[158,1631,1632],{"class":168}," [",[158,1634,236],{"class":172},[158,1636,1637],{"class":183},"tech",[158,1639,236],{"class":172},[158,1641,201],{"class":172},[158,1643,230],{"class":172},[158,1645,1646],{"class":183},"news",[158,1648,236],{"class":172},[158,1650,201],{"class":172},[158,1652,230],{"class":172},[158,1654,1655],{"class":183},"sports",[158,1657,236],{"class":172},[158,1659,1660],{"class":168},"]\n",[158,1662,1663,1666,1669,1671,1674,1677,1680,1683,1685,1688,1691,1693,1696],{"class":160,"line":277},[158,1664,1665],{"class":696},"if",[158,1667,1668],{"class":168}," (params",[158,1670,724],{"class":172},[158,1672,1673],{"class":168},"category ",[158,1675,1676],{"class":172},"&&",[158,1678,1679],{"class":172}," !",[158,1681,1682],{"class":168},"allowedCategories",[158,1684,724],{"class":172},[158,1686,1687],{"class":176},"includes",[158,1689,1690],{"class":168},"(params",[158,1692,724],{"class":172},[158,1694,1695],{"class":168},"category)) ",[158,1697,926],{"class":172},[158,1699,1700,1703,1706,1708,1710,1713,1715,1719,1721,1724,1726,1728,1731,1733,1735],{"class":160,"line":395},[158,1701,1702],{"class":696},"  throw",[158,1704,1705],{"class":176}," createError",[158,1707,703],{"class":223},[158,1709,1547],{"class":172},[158,1711,1712],{"class":223}," statusCode",[158,1714,227],{"class":172},[158,1716,1718],{"class":1717},"sbssI"," 400",[158,1720,201],{"class":172},[158,1722,1723],{"class":223}," message",[158,1725,227],{"class":172},[158,1727,230],{"class":172},[158,1729,1730],{"class":183},"Invalid category",[158,1732,236],{"class":172},[158,1734,239],{"class":172},[158,1736,242],{"class":223},[158,1738,1739],{"class":160,"line":412},[158,1740,1741],{"class":172},"}\n",[1743,1744,1745],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .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}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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 .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":154,"searchDepth":190,"depth":190,"links":1747},[1748,1753,1754],{"id":107,"depth":190,"text":92,"children":1749},[1750,1751,1752],{"id":146,"depth":277,"text":147},{"id":326,"depth":277,"text":327},{"id":454,"depth":277,"text":455},{"id":545,"depth":190,"text":96},{"id":558,"depth":190,"text":102,"children":1755},[1756],{"id":590,"depth":277,"text":591},"@nuxtjs\u002Fsanity provides key composables to interact with data from your Sanity project.","md",null,{},{"description":1757},"GftTsrzEySiJzR6GzmM5ySDa32DfoT2FD9p6QwxCljE",[1764,1766],{"title":15,"path":16,"stem":17,"description":1765,"children":-1},"By default, @nuxtjs\u002Fsanity will look for a ~~\u002Fcms\u002Fsanity.config.ts file relative to your project's root directory, and it will read your projectId and dataset from there.",{"title":23,"path":24,"stem":25,"description":154,"children":-1},1775669592365]