hydrogen-sanity 2.0.2 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +8 -6
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/client.ts +1 -1
- package/src/preview/PreviewProvider.tsx +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
|
|
3
3
|
import type {CacheShort} from '@shopify/hydrogen'
|
|
4
|
-
import {ClientConfig} from '@sanity/client'
|
|
5
|
-
import {
|
|
4
|
+
import {ClientConfig} from '@sanity/preview-kit/client'
|
|
5
|
+
import type {ClientConfig as ClientConfig_2} from '@sanity/client'
|
|
6
|
+
import {ClientPerspective} from '@sanity/preview-kit/client'
|
|
6
7
|
import {JSX as JSX_2} from 'react/jsx-runtime'
|
|
7
8
|
import type {LiveQueryProviderProps} from '@sanity/preview-kit'
|
|
8
|
-
import {QueryParams} from '@sanity/client'
|
|
9
|
+
import {QueryParams} from '@sanity/preview-kit/client'
|
|
10
|
+
import type {QueryParams as QueryParams_2} from '@sanity/client'
|
|
9
11
|
import {ReactNode} from 'react'
|
|
10
|
-
import {SanityClient} from '@sanity/client'
|
|
12
|
+
import {SanityClient} from '@sanity/preview-kit/client'
|
|
11
13
|
import {Session} from '@shopify/remix-oxygen'
|
|
12
14
|
import {SessionStorage} from '@shopify/remix-oxygen'
|
|
13
15
|
|
|
@@ -50,7 +52,7 @@ export declare function getPreview<
|
|
|
50
52
|
T extends {
|
|
51
53
|
sanity: Sanity
|
|
52
54
|
}
|
|
53
|
-
>(context: T):
|
|
55
|
+
>(context: T): ClientConfig_2 | undefined
|
|
54
56
|
|
|
55
57
|
export declare function isPreviewModeEnabled(preview?: Sanity['preview']): preview is {
|
|
56
58
|
session: PreviewSession
|
|
@@ -63,7 +65,7 @@ declare type PreviewProps<T> = {
|
|
|
63
65
|
data: T
|
|
64
66
|
children: ReactNode | ((data?: T | null) => ReactNode)
|
|
65
67
|
query?: string | null
|
|
66
|
-
params?:
|
|
68
|
+
params?: QueryParams_2
|
|
67
69
|
}
|
|
68
70
|
|
|
69
71
|
/**
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@sanity/client"),t=require("@shopify/hydrogen"),r=require("react"),i=require("react/jsx-runtime"),n=require("@shopify/remix-oxygen"),s=require("@sanity/preview-kit");function a(e){return Boolean(e&&e.token&&null!==e.token)}async function o(e){const t=await(new TextEncoder).encode(e),r=await crypto.subtle.digest("SHA-256",t);return Array.from(new Uint8Array(r)).map((e=>e.toString(16).padStart(2,"0"))).join("")}const c=r.createContext(void 0),u=()=>r.useContext(c);const l=r.lazy((()=>import("@sanity/preview-kit").then((e=>({default:e.LiveQueryProvider})))));var p,d,h=(e,t,r)=>{if(!t.has(e))throw TypeError("Cannot "+r)},
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@sanity/preview-kit/client"),t=require("@shopify/hydrogen"),r=require("react"),i=require("react/jsx-runtime"),n=require("@shopify/remix-oxygen"),s=require("@sanity/preview-kit");function a(e){return Boolean(e&&e.token&&null!==e.token)}async function o(e){const t=await(new TextEncoder).encode(e),r=await crypto.subtle.digest("SHA-256",t);return Array.from(new Uint8Array(r)).map((e=>e.toString(16).padStart(2,"0"))).join("")}const c=r.createContext(void 0),u=()=>r.useContext(c);const l=r.lazy((()=>import("@sanity/preview-kit").then((e=>({default:e.LiveQueryProvider})))));var p,d,h=(e,t,r)=>{if(!t.has(e))throw TypeError("Cannot "+r)},v=(e,t,r)=>(h(e,t,"read from private field"),r?r.call(e):t.get(e)),y=(e,t,r)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,r)},f=(e,t,r,i)=>(h(e,t,"write to private field"),i?i.call(e,r):t.set(e,r),r);function w(e){const{initialData:t,query:r,params:n,children:a}=e,[o]=s.useLiveQuery(t,r,n);return i.jsx(i.Fragment,{children:a(o)})}p=new WeakMap,d=new WeakMap,exports.PreviewProvider=function(t){const{children:n,previewConfig:s,fallback:a=n,...o}=t,[,u]=r.useTransition(),[p,d]=r.useState(!1);if(r.useEffect((()=>u((()=>d(!0)))),[]),!p||!s||!s.projectId)return n;const h=e.createClient(s);return i.jsx(c.Provider,{value:{projectId:s.projectId},children:i.jsx(r.Suspense,{fallback:a,children:i.jsx(l,{...o,client:h,children:n})})})},exports.PreviewSession=class{constructor(e,t){y(this,p,void 0),y(this,d,void 0),f(this,p,e),f(this,d,t)}static async init(e,t){const r=n.createCookieSessionStorage({cookie:{name:"__preview",httpOnly:!0,sameSite:!0,secrets:t}}),i=await r.getSession(e.headers.get("Cookie"));return new this(r,i)}has(e){return v(this,d).has(e)}destroy(){return v(this,p).destroySession(v(this,d))}set(e,t){v(this,d).set(e,t)}commit(){return v(this,p).commitSession(v(this,d))}},exports.SanityPreview=function(e){const{data:t,children:r,query:n,params:s}=e,a=Boolean(u());return"function"!=typeof r?r:a&&n?i.jsx(w,{query:n,params:s,initialData:t,children:r}):i.jsx(i.Fragment,{children:r(t)})},exports.createSanityClient=function(r){const{cache:i,waitUntil:n,preview:s,config:a}=r,c={client:e.createClient(a),async query(e){let{query:r,params:s,cache:a=t.CacheLong()}=e;const u=await function(e,t){let r=e;null!==t&&(r+=JSON.stringify(t));return o(r)}(r,s);return t.createWithCache_unstable({cache:i,waitUntil:n})(u,a,(()=>c.client.fetch(r,s)))}};return s&&(c.preview={session:s.session},s.session.has("projectId")&&(c.preview={...c.preview,projectId:a.projectId,dataset:a.dataset,token:s.token},c.client=c.client.withConfig({useCdn:!1,token:s.token,perspective:s.perspective||"previewDrafts",ignoreBrowserTokenWarning:!0}),c.query=e=>{let{query:t,params:r}=e;return c.client.fetch(t,r)})),c},exports.getPreview=function(e){return a(e.sanity.preview)?{...e.sanity.client.config()}:void 0},exports.isPreviewModeEnabled=a,exports.sha256=o,exports.usePreviewContext=u;//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/client.ts","../src/preview/context.tsx","../src/preview/PreviewProvider.tsx","../src/preview/PreviewSession.ts","../src/preview/SanityPreview.tsx","../src/preview/getPreview.ts"],"sourcesContent":["import {\n type ClientConfig,\n type ClientPerspective,\n createClient,\n type QueryParams,\n type SanityClient,\n} from '@sanity/client'\n// eslint-disable-next-line camelcase\nimport {CacheLong, createWithCache_unstable} from '@shopify/hydrogen'\n\nimport type {PreviewSession} from './preview'\nimport type {CachingStrategy, EnvironmentOptions} from './types'\n\ntype CreateSanityClientOptions = EnvironmentOptions & {\n config: ClientConfig & Required<Pick<ClientConfig, 'projectId' | 'dataset'>>\n preview?: {\n session: PreviewSession\n token: string\n perspective?: ClientPerspective\n }\n}\n\ntype useSanityQuery = {\n query: string\n params?: QueryParams\n cache?: CachingStrategy\n}\n\nexport type Sanity = {\n client: SanityClient\n preview?:\n | {session: PreviewSession; projectId: string; dataset: string; token: string}\n | {session: PreviewSession}\n query<T>(options: useSanityQuery): Promise<T>\n}\n\n/**\n * Create Sanity provider with API client.\n */\nexport function createSanityClient(options: CreateSanityClientOptions): Sanity {\n const {cache, waitUntil, preview, config} = options\n\n const sanity: Sanity = {\n client: createClient(config),\n async query<T = any>({query, params, cache: strategy = CacheLong()}: useSanityQuery) {\n const queryHash = await hashQuery(query, params)\n const withCache = createWithCache_unstable<T>({\n cache,\n waitUntil,\n })\n\n return withCache(queryHash, strategy, () => sanity.client.fetch(query, params))\n },\n }\n\n if (preview) {\n sanity.preview = {session: preview.session}\n\n if (preview.session.has('projectId')) {\n sanity.preview = {\n ...sanity.preview,\n projectId: config.projectId,\n dataset: config.dataset,\n token: preview.token,\n }\n\n sanity.client = sanity.client.withConfig({\n useCdn: false,\n token: preview.token,\n perspective: preview.perspective || 'previewDrafts',\n ignoreBrowserTokenWarning: true,\n })\n\n sanity.query = ({query, params}) => {\n return sanity.client.fetch(query, params)\n }\n }\n }\n\n return sanity\n}\n\nexport function isPreviewModeEnabled(\n preview?: Sanity['preview']\n): preview is {session: PreviewSession; projectId: string; dataset: string; token: string} {\n // @ts-expect-error\n return Boolean(preview && preview.token && preview.token !== null)\n}\n\n/**\n * Create an SHA-256 hash as a hex string\n * @see https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest#converting_a_digest_to_a_hex_string\n */\nexport async function sha256(message: string): Promise<string> {\n // encode as UTF-8\n const messageBuffer = await new TextEncoder().encode(message)\n // hash the message\n const hashBuffer = await crypto.subtle.digest('SHA-256', messageBuffer)\n // convert bytes to hex string\n return Array.from(new Uint8Array(hashBuffer))\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')\n}\n\n/**\n * Hash query and its parameters for use as cache key\n * NOTE: Oxygen deployment will break if the cache key is long or contains `\\n`\n */\nfunction hashQuery(\n query: useSanityQuery['query'],\n params: useSanityQuery['params']\n): Promise<string> {\n let hash = query\n\n if (params !== null) {\n hash += JSON.stringify(params)\n }\n\n return sha256(hash)\n}\n","import {createContext, useContext} from 'react'\n\nexport const PreviewContext = createContext<{projectId: string} | undefined>(undefined)\n\n/** TODO: needs inline documentation */\nexport const usePreviewContext = () => useContext(PreviewContext)\n","/* eslint-disable react/require-default-props */\nimport {type ClientConfig, createClient} from '@sanity/client'\nimport type {LiveQueryProviderProps} from '@sanity/preview-kit'\nimport {lazy, type ReactNode, Suspense, useEffect, useState, useTransition} from 'react'\n\nimport {PreviewContext} from './context'\n\nconst LiveQueryProvider = lazy(() =>\n import('@sanity/preview-kit').then((m) => ({default: m.LiveQueryProvider}))\n)\n\ntype SanityPreviewProps = Omit<LiveQueryProviderProps, 'client'> & {\n fallback?: ReactNode\n previewConfig?: ClientConfig\n}\n\n/**\n * TODO: inline documentation\n * @see https://www.sanity.io/docs/preview-content-on-site\n */\nexport function PreviewProvider(props: SanityPreviewProps) {\n const {children, previewConfig, fallback = children, ...rest} = props\n\n const [, startTransition] = useTransition()\n const [hydrated, setHydrated] = useState(false)\n useEffect(() => startTransition(() => setHydrated(true)), [])\n\n if (!hydrated || !previewConfig || !previewConfig.projectId) {\n return children\n }\n\n const client = createClient(previewConfig)\n\n return (\n <PreviewContext.Provider value={{projectId: previewConfig.projectId}}>\n <Suspense fallback={fallback}>\n <LiveQueryProvider {...rest} client={client}>\n {children}\n </LiveQueryProvider>\n </Suspense>\n </PreviewContext.Provider>\n )\n}\n","import {createCookieSessionStorage, type Session, type SessionStorage} from '@shopify/remix-oxygen'\n\n/**\n * TODO: needs inline documentation\n */\nexport class PreviewSession {\n #sessionStorage: SessionStorage\n #session: Session\n\n constructor(sessionStorage: SessionStorage, session: Session) {\n this.#sessionStorage = sessionStorage\n this.#session = session\n }\n\n static async init(request: Request, secrets: string[]): Promise<PreviewSession> {\n const storage = createCookieSessionStorage({\n cookie: {\n name: '__preview',\n httpOnly: true,\n sameSite: true,\n secrets,\n },\n })\n\n const session = await storage.getSession(request.headers.get('Cookie'))\n\n return new this(storage, session)\n }\n\n has(key: string): boolean {\n return this.#session.has(key)\n }\n\n // get(key: string) {\n // return this.session.get(key);\n // }\n\n destroy(): Promise<string> {\n return this.#sessionStorage.destroySession(this.#session)\n }\n\n // unset(key: string) {\n // this.session.unset(key);\n // }\n\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n set(key: string, value: any): void {\n this.#session.set(key, value)\n }\n\n commit(): Promise<string> {\n return this.#sessionStorage.commitSession(this.#session)\n }\n}\n","/* eslint-disable react/require-default-props */\nimport type {QueryParams} from '@sanity/client'\nimport {useLiveQuery} from '@sanity/preview-kit'\nimport {type ReactNode} from 'react'\n\nimport {usePreviewContext} from './context'\n\ntype PreviewProps<T> = {\n data: T\n children: ReactNode | ((data?: T | null) => ReactNode)\n query?: string | null\n params?: QueryParams\n}\n\n/**\n * Component to use for rendering in preview mode\n *\n * When provided a Sanity query and render prop,\n * changes will be streamed in the client\n */\nexport function SanityPreview<T = unknown>(props: PreviewProps<T>) {\n const {data, children, query, params} = props\n const isPreview = Boolean(usePreviewContext())\n\n if (typeof children !== 'function') {\n return children\n }\n\n if (isPreview && query) {\n return (\n <ResolvePreview<typeof data> query={query} params={params} initialData={data}>\n {children}\n </ResolvePreview>\n )\n }\n\n return <>{children(data)}</>\n}\n\ntype ResolvePreviewProps<T> = {\n initialData?: T | null\n query: string\n params?: QueryParams\n children: (data?: T | null) => ReactNode\n}\n\n/**\n * Subscribe to live preview and delegate rendering to consumer\n */\nfunction ResolvePreview<T = unknown>(props: ResolvePreviewProps<T>) {\n const {initialData, query, params, children} = props\n const [data] = useLiveQuery(initialData, query, params)\n\n return <>{children(data)}</>\n}\n","import type {ClientConfig} from '@sanity/client'\n\nimport {isPreviewModeEnabled, Sanity} from '../client'\n\n/** TODO: inline documentation */\nexport function getPreview<T extends {sanity: Sanity}>(context: T): ClientConfig | undefined {\n return isPreviewModeEnabled(context.sanity.preview)\n ? {\n ...context.sanity.client.config(),\n }\n : undefined\n}\n"],"names":["isPreviewModeEnabled","preview","Boolean","token","async","sha256","message","messageBuffer","TextEncoder","encode","hashBuffer","crypto","subtle","digest","Array","from","Uint8Array","map","b","toString","padStart","join","PreviewContext","createContext","usePreviewContext","useContext","LiveQueryProvider","lazy","import","then","m","default","_sessionStorage","_session","ResolvePreview","props","initialData","query","params","children","data","useLiveQuery","jsx","Fragment","WeakMap","exports","PreviewProvider","previewConfig","fallback","rest","startTransition","useTransition","hydrated","setHydrated","useState","useEffect","projectId","client","createClient","Provider","value","Suspense","PreviewSession","constructor","sessionStorage","session","__privateAdd","this","__privateSet","static","request","secrets","storage","createCookieSessionStorage","cookie","name","httpOnly","sameSite","getSession","headers","get","has","key","__privateGet","destroy","destroySession","set","commit","commitSession","SanityPreview","isPreview","createSanityClient","options","cache","waitUntil","config","sanity","strategy","CacheLong","_ref","queryHash","hash","JSON","stringify","hashQuery","createWithCache_unstable","withCache","fetch","dataset","withConfig","useCdn","perspective","ignoreBrowserTokenWarning","_ref2","getPreview","context"],"mappings":"yPAkFO,SAASA,EACdC,GAGA,OAAOC,QAAQD,GAAWA,EAAQE,OAA2B,OAAlBF,EAAQE,MACrD,CAMAC,eAAsBC,EAAOC,GAE3B,MAAMC,QAAsB,IAAIC,aAAcC,OAAOH,GAE/CI,QAAmBC,OAAOC,OAAOC,OAAO,UAAWN,GAElD,OAAAO,MAAMC,KAAK,IAAIC,WAAWN,IAC9BO,KAAKC,GAAMA,EAAEC,SAAS,IAAIC,SAAS,EAAG,OACtCC,KAAK,GACV,CCpGa,MAAAC,EAAiBC,EAAAA,mBAA+C,GAGhEC,EAAoBA,IAAMC,EAAAA,WAAWH,GCElD,MAAMI,EAAoBC,EAAAA,MAAK,IAC7BC,OAAO,uBAAuBC,MAAMC,IAAO,CAACC,QAASD,EAAEJ,4BCRzDM,EAAAC,6UCiDA,SAASC,EAA4BC,GACnC,MAAMC,YAACA,EAAAC,MAAaA,EAAOC,OAAAA,EAAAC,SAAQA,GAAYJ,GACxCK,GAAQC,EAAAA,aAAaL,EAAaC,EAAOC,GAEzC,OAAAI,EAAAA,IAAAC,EAAAA,SAAA,CAAGJ,SAASA,EAAAC,IACrB,CDhDER,EAAA,IAAAY,QACAX,EAAA,IAAAW,QC+CFC,QAAAC,gBFlCO,SAAyBX,GAC9B,MAAMI,SAACA,EAAUQ,cAAAA,EAAAC,SAAeA,EAAWT,KAAaU,GAAQd,GAE1D,CAAGe,GAAmBC,EAAAA,iBACrBC,EAAUC,GAAeC,YAAS,GAGzC,GAFUC,EAAAA,WAAA,IAAML,GAAgB,IAAMG,GAAY,MAAQ,KAErDD,IAAaL,IAAkBA,EAAcS,UACzC,OAAAjB,EAGH,MAAAkB,EAASC,eAAaX,GAG1B,OAAAL,MAACpB,EAAeqC,SAAf,CAAwBC,MAAO,CAACJ,UAAWT,EAAcS,WACxDjB,eAACsB,EAAAA,SAAS,CAAAb,WACRT,eAACb,EAAmB,IAAGuB,EAAMQ,OAAAA,EAC1BlB,gBAKX,EEYAM,QAAAiB,eDjDO,MAILC,YAAYC,EAAgCC,GAH5CC,EAAAC,KAAAnC,OAAA,GACAkC,EAAAC,KAAAlC,OAAA,GAGEmC,EAAAD,KAAKnC,EAAkBgC,GACvBI,EAAAD,KAAKlC,EAAWgC,EAClB,CAEAI,kBAAkBC,EAAkBC,GAClC,MAAMC,EAAUC,EAAAA,2BAA2B,CACzCC,OAAQ,CACNC,KAAM,YACNC,UAAU,EACVC,UAAU,EACVN,aAIEN,QAAgBO,EAAQM,WAAWR,EAAQS,QAAQC,IAAI,WAEtD,OAAA,IAAIb,KAAKK,EAASP,EAC3B,CAEAgB,IAAIC,GACK,OAAAC,EAAAhB,KAAKlC,GAASgD,IAAIC,EAC3B,CAMAE,UACE,OAAOD,EAAKhB,KAAAnC,GAAgBqD,eAAeF,EAAAhB,KAAKlC,GAClD,CAOAqD,IAAIJ,EAAatB,GACVuB,EAAAhB,KAAAlC,GAASqD,IAAIJ,EAAKtB,EACzB,CAEA2B,SACE,OAAOJ,EAAKhB,KAAAnC,GAAgBwD,cAAcL,EAAAhB,KAAKlC,GACjD,GCEFY,QAAA4C,cAlCO,SAAoCtD,GACzC,MAAMK,KAACA,EAAAD,SAAMA,EAAUF,MAAAA,EAAAC,OAAOA,GAAUH,EAClCuD,EAAYxF,QAAQsB,KAEtB,MAAoB,mBAAbe,EACFA,EAGLmD,GAAarD,QAEZH,EAA4B,CAAAG,QAAcC,SAAgBF,YAAaI,EACrED,aAKAG,EAAAA,IAAAC,EAAAA,SAAA,CAAGJ,SAASA,EAAAC,IACrB,EAiBAK,QAAA8C,mBJfO,SAA4BC,GACjC,MAAMC,MAACA,EAAAC,UAAOA,EAAW7F,QAAAA,EAAA8F,OAASA,GAAUH,EAEtCI,EAAiB,CACrBvC,OAAQC,eAAaqC,GACrB3F,eAAqF,IAAhEiC,MAACA,EAAAC,OAAOA,EAAQuD,MAAOI,EAAWC,EAAUA,aAAoBC,EACnF,MAAMC,QA+DZ,SACE/D,EACAC,GAEA,IAAI+D,EAAOhE,EAEI,OAAXC,IACM+D,GAAAC,KAAKC,UAAUjE,IAGzB,OAAOjC,EAAOgG,EAChB,CA1E8BG,CAAUnE,EAAOC,GAMlC,OALWmE,EAAAA,yBAA4B,CAC5CZ,QACAC,aAGKY,CAAUN,EAAWH,GAAU,IAAMD,EAAOvC,OAAOkD,MAAMtE,EAAOC,IACzE,GA2BK,OAxBHrC,IACF+F,EAAO/F,QAAU,CAACgE,QAAShE,EAAQgE,SAE/BhE,EAAQgE,QAAQgB,IAAI,eACtBe,EAAO/F,QAAU,IACZ+F,EAAO/F,QACVuD,UAAWuC,EAAOvC,UAClBoD,QAASb,EAAOa,QAChBzG,MAAOF,EAAQE,OAGV6F,EAAAvC,OAASuC,EAAOvC,OAAOoD,WAAW,CACvCC,QAAQ,EACR3G,MAAOF,EAAQE,MACf4G,YAAa9G,EAAQ8G,aAAe,gBACpCC,2BAA2B,IAG7BhB,EAAO3D,MAAQ4E,IAAqB,IAApB5E,MAACA,EAAAC,OAAOA,GAAY2E,EAClC,OAAOjB,EAAOvC,OAAOkD,MAAMtE,EAAOC,EAAM,IAKvC0D,CACT,EI1BAnD,QAAAqE,WCjDO,SAAgDC,GACrD,OAAOnH,EAAqBmH,EAAQnB,OAAO/F,SACvC,IACKkH,EAAQnB,OAAOvC,OAAOsC,eAE3B,CACN,ED2CAlD,QAAA7C,qBAAAA,EAAA6C,QAAAxC,OAAAA,EAAAwC,QAAArB,kBAAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/client.ts","../src/preview/context.tsx","../src/preview/PreviewProvider.tsx","../src/preview/PreviewSession.ts","../src/preview/SanityPreview.tsx","../src/preview/getPreview.ts"],"sourcesContent":["import {\n type ClientConfig,\n type ClientPerspective,\n createClient,\n type QueryParams,\n type SanityClient,\n} from '@sanity/preview-kit/client'\n// eslint-disable-next-line camelcase\nimport {CacheLong, createWithCache_unstable} from '@shopify/hydrogen'\n\nimport type {PreviewSession} from './preview'\nimport type {CachingStrategy, EnvironmentOptions} from './types'\n\ntype CreateSanityClientOptions = EnvironmentOptions & {\n config: ClientConfig & Required<Pick<ClientConfig, 'projectId' | 'dataset'>>\n preview?: {\n session: PreviewSession\n token: string\n perspective?: ClientPerspective\n }\n}\n\ntype useSanityQuery = {\n query: string\n params?: QueryParams\n cache?: CachingStrategy\n}\n\nexport type Sanity = {\n client: SanityClient\n preview?:\n | {session: PreviewSession; projectId: string; dataset: string; token: string}\n | {session: PreviewSession}\n query<T>(options: useSanityQuery): Promise<T>\n}\n\n/**\n * Create Sanity provider with API client.\n */\nexport function createSanityClient(options: CreateSanityClientOptions): Sanity {\n const {cache, waitUntil, preview, config} = options\n\n const sanity: Sanity = {\n client: createClient(config),\n async query<T = any>({query, params, cache: strategy = CacheLong()}: useSanityQuery) {\n const queryHash = await hashQuery(query, params)\n const withCache = createWithCache_unstable<T>({\n cache,\n waitUntil,\n })\n\n return withCache(queryHash, strategy, () => sanity.client.fetch(query, params))\n },\n }\n\n if (preview) {\n sanity.preview = {session: preview.session}\n\n if (preview.session.has('projectId')) {\n sanity.preview = {\n ...sanity.preview,\n projectId: config.projectId,\n dataset: config.dataset,\n token: preview.token,\n }\n\n sanity.client = sanity.client.withConfig({\n useCdn: false,\n token: preview.token,\n perspective: preview.perspective || 'previewDrafts',\n ignoreBrowserTokenWarning: true,\n })\n\n sanity.query = ({query, params}) => {\n return sanity.client.fetch(query, params)\n }\n }\n }\n\n return sanity\n}\n\nexport function isPreviewModeEnabled(\n preview?: Sanity['preview']\n): preview is {session: PreviewSession; projectId: string; dataset: string; token: string} {\n // @ts-expect-error\n return Boolean(preview && preview.token && preview.token !== null)\n}\n\n/**\n * Create an SHA-256 hash as a hex string\n * @see https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest#converting_a_digest_to_a_hex_string\n */\nexport async function sha256(message: string): Promise<string> {\n // encode as UTF-8\n const messageBuffer = await new TextEncoder().encode(message)\n // hash the message\n const hashBuffer = await crypto.subtle.digest('SHA-256', messageBuffer)\n // convert bytes to hex string\n return Array.from(new Uint8Array(hashBuffer))\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')\n}\n\n/**\n * Hash query and its parameters for use as cache key\n * NOTE: Oxygen deployment will break if the cache key is long or contains `\\n`\n */\nfunction hashQuery(\n query: useSanityQuery['query'],\n params: useSanityQuery['params']\n): Promise<string> {\n let hash = query\n\n if (params !== null) {\n hash += JSON.stringify(params)\n }\n\n return sha256(hash)\n}\n","import {createContext, useContext} from 'react'\n\nexport const PreviewContext = createContext<{projectId: string} | undefined>(undefined)\n\n/** TODO: needs inline documentation */\nexport const usePreviewContext = () => useContext(PreviewContext)\n","/* eslint-disable react/require-default-props */\nimport type {LiveQueryProviderProps} from '@sanity/preview-kit'\nimport {type ClientConfig, createClient} from '@sanity/preview-kit/client'\nimport {lazy, type ReactNode, Suspense, useEffect, useState, useTransition} from 'react'\n\nimport {PreviewContext} from './context'\n\nconst LiveQueryProvider = lazy(() =>\n import('@sanity/preview-kit').then((m) => ({default: m.LiveQueryProvider}))\n)\n\ntype SanityPreviewProps = Omit<LiveQueryProviderProps, 'client'> & {\n fallback?: ReactNode\n previewConfig?: ClientConfig\n}\n\n/**\n * TODO: inline documentation\n * @see https://www.sanity.io/docs/preview-content-on-site\n */\nexport function PreviewProvider(props: SanityPreviewProps) {\n const {children, previewConfig, fallback = children, ...rest} = props\n\n const [, startTransition] = useTransition()\n const [hydrated, setHydrated] = useState(false)\n useEffect(() => startTransition(() => setHydrated(true)), [])\n\n if (!hydrated || !previewConfig || !previewConfig.projectId) {\n return children\n }\n\n const client = createClient(previewConfig)\n\n return (\n <PreviewContext.Provider value={{projectId: previewConfig.projectId}}>\n <Suspense fallback={fallback}>\n <LiveQueryProvider {...rest} client={client}>\n {children}\n </LiveQueryProvider>\n </Suspense>\n </PreviewContext.Provider>\n )\n}\n","import {createCookieSessionStorage, type Session, type SessionStorage} from '@shopify/remix-oxygen'\n\n/**\n * TODO: needs inline documentation\n */\nexport class PreviewSession {\n #sessionStorage: SessionStorage\n #session: Session\n\n constructor(sessionStorage: SessionStorage, session: Session) {\n this.#sessionStorage = sessionStorage\n this.#session = session\n }\n\n static async init(request: Request, secrets: string[]): Promise<PreviewSession> {\n const storage = createCookieSessionStorage({\n cookie: {\n name: '__preview',\n httpOnly: true,\n sameSite: true,\n secrets,\n },\n })\n\n const session = await storage.getSession(request.headers.get('Cookie'))\n\n return new this(storage, session)\n }\n\n has(key: string): boolean {\n return this.#session.has(key)\n }\n\n // get(key: string) {\n // return this.session.get(key);\n // }\n\n destroy(): Promise<string> {\n return this.#sessionStorage.destroySession(this.#session)\n }\n\n // unset(key: string) {\n // this.session.unset(key);\n // }\n\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n set(key: string, value: any): void {\n this.#session.set(key, value)\n }\n\n commit(): Promise<string> {\n return this.#sessionStorage.commitSession(this.#session)\n }\n}\n","/* eslint-disable react/require-default-props */\nimport type {QueryParams} from '@sanity/client'\nimport {useLiveQuery} from '@sanity/preview-kit'\nimport {type ReactNode} from 'react'\n\nimport {usePreviewContext} from './context'\n\ntype PreviewProps<T> = {\n data: T\n children: ReactNode | ((data?: T | null) => ReactNode)\n query?: string | null\n params?: QueryParams\n}\n\n/**\n * Component to use for rendering in preview mode\n *\n * When provided a Sanity query and render prop,\n * changes will be streamed in the client\n */\nexport function SanityPreview<T = unknown>(props: PreviewProps<T>) {\n const {data, children, query, params} = props\n const isPreview = Boolean(usePreviewContext())\n\n if (typeof children !== 'function') {\n return children\n }\n\n if (isPreview && query) {\n return (\n <ResolvePreview<typeof data> query={query} params={params} initialData={data}>\n {children}\n </ResolvePreview>\n )\n }\n\n return <>{children(data)}</>\n}\n\ntype ResolvePreviewProps<T> = {\n initialData?: T | null\n query: string\n params?: QueryParams\n children: (data?: T | null) => ReactNode\n}\n\n/**\n * Subscribe to live preview and delegate rendering to consumer\n */\nfunction ResolvePreview<T = unknown>(props: ResolvePreviewProps<T>) {\n const {initialData, query, params, children} = props\n const [data] = useLiveQuery(initialData, query, params)\n\n return <>{children(data)}</>\n}\n","import type {ClientConfig} from '@sanity/client'\n\nimport {isPreviewModeEnabled, Sanity} from '../client'\n\n/** TODO: inline documentation */\nexport function getPreview<T extends {sanity: Sanity}>(context: T): ClientConfig | undefined {\n return isPreviewModeEnabled(context.sanity.preview)\n ? {\n ...context.sanity.client.config(),\n }\n : undefined\n}\n"],"names":["isPreviewModeEnabled","preview","Boolean","token","async","sha256","message","messageBuffer","TextEncoder","encode","hashBuffer","crypto","subtle","digest","Array","from","Uint8Array","map","b","toString","padStart","join","PreviewContext","createContext","usePreviewContext","useContext","LiveQueryProvider","lazy","import","then","m","default","_sessionStorage","_session","ResolvePreview","props","initialData","query","params","children","data","useLiveQuery","jsx","Fragment","WeakMap","exports","PreviewProvider","previewConfig","fallback","rest","startTransition","useTransition","hydrated","setHydrated","useState","useEffect","projectId","client","createClient","Provider","value","Suspense","PreviewSession","constructor","sessionStorage","session","__privateAdd","this","__privateSet","static","request","secrets","storage","createCookieSessionStorage","cookie","name","httpOnly","sameSite","getSession","headers","get","has","key","__privateGet","destroy","destroySession","set","commit","commitSession","SanityPreview","isPreview","createSanityClient","options","cache","waitUntil","config","sanity","strategy","CacheLong","_ref","queryHash","hash","JSON","stringify","hashQuery","createWithCache_unstable","withCache","fetch","dataset","withConfig","useCdn","perspective","ignoreBrowserTokenWarning","_ref2","getPreview","context"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createClient as e}from"@sanity/client";import{createWithCache_unstable as t,CacheLong as r}from"@shopify/hydrogen";import{createContext as i,useContext as n,lazy as o,useTransition as a,useState as s,useEffect as c,Suspense as p}from"react";import{jsx as l,Fragment as d}from"react/jsx-runtime";import{createCookieSessionStorage as h}from"@shopify/remix-oxygen";import{useLiveQuery as u}from"@sanity/preview-kit";function f(i){const{cache:n,waitUntil:o,preview:a,config:s}=i,c={client:e(s),async query(e){let{query:i,params:a,cache:s=r()}=e;const p=await function(e,t){let r=e;null!==t&&(r+=JSON.stringify(t));return y(r)}(i,a);return t({cache:n,waitUntil:o})(p,s,(()=>c.client.fetch(i,a)))}};return a&&(c.preview={session:a.session},a.session.has("projectId")&&(c.preview={...c.preview,projectId:s.projectId,dataset:s.dataset,token:a.token},c.client=c.client.withConfig({useCdn:!1,token:a.token,perspective:a.perspective||"previewDrafts",ignoreBrowserTokenWarning:!0}),c.query=e=>{let{query:t,params:r}=e;return c.client.fetch(t,r)})),c}function m(e){return Boolean(e&&e.token&&null!==e.token)}async function y(e){const t=await(new TextEncoder).encode(e),r=await crypto.subtle.digest("SHA-256",t);return Array.from(new Uint8Array(r)).map((e=>e.toString(16).padStart(2,"0"))).join("")}const w=i(void 0),v=()=>n(w);function k(e){return m(e.sanity.preview)?{...e.sanity.client.config()}:void 0}const g=o((()=>import("@sanity/preview-kit").then((e=>({default:e.LiveQueryProvider})))));function S(t){const{children:r,previewConfig:i,fallback:n=r,...o}=t,[,d]=a(),[h,u]=s(!1);if(c((()=>d((()=>u(!0)))),[]),!h||!i||!i.projectId)return r;const f=e(i);return l(w.Provider,{value:{projectId:i.projectId},children:l(p,{fallback:n,children:l(g,{...o,client:f,children:r})})})}var j,q,C=(e,t,r)=>{if(!t.has(e))throw TypeError("Cannot "+r)},I=(e,t,r)=>(C(e,t,"read from private field"),r?r.call(e):t.get(e)),x=(e,t,r)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,r)},b=(e,t,r,i)=>(C(e,t,"write to private field"),i?i.call(e,r):t.set(e,r),r);class T{constructor(e,t){x(this,j,void 0),x(this,q,void 0),b(this,j,e),b(this,q,t)}static async init(e,t){const r=h({cookie:{name:"__preview",httpOnly:!0,sameSite:!0,secrets:t}}),i=await r.getSession(e.headers.get("Cookie"));return new this(r,i)}has(e){return I(this,q).has(e)}destroy(){return I(this,j).destroySession(I(this,q))}set(e,t){I(this,q).set(e,t)}commit(){return I(this,j).commitSession(I(this,q))}}function W(e){const{data:t,children:r,query:i,params:n}=e,o=Boolean(v());return"function"!=typeof r?r:o&&i?l(A,{query:i,params:n,initialData:t,children:r}):l(d,{children:r(t)})}function A(e){const{initialData:t,query:r,params:i,children:n}=e,[o]=u(t,r,i);return l(d,{children:n(o)})}j=new WeakMap,q=new WeakMap;export{S as PreviewProvider,T as PreviewSession,W as SanityPreview,f as createSanityClient,k as getPreview,m as isPreviewModeEnabled,y as sha256,v as usePreviewContext};//# sourceMappingURL=index.mjs.map
|
|
1
|
+
import{createClient as e}from"@sanity/preview-kit/client";import{createWithCache_unstable as t,CacheLong as r}from"@shopify/hydrogen";import{createContext as i,useContext as n,lazy as o,useTransition as a,useState as s,useEffect as c,Suspense as p}from"react";import{jsx as l,Fragment as d}from"react/jsx-runtime";import{createCookieSessionStorage as h}from"@shopify/remix-oxygen";import{useLiveQuery as u}from"@sanity/preview-kit";function f(i){const{cache:n,waitUntil:o,preview:a,config:s}=i,c={client:e(s),async query(e){let{query:i,params:a,cache:s=r()}=e;const p=await function(e,t){let r=e;null!==t&&(r+=JSON.stringify(t));return y(r)}(i,a);return t({cache:n,waitUntil:o})(p,s,(()=>c.client.fetch(i,a)))}};return a&&(c.preview={session:a.session},a.session.has("projectId")&&(c.preview={...c.preview,projectId:s.projectId,dataset:s.dataset,token:a.token},c.client=c.client.withConfig({useCdn:!1,token:a.token,perspective:a.perspective||"previewDrafts",ignoreBrowserTokenWarning:!0}),c.query=e=>{let{query:t,params:r}=e;return c.client.fetch(t,r)})),c}function m(e){return Boolean(e&&e.token&&null!==e.token)}async function y(e){const t=await(new TextEncoder).encode(e),r=await crypto.subtle.digest("SHA-256",t);return Array.from(new Uint8Array(r)).map((e=>e.toString(16).padStart(2,"0"))).join("")}const w=i(void 0),v=()=>n(w);function k(e){return m(e.sanity.preview)?{...e.sanity.client.config()}:void 0}const g=o((()=>import("@sanity/preview-kit").then((e=>({default:e.LiveQueryProvider})))));function S(t){const{children:r,previewConfig:i,fallback:n=r,...o}=t,[,d]=a(),[h,u]=s(!1);if(c((()=>d((()=>u(!0)))),[]),!h||!i||!i.projectId)return r;const f=e(i);return l(w.Provider,{value:{projectId:i.projectId},children:l(p,{fallback:n,children:l(g,{...o,client:f,children:r})})})}var j,q,C=(e,t,r)=>{if(!t.has(e))throw TypeError("Cannot "+r)},I=(e,t,r)=>(C(e,t,"read from private field"),r?r.call(e):t.get(e)),x=(e,t,r)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,r)},b=(e,t,r,i)=>(C(e,t,"write to private field"),i?i.call(e,r):t.set(e,r),r);class T{constructor(e,t){x(this,j,void 0),x(this,q,void 0),b(this,j,e),b(this,q,t)}static async init(e,t){const r=h({cookie:{name:"__preview",httpOnly:!0,sameSite:!0,secrets:t}}),i=await r.getSession(e.headers.get("Cookie"));return new this(r,i)}has(e){return I(this,q).has(e)}destroy(){return I(this,j).destroySession(I(this,q))}set(e,t){I(this,q).set(e,t)}commit(){return I(this,j).commitSession(I(this,q))}}function W(e){const{data:t,children:r,query:i,params:n}=e,o=Boolean(v());return"function"!=typeof r?r:o&&i?l(A,{query:i,params:n,initialData:t,children:r}):l(d,{children:r(t)})}function A(e){const{initialData:t,query:r,params:i,children:n}=e,[o]=u(t,r,i);return l(d,{children:n(o)})}j=new WeakMap,q=new WeakMap;export{S as PreviewProvider,T as PreviewSession,W as SanityPreview,f as createSanityClient,k as getPreview,m as isPreviewModeEnabled,y as sha256,v as usePreviewContext};//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/client.ts","../src/preview/context.tsx","../src/preview/getPreview.ts","../src/preview/PreviewProvider.tsx","../src/preview/PreviewSession.ts","../src/preview/SanityPreview.tsx"],"sourcesContent":["import {\n type ClientConfig,\n type ClientPerspective,\n createClient,\n type QueryParams,\n type SanityClient,\n} from '@sanity/client'\n// eslint-disable-next-line camelcase\nimport {CacheLong, createWithCache_unstable} from '@shopify/hydrogen'\n\nimport type {PreviewSession} from './preview'\nimport type {CachingStrategy, EnvironmentOptions} from './types'\n\ntype CreateSanityClientOptions = EnvironmentOptions & {\n config: ClientConfig & Required<Pick<ClientConfig, 'projectId' | 'dataset'>>\n preview?: {\n session: PreviewSession\n token: string\n perspective?: ClientPerspective\n }\n}\n\ntype useSanityQuery = {\n query: string\n params?: QueryParams\n cache?: CachingStrategy\n}\n\nexport type Sanity = {\n client: SanityClient\n preview?:\n | {session: PreviewSession; projectId: string; dataset: string; token: string}\n | {session: PreviewSession}\n query<T>(options: useSanityQuery): Promise<T>\n}\n\n/**\n * Create Sanity provider with API client.\n */\nexport function createSanityClient(options: CreateSanityClientOptions): Sanity {\n const {cache, waitUntil, preview, config} = options\n\n const sanity: Sanity = {\n client: createClient(config),\n async query<T = any>({query, params, cache: strategy = CacheLong()}: useSanityQuery) {\n const queryHash = await hashQuery(query, params)\n const withCache = createWithCache_unstable<T>({\n cache,\n waitUntil,\n })\n\n return withCache(queryHash, strategy, () => sanity.client.fetch(query, params))\n },\n }\n\n if (preview) {\n sanity.preview = {session: preview.session}\n\n if (preview.session.has('projectId')) {\n sanity.preview = {\n ...sanity.preview,\n projectId: config.projectId,\n dataset: config.dataset,\n token: preview.token,\n }\n\n sanity.client = sanity.client.withConfig({\n useCdn: false,\n token: preview.token,\n perspective: preview.perspective || 'previewDrafts',\n ignoreBrowserTokenWarning: true,\n })\n\n sanity.query = ({query, params}) => {\n return sanity.client.fetch(query, params)\n }\n }\n }\n\n return sanity\n}\n\nexport function isPreviewModeEnabled(\n preview?: Sanity['preview']\n): preview is {session: PreviewSession; projectId: string; dataset: string; token: string} {\n // @ts-expect-error\n return Boolean(preview && preview.token && preview.token !== null)\n}\n\n/**\n * Create an SHA-256 hash as a hex string\n * @see https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest#converting_a_digest_to_a_hex_string\n */\nexport async function sha256(message: string): Promise<string> {\n // encode as UTF-8\n const messageBuffer = await new TextEncoder().encode(message)\n // hash the message\n const hashBuffer = await crypto.subtle.digest('SHA-256', messageBuffer)\n // convert bytes to hex string\n return Array.from(new Uint8Array(hashBuffer))\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')\n}\n\n/**\n * Hash query and its parameters for use as cache key\n * NOTE: Oxygen deployment will break if the cache key is long or contains `\\n`\n */\nfunction hashQuery(\n query: useSanityQuery['query'],\n params: useSanityQuery['params']\n): Promise<string> {\n let hash = query\n\n if (params !== null) {\n hash += JSON.stringify(params)\n }\n\n return sha256(hash)\n}\n","import {createContext, useContext} from 'react'\n\nexport const PreviewContext = createContext<{projectId: string} | undefined>(undefined)\n\n/** TODO: needs inline documentation */\nexport const usePreviewContext = () => useContext(PreviewContext)\n","import type {ClientConfig} from '@sanity/client'\n\nimport {isPreviewModeEnabled, Sanity} from '../client'\n\n/** TODO: inline documentation */\nexport function getPreview<T extends {sanity: Sanity}>(context: T): ClientConfig | undefined {\n return isPreviewModeEnabled(context.sanity.preview)\n ? {\n ...context.sanity.client.config(),\n }\n : undefined\n}\n","/* eslint-disable react/require-default-props */\nimport {type ClientConfig, createClient} from '@sanity/client'\nimport type {LiveQueryProviderProps} from '@sanity/preview-kit'\nimport {lazy, type ReactNode, Suspense, useEffect, useState, useTransition} from 'react'\n\nimport {PreviewContext} from './context'\n\nconst LiveQueryProvider = lazy(() =>\n import('@sanity/preview-kit').then((m) => ({default: m.LiveQueryProvider}))\n)\n\ntype SanityPreviewProps = Omit<LiveQueryProviderProps, 'client'> & {\n fallback?: ReactNode\n previewConfig?: ClientConfig\n}\n\n/**\n * TODO: inline documentation\n * @see https://www.sanity.io/docs/preview-content-on-site\n */\nexport function PreviewProvider(props: SanityPreviewProps) {\n const {children, previewConfig, fallback = children, ...rest} = props\n\n const [, startTransition] = useTransition()\n const [hydrated, setHydrated] = useState(false)\n useEffect(() => startTransition(() => setHydrated(true)), [])\n\n if (!hydrated || !previewConfig || !previewConfig.projectId) {\n return children\n }\n\n const client = createClient(previewConfig)\n\n return (\n <PreviewContext.Provider value={{projectId: previewConfig.projectId}}>\n <Suspense fallback={fallback}>\n <LiveQueryProvider {...rest} client={client}>\n {children}\n </LiveQueryProvider>\n </Suspense>\n </PreviewContext.Provider>\n )\n}\n","import {createCookieSessionStorage, type Session, type SessionStorage} from '@shopify/remix-oxygen'\n\n/**\n * TODO: needs inline documentation\n */\nexport class PreviewSession {\n #sessionStorage: SessionStorage\n #session: Session\n\n constructor(sessionStorage: SessionStorage, session: Session) {\n this.#sessionStorage = sessionStorage\n this.#session = session\n }\n\n static async init(request: Request, secrets: string[]): Promise<PreviewSession> {\n const storage = createCookieSessionStorage({\n cookie: {\n name: '__preview',\n httpOnly: true,\n sameSite: true,\n secrets,\n },\n })\n\n const session = await storage.getSession(request.headers.get('Cookie'))\n\n return new this(storage, session)\n }\n\n has(key: string): boolean {\n return this.#session.has(key)\n }\n\n // get(key: string) {\n // return this.session.get(key);\n // }\n\n destroy(): Promise<string> {\n return this.#sessionStorage.destroySession(this.#session)\n }\n\n // unset(key: string) {\n // this.session.unset(key);\n // }\n\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n set(key: string, value: any): void {\n this.#session.set(key, value)\n }\n\n commit(): Promise<string> {\n return this.#sessionStorage.commitSession(this.#session)\n }\n}\n","/* eslint-disable react/require-default-props */\nimport type {QueryParams} from '@sanity/client'\nimport {useLiveQuery} from '@sanity/preview-kit'\nimport {type ReactNode} from 'react'\n\nimport {usePreviewContext} from './context'\n\ntype PreviewProps<T> = {\n data: T\n children: ReactNode | ((data?: T | null) => ReactNode)\n query?: string | null\n params?: QueryParams\n}\n\n/**\n * Component to use for rendering in preview mode\n *\n * When provided a Sanity query and render prop,\n * changes will be streamed in the client\n */\nexport function SanityPreview<T = unknown>(props: PreviewProps<T>) {\n const {data, children, query, params} = props\n const isPreview = Boolean(usePreviewContext())\n\n if (typeof children !== 'function') {\n return children\n }\n\n if (isPreview && query) {\n return (\n <ResolvePreview<typeof data> query={query} params={params} initialData={data}>\n {children}\n </ResolvePreview>\n )\n }\n\n return <>{children(data)}</>\n}\n\ntype ResolvePreviewProps<T> = {\n initialData?: T | null\n query: string\n params?: QueryParams\n children: (data?: T | null) => ReactNode\n}\n\n/**\n * Subscribe to live preview and delegate rendering to consumer\n */\nfunction ResolvePreview<T = unknown>(props: ResolvePreviewProps<T>) {\n const {initialData, query, params, children} = props\n const [data] = useLiveQuery(initialData, query, params)\n\n return <>{children(data)}</>\n}\n"],"names":["createSanityClient","options","cache","waitUntil","preview","config","sanity","client","createClient","async","query","params","strategy","CacheLong","_ref","queryHash","hash","JSON","stringify","sha256","hashQuery","createWithCache_unstable","withCache","fetch","session","has","projectId","dataset","token","withConfig","useCdn","perspective","ignoreBrowserTokenWarning","_ref2","isPreviewModeEnabled","Boolean","message","messageBuffer","TextEncoder","encode","hashBuffer","crypto","subtle","digest","Array","from","Uint8Array","map","b","toString","padStart","join","PreviewContext","createContext","usePreviewContext","useContext","getPreview","context","LiveQueryProvider","lazy","import","then","m","default","PreviewProvider","props","children","previewConfig","fallback","rest","startTransition","useTransition","hydrated","setHydrated","useState","useEffect","jsx","Provider","value","Suspense","_sessionStorage","_session","PreviewSession","constructor","sessionStorage","__privateAdd","this","__privateSet","static","request","secrets","storage","createCookieSessionStorage","cookie","name","httpOnly","sameSite","getSession","headers","get","key","__privateGet","destroy","destroySession","set","commit","commitSession","SanityPreview","data","isPreview","ResolvePreview","initialData","Fragment","useLiveQuery","WeakMap"],"mappings":"oaAuCO,SAASA,EAAmBC,GACjC,MAAMC,MAACA,EAAAC,UAAOA,EAAWC,QAAAA,EAAAC,OAASA,GAAUJ,EAEtCK,EAAiB,CACrBC,OAAQC,EAAaH,GACrBI,eAAqF,IAAhEC,MAACA,EAAAC,OAAOA,EAAQT,MAAOU,EAAWC,KAA8BC,EACnF,MAAMC,QA+DZ,SACEL,EACAC,GAEA,IAAIK,EAAON,EAEI,OAAXC,IACMK,GAAAC,KAAKC,UAAUP,IAGzB,OAAOQ,EAAOH,EAChB,CA1E8BI,CAAUV,EAAOC,GAMlC,OALWU,EAA4B,CAC5CnB,QACAC,aAGKmB,CAAUP,EAAWH,GAAU,IAAMN,EAAOC,OAAOgB,MAAMb,EAAOC,IACzE,GA2BK,OAxBHP,IACFE,EAAOF,QAAU,CAACoB,QAASpB,EAAQoB,SAE/BpB,EAAQoB,QAAQC,IAAI,eACtBnB,EAAOF,QAAU,IACZE,EAAOF,QACVsB,UAAWrB,EAAOqB,UAClBC,QAAStB,EAAOsB,QAChBC,MAAOxB,EAAQwB,OAGVtB,EAAAC,OAASD,EAAOC,OAAOsB,WAAW,CACvCC,QAAQ,EACRF,MAAOxB,EAAQwB,MACfG,YAAa3B,EAAQ2B,aAAe,gBACpCC,2BAA2B,IAG7B1B,EAAOI,MAAQuB,IAAqB,IAApBvB,MAACA,EAAAC,OAAOA,GAAYsB,EAClC,OAAO3B,EAAOC,OAAOgB,MAAMb,EAAOC,EAAM,IAKvCL,CACT,CAEO,SAAS4B,EACd9B,GAGA,OAAO+B,QAAQ/B,GAAWA,EAAQwB,OAA2B,OAAlBxB,EAAQwB,MACrD,CAMAnB,eAAsBU,EAAOiB,GAE3B,MAAMC,QAAsB,IAAIC,aAAcC,OAAOH,GAE/CI,QAAmBC,OAAOC,OAAOC,OAAO,UAAWN,GAElD,OAAAO,MAAMC,KAAK,IAAIC,WAAWN,IAC9BO,KAAKC,GAAMA,EAAEC,SAAS,IAAIC,SAAS,EAAG,OACtCC,KAAK,GACV,CCpGa,MAAAC,EAAiBC,OAA+C,GAGhEC,EAAoBA,IAAMC,EAAWH,GCA3C,SAASI,EAAuCC,GACrD,OAAOvB,EAAqBuB,EAAQnD,OAAOF,SACvC,IACKqD,EAAQnD,OAAOC,OAAOF,eAE3B,CACN,CCJA,MAAMqD,EAAoBC,GAAK,IAC7BC,OAAO,uBAAuBC,MAAMC,IAAO,CAACC,QAASD,EAAEJ,wBAYlD,SAASM,EAAgBC,GAC9B,MAAMC,SAACA,EAAUC,cAAAA,EAAAC,SAAeA,EAAWF,KAAaG,GAAQJ,IAEvDK,GAAmBC,KACrBC,EAAUC,GAAeC,GAAS,GAGzC,GAFUC,GAAA,IAAML,GAAgB,IAAMG,GAAY,MAAQ,KAErDD,IAAaL,IAAkBA,EAAczC,UACzC,OAAAwC,EAGH,MAAA3D,EAASC,EAAa2D,GAG1B,OAAAS,EAACxB,EAAeyB,SAAf,CAAwBC,MAAO,CAACpD,UAAWyC,EAAczC,WACxDwC,WAACa,EAAS,CAAAX,WACRF,WAACR,EAAmB,IAAGW,EAAM9D,SAC1B2D,gBAKX,KC1CAc,EAAAC,6UAKO,MAAMC,EAIXC,YAAYC,EAAgC5D,GAH5C6D,EAAAC,KAAAN,OAAA,GACAK,EAAAC,KAAAL,OAAA,GAGEM,EAAAD,KAAKN,EAAkBI,GACvBG,EAAAD,KAAKL,EAAWzD,EAClB,CAEAgE,kBAAkBC,EAAkBC,GAClC,MAAMC,EAAUC,EAA2B,CACzCC,OAAQ,CACNC,KAAM,YACNC,UAAU,EACVC,UAAU,EACVN,aAIElE,QAAgBmE,EAAQM,WAAWR,EAAQS,QAAQC,IAAI,WAEtD,OAAA,IAAIb,KAAKK,EAASnE,EAC3B,CAEAC,IAAI2E,GACK,OAAAC,EAAAf,KAAKL,GAASxD,IAAI2E,EAC3B,CAMAE,UACE,OAAOD,EAAKf,KAAAN,GAAgBuB,eAAeF,EAAAf,KAAKL,GAClD,CAOAuB,IAAIJ,EAAatB,GACVuB,EAAAf,KAAAL,GAASuB,IAAIJ,EAAKtB,EACzB,CAEA2B,SACE,OAAOJ,EAAKf,KAAAN,GAAgB0B,cAAcL,EAAAf,KAAKL,GACjD,EChCK,SAAS0B,EAA2B1C,GACzC,MAAM2C,KAACA,EAAA1C,SAAMA,EAAUxD,MAAAA,EAAAC,OAAOA,GAAUsD,EAClC4C,EAAY1E,QAAQmB,KAEtB,MAAoB,mBAAbY,EACFA,EAGL2C,GAAanG,IAEZoG,EAA4B,CAAApG,QAAcC,SAAgBoG,YAAaH,EACrE1C,aAKAU,EAAAoC,EAAA,CAAG9C,SAASA,EAAA0C,IACrB,CAYA,SAASE,EAA4B7C,GACnC,MAAM8C,YAACA,EAAArG,MAAaA,EAAOC,OAAAA,EAAAuD,SAAQA,GAAYD,GACxC2C,GAAQK,EAAaF,EAAarG,EAAOC,GAEzC,OAAAiE,EAAAoC,EAAA,CAAG9C,SAASA,EAAA0C,IACrB,CDhDE5B,EAAA,IAAAkC,QACAjC,EAAA,IAAAiC,eC+CFlD,qBAAAkB,oBAAAyB,mBAAA3G,wBAAAwD,gBAAAtB,0BAAAf,YAAAmC"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/client.ts","../src/preview/context.tsx","../src/preview/getPreview.ts","../src/preview/PreviewProvider.tsx","../src/preview/PreviewSession.ts","../src/preview/SanityPreview.tsx"],"sourcesContent":["import {\n type ClientConfig,\n type ClientPerspective,\n createClient,\n type QueryParams,\n type SanityClient,\n} from '@sanity/preview-kit/client'\n// eslint-disable-next-line camelcase\nimport {CacheLong, createWithCache_unstable} from '@shopify/hydrogen'\n\nimport type {PreviewSession} from './preview'\nimport type {CachingStrategy, EnvironmentOptions} from './types'\n\ntype CreateSanityClientOptions = EnvironmentOptions & {\n config: ClientConfig & Required<Pick<ClientConfig, 'projectId' | 'dataset'>>\n preview?: {\n session: PreviewSession\n token: string\n perspective?: ClientPerspective\n }\n}\n\ntype useSanityQuery = {\n query: string\n params?: QueryParams\n cache?: CachingStrategy\n}\n\nexport type Sanity = {\n client: SanityClient\n preview?:\n | {session: PreviewSession; projectId: string; dataset: string; token: string}\n | {session: PreviewSession}\n query<T>(options: useSanityQuery): Promise<T>\n}\n\n/**\n * Create Sanity provider with API client.\n */\nexport function createSanityClient(options: CreateSanityClientOptions): Sanity {\n const {cache, waitUntil, preview, config} = options\n\n const sanity: Sanity = {\n client: createClient(config),\n async query<T = any>({query, params, cache: strategy = CacheLong()}: useSanityQuery) {\n const queryHash = await hashQuery(query, params)\n const withCache = createWithCache_unstable<T>({\n cache,\n waitUntil,\n })\n\n return withCache(queryHash, strategy, () => sanity.client.fetch(query, params))\n },\n }\n\n if (preview) {\n sanity.preview = {session: preview.session}\n\n if (preview.session.has('projectId')) {\n sanity.preview = {\n ...sanity.preview,\n projectId: config.projectId,\n dataset: config.dataset,\n token: preview.token,\n }\n\n sanity.client = sanity.client.withConfig({\n useCdn: false,\n token: preview.token,\n perspective: preview.perspective || 'previewDrafts',\n ignoreBrowserTokenWarning: true,\n })\n\n sanity.query = ({query, params}) => {\n return sanity.client.fetch(query, params)\n }\n }\n }\n\n return sanity\n}\n\nexport function isPreviewModeEnabled(\n preview?: Sanity['preview']\n): preview is {session: PreviewSession; projectId: string; dataset: string; token: string} {\n // @ts-expect-error\n return Boolean(preview && preview.token && preview.token !== null)\n}\n\n/**\n * Create an SHA-256 hash as a hex string\n * @see https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest#converting_a_digest_to_a_hex_string\n */\nexport async function sha256(message: string): Promise<string> {\n // encode as UTF-8\n const messageBuffer = await new TextEncoder().encode(message)\n // hash the message\n const hashBuffer = await crypto.subtle.digest('SHA-256', messageBuffer)\n // convert bytes to hex string\n return Array.from(new Uint8Array(hashBuffer))\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')\n}\n\n/**\n * Hash query and its parameters for use as cache key\n * NOTE: Oxygen deployment will break if the cache key is long or contains `\\n`\n */\nfunction hashQuery(\n query: useSanityQuery['query'],\n params: useSanityQuery['params']\n): Promise<string> {\n let hash = query\n\n if (params !== null) {\n hash += JSON.stringify(params)\n }\n\n return sha256(hash)\n}\n","import {createContext, useContext} from 'react'\n\nexport const PreviewContext = createContext<{projectId: string} | undefined>(undefined)\n\n/** TODO: needs inline documentation */\nexport const usePreviewContext = () => useContext(PreviewContext)\n","import type {ClientConfig} from '@sanity/client'\n\nimport {isPreviewModeEnabled, Sanity} from '../client'\n\n/** TODO: inline documentation */\nexport function getPreview<T extends {sanity: Sanity}>(context: T): ClientConfig | undefined {\n return isPreviewModeEnabled(context.sanity.preview)\n ? {\n ...context.sanity.client.config(),\n }\n : undefined\n}\n","/* eslint-disable react/require-default-props */\nimport type {LiveQueryProviderProps} from '@sanity/preview-kit'\nimport {type ClientConfig, createClient} from '@sanity/preview-kit/client'\nimport {lazy, type ReactNode, Suspense, useEffect, useState, useTransition} from 'react'\n\nimport {PreviewContext} from './context'\n\nconst LiveQueryProvider = lazy(() =>\n import('@sanity/preview-kit').then((m) => ({default: m.LiveQueryProvider}))\n)\n\ntype SanityPreviewProps = Omit<LiveQueryProviderProps, 'client'> & {\n fallback?: ReactNode\n previewConfig?: ClientConfig\n}\n\n/**\n * TODO: inline documentation\n * @see https://www.sanity.io/docs/preview-content-on-site\n */\nexport function PreviewProvider(props: SanityPreviewProps) {\n const {children, previewConfig, fallback = children, ...rest} = props\n\n const [, startTransition] = useTransition()\n const [hydrated, setHydrated] = useState(false)\n useEffect(() => startTransition(() => setHydrated(true)), [])\n\n if (!hydrated || !previewConfig || !previewConfig.projectId) {\n return children\n }\n\n const client = createClient(previewConfig)\n\n return (\n <PreviewContext.Provider value={{projectId: previewConfig.projectId}}>\n <Suspense fallback={fallback}>\n <LiveQueryProvider {...rest} client={client}>\n {children}\n </LiveQueryProvider>\n </Suspense>\n </PreviewContext.Provider>\n )\n}\n","import {createCookieSessionStorage, type Session, type SessionStorage} from '@shopify/remix-oxygen'\n\n/**\n * TODO: needs inline documentation\n */\nexport class PreviewSession {\n #sessionStorage: SessionStorage\n #session: Session\n\n constructor(sessionStorage: SessionStorage, session: Session) {\n this.#sessionStorage = sessionStorage\n this.#session = session\n }\n\n static async init(request: Request, secrets: string[]): Promise<PreviewSession> {\n const storage = createCookieSessionStorage({\n cookie: {\n name: '__preview',\n httpOnly: true,\n sameSite: true,\n secrets,\n },\n })\n\n const session = await storage.getSession(request.headers.get('Cookie'))\n\n return new this(storage, session)\n }\n\n has(key: string): boolean {\n return this.#session.has(key)\n }\n\n // get(key: string) {\n // return this.session.get(key);\n // }\n\n destroy(): Promise<string> {\n return this.#sessionStorage.destroySession(this.#session)\n }\n\n // unset(key: string) {\n // this.session.unset(key);\n // }\n\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n set(key: string, value: any): void {\n this.#session.set(key, value)\n }\n\n commit(): Promise<string> {\n return this.#sessionStorage.commitSession(this.#session)\n }\n}\n","/* eslint-disable react/require-default-props */\nimport type {QueryParams} from '@sanity/client'\nimport {useLiveQuery} from '@sanity/preview-kit'\nimport {type ReactNode} from 'react'\n\nimport {usePreviewContext} from './context'\n\ntype PreviewProps<T> = {\n data: T\n children: ReactNode | ((data?: T | null) => ReactNode)\n query?: string | null\n params?: QueryParams\n}\n\n/**\n * Component to use for rendering in preview mode\n *\n * When provided a Sanity query and render prop,\n * changes will be streamed in the client\n */\nexport function SanityPreview<T = unknown>(props: PreviewProps<T>) {\n const {data, children, query, params} = props\n const isPreview = Boolean(usePreviewContext())\n\n if (typeof children !== 'function') {\n return children\n }\n\n if (isPreview && query) {\n return (\n <ResolvePreview<typeof data> query={query} params={params} initialData={data}>\n {children}\n </ResolvePreview>\n )\n }\n\n return <>{children(data)}</>\n}\n\ntype ResolvePreviewProps<T> = {\n initialData?: T | null\n query: string\n params?: QueryParams\n children: (data?: T | null) => ReactNode\n}\n\n/**\n * Subscribe to live preview and delegate rendering to consumer\n */\nfunction ResolvePreview<T = unknown>(props: ResolvePreviewProps<T>) {\n const {initialData, query, params, children} = props\n const [data] = useLiveQuery(initialData, query, params)\n\n return <>{children(data)}</>\n}\n"],"names":["createSanityClient","options","cache","waitUntil","preview","config","sanity","client","createClient","async","query","params","strategy","CacheLong","_ref","queryHash","hash","JSON","stringify","sha256","hashQuery","createWithCache_unstable","withCache","fetch","session","has","projectId","dataset","token","withConfig","useCdn","perspective","ignoreBrowserTokenWarning","_ref2","isPreviewModeEnabled","Boolean","message","messageBuffer","TextEncoder","encode","hashBuffer","crypto","subtle","digest","Array","from","Uint8Array","map","b","toString","padStart","join","PreviewContext","createContext","usePreviewContext","useContext","getPreview","context","LiveQueryProvider","lazy","import","then","m","default","PreviewProvider","props","children","previewConfig","fallback","rest","startTransition","useTransition","hydrated","setHydrated","useState","useEffect","jsx","Provider","value","Suspense","_sessionStorage","_session","PreviewSession","constructor","sessionStorage","__privateAdd","this","__privateSet","static","request","secrets","storage","createCookieSessionStorage","cookie","name","httpOnly","sameSite","getSession","headers","get","key","__privateGet","destroy","destroySession","set","commit","commitSession","SanityPreview","data","isPreview","ResolvePreview","initialData","Fragment","useLiveQuery","WeakMap"],"mappings":"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"}
|
package/package.json
CHANGED
package/src/client.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable react/require-default-props */
|
|
2
|
-
import {type ClientConfig, createClient} from '@sanity/client'
|
|
3
2
|
import type {LiveQueryProviderProps} from '@sanity/preview-kit'
|
|
3
|
+
import {type ClientConfig, createClient} from '@sanity/preview-kit/client'
|
|
4
4
|
import {lazy, type ReactNode, Suspense, useEffect, useState, useTransition} from 'react'
|
|
5
5
|
|
|
6
6
|
import {PreviewContext} from './context'
|