next-sanity 13.0.0-cache-components.24 → 13.0.0-cache-components.26

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.
@@ -8,12 +8,9 @@ const RefreshOnMount = dynamic(() => import("./RefreshOnMount.js"));
8
8
  const RefreshOnInterval = dynamic(() => import("./RefreshOnInterval.js"));
9
9
  const RefreshOnReconnect = dynamic(() => import("./RefreshOnReconnect.js"));
10
10
  function SanityLive(props) {
11
- const { config, includeAllDocuments = false, action, goAwayAction, reconnectAction, restartAction, welcomeAction, refreshOnMount = false, refreshOnFocus = false, refreshOnReconnect = true, requestTag } = props;
11
+ const { config, includeAllDocuments = false, action, onError, onWelcome = handleWelcome, onReconnect, onRestart, onGoAway = handleGoaway, refreshOnMount = false, refreshOnFocus = false, refreshOnReconnect = true, requestTag } = props;
12
12
  const { projectId, dataset, apiHost, apiVersion, useProjectHostname, token, requestTagPrefix } = config;
13
13
  const actionContext = { includeAllDocuments };
14
- const [error, setError] = useState(null);
15
- if (error) if (isCorsOriginError(error)) throw new Error(`Sanity Live is unable to connect to the Sanity API as the current origin - ${window.origin} - is not in the list of allowed CORS origins for this Sanity Project.${error.addOriginUrl ? ` Add it here: ${error.addOriginUrl}` : ""}`, { cause: error });
16
- else throw error;
17
14
  const client = useMemo(() => createClient({
18
15
  projectId,
19
16
  dataset,
@@ -34,34 +31,35 @@ function SanityLive(props) {
34
31
  useProjectHostname
35
32
  ]);
36
33
  const [refreshOnInterval, setRefreshOnInterval] = useState(false);
34
+ const [error, setError] = useState(null);
35
+ if (error) throw error;
36
+ const handleError = useEffectEvent((error) => {
37
+ if (onError) onError(error, actionContext);
38
+ else startTransition(() => setError(isCorsOriginError(error) ? new Error(`Sanity Live is unable to connect to the Sanity API as the current origin - ${window.origin} - is not in the list of allowed CORS origins for this Sanity Project.${error.addOriginUrl ? ` Add it here: ${error.addOriginUrl}` : ""}`, { cause: error }) : error));
39
+ });
37
40
  const handleLiveEvent = useEffectEvent(async (event) => {
38
41
  switch (event.type) {
39
42
  case "welcome":
40
43
  setRefreshOnInterval(false);
41
- if (welcomeAction) await welcomeAction(event, actionContext);
42
- else if (welcomeAction !== false && process.env.NODE_ENV !== "production") console.info(`<SanityLive> is connected and listening for live events to ${includeAllDocuments ? "all content including drafts and version documents in content releases" : "published content"}`);
44
+ if (onWelcome) await onWelcome(event, actionContext);
43
45
  break;
44
46
  case "message":
45
47
  await action(event, actionContext);
46
48
  break;
47
49
  case "restart":
48
- await restartAction?.(event, actionContext);
50
+ setRefreshOnInterval(false);
51
+ if (onRestart) await onRestart(event, actionContext);
49
52
  break;
50
53
  case "reconnect":
51
- await reconnectAction?.(event, actionContext);
54
+ setRefreshOnInterval(false);
55
+ if (onReconnect) await onReconnect(event, actionContext);
52
56
  break;
53
57
  case "goaway":
54
- if (goAwayAction !== false) {
55
- let interval = goAwayAction ? await goAwayAction(event, actionContext) : 3e4;
56
- if (interval === false) return;
57
- if (Number.isFinite(interval) && interval > 0) {
58
- startTransition(() => setRefreshOnInterval(interval));
59
- if (process.env.NODE_ENV !== "production") console.warn("Sanity Live connection closed, switching to long polling set to a interval of", interval / 1e3, "seconds and the server gave this reason:", event.reason);
60
- }
61
- } else setError(new Error(`Sanity Live connection closed, automatic revalidation is disabled, the server gave this reason: ${event.reason}`, { cause: event }));
58
+ if (onGoAway) await onGoAway(event, actionContext, (interval) => startTransition(() => setRefreshOnInterval(interval)));
59
+ else if (!onGoAway) handleError(new Error(`Sanity Live connection closed, automatic revalidation is disabled, the server gave this reason: ${event.reason}`, { cause: event }));
62
60
  break;
63
61
  default:
64
- setError(new Error(`Unknown live event type`, { cause: event }));
62
+ handleError(new Error(`Unknown live event type`, { cause: event }));
65
63
  break;
66
64
  }
67
65
  });
@@ -71,7 +69,7 @@ function SanityLive(props) {
71
69
  tag: requestTag
72
70
  }).subscribe({
73
71
  next: (event) => startTransition(() => handleLiveEvent(event)),
74
- error: (error) => startTransition(() => setError(error))
72
+ error: handleError
75
73
  });
76
74
  return () => subscription.unsubscribe();
77
75
  }, [
@@ -81,12 +79,20 @@ function SanityLive(props) {
81
79
  ]);
82
80
  return /* @__PURE__ */ jsxs(Fragment, { children: [
83
81
  refreshOnFocus && /* @__PURE__ */ jsx(RefreshOnFocus, {}),
84
- refreshOnInterval && /* @__PURE__ */ jsx(RefreshOnInterval, { interval: refreshOnInterval }),
82
+ refreshOnInterval && Number.isFinite(refreshOnInterval) && refreshOnInterval > 0 && /* @__PURE__ */ jsx(RefreshOnInterval, { interval: refreshOnInterval }),
85
83
  refreshOnMount && /* @__PURE__ */ jsx(RefreshOnMount, {}),
86
84
  refreshOnReconnect && /* @__PURE__ */ jsx(RefreshOnReconnect, {})
87
85
  ] });
88
86
  }
89
87
  SanityLive.displayName = "SanityLiveClientComponent";
88
+ const handleWelcome = (_, { includeAllDocuments }) => {
89
+ console.info(`<SanityLive${includeAllDocuments ? " includeAllDocuments" : ""}> is connected and listening for live events to ${includeAllDocuments ? "all content including drafts and version documents in content releases" : "published content"}`);
90
+ };
91
+ const handleGoaway = (event, { includeAllDocuments }, setLongPollingInterval) => {
92
+ const interval = 3e4;
93
+ console.warn(`<SanityLive${includeAllDocuments ? " includeAllDocuments" : ""}> connection is closed after receiving a 'goaway' event, the server gave this reason:`, event.reason, `Content will now be refreshed every ${interval / 1e3} seconds`);
94
+ setLongPollingInterval(interval);
95
+ };
90
96
  export { SanityLive as default };
91
97
 
92
98
  //# sourceMappingURL=SanityLive.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SanityLive.js","names":[],"sources":["../src/live/client-components/SanityLive.tsx"],"sourcesContent":["import type {SanityLiveActionContext} from '#live/types'\n\nimport {isCorsOriginError} from '#live/isCorsOriginError'\nimport {createClient, type InitializedClientConfig, type LiveEvent} from '@sanity/client'\nimport dynamic from 'next/dynamic'\nimport {startTransition, useEffect, useEffectEvent, useMemo, useState} from 'react'\n\nconst RefreshOnFocus = dynamic(() => import('./RefreshOnFocus'))\nconst RefreshOnMount = dynamic(() => import('./RefreshOnMount'))\nconst RefreshOnInterval = dynamic(() => import('./RefreshOnInterval'))\nconst RefreshOnReconnect = dynamic(() => import('./RefreshOnReconnect'))\n\ninterface SanityClientConfig extends Pick<\n InitializedClientConfig,\n | 'projectId'\n | 'dataset'\n | 'apiHost'\n | 'apiVersion'\n | 'useProjectHostname'\n | 'token'\n | 'requestTagPrefix'\n> {}\n\nexport interface SanityLiveProps {\n config: SanityClientConfig\n includeAllDocuments?: boolean\n requestTag: string\n\n action: (\n event: Extract<LiveEvent, {type: 'message'}>,\n context: SanityLiveActionContext,\n ) => Promise<void>\n reconnectAction?: (\n event: Extract<LiveEvent, {type: 'reconnect'}>,\n context: SanityLiveActionContext,\n ) => Promise<void>\n restartAction?: (\n event: Extract<LiveEvent, {type: 'restart'}>,\n context: SanityLiveActionContext,\n ) => Promise<void>\n welcomeAction?:\n | ((\n event: Extract<LiveEvent, {type: 'welcome'}>,\n context: SanityLiveActionContext,\n ) => Promise<void>)\n | false\n goAwayAction?:\n | ((\n event: Extract<LiveEvent, {type: 'goaway'}>,\n context: SanityLiveActionContext,\n ) => Promise<number | false>)\n | false\n\n refreshOnMount?: boolean\n refreshOnFocus?: boolean\n refreshOnReconnect?: boolean\n}\n\nfunction SanityLive(props: SanityLiveProps): React.JSX.Element | null {\n const {\n config,\n includeAllDocuments = false,\n action,\n goAwayAction,\n reconnectAction,\n restartAction,\n welcomeAction,\n refreshOnMount = false,\n refreshOnFocus = false,\n refreshOnReconnect = true,\n requestTag,\n } = props\n const {projectId, dataset, apiHost, apiVersion, useProjectHostname, token, requestTagPrefix} =\n config\n const actionContext = {includeAllDocuments} satisfies SanityLiveActionContext\n const [error, setError] = useState<unknown>(null)\n if (error) {\n if (isCorsOriginError(error)) {\n throw new Error(\n `Sanity Live is unable to connect to the Sanity API as the current origin - ${window.origin} - is not in the list of allowed CORS origins for this Sanity Project.${error.addOriginUrl ? ` Add it here: ${error.addOriginUrl}` : ''}`,\n {cause: error},\n )\n } else {\n throw error\n }\n }\n\n const client = useMemo(\n () =>\n createClient({\n projectId,\n dataset,\n apiHost,\n apiVersion,\n useProjectHostname,\n ignoreBrowserTokenWarning: true,\n token,\n useCdn: false,\n requestTagPrefix,\n }),\n [apiHost, apiVersion, dataset, projectId, requestTagPrefix, token, useProjectHostname],\n )\n\n const [refreshOnInterval, setRefreshOnInterval] = useState<number | false>(false)\n\n const handleLiveEvent = useEffectEvent(async (event: LiveEvent) => {\n switch (event.type) {\n case 'welcome': {\n // Disable long polling when welcome event is received, this is a no-op if long polling is already disabled\n setRefreshOnInterval(false)\n\n if (welcomeAction) {\n await welcomeAction(event, actionContext)\n } else if (welcomeAction !== false && process.env.NODE_ENV !== 'production') {\n // oxlint-disable-next-line no-console\n console.info(\n `<SanityLive> is connected and listening for live events to ${includeAllDocuments ? 'all content including drafts and version documents in content releases' : 'published content'}`,\n )\n }\n break\n }\n case 'message': {\n await action(event, actionContext)\n break\n }\n case 'restart': {\n await restartAction?.(event, actionContext)\n break\n }\n case 'reconnect': {\n await reconnectAction?.(event, actionContext)\n break\n }\n case 'goaway': {\n if (goAwayAction !== false) {\n let interval = goAwayAction ? await goAwayAction(event, actionContext) : 30_000\n if (interval === false) return\n if (Number.isFinite(interval) && interval > 0) {\n startTransition(() => setRefreshOnInterval(interval))\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n 'Sanity Live connection closed, switching to long polling set to a interval of',\n interval / 1_000,\n 'seconds and the server gave this reason:',\n event.reason,\n )\n }\n }\n } else {\n setError(\n new Error(\n `Sanity Live connection closed, automatic revalidation is disabled, the server gave this reason: ${event.reason}`,\n {cause: event},\n ),\n )\n }\n break\n }\n default:\n setError(new Error(`Unknown live event type`, {cause: event}))\n break\n }\n })\n useEffect(() => {\n const subscription = client.live\n .events({includeDrafts: includeAllDocuments, tag: requestTag})\n .subscribe({\n next: (event) => startTransition(() => handleLiveEvent(event)),\n error: (error) => startTransition(() => setError(error)),\n })\n return () => subscription.unsubscribe()\n }, [client.live, requestTag, includeAllDocuments])\n\n return (\n <>\n {refreshOnFocus && <RefreshOnFocus />}\n {refreshOnInterval && <RefreshOnInterval interval={refreshOnInterval} />}\n {refreshOnMount && <RefreshOnMount />}\n {refreshOnReconnect && <RefreshOnReconnect />}\n </>\n )\n}\n\nSanityLive.displayName = 'SanityLiveClientComponent'\n\nexport default SanityLive\n"],"mappings":";;;;;AAOA,MAAM,iBAAiB,cAAc,OAAO,uBAAoB;AAChE,MAAM,iBAAiB,cAAc,OAAO,uBAAoB;AAChE,MAAM,oBAAoB,cAAc,OAAO,0BAAuB;AACtE,MAAM,qBAAqB,cAAc,OAAO,2BAAwB;AAgDxE,SAAS,WAAW,OAAkD;CACpE,MAAM,EACJ,QACA,sBAAsB,OACtB,QACA,cACA,iBACA,eACA,eACA,iBAAiB,OACjB,iBAAiB,OACjB,qBAAqB,MACrB,eACE;CACJ,MAAM,EAAC,WAAW,SAAS,SAAS,YAAY,oBAAoB,OAAO,qBACzE;CACF,MAAM,gBAAgB,EAAC,qBAAoB;CAC3C,MAAM,CAAC,OAAO,YAAY,SAAkB,KAAK;AACjD,KAAI,MACF,KAAI,kBAAkB,MAAM,CAC1B,OAAM,IAAI,MACR,8EAA8E,OAAO,OAAO,wEAAwE,MAAM,eAAe,iBAAiB,MAAM,iBAAiB,MACjO,EAAC,OAAO,OAAM,CACf;KAED,OAAM;CAIV,MAAM,SAAS,cAEX,aAAa;EACX;EACA;EACA;EACA;EACA;EACA,2BAA2B;EAC3B;EACA,QAAQ;EACR;EACD,CAAC,EACJ;EAAC;EAAS;EAAY;EAAS;EAAW;EAAkB;EAAO;EAAmB,CACvF;CAED,MAAM,CAAC,mBAAmB,wBAAwB,SAAyB,MAAM;CAEjF,MAAM,kBAAkB,eAAe,OAAO,UAAqB;AACjE,UAAQ,MAAM,MAAd;GACE,KAAK;AAEH,yBAAqB,MAAM;AAE3B,QAAI,cACF,OAAM,cAAc,OAAO,cAAc;aAChC,kBAAkB,SAAS,QAAQ,IAAI,aAAa,aAE7D,SAAQ,KACN,8DAA8D,sBAAsB,2EAA2E,sBAChK;AAEH;GAEF,KAAK;AACH,UAAM,OAAO,OAAO,cAAc;AAClC;GAEF,KAAK;AACH,UAAM,gBAAgB,OAAO,cAAc;AAC3C;GAEF,KAAK;AACH,UAAM,kBAAkB,OAAO,cAAc;AAC7C;GAEF,KAAK;AACH,QAAI,iBAAiB,OAAO;KAC1B,IAAI,WAAW,eAAe,MAAM,aAAa,OAAO,cAAc,GAAG;AACzE,SAAI,aAAa,MAAO;AACxB,SAAI,OAAO,SAAS,SAAS,IAAI,WAAW,GAAG;AAC7C,4BAAsB,qBAAqB,SAAS,CAAC;AACrD,UAAI,QAAQ,IAAI,aAAa,aAC3B,SAAQ,KACN,iFACA,WAAW,KACX,4CACA,MAAM,OACP;;UAIL,UACE,IAAI,MACF,mGAAmG,MAAM,UACzG,EAAC,OAAO,OAAM,CACf,CACF;AAEH;GAEF;AACE,aAAS,IAAI,MAAM,2BAA2B,EAAC,OAAO,OAAM,CAAC,CAAC;AAC9D;;GAEJ;AACF,iBAAgB;EACd,MAAM,eAAe,OAAO,KACzB,OAAO;GAAC,eAAe;GAAqB,KAAK;GAAW,CAAC,CAC7D,UAAU;GACT,OAAO,UAAU,sBAAsB,gBAAgB,MAAM,CAAC;GAC9D,QAAQ,UAAU,sBAAsB,SAAS,MAAM,CAAC;GACzD,CAAC;AACJ,eAAa,aAAa,aAAa;IACtC;EAAC,OAAO;EAAM;EAAY;EAAoB,CAAC;AAElD,QACE,qBAAA,UAAA,EAAA,UAAA;EACG,kBAAkB,oBAAC,gBAAA,EAAA,CAAiB;EACpC,qBAAqB,oBAAC,mBAAA,EAAkB,UAAU,mBAAA,CAAqB;EACvE,kBAAkB,oBAAC,gBAAA,EAAA,CAAiB;EACpC,sBAAsB,oBAAC,oBAAA,EAAA,CAAqB;KAC5C;;AAIP,WAAW,cAAc"}
1
+ {"version":3,"file":"SanityLive.js","names":[],"sources":["../src/live/client-components/SanityLive.tsx"],"sourcesContent":["import type {\n SanityLiveAction,\n SanityLiveActionContext,\n SanityLiveOnError,\n SanityLiveOnGoaway,\n SanityLiveOnReconnect,\n SanityLiveOnRestart,\n SanityLiveOnWelcome,\n} from '#live/types'\n\nimport {isCorsOriginError} from '#live/isCorsOriginError'\nimport {createClient, type InitializedClientConfig, type LiveEvent} from '@sanity/client'\nimport dynamic from 'next/dynamic'\nimport {startTransition, useEffect, useEffectEvent, useMemo, useState} from 'react'\n\nconst RefreshOnFocus = dynamic(() => import('./RefreshOnFocus'))\nconst RefreshOnMount = dynamic(() => import('./RefreshOnMount'))\nconst RefreshOnInterval = dynamic(() => import('./RefreshOnInterval'))\nconst RefreshOnReconnect = dynamic(() => import('./RefreshOnReconnect'))\n\ninterface SanityClientConfig extends Pick<\n InitializedClientConfig,\n | 'projectId'\n | 'dataset'\n | 'apiHost'\n | 'apiVersion'\n | 'useProjectHostname'\n | 'token'\n | 'requestTagPrefix'\n> {}\n\nexport interface SanityLiveProps {\n config: SanityClientConfig\n includeAllDocuments?: boolean\n requestTag: string\n\n action: SanityLiveAction\n onError: SanityLiveOnError | false | undefined\n onWelcome: SanityLiveOnWelcome | false | undefined\n onReconnect: SanityLiveOnReconnect | false | undefined\n onRestart: SanityLiveOnRestart | false | undefined\n onGoAway: SanityLiveOnGoaway | false | undefined\n\n refreshOnMount?: boolean\n refreshOnFocus?: boolean\n refreshOnReconnect?: boolean\n}\n\nfunction SanityLive(props: SanityLiveProps): React.JSX.Element | null {\n const {\n config,\n includeAllDocuments = false,\n action,\n onError,\n onWelcome = handleWelcome,\n onReconnect,\n onRestart,\n onGoAway = handleGoaway,\n refreshOnMount = false,\n refreshOnFocus = false,\n refreshOnReconnect = true,\n requestTag,\n } = props\n const {projectId, dataset, apiHost, apiVersion, useProjectHostname, token, requestTagPrefix} =\n config\n const actionContext = {includeAllDocuments} satisfies SanityLiveActionContext\n\n const client = useMemo(\n () =>\n createClient({\n projectId,\n dataset,\n apiHost,\n apiVersion,\n useProjectHostname,\n ignoreBrowserTokenWarning: true,\n token,\n useCdn: false,\n requestTagPrefix,\n }),\n [apiHost, apiVersion, dataset, projectId, requestTagPrefix, token, useProjectHostname],\n )\n\n const [refreshOnInterval, setRefreshOnInterval] = useState<number | false>(false)\n\n const [error, setError] = useState<unknown>(null)\n if (error) {\n // Throw during render to bubble up to the nearest <ErrorBoundary>, if `onError` is provided we won't rethrow\n throw error\n }\n const handleError = useEffectEvent((error: unknown) => {\n if (onError) {\n void onError(error, actionContext)\n } else {\n startTransition(() =>\n setError(\n isCorsOriginError(error)\n ? new Error(\n `Sanity Live is unable to connect to the Sanity API as the current origin - ${window.origin} - is not in the list of allowed CORS origins for this Sanity Project.${error.addOriginUrl ? ` Add it here: ${error.addOriginUrl}` : ''}`,\n {cause: error},\n )\n : error,\n ),\n )\n }\n })\n\n const handleLiveEvent = useEffectEvent(async (event: LiveEvent) => {\n switch (event.type) {\n case 'welcome': {\n // Disable long polling when welcome event is received, this is a no-op if long polling is already disabled\n setRefreshOnInterval(false)\n\n if (onWelcome) {\n await onWelcome(event, actionContext)\n }\n break\n }\n case 'message': {\n await action(event, actionContext)\n break\n }\n case 'restart': {\n // Disable long polling when restart event is received, this is a no-op if long polling is already disabled\n setRefreshOnInterval(false)\n\n if (onRestart) {\n await onRestart(event, actionContext)\n }\n break\n }\n case 'reconnect': {\n // Disable long polling when reconnect event is received, this is a no-op if long polling is already disabled\n setRefreshOnInterval(false)\n\n if (onReconnect) {\n await onReconnect(event, actionContext)\n }\n break\n }\n case 'goaway': {\n if (onGoAway) {\n await onGoAway(event, actionContext, (interval) =>\n startTransition(() => setRefreshOnInterval(interval)),\n )\n } else if (!onGoAway) {\n handleError(\n new Error(\n `Sanity Live connection closed, automatic revalidation is disabled, the server gave this reason: ${event.reason}`,\n {cause: event},\n ),\n )\n }\n break\n }\n default:\n handleError(new Error(`Unknown live event type`, {cause: event}))\n break\n }\n })\n useEffect(() => {\n const subscription = client.live\n .events({includeDrafts: includeAllDocuments, tag: requestTag})\n .subscribe({\n next: (event) => startTransition(() => handleLiveEvent(event)),\n error: handleError,\n })\n return () => subscription.unsubscribe()\n }, [client.live, requestTag, includeAllDocuments])\n\n return (\n <>\n {refreshOnFocus && <RefreshOnFocus />}\n {refreshOnInterval && Number.isFinite(refreshOnInterval) && refreshOnInterval > 0 && (\n <RefreshOnInterval interval={refreshOnInterval} />\n )}\n {refreshOnMount && <RefreshOnMount />}\n {refreshOnReconnect && <RefreshOnReconnect />}\n </>\n )\n}\n\nSanityLive.displayName = 'SanityLiveClientComponent'\n\nexport default SanityLive\n\nconst handleWelcome: SanityLiveOnWelcome = (_, {includeAllDocuments}) => {\n // oxlint-disable-next-line no-console\n console.info(\n `<SanityLive${includeAllDocuments ? ' includeAllDocuments' : ''}> is connected and listening for live events to ${includeAllDocuments ? 'all content including drafts and version documents in content releases' : 'published content'}`,\n )\n}\n\nconst handleGoaway: SanityLiveOnGoaway = (event, {includeAllDocuments}, setLongPollingInterval) => {\n const interval = 30_000\n console.warn(\n `<SanityLive${includeAllDocuments ? ' includeAllDocuments' : ''}> connection is closed after receiving a 'goaway' event, the server gave this reason:`,\n event.reason,\n `Content will now be refreshed every ${interval / 1_000} seconds`,\n )\n setLongPollingInterval(interval)\n}\n"],"mappings":";;;;;AAeA,MAAM,iBAAiB,cAAc,OAAO,uBAAoB;AAChE,MAAM,iBAAiB,cAAc,OAAO,uBAAoB;AAChE,MAAM,oBAAoB,cAAc,OAAO,0BAAuB;AACtE,MAAM,qBAAqB,cAAc,OAAO,2BAAwB;AA8BxE,SAAS,WAAW,OAAkD;CACpE,MAAM,EACJ,QACA,sBAAsB,OACtB,QACA,SACA,YAAY,eACZ,aACA,WACA,WAAW,cACX,iBAAiB,OACjB,iBAAiB,OACjB,qBAAqB,MACrB,eACE;CACJ,MAAM,EAAC,WAAW,SAAS,SAAS,YAAY,oBAAoB,OAAO,qBACzE;CACF,MAAM,gBAAgB,EAAC,qBAAoB;CAE3C,MAAM,SAAS,cAEX,aAAa;EACX;EACA;EACA;EACA;EACA;EACA,2BAA2B;EAC3B;EACA,QAAQ;EACR;EACD,CAAC,EACJ;EAAC;EAAS;EAAY;EAAS;EAAW;EAAkB;EAAO;EAAmB,CACvF;CAED,MAAM,CAAC,mBAAmB,wBAAwB,SAAyB,MAAM;CAEjF,MAAM,CAAC,OAAO,YAAY,SAAkB,KAAK;AACjD,KAAI,MAEF,OAAM;CAER,MAAM,cAAc,gBAAgB,UAAmB;AACrD,MAAI,QACG,SAAQ,OAAO,cAAc;MAElC,uBACE,SACE,kBAAkB,MAAM,GACpB,IAAI,MACF,8EAA8E,OAAO,OAAO,wEAAwE,MAAM,eAAe,iBAAiB,MAAM,iBAAiB,MACjO,EAAC,OAAO,OAAM,CACf,GACD,MACL,CACF;GAEH;CAEF,MAAM,kBAAkB,eAAe,OAAO,UAAqB;AACjE,UAAQ,MAAM,MAAd;GACE,KAAK;AAEH,yBAAqB,MAAM;AAE3B,QAAI,UACF,OAAM,UAAU,OAAO,cAAc;AAEvC;GAEF,KAAK;AACH,UAAM,OAAO,OAAO,cAAc;AAClC;GAEF,KAAK;AAEH,yBAAqB,MAAM;AAE3B,QAAI,UACF,OAAM,UAAU,OAAO,cAAc;AAEvC;GAEF,KAAK;AAEH,yBAAqB,MAAM;AAE3B,QAAI,YACF,OAAM,YAAY,OAAO,cAAc;AAEzC;GAEF,KAAK;AACH,QAAI,SACF,OAAM,SAAS,OAAO,gBAAgB,aACpC,sBAAsB,qBAAqB,SAAS,CAAC,CACtD;aACQ,CAAC,SACV,aACE,IAAI,MACF,mGAAmG,MAAM,UACzG,EAAC,OAAO,OAAM,CACf,CACF;AAEH;GAEF;AACE,gBAAY,IAAI,MAAM,2BAA2B,EAAC,OAAO,OAAM,CAAC,CAAC;AACjE;;GAEJ;AACF,iBAAgB;EACd,MAAM,eAAe,OAAO,KACzB,OAAO;GAAC,eAAe;GAAqB,KAAK;GAAW,CAAC,CAC7D,UAAU;GACT,OAAO,UAAU,sBAAsB,gBAAgB,MAAM,CAAC;GAC9D,OAAO;GACR,CAAC;AACJ,eAAa,aAAa,aAAa;IACtC;EAAC,OAAO;EAAM;EAAY;EAAoB,CAAC;AAElD,QACE,qBAAA,UAAA,EAAA,UAAA;EACG,kBAAkB,oBAAC,gBAAA,EAAA,CAAiB;EACpC,qBAAqB,OAAO,SAAS,kBAAkB,IAAI,oBAAoB,KAC9E,oBAAC,mBAAA,EAAkB,UAAU,mBAAA,CAAqB;EAEnD,kBAAkB,oBAAC,gBAAA,EAAA,CAAiB;EACpC,sBAAsB,oBAAC,oBAAA,EAAA,CAAqB;KAC5C;;AAIP,WAAW,cAAc;AAIzB,MAAM,iBAAsC,GAAG,EAAC,0BAAyB;AAEvE,SAAQ,KACN,cAAc,sBAAsB,yBAAyB,GAAG,kDAAkD,sBAAsB,2EAA2E,sBACpN;;AAGH,MAAM,gBAAoC,OAAO,EAAC,uBAAsB,2BAA2B;CACjG,MAAM,WAAW;AACjB,SAAQ,KACN,cAAc,sBAAsB,yBAAyB,GAAG,wFAChE,MAAM,QACN,uCAAuC,WAAW,IAAM,UACzD;AACD,wBAAuB,SAAS"}
@@ -1,25 +1,16 @@
1
- import { a as SanityLiveActionContext } from "../../types.js";
2
- import { InitializedClientConfig, LiveEvent } from "@sanity/client";
1
+ import { a as SanityLiveAction, c as SanityLiveOnGoaway, d as SanityLiveOnWelcome, l as SanityLiveOnReconnect, s as SanityLiveOnError, u as SanityLiveOnRestart } from "../../types.js";
2
+ import { InitializedClientConfig } from "@sanity/client";
3
3
  interface SanityClientConfig extends Pick<InitializedClientConfig, "projectId" | "dataset" | "apiHost" | "apiVersion" | "useProjectHostname" | "token" | "requestTagPrefix"> {}
4
4
  interface SanityLiveProps {
5
5
  config: SanityClientConfig;
6
6
  includeAllDocuments?: boolean;
7
7
  requestTag: string;
8
- action: (event: Extract<LiveEvent, {
9
- type: "message";
10
- }>, context: SanityLiveActionContext) => Promise<void>;
11
- reconnectAction?: (event: Extract<LiveEvent, {
12
- type: "reconnect";
13
- }>, context: SanityLiveActionContext) => Promise<void>;
14
- restartAction?: (event: Extract<LiveEvent, {
15
- type: "restart";
16
- }>, context: SanityLiveActionContext) => Promise<void>;
17
- welcomeAction?: ((event: Extract<LiveEvent, {
18
- type: "welcome";
19
- }>, context: SanityLiveActionContext) => Promise<void>) | false;
20
- goAwayAction?: ((event: Extract<LiveEvent, {
21
- type: "goaway";
22
- }>, context: SanityLiveActionContext) => Promise<number | false>) | false;
8
+ action: SanityLiveAction;
9
+ onError: SanityLiveOnError | false | undefined;
10
+ onWelcome: SanityLiveOnWelcome | false | undefined;
11
+ onReconnect: SanityLiveOnReconnect | false | undefined;
12
+ onRestart: SanityLiveOnRestart | false | undefined;
13
+ onGoAway: SanityLiveOnGoaway | false | undefined;
23
14
  refreshOnMount?: boolean;
24
15
  refreshOnFocus?: boolean;
25
16
  refreshOnReconnect?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/live/client-components/SanityLive.tsx","../../../src/live/client-components/index.ts"],"mappings":";;UAYU,kBAAA,SAA2B,IAAA,CACnC,uBAAA;AAAA,UAUe,eAAA;EACf,MAAA,EAAQ,kBAAA;EACR,mBAAA;EACA,UAAA;EAEA,MAAA,GACE,KAAA,EAAO,OAAA,CAAQ,SAAA;IAAY,IAAA;EAAA,IAC3B,OAAA,EAAS,uBAAA,KACN,OAAA;EACL,eAAA,IACE,KAAA,EAAO,OAAA,CAAQ,SAAA;IAAY,IAAA;EAAA,IAC3B,OAAA,EAAS,uBAAA,KACN,OAAA;EACL,aAAA,IACE,KAAA,EAAO,OAAA,CAAQ,SAAA;IAAY,IAAA;EAAA,IAC3B,OAAA,EAAS,uBAAA,KACN,OAAA;EACL,aAAA,KAEM,KAAA,EAAO,OAAA,CAAQ,SAAA;IAAY,IAAA;EAAA,IAC3B,OAAA,EAAS,uBAAA,KACN,OAAA;EAET,YAAA,KAEM,KAAA,EAAO,OAAA,CAAQ,SAAA;IAAY,IAAA;EAAA,IAC3B,OAAA,EAAS,uBAAA,KACN,OAAA;EAGT,cAAA;EACA,cAAA;EACA,kBAAA;AAAA;;;AApDuE;cCK5D,UAAA,EAAY,KAAA,CAAM,aAAA,CAAc,eAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/live/client-components/SanityLive.tsx","../../../src/live/client-components/index.ts"],"mappings":";;UAoBU,kBAAA,SAA2B,IAAA,CACnC,uBAAA;AAAA,UAUe,eAAA;EACf,MAAA,EAAQ,kBAAA;EACR,mBAAA;EACA,UAAA;EAEA,MAAA,EAAQ,gBAAA;EACR,OAAA,EAAS,iBAAA;EACT,SAAA,EAAW,mBAAA;EACX,WAAA,EAAa,qBAAA;EACb,SAAA,EAAW,mBAAA;EACX,QAAA,EAAU,kBAAA;EAEV,cAAA;EACA,cAAA;EACA,kBAAA;AAAA;;;AAlCuE;cCH5D,UAAA,EAAY,KAAA,CAAM,aAAA,CAAc,eAAA"}
@@ -17,7 +17,7 @@ function defineLive(config) {
17
17
  useCdn: true
18
18
  });
19
19
  const { token: originalToken, perspective: originalPerspective = "published" } = client.config();
20
- const fetch = async function fetch({ query, params = {}, perspective = originalPerspective, stega = false, tags: customCacheTags = [], requestTag = "next-loader.fetch.cache-components" }) {
20
+ const sanityFetch = async function sanityFetch({ query, params = {}, perspective = originalPerspective, stega = false, tags: customCacheTags = [], requestTag = "next-loader.fetch.cache-components" }) {
21
21
  const useCdn = perspective === "published";
22
22
  const { result, resultSourceMap, syncTags } = await client.fetch(query, await params, {
23
23
  filterResponse: false,
@@ -38,8 +38,8 @@ function defineLive(config) {
38
38
  tags
39
39
  };
40
40
  };
41
- const Live = function Live(props) {
42
- const { includeAllDocuments = false, action = actionUpdateTags, restartAction = actionRefresh, reconnectAction = actionRefresh, goAwayAction, welcomeAction, refreshOnMount = false, refreshOnFocus = false, refreshOnReconnect = false, requestTag = "next-loader.live.cache-components" } = props;
41
+ const SanityLive$2 = function SanityLive$1(props) {
42
+ const { includeAllDocuments = false, action = actionUpdateTags, onReconnect = actionRefresh, onRestart = actionRefresh, onWelcome, onError, onGoAway, refreshOnMount = false, refreshOnFocus = false, refreshOnReconnect = false, requestTag = "next-loader.live.cache-components" } = props;
43
43
  const shouldIncludeDrafts = typeof browserToken === "string" && includeAllDocuments;
44
44
  const { projectId, dataset, apiHost, apiVersion, useProjectHostname, requestTagPrefix } = client.config();
45
45
  const { origin } = new URL(client.getUrl("", false));
@@ -56,20 +56,21 @@ function defineLive(config) {
56
56
  },
57
57
  includeAllDocuments: shouldIncludeDrafts,
58
58
  action,
59
- reconnectAction: reconnectAction === false ? void 0 : reconnectAction,
60
- restartAction: restartAction === false ? void 0 : restartAction,
61
- welcomeAction,
62
- goAwayAction,
59
+ onReconnect,
60
+ onRestart,
61
+ onWelcome,
62
+ onError,
63
+ onGoAway,
63
64
  requestTag,
64
65
  refreshOnMount,
65
66
  refreshOnFocus,
66
67
  refreshOnReconnect
67
68
  });
68
69
  };
69
- Live.displayName = "SanityLiveServerComponent";
70
+ SanityLive$2.displayName = "SanityLiveServerComponent";
70
71
  return {
71
- sanityFetch: fetch,
72
- SanityLive: Live
72
+ sanityFetch,
73
+ SanityLive: SanityLive$2
73
74
  };
74
75
  }
75
76
  export { defineLive, isCorsOriginError, parseTags, resolvePerspectiveFromCookies };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["SanityLiveClientComponent"],"sources":["../../../../src/live/conditions/next-js/defineLive.tsx"],"sourcesContent":["import type {DefinedFetchType, DefinedLiveProps, DefineLiveOptions} from '#live/types'\n\nimport {DRAFT_SYNC_TAG_PREFIX, PUBLISHED_SYNC_TAG_PREFIX, revalidate} from '#live/constants'\nimport {SanityLive as SanityLiveClientComponent} from 'next-sanity/live/client-components'\nimport {actionRefresh, actionUpdateTags} from 'next-sanity/live/server-actions'\nimport {cacheLife, cacheTag} from 'next/cache'\nimport {preconnect} from 'react-dom'\n\nexport function defineLive(config: DefineLiveOptions): {\n sanityFetch: DefinedFetchType\n SanityLive: React.ComponentType<DefinedLiveProps>\n} {\n const {client: _client, serverToken, browserToken} = config\n\n if (!_client) {\n throw new Error('`client` is required for `defineLive` to function')\n }\n\n if (process.env.NODE_ENV !== 'production' && !serverToken && serverToken !== false) {\n console.warn(\n 'No `serverToken` provided to `defineLive`. This means that only published content will be fetched and respond to live events. You can silence this warning by setting `serverToken: false`.',\n )\n }\n\n if (process.env.NODE_ENV !== 'production' && !browserToken && browserToken !== false) {\n console.warn(\n 'No `browserToken` provided to `defineLive`. This means that live previewing drafts will only work when using the Presentation Tool in your Sanity Studio. To support live previewing drafts stand-alone, provide a `browserToken`. It is shared with the browser so it should only have Viewer rights or lower. You can silence this warning by setting `browserToken: false`.',\n )\n }\n\n const client = _client.withConfig({allowReconfigure: false, useCdn: true})\n const {token: originalToken, perspective: originalPerspective = 'published'} = client.config()\n\n const fetch: DefinedFetchType = async function fetch({\n query,\n params = {},\n perspective = originalPerspective,\n stega = false,\n tags: customCacheTags = [],\n requestTag = 'next-loader.fetch.cache-components',\n }) {\n const useCdn = perspective === 'published'\n\n const {result, resultSourceMap, syncTags} = await client.fetch(query, await params, {\n filterResponse: false,\n returnQuery: false,\n perspective,\n useCdn,\n stega,\n cacheMode: useCdn ? 'noStale' : undefined,\n tag: requestTag,\n token: perspective === 'published' ? originalToken : serverToken || originalToken, // @TODO can pass undefined instead of config.token here?\n })\n const tags = [\n ...customCacheTags,\n ...(syncTags || []).map(\n (tag) =>\n `${perspective === 'published' ? PUBLISHED_SYNC_TAG_PREFIX : DRAFT_SYNC_TAG_PREFIX}${tag}`,\n ),\n ]\n /**\n * The tags used here, are expired later on in the `expireTags` Server Action with the `expireTag` function from `next/cache`\n */\n cacheTag(...tags)\n /**\n * Sanity Live handles on-demand revalidation, so the default 15min time based revalidation is too short,\n * userland can still set a shorter revalidate time by calling `cacheLife` themselves.\n */\n cacheLife({revalidate})\n\n return {data: result, sourceMap: resultSourceMap || null, tags}\n }\n\n const Live: React.ComponentType<DefinedLiveProps> = function Live(props) {\n const {\n includeAllDocuments = false,\n action = actionUpdateTags,\n restartAction = actionRefresh,\n reconnectAction = actionRefresh,\n goAwayAction,\n welcomeAction,\n refreshOnMount = false,\n refreshOnFocus = false,\n refreshOnReconnect = false,\n requestTag = 'next-loader.live.cache-components',\n } = props\n\n const shouldIncludeDrafts = typeof browserToken === 'string' && includeAllDocuments\n\n const {projectId, dataset, apiHost, apiVersion, useProjectHostname, requestTagPrefix} =\n client.config()\n\n // Preconnect to the Live Event API origin early, as the Sanity API is almost always on a different origin than the app\n const {origin} = new URL(client.getUrl('', false))\n preconnect(origin)\n\n return (\n <SanityLiveClientComponent\n config={{\n projectId,\n dataset,\n apiHost,\n apiVersion,\n useProjectHostname,\n requestTagPrefix,\n token: shouldIncludeDrafts ? browserToken : undefined,\n }}\n includeAllDocuments={shouldIncludeDrafts}\n action={action}\n reconnectAction={reconnectAction === false ? undefined : reconnectAction}\n restartAction={restartAction === false ? undefined : restartAction}\n welcomeAction={welcomeAction}\n goAwayAction={goAwayAction}\n requestTag={requestTag}\n refreshOnMount={refreshOnMount}\n refreshOnFocus={refreshOnFocus}\n refreshOnReconnect={refreshOnReconnect}\n />\n )\n }\n Live.displayName = 'SanityLiveServerComponent'\n\n return {\n sanityFetch: fetch,\n SanityLive: Live,\n }\n}\n"],"mappings":";;;;;;;;;AAQA,SAAgB,WAAW,QAGzB;CACA,MAAM,EAAC,QAAQ,SAAS,aAAa,iBAAgB;AAErD,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,oDAAoD;AAGtE,KAAI,QAAQ,IAAI,aAAa,gBAAgB,CAAC,eAAe,gBAAgB,MAC3E,SAAQ,KACN,8LACD;AAGH,KAAI,QAAQ,IAAI,aAAa,gBAAgB,CAAC,gBAAgB,iBAAiB,MAC7E,SAAQ,KACN,iXACD;CAGH,MAAM,SAAS,QAAQ,WAAW;EAAC,kBAAkB;EAAO,QAAQ;EAAK,CAAC;CAC1E,MAAM,EAAC,OAAO,eAAe,aAAa,sBAAsB,gBAAe,OAAO,QAAQ;CAE9F,MAAM,QAA0B,eAAe,MAAM,EACnD,OACA,SAAS,EAAE,EACX,cAAc,qBACd,QAAQ,OACR,MAAM,kBAAkB,EAAE,EAC1B,aAAa,wCACZ;EACD,MAAM,SAAS,gBAAgB;EAE/B,MAAM,EAAC,QAAQ,iBAAiB,aAAY,MAAM,OAAO,MAAM,OAAO,MAAM,QAAQ;GAClF,gBAAgB;GAChB,aAAa;GACb;GACA;GACA;GACA,WAAW,SAAS,YAAY,KAAA;GAChC,KAAK;GACL,OAAO,gBAAgB,cAAc,gBAAgB,eAAe;GACrE,CAAC;EACF,MAAM,OAAO,CACX,GAAG,iBACH,IAAI,YAAY,EAAE,EAAE,KACjB,QACC,GAAG,gBAAgB,cAAc,4BAA4B,wBAAwB,MACxF,CACF;AAID,WAAS,GAAG,KAAK;AAKjB,YAAU,EAAC,YAAW,CAAC;AAEvB,SAAO;GAAC,MAAM;GAAQ,WAAW,mBAAmB;GAAM;GAAK;;CAGjE,MAAM,OAA8C,SAAS,KAAK,OAAO;EACvE,MAAM,EACJ,sBAAsB,OACtB,SAAS,kBACT,gBAAgB,eAChB,kBAAkB,eAClB,cACA,eACA,iBAAiB,OACjB,iBAAiB,OACjB,qBAAqB,OACrB,aAAa,wCACX;EAEJ,MAAM,sBAAsB,OAAO,iBAAiB,YAAY;EAEhE,MAAM,EAAC,WAAW,SAAS,SAAS,YAAY,oBAAoB,qBAClE,OAAO,QAAQ;EAGjB,MAAM,EAAC,WAAU,IAAI,IAAI,OAAO,OAAO,IAAI,MAAM,CAAC;AAClD,aAAW,OAAO;AAElB,SACE,oBAACA,YAAAA;GACC,QAAQ;IACN;IACA;IACA;IACA;IACA;IACA;IACA,OAAO,sBAAsB,eAAe,KAAA;IAC7C;GACD,qBAAqB;GACb;GACR,iBAAiB,oBAAoB,QAAQ,KAAA,IAAY;GACzD,eAAe,kBAAkB,QAAQ,KAAA,IAAY;GACtC;GACD;GACF;GACI;GACA;GACI;IACpB;;AAGN,MAAK,cAAc;AAEnB,QAAO;EACL,aAAa;EACb,YAAY;EACb"}
1
+ {"version":3,"file":"index.js","names":["SanityLive","SanityLiveClientComponent"],"sources":["../../../../src/live/conditions/next-js/defineLive.tsx"],"sourcesContent":["import type {DefinedFetchType, DefinedLiveProps, DefineLiveOptions} from '#live/types'\n\nimport {DRAFT_SYNC_TAG_PREFIX, PUBLISHED_SYNC_TAG_PREFIX, revalidate} from '#live/constants'\nimport {SanityLive as SanityLiveClientComponent} from 'next-sanity/live/client-components'\nimport {actionRefresh, actionUpdateTags} from 'next-sanity/live/server-actions'\nimport {cacheLife, cacheTag} from 'next/cache'\nimport {preconnect} from 'react-dom'\n\nexport function defineLive(config: DefineLiveOptions): {\n sanityFetch: DefinedFetchType\n SanityLive: React.ComponentType<DefinedLiveProps>\n} {\n const {client: _client, serverToken, browserToken} = config\n\n if (!_client) {\n throw new Error('`client` is required for `defineLive` to function')\n }\n\n if (process.env.NODE_ENV !== 'production' && !serverToken && serverToken !== false) {\n console.warn(\n 'No `serverToken` provided to `defineLive`. This means that only published content will be fetched and respond to live events. You can silence this warning by setting `serverToken: false`.',\n )\n }\n\n if (process.env.NODE_ENV !== 'production' && !browserToken && browserToken !== false) {\n console.warn(\n 'No `browserToken` provided to `defineLive`. This means that live previewing drafts will only work when using the Presentation Tool in your Sanity Studio. To support live previewing drafts stand-alone, provide a `browserToken`. It is shared with the browser so it should only have Viewer rights or lower. You can silence this warning by setting `browserToken: false`.',\n )\n }\n\n const client = _client.withConfig({allowReconfigure: false, useCdn: true})\n const {token: originalToken, perspective: originalPerspective = 'published'} = client.config()\n\n const sanityFetch: DefinedFetchType = async function sanityFetch({\n query,\n params = {},\n perspective = originalPerspective,\n stega = false,\n tags: customCacheTags = [],\n requestTag = 'next-loader.fetch.cache-components',\n }) {\n const useCdn = perspective === 'published'\n\n const {result, resultSourceMap, syncTags} = await client.fetch(query, await params, {\n filterResponse: false,\n returnQuery: false,\n perspective,\n useCdn,\n stega,\n cacheMode: useCdn ? 'noStale' : undefined,\n tag: requestTag,\n token: perspective === 'published' ? originalToken : serverToken || originalToken, // @TODO can pass undefined instead of config.token here?\n })\n const tags = [\n ...customCacheTags,\n ...(syncTags || []).map(\n (tag) =>\n `${perspective === 'published' ? PUBLISHED_SYNC_TAG_PREFIX : DRAFT_SYNC_TAG_PREFIX}${tag}`,\n ),\n ]\n /**\n * The tags used here, are expired later on in the `expireTags` Server Action with the `expireTag` function from `next/cache`\n */\n cacheTag(...tags)\n /**\n * Sanity Live handles on-demand revalidation, so the default 15min time based revalidation is too short,\n * userland can still set a shorter revalidate time by calling `cacheLife` themselves.\n */\n cacheLife({revalidate})\n\n return {data: result, sourceMap: resultSourceMap || null, tags}\n }\n\n const SanityLive: React.ComponentType<DefinedLiveProps> = function SanityLive(props) {\n const {\n includeAllDocuments = false,\n action = actionUpdateTags,\n onReconnect = actionRefresh,\n onRestart = actionRefresh,\n\n onWelcome,\n onError,\n onGoAway,\n\n refreshOnMount = false,\n refreshOnFocus = false,\n refreshOnReconnect = false,\n requestTag = 'next-loader.live.cache-components',\n } = props\n\n const shouldIncludeDrafts = typeof browserToken === 'string' && includeAllDocuments\n\n const {projectId, dataset, apiHost, apiVersion, useProjectHostname, requestTagPrefix} =\n client.config()\n\n // Preconnect to the Live Event API origin early, as the Sanity API is almost always on a different origin than the app\n const {origin} = new URL(client.getUrl('', false))\n preconnect(origin)\n\n return (\n <SanityLiveClientComponent\n config={{\n projectId,\n dataset,\n apiHost,\n apiVersion,\n useProjectHostname,\n requestTagPrefix,\n token: shouldIncludeDrafts ? browserToken : undefined,\n }}\n includeAllDocuments={shouldIncludeDrafts}\n action={action}\n onReconnect={onReconnect}\n onRestart={onRestart}\n onWelcome={onWelcome}\n onError={onError}\n onGoAway={onGoAway}\n requestTag={requestTag}\n refreshOnMount={refreshOnMount}\n refreshOnFocus={refreshOnFocus}\n refreshOnReconnect={refreshOnReconnect}\n />\n )\n }\n SanityLive.displayName = 'SanityLiveServerComponent'\n\n return {\n sanityFetch: sanityFetch,\n SanityLive: SanityLive,\n }\n}\n"],"mappings":";;;;;;;;;AAQA,SAAgB,WAAW,QAGzB;CACA,MAAM,EAAC,QAAQ,SAAS,aAAa,iBAAgB;AAErD,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,oDAAoD;AAGtE,KAAI,QAAQ,IAAI,aAAa,gBAAgB,CAAC,eAAe,gBAAgB,MAC3E,SAAQ,KACN,8LACD;AAGH,KAAI,QAAQ,IAAI,aAAa,gBAAgB,CAAC,gBAAgB,iBAAiB,MAC7E,SAAQ,KACN,iXACD;CAGH,MAAM,SAAS,QAAQ,WAAW;EAAC,kBAAkB;EAAO,QAAQ;EAAK,CAAC;CAC1E,MAAM,EAAC,OAAO,eAAe,aAAa,sBAAsB,gBAAe,OAAO,QAAQ;CAE9F,MAAM,cAAgC,eAAe,YAAY,EAC/D,OACA,SAAS,EAAE,EACX,cAAc,qBACd,QAAQ,OACR,MAAM,kBAAkB,EAAE,EAC1B,aAAa,wCACZ;EACD,MAAM,SAAS,gBAAgB;EAE/B,MAAM,EAAC,QAAQ,iBAAiB,aAAY,MAAM,OAAO,MAAM,OAAO,MAAM,QAAQ;GAClF,gBAAgB;GAChB,aAAa;GACb;GACA;GACA;GACA,WAAW,SAAS,YAAY,KAAA;GAChC,KAAK;GACL,OAAO,gBAAgB,cAAc,gBAAgB,eAAe;GACrE,CAAC;EACF,MAAM,OAAO,CACX,GAAG,iBACH,IAAI,YAAY,EAAE,EAAE,KACjB,QACC,GAAG,gBAAgB,cAAc,4BAA4B,wBAAwB,MACxF,CACF;AAID,WAAS,GAAG,KAAK;AAKjB,YAAU,EAAC,YAAW,CAAC;AAEvB,SAAO;GAAC,MAAM;GAAQ,WAAW,mBAAmB;GAAM;GAAK;;CAGjE,MAAMA,eAAoD,SAASA,aAAW,OAAO;EACnF,MAAM,EACJ,sBAAsB,OACtB,SAAS,kBACT,cAAc,eACd,YAAY,eAEZ,WACA,SACA,UAEA,iBAAiB,OACjB,iBAAiB,OACjB,qBAAqB,OACrB,aAAa,wCACX;EAEJ,MAAM,sBAAsB,OAAO,iBAAiB,YAAY;EAEhE,MAAM,EAAC,WAAW,SAAS,SAAS,YAAY,oBAAoB,qBAClE,OAAO,QAAQ;EAGjB,MAAM,EAAC,WAAU,IAAI,IAAI,OAAO,OAAO,IAAI,MAAM,CAAC;AAClD,aAAW,OAAO;AAElB,SACE,oBAACC,YAAAA;GACC,QAAQ;IACN;IACA;IACA;IACA;IACA;IACA;IACA,OAAO,sBAAsB,eAAe,KAAA;IAC7C;GACD,qBAAqB;GACb;GACK;GACF;GACA;GACF;GACC;GACE;GACI;GACA;GACI;IACpB;;AAGN,cAAW,cAAc;AAEzB,QAAO;EACQ;EACb,YAAYD;EACb"}
@@ -59,7 +59,7 @@ function defineLive(config) {
59
59
  };
60
60
  };
61
61
  const SanityLive$2 = async function SanityLive$1(props) {
62
- const { includeAllDocuments = (await draftMode()).isEnabled, action = actionUpdateTags, restartAction = actionRefresh, reconnectAction = actionRefresh, goAwayAction, welcomeAction, refreshOnMount, refreshOnFocus, refreshOnReconnect, requestTag = "next-loader.live" } = props;
62
+ const { includeAllDocuments = (await draftMode()).isEnabled, action = actionUpdateTags, onReconnect = actionRefresh, onRestart = actionRefresh, onWelcome = false, onError = false, onGoAway = false, refreshOnMount, refreshOnFocus, refreshOnReconnect, requestTag = "next-loader.live" } = props;
63
63
  const { projectId, dataset, apiHost, apiVersion, useProjectHostname, requestTagPrefix } = client.config();
64
64
  const shouldIncludeAllDocuments = typeof browserToken === "string" && includeAllDocuments;
65
65
  const { origin } = new URL(client.getUrl("", false));
@@ -76,10 +76,11 @@ function defineLive(config) {
76
76
  },
77
77
  includeAllDocuments: shouldIncludeAllDocuments,
78
78
  action,
79
- reconnectAction: reconnectAction === false ? void 0 : reconnectAction,
80
- restartAction: restartAction === false ? void 0 : restartAction,
81
- welcomeAction,
82
- goAwayAction,
79
+ onReconnect,
80
+ onRestart,
81
+ onWelcome,
82
+ onError,
83
+ onGoAway,
83
84
  requestTag,
84
85
  refreshOnMount,
85
86
  refreshOnFocus,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["SanityLive","SanityLiveClientComponent"],"sources":["../../../../src/live/conditions/react-server/defineLive.tsx"],"sourcesContent":["import type {DefinedFetchType, DefinedLiveProps, DefineLiveOptions} from '#live/types'\n\nimport {DRAFT_SYNC_TAG_PREFIX, PUBLISHED_SYNC_TAG_PREFIX} from '#live/constants'\nimport {sanitizePerspective} from '#live/sanitizePerspective'\nimport {type ClientPerspective, type QueryParams} from '@sanity/client'\nimport {perspectiveCookieName} from '@sanity/preview-url-secret/constants'\nimport {SanityLive as SanityLiveClientComponent} from 'next-sanity/live/client-components'\nimport {actionRefresh, actionUpdateTags} from 'next-sanity/live/server-actions'\nimport {cookies, draftMode} from 'next/headers'\nimport {preconnect} from 'react-dom'\n\nexport function defineLive(config: DefineLiveOptions): {\n sanityFetch: DefinedFetchType\n SanityLive: React.ComponentType<DefinedLiveProps>\n} {\n const {client: _client, serverToken, browserToken, stega: stegaEnabled = true} = config\n\n if (!_client) {\n throw new Error('`client` is required for `defineLive` to function')\n }\n\n if (process.env.NODE_ENV !== 'production' && !serverToken && serverToken !== false) {\n console.warn(\n 'No `serverToken` provided to `defineLive`. This means that only published content will be fetched and respond to live events. You can silence this warning by setting `serverToken: false`.',\n )\n }\n\n if (process.env.NODE_ENV !== 'production' && !browserToken && browserToken !== false) {\n console.warn(\n 'No `browserToken` provided to `defineLive`. This means that live previewing drafts will only work when using the Presentation Tool in your Sanity Studio. To support live previewing drafts stand-alone, provide a `browserToken`. It is shared with the browser so it should only have Viewer rights or lower. You can silence this warning by setting `browserToken: false`.',\n )\n }\n\n const client = _client.withConfig({allowReconfigure: false, useCdn: false})\n const {token: originalToken, perspective: originalPerspective = 'published'} = client.config()\n const studioUrlDefined = typeof client.config().stega.studioUrl !== 'undefined'\n\n const sanityFetch: DefinedFetchType = async function sanityFetch<\n const QueryString extends string,\n >({\n query,\n params = {},\n stega: _stega,\n tags = ['sanity'],\n perspective: _perspective,\n tag,\n requestTag = tag ?? 'next-loader.fetch',\n }: {\n query: QueryString\n params?: QueryParams | Promise<QueryParams>\n stega?: boolean\n tags?: string[]\n perspective?: Exclude<ClientPerspective, 'raw'>\n tag?: string\n requestTag?: string\n }) {\n const stega = _stega ?? (stegaEnabled && studioUrlDefined && (await draftMode()).isEnabled)\n const perspective =\n _perspective ??\n (await resolveCookiePerspective(\n originalPerspective === 'raw' ? 'published' : originalPerspective,\n ))\n const useCdn = perspective === 'published'\n const revalidate = false\n\n // fetch the tags first, with revalidate to 1s to ensure we get the latest tags, eventually\n const {syncTags} = await client.fetch(query, await params, {\n filterResponse: false,\n perspective: perspective as ClientPerspective,\n stega: false,\n returnQuery: false,\n next: {revalidate, tags: [...tags, 'sanity:fetch-sync-tags']},\n useCdn,\n cacheMode: useCdn ? 'noStale' : undefined,\n tag: [requestTag, 'fetch-sync-tags'].filter(Boolean).join('.'),\n })\n\n const cacheTags = [\n ...tags,\n ...(syncTags?.map(\n (tag) =>\n `${perspective === 'published' ? PUBLISHED_SYNC_TAG_PREFIX : DRAFT_SYNC_TAG_PREFIX}${tag}`,\n ) || []),\n ]\n\n const {result, resultSourceMap} = await client.fetch(query, await params, {\n filterResponse: false,\n perspective: perspective as ClientPerspective,\n stega,\n token: perspective !== 'published' && serverToken ? serverToken : originalToken,\n next: {revalidate, tags: cacheTags},\n useCdn,\n cacheMode: useCdn ? 'noStale' : undefined,\n tag: requestTag,\n })\n return {data: result, sourceMap: resultSourceMap || null, tags: cacheTags}\n }\n\n const SanityLive: React.ComponentType<DefinedLiveProps> = async function SanityLive(props) {\n const {\n includeAllDocuments = (await draftMode()).isEnabled,\n action = actionUpdateTags,\n restartAction = actionRefresh,\n reconnectAction = actionRefresh,\n goAwayAction,\n welcomeAction,\n refreshOnMount,\n refreshOnFocus,\n refreshOnReconnect,\n requestTag = 'next-loader.live',\n } = props\n const {projectId, dataset, apiHost, apiVersion, useProjectHostname, requestTagPrefix} =\n client.config()\n const shouldIncludeAllDocuments = typeof browserToken === 'string' && includeAllDocuments\n\n // Preconnect to the Live Event API origin early, as the Sanity API is almost always on a different origin than the app\n const {origin} = new URL(client.getUrl('', false))\n preconnect(origin)\n\n return (\n <SanityLiveClientComponent\n config={{\n projectId,\n dataset,\n apiHost,\n apiVersion,\n useProjectHostname,\n requestTagPrefix,\n token: shouldIncludeAllDocuments ? browserToken : undefined,\n }}\n includeAllDocuments={shouldIncludeAllDocuments}\n action={action}\n reconnectAction={reconnectAction === false ? undefined : reconnectAction}\n restartAction={restartAction === false ? undefined : restartAction}\n welcomeAction={welcomeAction}\n goAwayAction={goAwayAction}\n requestTag={requestTag}\n refreshOnMount={refreshOnMount}\n refreshOnFocus={refreshOnFocus}\n refreshOnReconnect={refreshOnReconnect}\n />\n )\n }\n SanityLive.displayName = 'SanityLiveServerComponent'\n\n return {\n sanityFetch,\n SanityLive,\n }\n}\n\nasync function resolveCookiePerspective(\n fallback: Exclude<ClientPerspective, 'raw'>,\n): Promise<Exclude<ClientPerspective, 'raw'>> {\n return (await draftMode()).isEnabled\n ? (await cookies()).has(perspectiveCookieName)\n ? sanitizePerspective((await cookies()).get(perspectiveCookieName)?.value, 'drafts')\n : 'drafts'\n : fallback\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["SanityLive","SanityLiveClientComponent"],"sources":["../../../../src/live/conditions/react-server/defineLive.tsx"],"sourcesContent":["import type {DefinedFetchType, DefinedLiveProps, DefineLiveOptions} from '#live/types'\n\nimport {DRAFT_SYNC_TAG_PREFIX, PUBLISHED_SYNC_TAG_PREFIX} from '#live/constants'\nimport {sanitizePerspective} from '#live/sanitizePerspective'\nimport {type ClientPerspective, type QueryParams} from '@sanity/client'\nimport {perspectiveCookieName} from '@sanity/preview-url-secret/constants'\nimport {SanityLive as SanityLiveClientComponent} from 'next-sanity/live/client-components'\nimport {actionRefresh, actionUpdateTags} from 'next-sanity/live/server-actions'\nimport {cookies, draftMode} from 'next/headers'\nimport {preconnect} from 'react-dom'\n\nexport function defineLive(config: DefineLiveOptions): {\n sanityFetch: DefinedFetchType\n SanityLive: React.ComponentType<DefinedLiveProps>\n} {\n const {client: _client, serverToken, browserToken, stega: stegaEnabled = true} = config\n\n if (!_client) {\n throw new Error('`client` is required for `defineLive` to function')\n }\n\n if (process.env.NODE_ENV !== 'production' && !serverToken && serverToken !== false) {\n console.warn(\n 'No `serverToken` provided to `defineLive`. This means that only published content will be fetched and respond to live events. You can silence this warning by setting `serverToken: false`.',\n )\n }\n\n if (process.env.NODE_ENV !== 'production' && !browserToken && browserToken !== false) {\n console.warn(\n 'No `browserToken` provided to `defineLive`. This means that live previewing drafts will only work when using the Presentation Tool in your Sanity Studio. To support live previewing drafts stand-alone, provide a `browserToken`. It is shared with the browser so it should only have Viewer rights or lower. You can silence this warning by setting `browserToken: false`.',\n )\n }\n\n const client = _client.withConfig({allowReconfigure: false, useCdn: false})\n const {token: originalToken, perspective: originalPerspective = 'published'} = client.config()\n const studioUrlDefined = typeof client.config().stega.studioUrl !== 'undefined'\n\n const sanityFetch: DefinedFetchType = async function sanityFetch<\n const QueryString extends string,\n >({\n query,\n params = {},\n stega: _stega,\n tags = ['sanity'],\n perspective: _perspective,\n tag,\n requestTag = tag ?? 'next-loader.fetch',\n }: {\n query: QueryString\n params?: QueryParams | Promise<QueryParams>\n stega?: boolean\n tags?: string[]\n perspective?: Exclude<ClientPerspective, 'raw'>\n tag?: string\n requestTag?: string\n }) {\n const stega = _stega ?? (stegaEnabled && studioUrlDefined && (await draftMode()).isEnabled)\n const perspective =\n _perspective ??\n (await resolveCookiePerspective(\n originalPerspective === 'raw' ? 'published' : originalPerspective,\n ))\n const useCdn = perspective === 'published'\n const revalidate = false\n\n // fetch the tags first, with revalidate to 1s to ensure we get the latest tags, eventually\n const {syncTags} = await client.fetch(query, await params, {\n filterResponse: false,\n perspective: perspective as ClientPerspective,\n stega: false,\n returnQuery: false,\n next: {revalidate, tags: [...tags, 'sanity:fetch-sync-tags']},\n useCdn,\n cacheMode: useCdn ? 'noStale' : undefined,\n tag: [requestTag, 'fetch-sync-tags'].filter(Boolean).join('.'),\n })\n\n const cacheTags = [\n ...tags,\n ...(syncTags?.map(\n (tag) =>\n `${perspective === 'published' ? PUBLISHED_SYNC_TAG_PREFIX : DRAFT_SYNC_TAG_PREFIX}${tag}`,\n ) || []),\n ]\n\n const {result, resultSourceMap} = await client.fetch(query, await params, {\n filterResponse: false,\n perspective: perspective as ClientPerspective,\n stega,\n token: perspective !== 'published' && serverToken ? serverToken : originalToken,\n next: {revalidate, tags: cacheTags},\n useCdn,\n cacheMode: useCdn ? 'noStale' : undefined,\n tag: requestTag,\n })\n return {data: result, sourceMap: resultSourceMap || null, tags: cacheTags}\n }\n\n const SanityLive: React.ComponentType<DefinedLiveProps> = async function SanityLive(props) {\n const {\n includeAllDocuments = (await draftMode()).isEnabled,\n action = actionUpdateTags,\n onReconnect = actionRefresh,\n onRestart = actionRefresh,\n\n onWelcome = false,\n onError = false,\n onGoAway = false,\n\n refreshOnMount,\n refreshOnFocus,\n refreshOnReconnect,\n requestTag = 'next-loader.live',\n } = props\n const {projectId, dataset, apiHost, apiVersion, useProjectHostname, requestTagPrefix} =\n client.config()\n const shouldIncludeAllDocuments = typeof browserToken === 'string' && includeAllDocuments\n\n // Preconnect to the Live Event API origin early, as the Sanity API is almost always on a different origin than the app\n const {origin} = new URL(client.getUrl('', false))\n preconnect(origin)\n\n return (\n <SanityLiveClientComponent\n config={{\n projectId,\n dataset,\n apiHost,\n apiVersion,\n useProjectHostname,\n requestTagPrefix,\n token: shouldIncludeAllDocuments ? browserToken : undefined,\n }}\n includeAllDocuments={shouldIncludeAllDocuments}\n action={action}\n onReconnect={onReconnect}\n onRestart={onRestart}\n onWelcome={onWelcome}\n onError={onError}\n onGoAway={onGoAway}\n requestTag={requestTag}\n refreshOnMount={refreshOnMount}\n refreshOnFocus={refreshOnFocus}\n refreshOnReconnect={refreshOnReconnect}\n />\n )\n }\n SanityLive.displayName = 'SanityLiveServerComponent'\n\n return {\n sanityFetch,\n SanityLive,\n }\n}\n\nasync function resolveCookiePerspective(\n fallback: Exclude<ClientPerspective, 'raw'>,\n): Promise<Exclude<ClientPerspective, 'raw'>> {\n return (await draftMode()).isEnabled\n ? (await cookies()).has(perspectiveCookieName)\n ? sanitizePerspective((await cookies()).get(perspectiveCookieName)?.value, 'drafts')\n : 'drafts'\n : fallback\n}\n"],"mappings":";;;;;;;;;;;AAWA,SAAgB,WAAW,QAGzB;CACA,MAAM,EAAC,QAAQ,SAAS,aAAa,cAAc,OAAO,eAAe,SAAQ;AAEjF,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,oDAAoD;AAGtE,KAAI,QAAQ,IAAI,aAAa,gBAAgB,CAAC,eAAe,gBAAgB,MAC3E,SAAQ,KACN,8LACD;AAGH,KAAI,QAAQ,IAAI,aAAa,gBAAgB,CAAC,gBAAgB,iBAAiB,MAC7E,SAAQ,KACN,iXACD;CAGH,MAAM,SAAS,QAAQ,WAAW;EAAC,kBAAkB;EAAO,QAAQ;EAAM,CAAC;CAC3E,MAAM,EAAC,OAAO,eAAe,aAAa,sBAAsB,gBAAe,OAAO,QAAQ;CAC9F,MAAM,mBAAmB,OAAO,OAAO,QAAQ,CAAC,MAAM,cAAc;CAEpE,MAAM,cAAgC,eAAe,YAEnD,EACA,OACA,SAAS,EAAE,EACX,OAAO,QACP,OAAO,CAAC,SAAS,EACjB,aAAa,cACb,KACA,aAAa,OAAO,uBASnB;EACD,MAAM,QAAQ,WAAW,gBAAgB,qBAAqB,MAAM,WAAW,EAAE;EACjF,MAAM,cACJ,gBACC,MAAM,yBACL,wBAAwB,QAAQ,cAAc,oBAC/C;EACH,MAAM,SAAS,gBAAgB;EAC/B,MAAM,aAAa;EAGnB,MAAM,EAAC,aAAY,MAAM,OAAO,MAAM,OAAO,MAAM,QAAQ;GACzD,gBAAgB;GACH;GACb,OAAO;GACP,aAAa;GACb,MAAM;IAAC;IAAY,MAAM,CAAC,GAAG,MAAM,yBAAyB;IAAC;GAC7D;GACA,WAAW,SAAS,YAAY,KAAA;GAChC,KAAK,CAAC,YAAY,kBAAkB,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;GAC/D,CAAC;EAEF,MAAM,YAAY,CAChB,GAAG,MACH,GAAI,UAAU,KACX,QACC,GAAG,gBAAgB,cAAc,4BAA4B,wBAAwB,MACxF,IAAI,EAAE,CACR;EAED,MAAM,EAAC,QAAQ,oBAAmB,MAAM,OAAO,MAAM,OAAO,MAAM,QAAQ;GACxE,gBAAgB;GACH;GACb;GACA,OAAO,gBAAgB,eAAe,cAAc,cAAc;GAClE,MAAM;IAAC;IAAY,MAAM;IAAU;GACnC;GACA,WAAW,SAAS,YAAY,KAAA;GAChC,KAAK;GACN,CAAC;AACF,SAAO;GAAC,MAAM;GAAQ,WAAW,mBAAmB;GAAM,MAAM;GAAU;;CAG5E,MAAMA,eAAoD,eAAeA,aAAW,OAAO;EACzF,MAAM,EACJ,uBAAuB,MAAM,WAAW,EAAE,WAC1C,SAAS,kBACT,cAAc,eACd,YAAY,eAEZ,YAAY,OACZ,UAAU,OACV,WAAW,OAEX,gBACA,gBACA,oBACA,aAAa,uBACX;EACJ,MAAM,EAAC,WAAW,SAAS,SAAS,YAAY,oBAAoB,qBAClE,OAAO,QAAQ;EACjB,MAAM,4BAA4B,OAAO,iBAAiB,YAAY;EAGtE,MAAM,EAAC,WAAU,IAAI,IAAI,OAAO,OAAO,IAAI,MAAM,CAAC;AAClD,aAAW,OAAO;AAElB,SACE,oBAACC,YAAAA;GACC,QAAQ;IACN;IACA;IACA;IACA;IACA;IACA;IACA,OAAO,4BAA4B,eAAe,KAAA;IACnD;GACD,qBAAqB;GACb;GACK;GACF;GACA;GACF;GACC;GACE;GACI;GACA;GACI;IACpB;;AAGN,cAAW,cAAc;AAEzB,QAAO;EACL;EACA,YAAA;EACD;;AAGH,eAAe,yBACb,UAC4C;AAC5C,SAAQ,MAAM,WAAW,EAAE,aACtB,MAAM,SAAS,EAAE,IAAI,sBAAsB,GAC1C,qBAAqB,MAAM,SAAS,EAAE,IAAI,sBAAsB,EAAE,OAAO,SAAS,GAClF,WACF"}
@@ -1,4 +1,4 @@
1
- import { a as SanityLiveActionContext } from "../../types.js";
1
+ import { o as SanityLiveActionContext } from "../../types.js";
2
2
  import { LiveEvent } from "@sanity/client";
3
3
  /**
4
4
  * Used by `<SanityLive action={actionRevalidateTags} />`
@@ -1,4 +1,4 @@
1
- import { a as SanityLiveActionContext } from "../../types.js";
1
+ import { o as SanityLiveActionContext } from "../../types.js";
2
2
  import { LiveEvent } from "@sanity/client";
3
3
  /**
4
4
  * Used by `<SanityLive action={actionRevalidateTags} />`
@@ -1,4 +1,4 @@
1
- import { a as SanityLiveActionContext } from "./types.js";
1
+ import { o as SanityLiveActionContext } from "./types.js";
2
2
  import { cookies } from "next/headers";
3
3
  import { ClientPerspective, LiveEvent, SyncTag } from "@sanity/client";
4
4
  type ResolvePerspectiveFromCookies = (options: {
package/dist/parseTags.js CHANGED
@@ -4,7 +4,7 @@ function parseTags(tags, context) {
4
4
  tags,
5
5
  context
6
6
  } });
7
- return tags.map((tag) => `${context.includeAllDocuments ? PUBLISHED_SYNC_TAG_PREFIX : DRAFT_SYNC_TAG_PREFIX}${tag}`);
7
+ return tags.map((tag) => `${context.includeAllDocuments ? DRAFT_SYNC_TAG_PREFIX : PUBLISHED_SYNC_TAG_PREFIX}${tag}`);
8
8
  }
9
9
  export { parseTags as t };
10
10
 
@@ -1 +1 @@
1
- {"version":3,"file":"parseTags.js","names":[],"sources":["../src/live/shared/parseTags.ts"],"sourcesContent":["import type {LiveEvent, SyncTag} from '@sanity/client'\n\nimport type {SanityLiveActionContext} from './types'\n\nimport {DRAFT_SYNC_TAG_PREFIX, PUBLISHED_SYNC_TAG_PREFIX} from './constants'\n\n/**\n * Prefixes live event tags according to the conventions used by `defineLive().sanityFetch()`\n * so that they can be used with `import {updateTag} from 'next/cache'`.\n *\n * @example\n * ```tsx\n * import {updateTag} from 'next/cache'\n * import {parseTags} from 'next-sanity/live'\n * import {SanityLive} from '#sanity/live\n *\n * <SanityLive\n * action={async (event, context) => {\n * 'use server'\n *\n * for (const tag of parseTags(event.tags, context)) {\n * updateTag(tag)\n * }\n * }}\n * />\n * ```\n */\nexport function parseTags<const Tags extends Extract<LiveEvent, {type: 'message'}>['tags']>(\n tags: Tags,\n context: SanityLiveActionContext,\n): `${typeof PUBLISHED_SYNC_TAG_PREFIX | typeof DRAFT_SYNC_TAG_PREFIX}${SyncTag}`[] {\n if (!Array.isArray(tags)) {\n throw new TypeError('tags must be an array', {cause: {tags, context}})\n }\n return tags.map(\n (tag) =>\n `${context.includeAllDocuments ? PUBLISHED_SYNC_TAG_PREFIX : DRAFT_SYNC_TAG_PREFIX}${tag}` as const,\n )\n}\n"],"mappings":";AA2BA,SAAgB,UACd,MACA,SACkF;AAClF,KAAI,CAAC,MAAM,QAAQ,KAAK,CACtB,OAAM,IAAI,UAAU,yBAAyB,EAAC,OAAO;EAAC;EAAM;EAAQ,EAAC,CAAC;AAExE,QAAO,KAAK,KACT,QACC,GAAG,QAAQ,sBAAsB,4BAA4B,wBAAwB,MACxF"}
1
+ {"version":3,"file":"parseTags.js","names":[],"sources":["../src/live/shared/parseTags.ts"],"sourcesContent":["import type {LiveEvent, SyncTag} from '@sanity/client'\n\nimport type {SanityLiveActionContext} from './types'\n\nimport {DRAFT_SYNC_TAG_PREFIX, PUBLISHED_SYNC_TAG_PREFIX} from './constants'\n\n/**\n * Prefixes live event tags according to the conventions used by `defineLive().sanityFetch()`\n * so that they can be used with `import {updateTag} from 'next/cache'`.\n *\n * @example\n * ```tsx\n * import {updateTag} from 'next/cache'\n * import {parseTags} from 'next-sanity/live'\n * import {SanityLive} from '#sanity/live\n *\n * <SanityLive\n * action={async (event, context) => {\n * 'use server'\n *\n * for (const tag of parseTags(event.tags, context)) {\n * updateTag(tag)\n * }\n * }}\n * />\n * ```\n */\nexport function parseTags<const Tags extends Extract<LiveEvent, {type: 'message'}>['tags']>(\n tags: Tags,\n context: SanityLiveActionContext,\n): `${typeof PUBLISHED_SYNC_TAG_PREFIX | typeof DRAFT_SYNC_TAG_PREFIX}${SyncTag}`[] {\n if (!Array.isArray(tags)) {\n throw new TypeError('tags must be an array', {cause: {tags, context}})\n }\n return tags.map(\n (tag) =>\n `${context.includeAllDocuments ? DRAFT_SYNC_TAG_PREFIX : PUBLISHED_SYNC_TAG_PREFIX}${tag}` as const,\n )\n}\n"],"mappings":";AA2BA,SAAgB,UACd,MACA,SACkF;AAClF,KAAI,CAAC,MAAM,QAAQ,KAAK,CACtB,OAAM,IAAI,UAAU,yBAAyB,EAAC,OAAO;EAAC;EAAM;EAAQ,EAAC,CAAC;AAExE,QAAO,KAAK,KACT,QACC,GAAG,QAAQ,sBAAsB,wBAAwB,4BAA4B,MACxF"}
package/dist/types.d.ts CHANGED
@@ -41,6 +41,47 @@ type DefinedFetchType = <const QueryString extends string>(options: {
41
41
  interface SanityLiveActionContext {
42
42
  includeAllDocuments: boolean;
43
43
  }
44
+ /**
45
+ * TODO: docs
46
+ * Has a default implementation tailed the nextjs env and config
47
+ */
48
+ type SanityLiveAction = (event: Extract<LiveEvent, {
49
+ type: "message";
50
+ }>, context: SanityLiveActionContext) => Promise<void>;
51
+ /**
52
+ * TODO: docs
53
+ * If not defined it'll throw the error during render instead, which will crash the react app
54
+ * unless there's an <ErrorBoundary> surrounding the <SanityLive> component
55
+ */
56
+ type SanityLiveOnError = (event: unknown, context: SanityLiveActionContext) => void | Promise<void>;
57
+ /**
58
+ * TODO: docs
59
+ * Optional, logs console.info by default
60
+ */
61
+ type SanityLiveOnWelcome = (event: Extract<LiveEvent, {
62
+ type: "welcome";
63
+ }>, context: SanityLiveActionContext) => void | Promise<void>;
64
+ /**
65
+ * TODO: docs
66
+ */
67
+ type SanityLiveOnReconnect = (event: Extract<LiveEvent, {
68
+ type: "reconnect";
69
+ }>, context: SanityLiveActionContext) => void | Promise<void>;
70
+ /**
71
+ * TODO: docs
72
+ */
73
+ type SanityLiveOnRestart = (event: Extract<LiveEvent, {
74
+ type: "restart";
75
+ }>, context: SanityLiveActionContext) => void | Promise<void>;
76
+ /**
77
+ * TODO: docs
78
+ * This event is fired when the API has hit the limit of concurrent connections, and the API will not deliver live events, in this case long polling intervals is a possible fallback strategy.
79
+ * By default a message will be logged to the console, that creates a refresh interval of 30 seconds.
80
+ * If you set your own event handler make sure you call `setPollingInterval` if you want to activate long-polling, otherwise content goes stale.
81
+ */
82
+ type SanityLiveOnGoaway = (event: Extract<LiveEvent, {
83
+ type: "goaway";
84
+ }>, context: SanityLiveActionContext, setPollingInterval: (interval: number) => void) => void | Promise<void>;
44
85
  interface DefinedLiveProps {
45
86
  /**
46
87
  * TODO: docs, settings this to `true` enables live events for draft content and requires `browserToken` to be set.
@@ -49,21 +90,27 @@ interface DefinedLiveProps {
49
90
  /**
50
91
  * TODO: docs
51
92
  */
52
- action?: (event: Extract<LiveEvent, {
53
- type: "message";
54
- }>, context: SanityLiveActionContext) => Promise<void>;
55
- welcomeAction?: ((event: Extract<LiveEvent, {
56
- type: "welcome";
57
- }>, context: SanityLiveActionContext) => Promise<void>) | false;
58
- goAwayAction?: ((event: Extract<LiveEvent, {
59
- type: "goaway";
60
- }>, context: SanityLiveActionContext) => Promise<number | false>) | false;
61
- reconnectAction?: ((event: Extract<LiveEvent, {
62
- type: "reconnect";
63
- }>, context: SanityLiveActionContext) => Promise<void>) | false;
64
- restartAction?: ((event: Extract<LiveEvent, {
65
- type: "restart";
66
- }>, context: SanityLiveActionContext) => Promise<void>) | false;
93
+ action?: SanityLiveAction;
94
+ /**
95
+ * TODO: docs
96
+ */
97
+ onError?: SanityLiveOnError | false;
98
+ /**
99
+ * TODO: docs
100
+ */
101
+ onWelcome?: SanityLiveOnWelcome | false;
102
+ /**
103
+ * TODO: docs
104
+ */
105
+ onReconnect?: SanityLiveOnReconnect | false;
106
+ /**
107
+ * TODO: docs
108
+ */
109
+ onRestart?: SanityLiveOnRestart | false;
110
+ /**
111
+ *
112
+ */
113
+ onGoAway?: SanityLiveOnGoaway | false;
67
114
  /**
68
115
  * Automatic refresh of RSC when the component <SanityLive /> is mounted.
69
116
  * @defaultValue `false`
@@ -82,7 +129,7 @@ interface DefinedLiveProps {
82
129
  /**
83
130
  * This request tag is used to identify the request when viewing request logs from your Sanity Content Lake.
84
131
  * @see https://www.sanity.io/docs/reference-api-request-tags
85
- * @defaultValue 'next-loader.live'
132
+ * @defaultValue 'next-loader.live'|'next-loader.live.cache-components'
86
133
  */
87
134
  requestTag?: string;
88
135
  }
@@ -108,5 +155,5 @@ interface DefineLiveOptions {
108
155
  */
109
156
  stega?: boolean;
110
157
  }
111
- export { SanityLiveActionContext as a, PerspectiveType as i, DefinedFetchType as n, DefinedLiveProps as r, DefineLiveOptions as t };
158
+ export { SanityLiveAction as a, SanityLiveOnGoaway as c, SanityLiveOnWelcome as d, PerspectiveType as i, SanityLiveOnReconnect as l, DefinedFetchType as n, SanityLiveActionContext as o, DefinedLiveProps as r, SanityLiveOnError as s, DefineLiveOptions as t, SanityLiveOnRestart as u };
112
159
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../src/live/shared/types.ts"],"mappings":";;AAcA;;;KAAY,eAAA,GAAkB,OAAA,CAAQ,iBAAA;;AAKtC;;KAAY,gBAAA,sCAAsD,OAAA;EAChE,KAAA,EAAO,WAAA;EACP,MAAA,GAAS,WAAA,GAAc,OAAA,CAAQ,WAAA;;;;EAI/B,WAAA,GAAc,eAAA;;;;;EAKd,KAAA;;;;;EAKA,IAAA;;;;;;EAMA,UAAA;AAAA,MACI,OAAA;EACJ,IAAA,EAAM,YAAA,CAAa,WAAA;EACnB,SAAA,EAAW,gBAAA;EACX,IAAA;AAAA;;;;UAMe,uBAAA;EACf,mBAAA;AAAA;AAAA,UAQe,gBAAA;EAAjB;;;EAIE,mBAAA;;;;EAIA,MAAA,IACE,KAAA,EAAO,OAAA,CAAQ,SAAA;IAAY,IAAA;EAAA,IAC3B,OAAA,EAAS,uBAAA,KACN,OAAA;EACL,aAAA,KAEM,KAAA,EAAO,OAAA,CAAQ,SAAA;IAAY,IAAA;EAAA,IAC3B,OAAA,EAAS,uBAAA,KACN,OAAA;EAET,YAAA,KAEM,KAAA,EAAO,OAAA,CAAQ,SAAA;IAAY,IAAA;EAAA,IAC3B,OAAA,EAAS,uBAAA,KACN,OAAA;EAET,eAAA,KAEM,KAAA,EAAO,OAAA,CAAQ,SAAA;IAAY,IAAA;EAAA,IAC3B,OAAA,EAAS,uBAAA,KACN,OAAA;EAET,aAAA,KAEM,KAAA,EAAO,OAAA,CAAQ,SAAA;IAAY,IAAA;EAAA,IAC3B,OAAA,EAAS,uBAAA,KACN,OAAA;;;;;EAOT,cAAA;;;;;EAKA,cAAA;;;;;EAKA,kBAAA;;;;;;EAOA,UAAA;AAAA;AAAA,UAGe,iBAAA;;;;EAIf,MAAA,EAAQ,YAAA;;;;;EAKR,WAAA;;;;;EAKA,YAAA;;;;;;EAMA,KAAA;AAAA"}
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../src/live/shared/types.ts"],"mappings":";;AAcA;;;KAAY,eAAA,GAAkB,OAAA,CAAQ,iBAAA;;AAKtC;;KAAY,gBAAA,sCAAsD,OAAA;EAChE,KAAA,EAAO,WAAA;EACP,MAAA,GAAS,WAAA,GAAc,OAAA,CAAQ,WAAA;;;;EAI/B,WAAA,GAAc,eAAA;;;;;EAKd,KAAA;;;;;EAKA,IAAA;;;;;;EAMA,UAAA;AAAA,MACI,OAAA;EACJ,IAAA,EAAM,YAAA,CAAa,WAAA;EACnB,SAAA,EAAW,gBAAA;EACX,IAAA;AAAA;;;;UAMe,uBAAA;EACf,mBAAA;AAAA;AADF;;;;AAAA,KAQY,gBAAA,IACV,KAAA,EAAO,OAAA,CAAQ,SAAA;EAAY,IAAA;AAAA,IAC3B,OAAA,EAAS,uBAAA,KACN,OAAA;;;;;;KAMO,iBAAA,IACV,KAAA,WACA,OAAA,EAAS,uBAAA,YACC,OAAA;;;;;KAKA,mBAAA,IACV,KAAA,EAAO,OAAA,CAAQ,SAAA;EAAY,IAAA;AAAA,IAC3B,OAAA,EAAS,uBAAA,YACC,OAAA;;;;KAIA,qBAAA,IACV,KAAA,EAAO,OAAA,CAAQ,SAAA;EAAY,IAAA;AAAA,IAC3B,OAAA,EAAS,uBAAA,YACC,OAAA;;;;KAIA,mBAAA,IACV,KAAA,EAAO,OAAA,CAAQ,SAAA;EAAY,IAAA;AAAA,IAC3B,OAAA,EAAS,uBAAA,YACC,OAAA;;AAjBZ;;;;;KAwBY,kBAAA,IACV,KAAA,EAAO,OAAA,CAAQ,SAAA;EAAY,IAAA;AAAA,IAC3B,OAAA,EAAS,uBAAA,EACT,kBAAA,GAAqB,QAAA,6BACX,OAAA;AAAA,UAOK,gBAAA;;;;EAIf,mBAAA;EApCU;AAIZ;;EAoCE,MAAA,GAAS,gBAAA;;;;EAIT,OAAA,GAAU,iBAAA;;;;EAIV,SAAA,GAAY,mBAAA;;;;EAIZ,WAAA,GAAc,qBAAA;;;;EAId,SAAA,GAAY,mBAAA;EA7CF;;;EAiDV,QAAA,GAAW,kBAAA;;;;;EAMX,cAAA;;;;;EAKA,cAAA;;;;AAlDF;EAuDE,kBAAA;;;;;;EAOA,UAAA;AAAA;AAAA,UAGe,iBAAA;;;;EAIf,MAAA,EAAQ,YAAA;;;;;EAKR,WAAA;EAtEU;AAOZ;;;EAoEE,YAAA;;;;;;EAMA,KAAA;AAAA"}
@@ -11,7 +11,7 @@ async function actionPerspectiveChange(perspective) {
11
11
  if (!sanitizedPerspective || Array.isArray(sanitizedPerspective) && sanitizedPerspective.length === 0) throw new Error(`Invalid perspective`, { cause: perspective });
12
12
  const nextPerspective = Array.isArray(sanitizedPerspective) ? sanitizedPerspective.join(",") : sanitizedPerspective;
13
13
  const jar = await cookies();
14
- if (nextPerspective === jar.get(perspectiveCookieName)?.value) {
14
+ if (nextPerspective === jar.get(perspectiveCookieName)?.value && process.env.NODE_ENV !== "production") {
15
15
  console.debug("actionPerspectiveChange", "Perspective is the same, skipping", nextPerspective);
16
16
  return;
17
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/visual-editing/server-actions/index.ts"],"sourcesContent":["'use server'\n\nimport type {ClientPerspective} from '@sanity/client'\nimport type {HistoryRefresh} from '@sanity/visual-editing/react'\n\nimport {sanitizePerspective} from '#live/sanitizePerspective'\nimport {perspectiveCookieName} from '@sanity/preview-url-secret/constants'\nimport {refresh} from 'next/cache'\nimport {cookies} from 'next/headers'\n\n/**\n * @internal CAUTION: this is an internal action and does not follow semver. Using it directly is at your own risk.\n */\nexport async function actionRefresh(_payload: HistoryRefresh): Promise<void> {\n refresh()\n}\n\n/**\n * @internal CAUTION: this is an internal action and does not follow semver. Using it directly is at your own risk.\n */\nexport async function actionPerspectiveChange(perspective: ClientPerspective): Promise<void> {\n const sanitizedPerspective = sanitizePerspective(perspective, 'drafts')\n if (\n !sanitizedPerspective ||\n (Array.isArray(sanitizedPerspective) && sanitizedPerspective.length === 0)\n ) {\n throw new Error(`Invalid perspective`, {cause: perspective})\n }\n\n const nextPerspective = Array.isArray(sanitizedPerspective)\n ? sanitizedPerspective.join(',')\n : sanitizedPerspective\n const jar = await cookies()\n if (nextPerspective === jar.get(perspectiveCookieName)?.value) {\n // oxlint-disable-next-line no-console\n console.debug('actionPerspectiveChange', 'Perspective is the same, skipping', nextPerspective)\n return\n }\n jar.set(perspectiveCookieName, nextPerspective, {\n httpOnly: true,\n path: '/',\n secure: true,\n sameSite: 'none',\n })\n\n refresh()\n}\n"],"mappings":";;;;;AAaA,eAAsB,cAAc,UAAyC;AAC3E,UAAS;;AAMX,eAAsB,wBAAwB,aAA+C;CAC3F,MAAM,uBAAuB,oBAAoB,aAAa,SAAS;AACvE,KACE,CAAC,wBACA,MAAM,QAAQ,qBAAqB,IAAI,qBAAqB,WAAW,EAExE,OAAM,IAAI,MAAM,uBAAuB,EAAC,OAAO,aAAY,CAAC;CAG9D,MAAM,kBAAkB,MAAM,QAAQ,qBAAqB,GACvD,qBAAqB,KAAK,IAAI,GAC9B;CACJ,MAAM,MAAM,MAAM,SAAS;AAC3B,KAAI,oBAAoB,IAAI,IAAI,sBAAsB,EAAE,OAAO;AAE7D,UAAQ,MAAM,2BAA2B,qCAAqC,gBAAgB;AAC9F;;AAEF,KAAI,IAAI,uBAAuB,iBAAiB;EAC9C,UAAU;EACV,MAAM;EACN,QAAQ;EACR,UAAU;EACX,CAAC;AAEF,UAAS"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/visual-editing/server-actions/index.ts"],"sourcesContent":["'use server'\n\nimport type {ClientPerspective} from '@sanity/client'\nimport type {HistoryRefresh} from '@sanity/visual-editing/react'\n\nimport {sanitizePerspective} from '#live/sanitizePerspective'\nimport {perspectiveCookieName} from '@sanity/preview-url-secret/constants'\nimport {refresh} from 'next/cache'\nimport {cookies} from 'next/headers'\n\n/**\n * @internal CAUTION: this is an internal action and does not follow semver. Using it directly is at your own risk.\n */\nexport async function actionRefresh(_payload: HistoryRefresh): Promise<void> {\n refresh()\n}\n\n/**\n * @internal CAUTION: this is an internal action and does not follow semver. Using it directly is at your own risk.\n */\nexport async function actionPerspectiveChange(perspective: ClientPerspective): Promise<void> {\n const sanitizedPerspective = sanitizePerspective(perspective, 'drafts')\n if (\n !sanitizedPerspective ||\n (Array.isArray(sanitizedPerspective) && sanitizedPerspective.length === 0)\n ) {\n throw new Error(`Invalid perspective`, {cause: perspective})\n }\n\n const nextPerspective = Array.isArray(sanitizedPerspective)\n ? sanitizedPerspective.join(',')\n : sanitizedPerspective\n const jar = await cookies()\n if (nextPerspective === jar.get(perspectiveCookieName)?.value && process.env.NODE_ENV !== 'production') {\n // oxlint-disable-next-line no-console\n console.debug('actionPerspectiveChange', 'Perspective is the same, skipping', nextPerspective)\n return\n }\n jar.set(perspectiveCookieName, nextPerspective, {\n httpOnly: true,\n path: '/',\n secure: true,\n sameSite: 'none',\n })\n\n refresh()\n}\n"],"mappings":";;;;;AAaA,eAAsB,cAAc,UAAyC;AAC3E,UAAS;;AAMX,eAAsB,wBAAwB,aAA+C;CAC3F,MAAM,uBAAuB,oBAAoB,aAAa,SAAS;AACvE,KACE,CAAC,wBACA,MAAM,QAAQ,qBAAqB,IAAI,qBAAqB,WAAW,EAExE,OAAM,IAAI,MAAM,uBAAuB,EAAC,OAAO,aAAY,CAAC;CAG9D,MAAM,kBAAkB,MAAM,QAAQ,qBAAqB,GACvD,qBAAqB,KAAK,IAAI,GAC9B;CACJ,MAAM,MAAM,MAAM,SAAS;AAC3B,KAAI,oBAAoB,IAAI,IAAI,sBAAsB,EAAE,SAAS,QAAQ,IAAI,aAAa,cAAc;AAEtG,UAAQ,MAAM,2BAA2B,qCAAqC,gBAAgB;AAC9F;;AAEF,KAAI,IAAI,uBAAuB,iBAAiB;EAC9C,UAAU;EACV,MAAM;EACN,QAAQ;EACR,UAAU;EACX,CAAC;AAEF,UAAS"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "next-sanity",
3
- "version": "13.0.0-cache-components.24",
3
+ "version": "13.0.0-cache-components.26",
4
4
  "description": "Sanity.io toolkit for Next.js",
5
5
  "keywords": [
6
6
  "live",