[{"data":1,"prerenderedAt":1575},["ShallowReactive",2],{"docs-\u002Fprismic":3},{"id":4,"title":5,"body":6,"description":1568,"extension":1569,"meta":1570,"navigation":231,"path":1571,"seo":1572,"stem":1573,"__hash__":1574},"docs\u002Fdocs\u002Fprismic.md","Prismic Integration",{"type":7,"value":8,"toc":1545},"minimark",[9,13,17,20,25,37,43,54,59,65,68,74,76,80,87,134,145,166,168,172,175,198,203,312,316,319,338,349,353,364,379,407,411,414,532,536,543,545,549,552,563,567,573,956,960,1182,1186,1215,1219,1226,1269,1273,1300,1302,1306,1310,1313,1404,1408,1411,1474,1478,1481,1541],[10,11,5],"h1",{"id":12},"prismic-integration",[14,15,16],"p",{},"Cachely has first-class support for Prismic. It handles both Prismic CDN URL patterns and provides a response transformer that rewrites asset URLs in your Prismic API responses.",[18,19],"hr",{},[21,22,24],"h2",{"id":23},"supported-url-patterns","Supported URL patterns",[14,26,27,28,32,33,36],{},"Prismic serves ",[29,30,31],"strong",{},"images"," and ",[29,34,35],{},"video"," from two different CDN domains. Cachely handles both:",[14,38,39,42],{},[29,40,41],{},"Images"," (with optional Image CDN query params):",[44,45,50],"pre",{"className":46,"code":48,"language":49},[47],"language-text","https:\u002F\u002Fimages.prismic.io\u002Fyour-repo\u002Fpath\u002Fto\u002Fimage.png?auto=format,compress&w=1024&fm=webp&q=80\n","text",[51,52,48],"code",{"__ignoreMap":53},"",[14,55,56],{},[29,57,58],{},"Video:",[44,60,63],{"className":61,"code":62,"language":49},[47],"https:\u002F\u002Fyour-repo.cdn.prismic.io\u002Fyour-repo\u002Fpath\u002Fto\u002Fvideo.mp4\n",[51,64,62],{"__ignoreMap":53},[14,66,67],{},"Both are rewritten to your tenant URL (query params on images are preserved):",[44,69,72],{"className":70,"code":71,"language":49},[47],"https:\u002F\u002Fyour-tenant.cmsassets.com\u002Fyour-repo\u002Fpath\u002Fto\u002Fimage.png?auto=format,compress&w=1024&fm=webp&q=80\nhttps:\u002F\u002Fyour-tenant.cmsassets.com\u002Fyour-repo\u002Fpath\u002Fto\u002Fvideo.mp4\n",[51,73,71],{"__ignoreMap":53},[18,75],{},[21,77,79],{"id":78},"tenant-setup","Tenant setup",[14,81,82,83,86],{},"When creating your tenant, select ",[29,84,85],{},"Prismic"," as the CMS type and provide your repository name:",[88,89,90,103],"table",{},[91,92,93],"thead",{},[94,95,96,100],"tr",{},[97,98,99],"th",{},"Field",[97,101,102],{},"Value",[104,105,106,114,124],"tbody",{},[94,107,108,112],{},[109,110,111],"td",{},"CMS",[109,113,85],{},[94,115,116,119],{},[109,117,118],{},"Repository name",[109,120,121],{},[51,122,123],{},"your-repo",[94,125,126,129],{},[109,127,128],{},"Website domain",[109,130,131],{},[51,132,133],{},"your-site.com",[14,135,136,137,140,141,144],{},"Two origins are used: ",[51,138,139],{},"https:\u002F\u002Fyour-repo.cdn.prismic.io"," (video and some assets) and ",[51,142,143],{},"https:\u002F\u002Fimages.prismic.io\u002Fyour-repo"," (images with Image CDN). Cachely routes requests to the correct origin based on the URL pattern.",[146,147,148],"blockquote",{},[14,149,150,153,154,157,158,161,162,165],{},[29,151,152],{},"Note:"," The ",[29,155,156],{},"website domain"," is important for Prismic. It's sent as the ",[51,159,160],{},"Referer"," header when fetching from origin, which prevents ",[51,163,164],{},"AccessDenied"," errors from Prismic's S3-backed storage.",[18,167],{},[21,169,171],{"id":170},"response-transformer","Response transformer",[14,173,174],{},"Install the response transformer to automatically rewrite Prismic asset URLs in your API responses:",[44,176,180],{"className":177,"code":178,"language":179,"meta":53,"style":53},"language-bash shiki shiki-themes github-dark","npm install @synchronized-studio\u002Fresponse-transformer\n","bash",[51,181,182],{"__ignoreMap":53},[183,184,187,191,195],"span",{"class":185,"line":186},"line",1,[183,188,190],{"class":189},"svObZ","npm",[183,192,194],{"class":193},"sU2Wk"," install",[183,196,197],{"class":193}," @synchronized-studio\u002Fresponse-transformer\n",[199,200,202],"h3",{"id":201},"basic-usage","Basic usage",[44,204,208],{"className":205,"code":206,"language":207,"meta":53,"style":53},"language-typescript shiki shiki-themes github-dark","import { transformPrismicAssetUrls } from \"@synchronized-studio\u002Fresponse-transformer\"\n\nconst data = await prismicClient.getAllByType(\"page\")\n\nconst transformed = transformPrismicAssetUrls(data, {\n  repository: \"your-repo\",\n  cmsAssetsUrl: \"https:\u002F\u002Fyour-tenant.cmsassets.com\"\n})\n","typescript",[51,209,210,226,233,264,269,285,297,306],{"__ignoreMap":53},[183,211,212,216,220,223],{"class":185,"line":186},[183,213,215],{"class":214},"snl16","import",[183,217,219],{"class":218},"s95oV"," { transformPrismicAssetUrls } ",[183,221,222],{"class":214},"from",[183,224,225],{"class":193}," \"@synchronized-studio\u002Fresponse-transformer\"\n",[183,227,229],{"class":185,"line":228},2,[183,230,232],{"emptyLinePlaceholder":231},true,"\n",[183,234,236,239,243,246,249,252,255,258,261],{"class":185,"line":235},3,[183,237,238],{"class":214},"const",[183,240,242],{"class":241},"sDLfK"," data",[183,244,245],{"class":214}," =",[183,247,248],{"class":214}," await",[183,250,251],{"class":218}," prismicClient.",[183,253,254],{"class":189},"getAllByType",[183,256,257],{"class":218},"(",[183,259,260],{"class":193},"\"page\"",[183,262,263],{"class":218},")\n",[183,265,267],{"class":185,"line":266},4,[183,268,232],{"emptyLinePlaceholder":231},[183,270,272,274,277,279,282],{"class":185,"line":271},5,[183,273,238],{"class":214},[183,275,276],{"class":241}," transformed",[183,278,245],{"class":214},[183,280,281],{"class":189}," transformPrismicAssetUrls",[183,283,284],{"class":218},"(data, {\n",[183,286,288,291,294],{"class":185,"line":287},6,[183,289,290],{"class":218},"  repository: ",[183,292,293],{"class":193},"\"your-repo\"",[183,295,296],{"class":218},",\n",[183,298,300,303],{"class":185,"line":299},7,[183,301,302],{"class":218},"  cmsAssetsUrl: ",[183,304,305],{"class":193},"\"https:\u002F\u002Fyour-tenant.cmsassets.com\"\n",[183,307,309],{"class":185,"line":308},8,[183,310,311],{"class":218},"})\n",[199,313,315],{"id":314},"what-gets-transformed","What gets transformed",[14,317,318],{},"The transformer processes the entire JSON response and rewrites all matching URLs. This includes:",[320,321,322,326,329,332,335],"ul",{},[323,324,325],"li",{},"Document fields",[323,327,328],{},"Rich text content",[323,330,331],{},"Image fields",[323,333,334],{},"Media links",[323,336,337],{},"Slices and nested structures",[14,339,340,341,344,345,348],{},"Any URL matching ",[51,342,343],{},"your-repo.cdn.prismic.io"," or ",[51,346,347],{},"images.prismic.io\u002Fyour-repo"," is rewritten to your Cachely proxy URL.",[199,350,352],{"id":351},"using-an-environment-variable","Using an environment variable",[14,354,355,356,359,360,363],{},"Set ",[51,357,358],{},"CMS_ASSETS_URL"," in your environment and omit the ",[51,361,362],{},"cmsAssetsUrl"," option:",[44,365,367],{"className":177,"code":366,"language":179,"meta":53,"style":53},"CMS_ASSETS_URL=https:\u002F\u002Fyour-tenant.cmsassets.com\n",[51,368,369],{"__ignoreMap":53},[183,370,371,373,376],{"class":185,"line":186},[183,372,358],{"class":218},[183,374,375],{"class":214},"=",[183,377,378],{"class":193},"https:\u002F\u002Fyour-tenant.cmsassets.com\n",[44,380,382],{"className":205,"code":381,"language":207,"meta":53,"style":53},"const transformed = transformPrismicAssetUrls(data, {\n  repository: \"your-repo\"\n})\n",[51,383,384,396,403],{"__ignoreMap":53},[183,385,386,388,390,392,394],{"class":185,"line":186},[183,387,238],{"class":214},[183,389,276],{"class":241},[183,391,245],{"class":214},[183,393,281],{"class":189},[183,395,284],{"class":218},[183,397,398,400],{"class":185,"line":228},[183,399,290],{"class":218},[183,401,402],{"class":193},"\"your-repo\"\n",[183,404,405],{"class":185,"line":235},[183,406,311],{"class":218},[199,408,410],{"id":409},"nuxt-ssr-integration","Nuxt \u002F SSR integration",[14,412,413],{},"For Nuxt or other SSR frameworks, wrap your Prismic client or API layer:",[44,415,417],{"className":205,"code":416,"language":207,"meta":53,"style":53},"\u002F\u002F composables\u002FusePrismicData.ts\nimport { transformPrismicAssetUrls } from \"@synchronized-studio\u002Fresponse-transformer\"\n\nexport async function usePrismicData(type: string) {\n  const data = await prismicClient.getAllByType(type)\n\n  return transformPrismicAssetUrls(data, {\n    repository: \"your-repo\",\n    cmsAssetsUrl: useRuntimeConfig().public.cmsAssetsUrl\n  })\n}\n",[51,418,419,425,435,439,468,486,490,499,508,520,526],{"__ignoreMap":53},[183,420,421],{"class":185,"line":186},[183,422,424],{"class":423},"sAwPA","\u002F\u002F composables\u002FusePrismicData.ts\n",[183,426,427,429,431,433],{"class":185,"line":228},[183,428,215],{"class":214},[183,430,219],{"class":218},[183,432,222],{"class":214},[183,434,225],{"class":193},[183,436,437],{"class":185,"line":235},[183,438,232],{"emptyLinePlaceholder":231},[183,440,441,444,447,450,453,455,459,462,465],{"class":185,"line":266},[183,442,443],{"class":214},"export",[183,445,446],{"class":214}," async",[183,448,449],{"class":214}," function",[183,451,452],{"class":189}," usePrismicData",[183,454,257],{"class":218},[183,456,458],{"class":457},"s9osk","type",[183,460,461],{"class":214},":",[183,463,464],{"class":241}," string",[183,466,467],{"class":218},") {\n",[183,469,470,473,475,477,479,481,483],{"class":185,"line":271},[183,471,472],{"class":214},"  const",[183,474,242],{"class":241},[183,476,245],{"class":214},[183,478,248],{"class":214},[183,480,251],{"class":218},[183,482,254],{"class":189},[183,484,485],{"class":218},"(type)\n",[183,487,488],{"class":185,"line":287},[183,489,232],{"emptyLinePlaceholder":231},[183,491,492,495,497],{"class":185,"line":299},[183,493,494],{"class":214},"  return",[183,496,281],{"class":189},[183,498,284],{"class":218},[183,500,501,504,506],{"class":185,"line":308},[183,502,503],{"class":218},"    repository: ",[183,505,293],{"class":193},[183,507,296],{"class":218},[183,509,511,514,517],{"class":185,"line":510},9,[183,512,513],{"class":218},"    cmsAssetsUrl: ",[183,515,516],{"class":189},"useRuntimeConfig",[183,518,519],{"class":218},"().public.cmsAssetsUrl\n",[183,521,523],{"class":185,"line":522},10,[183,524,525],{"class":218},"  })\n",[183,527,529],{"class":185,"line":528},11,[183,530,531],{"class":218},"}\n",[199,533,535],{"id":534},"query-params","Query params",[14,537,538,539,542],{},"Prismic often appends query parameters like ",[51,540,541],{},"?auto=format&w=800"," to image URLs. The transformer strips these during URL rewriting since the edge cache ignores query parameters for image types. This prevents duplicate cache entries and ensures consistent caching.",[18,544],{},[21,546,548],{"id":547},"preview-fresh-fetch-bypass","Preview & fresh-fetch bypass",[14,550,551],{},"By default, API proxy responses are cached at the edge (typically 60 seconds). For preview mode or fresh-fetch use cases — where you need guaranteed-fresh data from Prismic — you can bypass the cache per request.",[14,553,554,555,558,559,562],{},"The edge proxy already supports this: any API request with ",[51,556,557],{},"?preview=1"," skips cache entirely and fetches directly from upstream. The ",[51,560,561],{},"withCacheBypass"," wrapper makes it easy to apply this from your app code.",[199,564,566],{"id":565},"setup","Setup",[14,568,569,570,461],{},"Create a small wrapper around ",[51,571,572],{},"createCmsAssetsFetch",[44,574,578],{"className":575,"code":576,"language":577,"meta":53,"style":53},"language-ts shiki shiki-themes github-dark","\u002F\u002F utils\u002FwithCacheBypass.ts\n\nexport function withCacheBypass(\n  baseFetch: typeof fetch,\n  bypass: boolean | (() => boolean),\n  param = 'preview',\n): typeof fetch {\n  return function bypassFetch(input, init) {\n    const active = typeof bypass === 'function' ? bypass() : bypass\n    if (!active) return baseFetch(input, init)\n\n    const url = typeof input === 'string'\n      ? input\n      : input instanceof URL ? input.href : input.url\n    if (!url) return baseFetch(input, init)\n\n    const parsed = new URL(url)\n    if (!parsed.searchParams.has(param)) {\n      parsed.searchParams.set(param, '1')\n    }\n\n    if (input instanceof Request) {\n      return baseFetch(new Request(parsed.toString(), input), init)\n    }\n    return baseFetch(parsed.toString(), init)\n  }\n}\n","ts",[51,579,580,585,589,601,614,638,650,662,684,719,742,746,766,775,799,817,822,840,858,875,881,886,901,925,930,945,951],{"__ignoreMap":53},[183,581,582],{"class":185,"line":186},[183,583,584],{"class":423},"\u002F\u002F utils\u002FwithCacheBypass.ts\n",[183,586,587],{"class":185,"line":228},[183,588,232],{"emptyLinePlaceholder":231},[183,590,591,593,595,598],{"class":185,"line":235},[183,592,443],{"class":214},[183,594,449],{"class":214},[183,596,597],{"class":189}," withCacheBypass",[183,599,600],{"class":218},"(\n",[183,602,603,606,608,611],{"class":185,"line":266},[183,604,605],{"class":457},"  baseFetch",[183,607,461],{"class":214},[183,609,610],{"class":214}," typeof",[183,612,613],{"class":218}," fetch,\n",[183,615,616,619,621,624,627,630,633,635],{"class":185,"line":271},[183,617,618],{"class":457},"  bypass",[183,620,461],{"class":214},[183,622,623],{"class":241}," boolean",[183,625,626],{"class":214}," |",[183,628,629],{"class":218}," (() ",[183,631,632],{"class":214},"=>",[183,634,623],{"class":241},[183,636,637],{"class":218},"),\n",[183,639,640,643,645,648],{"class":185,"line":287},[183,641,642],{"class":457},"  param",[183,644,245],{"class":214},[183,646,647],{"class":193}," 'preview'",[183,649,296],{"class":218},[183,651,652,655,657,659],{"class":185,"line":299},[183,653,654],{"class":218},")",[183,656,461],{"class":214},[183,658,610],{"class":214},[183,660,661],{"class":218}," fetch {\n",[183,663,664,666,668,671,673,676,679,682],{"class":185,"line":308},[183,665,494],{"class":214},[183,667,449],{"class":214},[183,669,670],{"class":189}," bypassFetch",[183,672,257],{"class":218},[183,674,675],{"class":457},"input",[183,677,678],{"class":218},", ",[183,680,681],{"class":457},"init",[183,683,467],{"class":218},[183,685,686,689,692,694,696,699,702,705,708,711,714,716],{"class":185,"line":510},[183,687,688],{"class":214},"    const",[183,690,691],{"class":241}," active",[183,693,245],{"class":214},[183,695,610],{"class":214},[183,697,698],{"class":218}," bypass ",[183,700,701],{"class":214},"===",[183,703,704],{"class":193}," 'function'",[183,706,707],{"class":214}," ?",[183,709,710],{"class":189}," bypass",[183,712,713],{"class":218},"() ",[183,715,461],{"class":214},[183,717,718],{"class":218}," bypass\n",[183,720,721,724,727,730,733,736,739],{"class":185,"line":522},[183,722,723],{"class":214},"    if",[183,725,726],{"class":218}," (",[183,728,729],{"class":214},"!",[183,731,732],{"class":218},"active) ",[183,734,735],{"class":214},"return",[183,737,738],{"class":189}," baseFetch",[183,740,741],{"class":218},"(input, init)\n",[183,743,744],{"class":185,"line":528},[183,745,232],{"emptyLinePlaceholder":231},[183,747,749,751,754,756,758,761,763],{"class":185,"line":748},12,[183,750,688],{"class":214},[183,752,753],{"class":241}," url",[183,755,245],{"class":214},[183,757,610],{"class":214},[183,759,760],{"class":218}," input ",[183,762,701],{"class":214},[183,764,765],{"class":193}," 'string'\n",[183,767,769,772],{"class":185,"line":768},13,[183,770,771],{"class":214},"      ?",[183,773,774],{"class":218}," input\n",[183,776,778,781,783,786,789,791,794,796],{"class":185,"line":777},14,[183,779,780],{"class":214},"      :",[183,782,760],{"class":218},[183,784,785],{"class":214},"instanceof",[183,787,788],{"class":189}," URL",[183,790,707],{"class":214},[183,792,793],{"class":218}," input.href ",[183,795,461],{"class":214},[183,797,798],{"class":218}," input.url\n",[183,800,802,804,806,808,811,813,815],{"class":185,"line":801},15,[183,803,723],{"class":214},[183,805,726],{"class":218},[183,807,729],{"class":214},[183,809,810],{"class":218},"url) ",[183,812,735],{"class":214},[183,814,738],{"class":189},[183,816,741],{"class":218},[183,818,820],{"class":185,"line":819},16,[183,821,232],{"emptyLinePlaceholder":231},[183,823,825,827,830,832,835,837],{"class":185,"line":824},17,[183,826,688],{"class":214},[183,828,829],{"class":241}," parsed",[183,831,245],{"class":214},[183,833,834],{"class":214}," new",[183,836,788],{"class":189},[183,838,839],{"class":218},"(url)\n",[183,841,843,845,847,849,852,855],{"class":185,"line":842},18,[183,844,723],{"class":214},[183,846,726],{"class":218},[183,848,729],{"class":214},[183,850,851],{"class":218},"parsed.searchParams.",[183,853,854],{"class":189},"has",[183,856,857],{"class":218},"(param)) {\n",[183,859,861,864,867,870,873],{"class":185,"line":860},19,[183,862,863],{"class":218},"      parsed.searchParams.",[183,865,866],{"class":189},"set",[183,868,869],{"class":218},"(param, ",[183,871,872],{"class":193},"'1'",[183,874,263],{"class":218},[183,876,878],{"class":185,"line":877},20,[183,879,880],{"class":218},"    }\n",[183,882,884],{"class":185,"line":883},21,[183,885,232],{"emptyLinePlaceholder":231},[183,887,889,891,894,896,899],{"class":185,"line":888},22,[183,890,723],{"class":214},[183,892,893],{"class":218}," (input ",[183,895,785],{"class":214},[183,897,898],{"class":189}," Request",[183,900,467],{"class":218},[183,902,904,907,909,911,914,916,919,922],{"class":185,"line":903},23,[183,905,906],{"class":214},"      return",[183,908,738],{"class":189},[183,910,257],{"class":218},[183,912,913],{"class":214},"new",[183,915,898],{"class":189},[183,917,918],{"class":218},"(parsed.",[183,920,921],{"class":189},"toString",[183,923,924],{"class":218},"(), input), init)\n",[183,926,928],{"class":185,"line":927},24,[183,929,880],{"class":218},[183,931,933,936,938,940,942],{"class":185,"line":932},25,[183,934,935],{"class":214},"    return",[183,937,738],{"class":189},[183,939,918],{"class":218},[183,941,921],{"class":189},[183,943,944],{"class":218},"(), init)\n",[183,946,948],{"class":185,"line":947},26,[183,949,950],{"class":218},"  }\n",[183,952,954],{"class":185,"line":953},27,[183,955,531],{"class":218},[199,957,959],{"id":958},"nuxt-integration-example","Nuxt integration example",[44,961,963],{"className":575,"code":962,"language":577,"meta":53,"style":53},"\u002F\u002F plugins\u002Fprismic.ts\nimport * as prismic from '@prismicio\u002Fclient'\nimport { createCmsAssetsFetch } from '@synchronized-studio\u002Fcmsassets-core'\nimport { withCacheBypass } from '~\u002Futils\u002FwithCacheBypass'\n\nexport default defineNuxtPlugin(() => {\n  const { enabled: isPreview } = usePreviewMode()\n\n  const baseFetch = createCmsAssetsFetch({\n    tenant: 'my-site',\n    provider: 'prismic',\n  })\n\n  \u002F\u002F When preview mode is active, all API requests bypass edge cache\n  const cmsFetch = withCacheBypass(baseFetch, () => isPreview.value)\n\n  const client = prismic.createClient('my-repo', {\n    fetch: cmsFetch,\n  })\n\n  return { provide: { prismic: { client } } }\n})\n",[51,964,965,970,988,1000,1012,1016,1034,1061,1065,1079,1089,1099,1103,1107,1112,1131,1135,1158,1163,1167,1171,1178],{"__ignoreMap":53},[183,966,967],{"class":185,"line":186},[183,968,969],{"class":423},"\u002F\u002F plugins\u002Fprismic.ts\n",[183,971,972,974,977,980,983,985],{"class":185,"line":228},[183,973,215],{"class":214},[183,975,976],{"class":241}," *",[183,978,979],{"class":214}," as",[183,981,982],{"class":218}," prismic ",[183,984,222],{"class":214},[183,986,987],{"class":193}," '@prismicio\u002Fclient'\n",[183,989,990,992,995,997],{"class":185,"line":235},[183,991,215],{"class":214},[183,993,994],{"class":218}," { createCmsAssetsFetch } ",[183,996,222],{"class":214},[183,998,999],{"class":193}," '@synchronized-studio\u002Fcmsassets-core'\n",[183,1001,1002,1004,1007,1009],{"class":185,"line":266},[183,1003,215],{"class":214},[183,1005,1006],{"class":218}," { withCacheBypass } ",[183,1008,222],{"class":214},[183,1010,1011],{"class":193}," '~\u002Futils\u002FwithCacheBypass'\n",[183,1013,1014],{"class":185,"line":271},[183,1015,232],{"emptyLinePlaceholder":231},[183,1017,1018,1020,1023,1026,1029,1031],{"class":185,"line":287},[183,1019,443],{"class":214},[183,1021,1022],{"class":214}," default",[183,1024,1025],{"class":189}," defineNuxtPlugin",[183,1027,1028],{"class":218},"(() ",[183,1030,632],{"class":214},[183,1032,1033],{"class":218}," {\n",[183,1035,1036,1038,1041,1044,1047,1050,1053,1055,1058],{"class":185,"line":299},[183,1037,472],{"class":214},[183,1039,1040],{"class":218}," { ",[183,1042,1043],{"class":457},"enabled",[183,1045,1046],{"class":218},": ",[183,1048,1049],{"class":241},"isPreview",[183,1051,1052],{"class":218}," } ",[183,1054,375],{"class":214},[183,1056,1057],{"class":189}," usePreviewMode",[183,1059,1060],{"class":218},"()\n",[183,1062,1063],{"class":185,"line":308},[183,1064,232],{"emptyLinePlaceholder":231},[183,1066,1067,1069,1071,1073,1076],{"class":185,"line":510},[183,1068,472],{"class":214},[183,1070,738],{"class":241},[183,1072,245],{"class":214},[183,1074,1075],{"class":189}," createCmsAssetsFetch",[183,1077,1078],{"class":218},"({\n",[183,1080,1081,1084,1087],{"class":185,"line":522},[183,1082,1083],{"class":218},"    tenant: ",[183,1085,1086],{"class":193},"'my-site'",[183,1088,296],{"class":218},[183,1090,1091,1094,1097],{"class":185,"line":528},[183,1092,1093],{"class":218},"    provider: ",[183,1095,1096],{"class":193},"'prismic'",[183,1098,296],{"class":218},[183,1100,1101],{"class":185,"line":748},[183,1102,525],{"class":218},[183,1104,1105],{"class":185,"line":768},[183,1106,232],{"emptyLinePlaceholder":231},[183,1108,1109],{"class":185,"line":777},[183,1110,1111],{"class":423},"  \u002F\u002F When preview mode is active, all API requests bypass edge cache\n",[183,1113,1114,1116,1119,1121,1123,1126,1128],{"class":185,"line":801},[183,1115,472],{"class":214},[183,1117,1118],{"class":241}," cmsFetch",[183,1120,245],{"class":214},[183,1122,597],{"class":189},[183,1124,1125],{"class":218},"(baseFetch, () ",[183,1127,632],{"class":214},[183,1129,1130],{"class":218}," isPreview.value)\n",[183,1132,1133],{"class":185,"line":819},[183,1134,232],{"emptyLinePlaceholder":231},[183,1136,1137,1139,1142,1144,1147,1150,1152,1155],{"class":185,"line":824},[183,1138,472],{"class":214},[183,1140,1141],{"class":241}," client",[183,1143,245],{"class":214},[183,1145,1146],{"class":218}," prismic.",[183,1148,1149],{"class":189},"createClient",[183,1151,257],{"class":218},[183,1153,1154],{"class":193},"'my-repo'",[183,1156,1157],{"class":218},", {\n",[183,1159,1160],{"class":185,"line":842},[183,1161,1162],{"class":218},"    fetch: cmsFetch,\n",[183,1164,1165],{"class":185,"line":860},[183,1166,525],{"class":218},[183,1168,1169],{"class":185,"line":877},[183,1170,232],{"emptyLinePlaceholder":231},[183,1172,1173,1175],{"class":185,"line":883},[183,1174,494],{"class":214},[183,1176,1177],{"class":218}," { provide: { prismic: { client } } }\n",[183,1179,1180],{"class":185,"line":888},[183,1181,311],{"class":218},[199,1183,1185],{"id":1184},"how-it-works","How it works",[320,1187,1188,1200,1212],{},[323,1189,1190,1193,1194,344,1197,654],{},[29,1191,1192],{},"Normal requests"," go through the proxy and are served from edge cache when available (",[51,1195,1196],{},"X-Cache: HIT",[51,1198,1199],{},"MISS",[323,1201,1202,1205,1206,1208,1209,654],{},[29,1203,1204],{},"Preview\u002Ffresh requests"," have ",[51,1207,557],{}," appended automatically, which tells the proxy to skip cache and fetch directly from Prismic (",[51,1210,1211],{},"X-Cache: BYPASS",[323,1213,1214],{},"The bypass signal is evaluated per request, so switching preview mode on\u002Foff takes effect immediately",[199,1216,1218],{"id":1217},"static-bypass","Static bypass",[14,1220,1221,1222,1225],{},"If you need a client that always bypasses cache (e.g., for a dedicated preview endpoint), pass ",[51,1223,1224],{},"true"," instead of a function:",[44,1227,1229],{"className":575,"code":1228,"language":577,"meta":53,"style":53},"const previewFetch = withCacheBypass(baseFetch, true)\nconst previewClient = prismic.createClient('my-repo', { fetch: previewFetch })\n",[51,1230,1231,1249],{"__ignoreMap":53},[183,1232,1233,1235,1238,1240,1242,1245,1247],{"class":185,"line":186},[183,1234,238],{"class":214},[183,1236,1237],{"class":241}," previewFetch",[183,1239,245],{"class":214},[183,1241,597],{"class":189},[183,1243,1244],{"class":218},"(baseFetch, ",[183,1246,1224],{"class":241},[183,1248,263],{"class":218},[183,1250,1251,1253,1256,1258,1260,1262,1264,1266],{"class":185,"line":228},[183,1252,238],{"class":214},[183,1254,1255],{"class":241}," previewClient",[183,1257,245],{"class":214},[183,1259,1146],{"class":218},[183,1261,1149],{"class":189},[183,1263,257],{"class":218},[183,1265,1154],{"class":193},[183,1267,1268],{"class":218},", { fetch: previewFetch })\n",[199,1270,1272],{"id":1271},"what-this-does-not-do","What this does not do",[320,1274,1275,1287],{},[323,1276,1277,153,1280,1282,1283,1286],{},[29,1278,1279],{},"Does not bypass asset proxy caching.",[51,1281,557],{}," param only affects ",[51,1284,1285],{},"\u002F~api"," routes. Asset URLs are unaffected — this is intentional, since preview use cases are about fresh API data, not fresh images.",[323,1288,1289,1292,1293,1296,1297,1299],{},[29,1290,1291],{},"Does not change how Prismic preview refs work."," Prismic's own preview mechanism uses a ",[51,1294,1295],{},"ref"," parameter to point to a draft release. That ref flows through the proxy as a normal query parameter. ",[51,1298,561],{}," ensures the proxy doesn't serve a stale cached version of the previous ref.",[18,1301],{},[21,1303,1305],{"id":1304},"advanced-options","Advanced options",[199,1307,1309],{"id":1308},"custom-transformers","Custom transformers",[14,1311,1312],{},"You can add additional transformers that run after the default Prismic ones:",[44,1314,1316],{"className":205,"code":1315,"language":207,"meta":53,"style":53},"const transformed = transformPrismicAssetUrls(data, {\n  repository: \"your-repo\",\n  transformers: [\n    (jsonStr, { base }) => {\n      \u002F\u002F Custom string replacement on the serialized JSON\n      return jsonStr.replaceAll(\"old-pattern\", \"new-pattern\")\n    }\n  ]\n})\n",[51,1317,1318,1330,1338,1343,1364,1369,1391,1395,1400],{"__ignoreMap":53},[183,1319,1320,1322,1324,1326,1328],{"class":185,"line":186},[183,1321,238],{"class":214},[183,1323,276],{"class":241},[183,1325,245],{"class":214},[183,1327,281],{"class":189},[183,1329,284],{"class":218},[183,1331,1332,1334,1336],{"class":185,"line":228},[183,1333,290],{"class":218},[183,1335,293],{"class":193},[183,1337,296],{"class":218},[183,1339,1340],{"class":185,"line":235},[183,1341,1342],{"class":218},"  transformers: [\n",[183,1344,1345,1348,1351,1354,1357,1360,1362],{"class":185,"line":266},[183,1346,1347],{"class":218},"    (",[183,1349,1350],{"class":457},"jsonStr",[183,1352,1353],{"class":218},", { ",[183,1355,1356],{"class":457},"base",[183,1358,1359],{"class":218}," }) ",[183,1361,632],{"class":214},[183,1363,1033],{"class":218},[183,1365,1366],{"class":185,"line":271},[183,1367,1368],{"class":423},"      \u002F\u002F Custom string replacement on the serialized JSON\n",[183,1370,1371,1373,1376,1379,1381,1384,1386,1389],{"class":185,"line":287},[183,1372,906],{"class":214},[183,1374,1375],{"class":218}," jsonStr.",[183,1377,1378],{"class":189},"replaceAll",[183,1380,257],{"class":218},[183,1382,1383],{"class":193},"\"old-pattern\"",[183,1385,678],{"class":218},[183,1387,1388],{"class":193},"\"new-pattern\"",[183,1390,263],{"class":218},[183,1392,1393],{"class":185,"line":299},[183,1394,880],{"class":218},[183,1396,1397],{"class":185,"line":308},[183,1398,1399],{"class":218},"  ]\n",[183,1401,1402],{"class":185,"line":510},[183,1403,311],{"class":218},[199,1405,1407],{"id":1406},"post-transform-hook","Post-transform hook",[14,1409,1410],{},"Run a function on the parsed result after all URL replacements:",[44,1412,1414],{"className":205,"code":1413,"language":207,"meta":53,"style":53},"const transformed = transformPrismicAssetUrls(data, {\n  repository: \"your-repo\",\n  postTransform: (data) => {\n    \u002F\u002F Modify the final parsed object\n    return data\n  }\n})\n",[51,1415,1416,1428,1436,1454,1459,1466,1470],{"__ignoreMap":53},[183,1417,1418,1420,1422,1424,1426],{"class":185,"line":186},[183,1419,238],{"class":214},[183,1421,276],{"class":241},[183,1423,245],{"class":214},[183,1425,281],{"class":189},[183,1427,284],{"class":218},[183,1429,1430,1432,1434],{"class":185,"line":228},[183,1431,290],{"class":218},[183,1433,293],{"class":193},[183,1435,296],{"class":218},[183,1437,1438,1441,1444,1447,1450,1452],{"class":185,"line":235},[183,1439,1440],{"class":189},"  postTransform",[183,1442,1443],{"class":218},": (",[183,1445,1446],{"class":457},"data",[183,1448,1449],{"class":218},") ",[183,1451,632],{"class":214},[183,1453,1033],{"class":218},[183,1455,1456],{"class":185,"line":266},[183,1457,1458],{"class":423},"    \u002F\u002F Modify the final parsed object\n",[183,1460,1461,1463],{"class":185,"line":271},[183,1462,935],{"class":214},[183,1464,1465],{"class":218}," data\n",[183,1467,1468],{"class":185,"line":287},[183,1469,950],{"class":218},[183,1471,1472],{"class":185,"line":299},[183,1473,311],{"class":218},[199,1475,1477],{"id":1476},"error-handling","Error handling",[14,1479,1480],{},"By default, transform errors are logged as warnings and the original data is returned unchanged. You can provide a custom error handler:",[44,1482,1484],{"className":205,"code":1483,"language":207,"meta":53,"style":53},"const transformed = transformPrismicAssetUrls(data, {\n  repository: \"your-repo\",\n  onError: (error) => {\n    Sentry.captureException(error)\n  }\n})\n",[51,1485,1486,1498,1506,1522,1533,1537],{"__ignoreMap":53},[183,1487,1488,1490,1492,1494,1496],{"class":185,"line":186},[183,1489,238],{"class":214},[183,1491,276],{"class":241},[183,1493,245],{"class":214},[183,1495,281],{"class":189},[183,1497,284],{"class":218},[183,1499,1500,1502,1504],{"class":185,"line":228},[183,1501,290],{"class":218},[183,1503,293],{"class":193},[183,1505,296],{"class":218},[183,1507,1508,1511,1513,1516,1518,1520],{"class":185,"line":235},[183,1509,1510],{"class":189},"  onError",[183,1512,1443],{"class":218},[183,1514,1515],{"class":457},"error",[183,1517,1449],{"class":218},[183,1519,632],{"class":214},[183,1521,1033],{"class":218},[183,1523,1524,1527,1530],{"class":185,"line":266},[183,1525,1526],{"class":218},"    Sentry.",[183,1528,1529],{"class":189},"captureException",[183,1531,1532],{"class":218},"(error)\n",[183,1534,1535],{"class":185,"line":271},[183,1536,950],{"class":218},[183,1538,1539],{"class":185,"line":287},[183,1540,311],{"class":218},[1542,1543,1544],"style",{},"html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}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 pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}",{"title":53,"searchDepth":228,"depth":228,"links":1546},[1547,1548,1549,1556,1563],{"id":23,"depth":228,"text":24},{"id":78,"depth":228,"text":79},{"id":170,"depth":228,"text":171,"children":1550},[1551,1552,1553,1554,1555],{"id":201,"depth":235,"text":202},{"id":314,"depth":235,"text":315},{"id":351,"depth":235,"text":352},{"id":409,"depth":235,"text":410},{"id":534,"depth":235,"text":535},{"id":547,"depth":228,"text":548,"children":1557},[1558,1559,1560,1561,1562],{"id":565,"depth":235,"text":566},{"id":958,"depth":235,"text":959},{"id":1184,"depth":235,"text":1185},{"id":1217,"depth":235,"text":1218},{"id":1271,"depth":235,"text":1272},{"id":1304,"depth":228,"text":1305,"children":1564},[1565,1566,1567],{"id":1308,"depth":235,"text":1309},{"id":1406,"depth":235,"text":1407},{"id":1476,"depth":235,"text":1477},"Proxy Prismic API requests through the edge with server-side token injection, global response caching, and automatic image URL rewriting.","md",{},"\u002Fdocs\u002Fprismic",{"title":5,"description":1568},"docs\u002Fprismic","FLpAN7YWgpM8k63_bcEv4Hq9LVPR00Fn6uIpGnu_7_U",1777579477870]