next-sanity 13.0.0-cache-components.29 → 13.0.0-cache-components.31

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.
@@ -1,16 +1,17 @@
1
1
  import { t as isCorsOriginError } from "./isCorsOriginError.js";
2
+ import { t as cacheTagPrefixes } from "./constants.js";
2
3
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
4
  import { createClient } from "@sanity/client";
4
5
  import dynamic from "next/dynamic";
5
- import { startTransition, useEffect, useEffectEvent, useMemo, useState } from "react";
6
+ import { useEffect, useEffectEvent, useMemo, useState } from "react";
6
7
  const RefreshOnFocus = dynamic(() => import("./RefreshOnFocus.js"));
7
8
  const RefreshOnMount = dynamic(() => import("./RefreshOnMount.js"));
8
9
  const RefreshOnInterval = dynamic(() => import("./RefreshOnInterval.js"));
9
10
  const RefreshOnReconnect = dynamic(() => import("./RefreshOnReconnect.js"));
10
11
  function SanityLive(props) {
11
- const { config, includeAllDocuments = false, action, onError, onWelcome = handleWelcome, onReconnect, onRestart, onGoAway = handleGoaway, refreshOnMount = false, refreshOnFocus = false, refreshOnReconnect = true, requestTag } = props;
12
+ const { config, includeDrafts = false, action, onError, onWelcome = handleWelcome, onReconnect, onRestart, onGoAway = handleGoaway, refreshOnMount = false, refreshOnFocus = false, refreshOnReconnect = true, requestTag } = props;
12
13
  const { projectId, dataset, apiHost, apiVersion, useProjectHostname, token, requestTagPrefix } = config;
13
- const actionContext = { includeAllDocuments };
14
+ const actionContext = { includeDrafts };
14
15
  const client = useMemo(() => createClient({
15
16
  projectId,
16
17
  dataset,
@@ -35,27 +36,27 @@ function SanityLive(props) {
35
36
  if (error) throw error;
36
37
  const handleError = useEffectEvent((error) => {
37
38
  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
+ else 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
40
  });
40
41
  const handleLiveEvent = useEffectEvent((event) => {
41
42
  switch (event.type) {
42
43
  case "welcome":
43
- startTransition(() => setRefreshOnInterval(false));
44
- if (onWelcome) startTransition(() => onWelcome(event, actionContext));
44
+ setRefreshOnInterval(false);
45
+ if (onWelcome) onWelcome(event, actionContext);
45
46
  break;
46
47
  case "message":
47
- startTransition(() => action(event, actionContext));
48
+ action(event.tags.map((tag) => `${includeDrafts ? cacheTagPrefixes.drafts : cacheTagPrefixes.published}${tag}`));
48
49
  break;
49
50
  case "restart":
50
- startTransition(() => setRefreshOnInterval(false));
51
- if (onRestart) startTransition(() => onRestart(event, actionContext));
51
+ setRefreshOnInterval(false);
52
+ if (onRestart) onRestart(event, actionContext);
52
53
  break;
53
54
  case "reconnect":
54
- startTransition(() => setRefreshOnInterval(false));
55
- if (onReconnect) startTransition(() => onReconnect(event, actionContext));
55
+ setRefreshOnInterval(false);
56
+ if (onReconnect) onReconnect(event, actionContext);
56
57
  break;
57
58
  case "goaway":
58
- if (onGoAway) startTransition(() => onGoAway(event, actionContext, (interval) => startTransition(() => setRefreshOnInterval(interval))));
59
+ if (onGoAway) onGoAway(event, actionContext, (interval) => setRefreshOnInterval(interval));
59
60
  else if (!onGoAway) handleError(new Error(`Sanity Live connection closed, automatic revalidation is disabled, the server gave this reason: ${event.reason}`, { cause: event }));
60
61
  break;
61
62
  default:
@@ -65,7 +66,7 @@ function SanityLive(props) {
65
66
  });
66
67
  useEffect(() => {
67
68
  const subscription = client.live.events({
68
- includeDrafts: includeAllDocuments,
69
+ includeDrafts,
69
70
  tag: requestTag
70
71
  }).subscribe({
71
72
  next: handleLiveEvent,
@@ -75,7 +76,7 @@ function SanityLive(props) {
75
76
  }, [
76
77
  client.live,
77
78
  requestTag,
78
- includeAllDocuments
79
+ includeDrafts
79
80
  ]);
80
81
  return /* @__PURE__ */ jsxs(Fragment, { children: [
81
82
  refreshOnFocus && /* @__PURE__ */ jsx(RefreshOnFocus, {}),
@@ -85,12 +86,12 @@ function SanityLive(props) {
85
86
  ] });
86
87
  }
87
88
  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"}`);
89
+ const handleWelcome = (_, { includeDrafts }) => {
90
+ console.info(`<SanityLive${includeDrafts ? " includeDrafts" : ""}> is connected and listening for live events to ${includeDrafts ? "all content including drafts and version documents in content releases" : "published content"}`);
90
91
  };
91
- const handleGoaway = (event, { includeAllDocuments }, setLongPollingInterval) => {
92
+ const handleGoaway = (event, { includeDrafts }, setLongPollingInterval) => {
92
93
  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
+ console.warn(`<SanityLive${includeDrafts ? " includeDrafts" : ""}> 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
95
  setLongPollingInterval(interval);
95
96
  };
96
97
  export { SanityLive as default };
@@ -1 +1 @@
1
- {"version":3,"file":"SanityLive.js","names":[],"sources":["../src/live/client-components/SanityLive.tsx"],"sourcesContent":["import {createClient, type InitializedClientConfig, type LiveEvent} from '@sanity/client'\nimport dynamic from 'next/dynamic'\nimport {startTransition, useEffect, useEffectEvent, useMemo, useState} from 'react'\n\nimport {isCorsOriginError} from '#live/isCorsOriginError'\nimport type {\n SanityLiveAction,\n SanityLiveActionContext,\n SanityLiveOnError,\n SanityLiveOnGoaway,\n SanityLiveOnReconnect,\n SanityLiveOnRestart,\n SanityLiveOnWelcome,\n} from '#live/types'\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((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 startTransition(() => setRefreshOnInterval(false))\n\n if (onWelcome) {\n startTransition(() => onWelcome(event, actionContext))\n }\n break\n }\n case 'message': {\n startTransition(() => 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 startTransition(() => setRefreshOnInterval(false))\n\n if (onRestart) {\n startTransition(() => 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 startTransition(() => setRefreshOnInterval(false))\n\n if (onReconnect) {\n startTransition(() => onReconnect(event, actionContext))\n }\n break\n }\n case 'goaway': {\n if (onGoAway) {\n startTransition(() =>\n onGoAway(event, actionContext, (interval) =>\n startTransition(() => setRefreshOnInterval(interval)),\n ),\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: handleLiveEvent,\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":"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"}
1
+ {"version":3,"file":"SanityLive.js","names":[],"sources":["../src/live/client-components/SanityLive.tsx"],"sourcesContent":["import {createClient, type InitializedClientConfig, type LiveEvent} from '@sanity/client'\nimport dynamic from 'next/dynamic'\nimport {useEffect, useEffectEvent, useMemo, useState} from 'react'\n\nimport {cacheTagPrefixes} from '#live/constants'\nimport {isCorsOriginError} from '#live/isCorsOriginError'\nimport type {\n SanityLiveAction,\n SanityLiveActionContext,\n SanityLiveOnError,\n SanityLiveOnGoaway,\n SanityLiveOnReconnect,\n SanityLiveOnRestart,\n SanityLiveOnWelcome,\n} from '#live/types'\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 includeDrafts?: 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 includeDrafts = 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 = {includeDrafts} 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 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 const handleLiveEvent = useEffectEvent((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 void onWelcome(event, actionContext)\n }\n break\n }\n case 'message': {\n void action(\n event.tags.map(\n (tag) =>\n `${includeDrafts ? cacheTagPrefixes.drafts : cacheTagPrefixes.published}${tag}`,\n ),\n )\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 void 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 void onReconnect(event, actionContext)\n }\n break\n }\n case 'goaway': {\n if (onGoAway) {\n void onGoAway(event, actionContext, (interval) => setRefreshOnInterval(interval))\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, tag: requestTag})\n .subscribe({next: handleLiveEvent, error: handleError})\n return () => subscription.unsubscribe()\n }, [client.live, requestTag, includeDrafts])\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 = (_, {includeDrafts}) => {\n // oxlint-disable-next-line no-console\n console.info(\n `<SanityLive${includeDrafts ? ' includeDrafts' : ''}> is connected and listening for live events to ${includeDrafts ? 'all content including drafts and version documents in content releases' : 'published content'}`,\n )\n}\n\nconst handleGoaway: SanityLiveOnGoaway = (event, {includeDrafts}, setLongPollingInterval) => {\n const interval = 30_000\n console.warn(\n `<SanityLive${includeDrafts ? ' includeDrafts' : ''}> 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":"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"}
package/dist/constants.js CHANGED
@@ -1,6 +1,8 @@
1
1
  const revalidate = 31536e3;
2
- const PUBLISHED_SYNC_TAG_PREFIX = "sp:";
3
- const DRAFT_SYNC_TAG_PREFIX = "sd:";
4
- export { PUBLISHED_SYNC_TAG_PREFIX as n, revalidate as r, DRAFT_SYNC_TAG_PREFIX as t };
2
+ const cacheTagPrefixes = {
3
+ published: "sanity:",
4
+ drafts: "sanity:drafts:"
5
+ };
6
+ export { revalidate as n, cacheTagPrefixes as t };
5
7
 
6
8
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","names":[],"sources":["../src/live/shared/constants.ts"],"sourcesContent":["/**\n * Sanity Live handles on-demand revalidation, so the default 15min time based revalidation is too short\n */\nexport const revalidate = 31_536_000 // 365 days\n\nexport const PUBLISHED_SYNC_TAG_PREFIX = 'sp:'\nexport const DRAFT_SYNC_TAG_PREFIX = 'sd:'\n"],"mappings":"AAGA,MAAa,aAAa;AAE1B,MAAa,4BAA4B;AACzC,MAAa,wBAAwB"}
1
+ {"version":3,"file":"constants.js","names":[],"sources":["../src/live/shared/constants.ts"],"sourcesContent":["import type {CacheTagPrefixes} from './types'\n\n/**\n * Sanity Live handles on-demand revalidation, so the default 15min time based revalidation is too short\n */\nexport const revalidate = 31_536_000 // 365 days\n\nexport const cacheTagPrefixes = {\n published: 'sanity:',\n drafts: 'sanity:drafts:',\n} satisfies CacheTagPrefixes\n"],"mappings":"AAKA,MAAa,aAAa;AAE1B,MAAa,mBAAmB;CAC9B,WAAW;CACX,QAAQ;CACT"}
@@ -1,9 +1,9 @@
1
- import { a as SanityLiveAction, c as SanityLiveOnGoaway, d as SanityLiveOnWelcome, l as SanityLiveOnReconnect, s as SanityLiveOnError, u as SanityLiveOnRestart } from "../../types.js";
1
+ import { a as SanityLiveAction, c as SanityLiveOnReconnect, l as SanityLiveOnRestart, o as SanityLiveOnError, s as SanityLiveOnGoaway, u as SanityLiveOnWelcome } from "../../types.js";
2
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
- includeAllDocuments?: boolean;
6
+ includeDrafts?: boolean;
7
7
  requestTag: string;
8
8
  action: SanityLiveAction;
9
9
  onError: SanityLiveOnError | false | undefined;
@@ -1 +1 @@
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;;;AAhCK;cCLM,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":";;UAqBU,kBAAA,SAA2B,IAAA,CACnC,uBAAA;AAAA,UAUe,eAAA;EACf,MAAA,EAAQ,kBAAA;EACR,aAAA;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;;;AAhCK;cCNM,UAAA,EAAY,KAAA,CAAM,aAAA,CAAc,eAAA"}
@@ -1,5 +1,5 @@
1
1
  import { t as isCorsOriginError } from "../../../isCorsOriginError.js";
2
- import { n as PUBLISHED_SYNC_TAG_PREFIX, r as revalidate, t as DRAFT_SYNC_TAG_PREFIX } from "../../../constants.js";
2
+ import { n as revalidate, t as cacheTagPrefixes } from "../../../constants.js";
3
3
  import { t as parseTags } from "../../../parseTags.js";
4
4
  import { t as resolvePerspectiveFromCookies } from "../../../resolvePerspectiveFromCookies.js";
5
5
  import { jsx } from "react/jsx-runtime";
@@ -19,6 +19,7 @@ function defineLive(config) {
19
19
  const { token: originalToken, perspective: originalPerspective = "published" } = client.config();
20
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
+ const cacheTagPrefix = perspective === "published" ? cacheTagPrefixes.published : cacheTagPrefixes.drafts;
22
23
  const { result, resultSourceMap, syncTags } = await client.fetch(query, await params, {
23
24
  filterResponse: false,
24
25
  returnQuery: false,
@@ -29,7 +30,7 @@ function defineLive(config) {
29
30
  tag: requestTag,
30
31
  token: perspective === "published" ? originalToken : serverToken || originalToken
31
32
  });
32
- const tags = [...customCacheTags, ...(syncTags || []).map((tag) => `${perspective === "published" ? PUBLISHED_SYNC_TAG_PREFIX : DRAFT_SYNC_TAG_PREFIX}${tag}`)];
33
+ const tags = [...customCacheTags, ...(syncTags || []).map((tag) => `${cacheTagPrefix}${tag}`)];
33
34
  cacheTag(...tags);
34
35
  cacheLife({ revalidate });
35
36
  return {
@@ -39,8 +40,8 @@ function defineLive(config) {
39
40
  };
40
41
  };
41
42
  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
- const shouldIncludeDrafts = typeof browserToken === "string" && includeAllDocuments;
43
+ const { includeDrafts = false, action = actionUpdateTags, onReconnect = actionRefresh, onRestart = actionRefresh, onWelcome, onError, onGoAway, refreshOnMount = false, refreshOnFocus = false, refreshOnReconnect = false, requestTag = "next-loader.live.cache-components" } = props;
44
+ const shouldIncludeDrafts = typeof browserToken === "string" && includeDrafts;
44
45
  const { projectId, dataset, apiHost, apiVersion, useProjectHostname, requestTagPrefix } = client.config();
45
46
  const { origin } = new URL(client.getUrl("", false));
46
47
  preconnect(origin);
@@ -54,7 +55,7 @@ function defineLive(config) {
54
55
  requestTagPrefix,
55
56
  token: shouldIncludeDrafts ? browserToken : void 0
56
57
  },
57
- includeAllDocuments: shouldIncludeDrafts,
58
+ includeDrafts: shouldIncludeDrafts,
58
59
  action,
59
60
  onReconnect,
60
61
  onRestart,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["SanityLive","SanityLiveClientComponent"],"sources":["../../../../src/live/conditions/next-js/defineLive.tsx"],"sourcesContent":["import {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\nimport {DRAFT_SYNC_TAG_PREFIX, PUBLISHED_SYNC_TAG_PREFIX, revalidate} from '#live/constants'\nimport type {DefinedFetchType, DefinedLiveProps, DefineLiveOptions} from '#live/types'\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"}
1
+ {"version":3,"file":"index.js","names":["SanityLive","SanityLiveClientComponent"],"sources":["../../../../src/live/conditions/next-js/defineLive.tsx"],"sourcesContent":["import {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\nimport {cacheTagPrefixes, revalidate} from '#live/constants'\nimport type {DefinedFetchType, DefinedLiveProps, DefineLiveOptions} from '#live/types'\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 cacheTagPrefix =\n perspective === 'published' ? cacheTagPrefixes.published : cacheTagPrefixes.drafts\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 = [...customCacheTags, ...(syncTags || []).map((tag) => `${cacheTagPrefix}${tag}`)]\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 includeDrafts = 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' && includeDrafts\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 includeDrafts={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,iBACJ,gBAAgB,cAAc,iBAAiB,YAAY,iBAAiB;EAC9E,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,CAAC,GAAG,iBAAiB,IAAI,YAAY,EAAE,EAAE,KAAK,QAAQ,GAAG,iBAAiB,MAAM,CAAC;AAI9F,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,gBAAgB,OAChB,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,eAAe;GACP;GACK;GACF;GACA;GACF;GACC;GACE;GACI;GACA;GACI;IACpB;;AAGN,cAAW,cAAc;AAEzB,QAAO;EACQ;EACb,YAAYD;EACb"}
@@ -1,5 +1,5 @@
1
1
  import { t as isCorsOriginError } from "../../../isCorsOriginError.js";
2
- import { n as PUBLISHED_SYNC_TAG_PREFIX, t as DRAFT_SYNC_TAG_PREFIX } from "../../../constants.js";
2
+ import { t as cacheTagPrefixes } from "../../../constants.js";
3
3
  import { t as parseTags } from "../../../parseTags.js";
4
4
  import { t as sanitizePerspective } from "../../../sanitizePerspective.js";
5
5
  import { t as resolvePerspectiveFromCookies } from "../../../resolvePerspectiveFromCookies.js";
@@ -25,7 +25,7 @@ function defineLive(config) {
25
25
  const perspective = _perspective ?? await resolveCookiePerspective(originalPerspective === "raw" ? "published" : originalPerspective);
26
26
  const useCdn = perspective === "published";
27
27
  const revalidate = false;
28
- const cacheTagPrefix = perspective === "published" ? PUBLISHED_SYNC_TAG_PREFIX : DRAFT_SYNC_TAG_PREFIX;
28
+ const cacheTagPrefix = perspective === "published" ? cacheTagPrefixes.published : cacheTagPrefixes.drafts;
29
29
  const { syncTags } = await client.fetch(query, await params, {
30
30
  filterResponse: false,
31
31
  perspective,
@@ -60,9 +60,9 @@ function defineLive(config) {
60
60
  };
61
61
  };
62
62
  const SanityLive$2 = async function SanityLive$1(props) {
63
- 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
+ const { includeDrafts = (await draftMode()).isEnabled, action = actionUpdateTags, onReconnect = actionRefresh, onRestart = actionRefresh, onWelcome = false, onError = false, onGoAway = false, refreshOnMount, refreshOnFocus, refreshOnReconnect, requestTag = "next-loader.live" } = props;
64
64
  const { projectId, dataset, apiHost, apiVersion, useProjectHostname, requestTagPrefix } = client.config();
65
- const shouldIncludeAllDocuments = typeof browserToken === "string" && includeAllDocuments;
65
+ const shouldIncludeDrafts = typeof browserToken === "string" && includeDrafts;
66
66
  const { origin } = new URL(client.getUrl("", false));
67
67
  preconnect(origin);
68
68
  return /* @__PURE__ */ jsx(SanityLive, {
@@ -73,9 +73,9 @@ function defineLive(config) {
73
73
  apiVersion,
74
74
  useProjectHostname,
75
75
  requestTagPrefix,
76
- token: shouldIncludeAllDocuments ? browserToken : void 0
76
+ token: shouldIncludeDrafts ? browserToken : void 0
77
77
  },
78
- includeAllDocuments: shouldIncludeAllDocuments,
78
+ includeDrafts: shouldIncludeDrafts,
79
79
  action,
80
80
  onReconnect,
81
81
  onRestart,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["SanityLive","SanityLiveClientComponent"],"sources":["../../../../src/live/conditions/react-server/defineLive.tsx"],"sourcesContent":["import {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\nimport {DRAFT_SYNC_TAG_PREFIX, PUBLISHED_SYNC_TAG_PREFIX} from '#live/constants'\nimport {sanitizePerspective} from '#live/sanitizePerspective'\nimport type {DefinedFetchType, DefinedLiveProps, DefineLiveOptions} from '#live/types'\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 = [],\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 const cacheTagPrefix =\n perspective === 'published' ? PUBLISHED_SYNC_TAG_PREFIX : DRAFT_SYNC_TAG_PREFIX\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, 'fetch-sync-tags'].map((tag) => `${cacheTagPrefix}${tag}`)},\n useCdn,\n cacheMode: useCdn ? 'noStale' : undefined,\n tag: [requestTag, 'fetch-sync-tags'].filter(Boolean).join('.'),\n })\n\n const cacheTags = [...tags, ...(syncTags?.map((tag) => `${cacheTagPrefix}${tag}`) || [])]\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":"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"}
1
+ {"version":3,"file":"index.js","names":["SanityLive","SanityLiveClientComponent"],"sources":["../../../../src/live/conditions/react-server/defineLive.tsx"],"sourcesContent":["import {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\nimport {cacheTagPrefixes} from '#live/constants'\nimport {sanitizePerspective} from '#live/sanitizePerspective'\nimport type {DefinedFetchType, DefinedLiveProps, DefineLiveOptions} from '#live/types'\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 = [],\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 const cacheTagPrefix =\n perspective === 'published' ? cacheTagPrefixes.published : cacheTagPrefixes.drafts\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: {\n revalidate,\n tags: [...tags, 'fetch-sync-tags'].map((tag) => `${cacheTagPrefix}${tag}`),\n },\n useCdn,\n cacheMode: useCdn ? 'noStale' : undefined,\n tag: [requestTag, 'fetch-sync-tags'].filter(Boolean).join('.'),\n })\n\n const cacheTags = [...tags, ...(syncTags?.map((tag) => `${cacheTagPrefix}${tag}`) || [])]\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 includeDrafts = (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 shouldIncludeDrafts = typeof browserToken === 'string' && includeDrafts\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 includeDrafts={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,\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,13 +1,9 @@
1
- import { o as SanityLiveActionContext } from "../../types.js";
2
- import { LiveEvent } from "@sanity/client";
3
1
  /**
4
2
  * Used by `<SanityLive action={actionRevalidateTags} />`
5
3
  */
6
- declare function actionUpdateTags(event: Extract<LiveEvent, {
7
- type: "message";
8
- }>, context: SanityLiveActionContext): Promise<void>;
4
+ declare function actionUpdateTags(unsafeTags: unknown): Promise<void>;
9
5
  /**
10
- * Used by `<SanityLive reconnectAction={actionRefresh} restartAction={actionRefresh} />`
6
+ * Used by `<SanityLive onReconnect={actionRefresh} onRestart={actionRefresh} />`
11
7
  */
12
8
  declare function actionRefresh(): Promise<void>;
13
9
  export { actionRefresh, actionUpdateTags };
@@ -1 +1 @@
1
- {"version":3,"file":"index.default.d.ts","names":[],"sources":["../../../src/live/server-actions/index.default.ts"],"mappings":";;;AAYA;;iBAAsB,gBAAA,CACpB,KAAA,EAAO,OAAA,CAAQ,SAAA;EAAY,IAAA;AAAA,IAC3B,OAAA,EAAS,uBAAA,GACR,OAAA;;;;iBAuCmB,aAAA,CAAA,GAAiB,OAAA"}
1
+ {"version":3,"file":"index.default.d.ts","names":[],"sources":["../../../src/live/server-actions/index.default.ts"],"mappings":"AAUA;;;AAAA,iBAAsB,gBAAA,CAAiB,UAAA,YAAsB,OAAA;;AAuB7D;;iBAAsB,aAAA,CAAA,GAAiB,OAAA"}
@@ -2,29 +2,16 @@
2
2
  import { t as parseTags } from "../../parseTags.js";
3
3
  import { draftMode } from "next/headers";
4
4
  import { refresh, revalidateTag, updateTag } from "next/cache";
5
- async function actionUpdateTags(event, context) {
6
- if (!Array.isArray(event.tags)) {
7
- console.warn(`<SanityLive ${context.includeAllDocuments ? "includeAllDocuments " : ""}/> action called with non-array tags`, event);
5
+ async function actionUpdateTags(unsafeTags) {
6
+ const { tags, prefixType } = parseTags(unsafeTags);
7
+ if ((await draftMode()).isEnabled) {
8
+ console.warn(`<SanityLive ${prefixType === "drafts" ? "includeDrafts " : ""}/> action called in draft mode, cache is bypassed in draft mode so the refresh() function is called instead of updateTag()`, { tags });
9
+ refresh();
8
10
  return;
9
11
  }
10
- if (context.includeAllDocuments) {
11
- if (!(await draftMode()).isEnabled) {
12
- console.warn("<SanityLive includeAllDocuments /> action called in non-draft mode, ignoring", {
13
- event,
14
- context
15
- });
16
- return;
17
- }
18
- const tags = parseTags(event.tags, context);
19
- for (const tag of tags) updateTag(tag);
20
- console.log(`<SanityLive includeAllDocuments /> updated tags: ${tags.join(", ")}`);
21
- } else {
22
- revalidateTag("sanity:fetch-sync-tags", "max");
23
- console.log(`<SanityLive /> revalidated tag: "sanity:fetch-sync-tags" with cache profile "max"`);
24
- const tags = parseTags(event.tags, context);
25
- for (const tag of tags) updateTag(tag);
26
- console.log(`<SanityLive /> updated tags: ${tags.join(", ")}`);
27
- }
12
+ for (const tag of tags) updateTag(tag);
13
+ revalidateTag("sanity:fetch-sync-tags", "max");
14
+ console.log(`<SanityLive ${prefixType === "drafts" ? "includeDrafts " : ""}/> updated tags: ${tags.join(", ")} and revalidated tag: "sanity:fetch-sync-tags" with cache profile "max"`);
28
15
  }
29
16
  async function actionRefresh() {
30
17
  refresh();
@@ -1 +1 @@
1
- {"version":3,"file":"index.default.js","names":[],"sources":["../../../src/live/server-actions/index.default.ts"],"sourcesContent":["'use server'\n\nimport type {LiveEvent} from '@sanity/client'\nimport {refresh, revalidateTag, updateTag} from 'next/cache'\nimport {draftMode} from 'next/headers'\n\nimport {parseTags} from '#live/parseTags'\nimport type {SanityLiveActionContext} from '#live/types'\n\n/**\n * Used by `<SanityLive action={actionRevalidateTags} />`\n */\nexport async function actionUpdateTags(\n event: Extract<LiveEvent, {type: 'message'}>,\n context: SanityLiveActionContext,\n): Promise<void> {\n if (!Array.isArray(event.tags)) {\n console.warn(\n `<SanityLive ${context.includeAllDocuments ? 'includeAllDocuments ' : ''}/> action called with non-array tags`,\n event,\n )\n return undefined\n }\n\n if (context.includeAllDocuments) {\n if (!(await draftMode()).isEnabled) {\n console.warn('<SanityLive includeAllDocuments /> action called in non-draft mode, ignoring', {\n event,\n context,\n })\n return undefined\n }\n const tags = parseTags(event.tags, context)\n for (const tag of tags) {\n updateTag(tag)\n }\n // oxlint-disable-next-line no-console\n console.log(`<SanityLive includeAllDocuments /> updated tags: ${tags.join(', ')}`)\n } else {\n revalidateTag('sanity:fetch-sync-tags', 'max')\n // oxlint-disable-next-line no-console\n console.log(`<SanityLive /> revalidated tag: \"sanity:fetch-sync-tags\" with cache profile \"max\"`)\n const tags = parseTags(event.tags, context)\n for (const tag of tags) {\n updateTag(tag)\n }\n // oxlint-disable-next-line no-console\n console.log(`<SanityLive /> updated tags: ${tags.join(', ')}`)\n }\n}\n\n/**\n * Used by `<SanityLive reconnectAction={actionRefresh} restartAction={actionRefresh} />`\n */\nexport async function actionRefresh(): Promise<void> {\n refresh()\n}\n"],"mappings":";;;;AAYA,eAAsB,iBACpB,OACA,SACe;AACf,KAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,EAAE;AAC9B,UAAQ,KACN,eAAe,QAAQ,sBAAsB,yBAAyB,GAAG,uCACzE,MACD;AACD;;AAGF,KAAI,QAAQ,qBAAqB;AAC/B,MAAI,EAAE,MAAM,WAAW,EAAE,WAAW;AAClC,WAAQ,KAAK,gFAAgF;IAC3F;IACA;IACD,CAAC;AACF;;EAEF,MAAM,OAAO,UAAU,MAAM,MAAM,QAAQ;AAC3C,OAAK,MAAM,OAAO,KAChB,WAAU,IAAI;AAGhB,UAAQ,IAAI,oDAAoD,KAAK,KAAK,KAAK,GAAG;QAC7E;AACL,gBAAc,0BAA0B,MAAM;AAE9C,UAAQ,IAAI,oFAAoF;EAChG,MAAM,OAAO,UAAU,MAAM,MAAM,QAAQ;AAC3C,OAAK,MAAM,OAAO,KAChB,WAAU,IAAI;AAGhB,UAAQ,IAAI,gCAAgC,KAAK,KAAK,KAAK,GAAG;;;AAOlE,eAAsB,gBAA+B;AACnD,UAAS"}
1
+ {"version":3,"file":"index.default.js","names":[],"sources":["../../../src/live/server-actions/index.default.ts"],"sourcesContent":["'use server'\n\nimport {refresh, revalidateTag, updateTag} from 'next/cache'\nimport {draftMode} from 'next/headers'\n\nimport {parseTags} from '#live/parseTags'\n\n/**\n * Used by `<SanityLive action={actionRevalidateTags} />`\n */\nexport async function actionUpdateTags(unsafeTags: unknown): Promise<void> {\n const {tags, prefixType} = parseTags(unsafeTags)\n if ((await draftMode()).isEnabled) {\n console.warn(\n `<SanityLive ${prefixType === 'drafts' ? 'includeDrafts ' : ''}/> action called in draft mode, cache is bypassed in draft mode so the refresh() function is called instead of updateTag()`,\n {tags},\n )\n refresh()\n return undefined\n }\n for (const tag of tags) {\n updateTag(tag)\n }\n revalidateTag('sanity:fetch-sync-tags', 'max')\n // oxlint-disable-next-line no-console\n console.log(\n `<SanityLive ${prefixType === 'drafts' ? 'includeDrafts ' : ''}/> updated tags: ${tags.join(', ')} and revalidated tag: \"sanity:fetch-sync-tags\" with cache profile \"max\"`,\n )\n}\n\n/**\n * Used by `<SanityLive onReconnect={actionRefresh} onRestart={actionRefresh} />`\n */\nexport async function actionRefresh(): Promise<void> {\n refresh()\n}\n"],"mappings":";;;;AAUA,eAAsB,iBAAiB,YAAoC;CACzE,MAAM,EAAC,MAAM,eAAc,UAAU,WAAW;AAChD,MAAK,MAAM,WAAW,EAAE,WAAW;AACjC,UAAQ,KACN,eAAe,eAAe,WAAW,mBAAmB,GAAG,6HAC/D,EAAC,MAAK,CACP;AACD,WAAS;AACT;;AAEF,MAAK,MAAM,OAAO,KAChB,WAAU,IAAI;AAEhB,eAAc,0BAA0B,MAAM;AAE9C,SAAQ,IACN,eAAe,eAAe,WAAW,mBAAmB,GAAG,mBAAmB,KAAK,KAAK,KAAK,CAAC,yEACnG;;AAMH,eAAsB,gBAA+B;AACnD,UAAS"}
@@ -1,13 +1,9 @@
1
- import { o as SanityLiveActionContext } from "../../types.js";
2
- import { LiveEvent } from "@sanity/client";
3
1
  /**
4
2
  * Used by `<SanityLive action={actionRevalidateTags} />`
5
3
  */
6
- declare function actionUpdateTags(event: Extract<LiveEvent, {
7
- type: "message";
8
- }>, context: SanityLiveActionContext): Promise<void>;
4
+ declare function actionUpdateTags(unsafeTags: unknown): Promise<void>;
9
5
  /**
10
- * Used by `<SanityLive reconnectAction={actionRefresh} restartAction={actionRefresh} />`
6
+ * Used by `<SanityLive onReconnect={actionRefresh} onRestart={actionRefresh} />`
11
7
  */
12
8
  declare function actionRefresh(): Promise<void>;
13
9
  export { actionRefresh, actionUpdateTags };
@@ -1 +1 @@
1
- {"version":3,"file":"index.next-js.d.ts","names":[],"sources":["../../../src/live/server-actions/index.next-js.ts"],"mappings":";;;AAYA;;iBAAsB,gBAAA,CACpB,KAAA,EAAO,OAAA,CAAQ,SAAA;EAAY,IAAA;AAAA,IAC3B,OAAA,EAAS,uBAAA,GACR,OAAA;;;;iBA8BmB,aAAA,CAAA,GAAiB,OAAA"}
1
+ {"version":3,"file":"index.next-js.d.ts","names":[],"sources":["../../../src/live/server-actions/index.next-js.ts"],"mappings":"AAUA;;;AAAA,iBAAsB,gBAAA,CAAiB,UAAA,YAAsB,OAAA;;AAsB7D;;iBAAsB,aAAA,CAAA,GAAiB,OAAA"}
@@ -2,22 +2,15 @@
2
2
  import { t as parseTags } from "../../parseTags.js";
3
3
  import { draftMode } from "next/headers";
4
4
  import { refresh, updateTag } from "next/cache";
5
- async function actionUpdateTags(event, context) {
6
- if (!Array.isArray(event.tags)) {
7
- console.warn(`<SanityLive ${context.includeAllDocuments ? "includeAllDocuments " : ""}/> action called with non-array tags`, event);
8
- return;
9
- }
5
+ async function actionUpdateTags(unsafeTags) {
6
+ const { tags, prefixType } = parseTags(unsafeTags);
10
7
  if ((await draftMode()).isEnabled) {
11
- console.warn(`<SanityLive ${context.includeAllDocuments ? "includeAllDocuments " : ""}/> action called in draft mode, cache is bypassed in draft mode so the refresh() function is called instead of updateTag()`, {
12
- event,
13
- context
14
- });
8
+ console.warn(`<SanityLive ${prefixType === "drafts" ? "includeDrafts " : ""}/> action called in draft mode, cache is bypassed in draft mode so the refresh() function is called instead of updateTag()`, { tags });
15
9
  refresh();
16
10
  return;
17
11
  }
18
- const tags = parseTags(event.tags, context);
19
12
  for (const tag of tags) updateTag(tag);
20
- console.log(`<SanityLive ${context.includeAllDocuments ? "includeAllDocuments " : ""}/> updated tags: ${tags.join(", ")}`);
13
+ console.log(`<SanityLive ${prefixType === "drafts" ? "includeDrafts " : ""}/> updated tags: ${tags.join(", ")}`);
21
14
  }
22
15
  async function actionRefresh() {
23
16
  refresh();
@@ -1 +1 @@
1
- {"version":3,"file":"index.next-js.js","names":[],"sources":["../../../src/live/server-actions/index.next-js.ts"],"sourcesContent":["'use server'\n\nimport type {LiveEvent} from '@sanity/client'\nimport {refresh, updateTag} from 'next/cache'\nimport {draftMode} from 'next/headers'\n\nimport {parseTags} from '#live/parseTags'\nimport type {SanityLiveActionContext} from '#live/types'\n\n/**\n * Used by `<SanityLive action={actionRevalidateTags} />`\n */\nexport async function actionUpdateTags(\n event: Extract<LiveEvent, {type: 'message'}>,\n context: SanityLiveActionContext,\n): Promise<void> {\n if (!Array.isArray(event.tags)) {\n console.warn(\n `<SanityLive ${context.includeAllDocuments ? 'includeAllDocuments ' : ''}/> action called with non-array tags`,\n event,\n )\n return undefined\n }\n if ((await draftMode()).isEnabled) {\n console.warn(\n `<SanityLive ${context.includeAllDocuments ? 'includeAllDocuments ' : ''}/> action called in draft mode, cache is bypassed in draft mode so the refresh() function is called instead of updateTag()`,\n {event, context},\n )\n refresh()\n return undefined\n }\n\n const tags = parseTags(event.tags, context)\n for (const tag of tags) {\n updateTag(tag)\n }\n // oxlint-disable-next-line no-console\n console.log(\n `<SanityLive ${context.includeAllDocuments ? 'includeAllDocuments ' : ''}/> updated tags: ${tags.join(', ')}`,\n )\n}\n\n/**\n * Used by `<SanityLive reconnectAction={actionRefresh} restartAction={actionRefresh} />`\n */\nexport async function actionRefresh(): Promise<void> {\n refresh()\n}\n"],"mappings":";;;;AAYA,eAAsB,iBACpB,OACA,SACe;AACf,KAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,EAAE;AAC9B,UAAQ,KACN,eAAe,QAAQ,sBAAsB,yBAAyB,GAAG,uCACzE,MACD;AACD;;AAEF,MAAK,MAAM,WAAW,EAAE,WAAW;AACjC,UAAQ,KACN,eAAe,QAAQ,sBAAsB,yBAAyB,GAAG,6HACzE;GAAC;GAAO;GAAQ,CACjB;AACD,WAAS;AACT;;CAGF,MAAM,OAAO,UAAU,MAAM,MAAM,QAAQ;AAC3C,MAAK,MAAM,OAAO,KAChB,WAAU,IAAI;AAGhB,SAAQ,IACN,eAAe,QAAQ,sBAAsB,yBAAyB,GAAG,mBAAmB,KAAK,KAAK,KAAK,GAC5G;;AAMH,eAAsB,gBAA+B;AACnD,UAAS"}
1
+ {"version":3,"file":"index.next-js.js","names":[],"sources":["../../../src/live/server-actions/index.next-js.ts"],"sourcesContent":["'use server'\n\nimport {refresh, updateTag} from 'next/cache'\nimport {draftMode} from 'next/headers'\n\nimport {parseTags} from '#live/parseTags'\n\n/**\n * Used by `<SanityLive action={actionRevalidateTags} />`\n */\nexport async function actionUpdateTags(unsafeTags: unknown): Promise<void> {\n const {tags, prefixType} = parseTags(unsafeTags)\n if ((await draftMode()).isEnabled) {\n console.warn(\n `<SanityLive ${prefixType === 'drafts' ? 'includeDrafts ' : ''}/> action called in draft mode, cache is bypassed in draft mode so the refresh() function is called instead of updateTag()`,\n {tags},\n )\n refresh()\n return undefined\n }\n for (const tag of tags) {\n updateTag(tag)\n }\n // oxlint-disable-next-line no-console\n console.log(\n `<SanityLive ${prefixType === 'drafts' ? 'includeDrafts ' : ''}/> updated tags: ${tags.join(', ')}`,\n )\n}\n\n/**\n * Used by `<SanityLive onReconnect={actionRefresh} onRestart={actionRefresh} />`\n */\nexport async function actionRefresh(): Promise<void> {\n refresh()\n}\n"],"mappings":";;;;AAUA,eAAsB,iBAAiB,YAAoC;CACzE,MAAM,EAAC,MAAM,eAAc,UAAU,WAAW;AAChD,MAAK,MAAM,WAAW,EAAE,WAAW;AACjC,UAAQ,KACN,eAAe,eAAe,WAAW,mBAAmB,GAAG,6HAC/D,EAAC,MAAK,CACP;AACD,WAAS;AACT;;AAEF,MAAK,MAAM,OAAO,KAChB,WAAU,IAAI;AAGhB,SAAQ,IACN,eAAe,eAAe,WAAW,mBAAmB,GAAG,mBAAmB,KAAK,KAAK,KAAK,GAClG;;AAMH,eAAsB,gBAA+B;AACnD,UAAS"}
@@ -1,6 +1,5 @@
1
- import { o as SanityLiveActionContext } from "./types.js";
2
1
  import { cookies } from "next/headers";
3
- import { ClientPerspective, LiveEvent, SyncTag } from "@sanity/client";
2
+ import { ClientPerspective, SyncTag } from "@sanity/client";
4
3
  type ResolvePerspectiveFromCookies = (options: {
5
4
  /**
6
5
  * You must await the cookies() function from next/headers
@@ -23,8 +22,21 @@ declare const resolvePerspectiveFromCookies: ({
23
22
  }: {
24
23
  cookies: Awaited<ReturnType<typeof cookies>>;
25
24
  }) => Promise<Exclude<ClientPerspective, "raw">>;
26
- declare const PUBLISHED_SYNC_TAG_PREFIX = "sp:";
27
- declare const DRAFT_SYNC_TAG_PREFIX = "sd:";
25
+ declare const cacheTagPrefixes: {
26
+ published: string;
27
+ drafts: string;
28
+ };
29
+ interface ParsedPublishedTags {
30
+ tags: `${typeof cacheTagPrefixes.published}${SyncTag}`[];
31
+ prefix: typeof cacheTagPrefixes.published;
32
+ prefixType: "published";
33
+ }
34
+ interface ParsedDraftTags {
35
+ tags: `${typeof cacheTagPrefixes.drafts}${SyncTag}`[];
36
+ prefix: typeof cacheTagPrefixes.drafts;
37
+ prefixType: "drafts";
38
+ }
39
+ type ParsedTags = ParsedPublishedTags | ParsedDraftTags;
28
40
  /**
29
41
  * Prefixes live event tags according to the conventions used by `defineLive().sanityFetch()`
30
42
  * so that they can be used with `import {updateTag} from 'next/cache'`.
@@ -46,8 +58,6 @@ declare const DRAFT_SYNC_TAG_PREFIX = "sd:";
46
58
  * />
47
59
  * ```
48
60
  */
49
- declare function parseTags<const Tags extends Extract<LiveEvent, {
50
- type: "message";
51
- }>["tags"]>(tags: Tags, context: SanityLiveActionContext): `${typeof PUBLISHED_SYNC_TAG_PREFIX | typeof DRAFT_SYNC_TAG_PREFIX}${SyncTag}`[];
61
+ declare function parseTags(unsafeTags: unknown): ParsedTags;
52
62
  export { ResolvePerspectiveFromCookies as n, resolvePerspectiveFromCookies as r, parseTags as t };
53
63
  //# sourceMappingURL=parseTags.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parseTags.d.ts","names":[],"sources":["../src/live/shared/resolvePerspectiveFromCookies.ts","../src/live/shared/constants.ts","../src/live/shared/parseTags.ts"],"mappings":";;;KAMY,6BAAA,IAAiC,OAAA;;AAA7C;;;;;;;;;EAWE,OAAA,EAAS,OAAA,CAAQ,UAAA,QAAkB,OAAA;AAAA,MAC/B,OAAA,CAAQ,OAAA,CAAQ,iBAAA;;;;;cAMT,6BAAA;EACX,OAAA,EAAS;AAAA;EAET,OAAA,EAAS,OAAA,CAAQ,UAAA,QAAkB,OAAA;AAAA,MACjC,OAAA,CAAQ,OAAA,CAAQ,iBAAA;AAAA,cCvBP,yBAAA;AAAA,cACA,qBAAA;;ADAb;;;;;;;;;;;;;;;;;;;;iBEoBgB,SAAA,oBAA6B,OAAA,CAAQ,SAAA;EAAY,IAAA;AAAA,WAAA,CAC/D,IAAA,EAAM,IAAA,EACN,OAAA,EAAS,uBAAA,aACE,yBAAA,UAAmC,qBAAA,GAAwB,OAAA"}
1
+ {"version":3,"file":"parseTags.d.ts","names":[],"sources":["../src/live/shared/resolvePerspectiveFromCookies.ts","../src/live/shared/constants.ts","../src/live/shared/parseTags.ts"],"mappings":";;KAMY,6BAAA,IAAiC,OAAA;EAA7C;;;;;;;;;;EAWE,OAAA,EAAS,OAAA,CAAQ,UAAA,QAAkB,OAAA;AAAA,MAC/B,OAAA,CAAQ,OAAA,CAAQ,iBAAA;;;;;cAMT,6BAAA;EACX,OAAA,EAAS;AAAA;EAET,OAAA,EAAS,OAAA,CAAQ,UAAA,QAAkB,OAAA;AAAA,MACjC,OAAA,CAAQ,OAAA,CAAQ,iBAAA;AAAA,cCrBP,gBAAA;EACX,SAAA;EACA,MAAA;AAAA;AAAA,UCLQ,mBAAA;EACR,IAAA,YAAgB,gBAAA,CAAiB,SAAA,GAAY,OAAA;EAC7C,MAAA,SAAe,gBAAA,CAAiB,SAAA;EAChC,UAAA;AAAA;AAAA,UAEQ,eAAA;EACR,IAAA,YAAgB,gBAAA,CAAiB,MAAA,GAAS,OAAA;EAC1C,MAAA,SAAe,gBAAA,CAAiB,MAAA;EAChC,UAAA;AAAA;AAAA,KAEG,UAAA,GAAa,mBAAA,GAAsB,eAAA;;;;;;;;;;;;AFUxC;;;;;;;;;;iBEagB,SAAA,CAAU,UAAA,YAAsB,UAAA"}
package/dist/parseTags.js CHANGED
@@ -1,10 +1,42 @@
1
- import { n as PUBLISHED_SYNC_TAG_PREFIX, t as DRAFT_SYNC_TAG_PREFIX } from "./constants.js";
2
- function parseTags(tags, context) {
3
- if (!Array.isArray(tags)) throw new TypeError("tags must be an array", { cause: {
4
- tags,
5
- context
6
- } });
7
- return tags.map((tag) => `${context.includeAllDocuments ? DRAFT_SYNC_TAG_PREFIX : PUBLISHED_SYNC_TAG_PREFIX}${tag}`);
1
+ import { t as cacheTagPrefixes } from "./constants.js";
2
+ function parseTags(unsafeTags) {
3
+ if (!Array.isArray(unsafeTags)) throw new TypeError("tags must be an array", { cause: { unsafeTags } });
4
+ if (unsafeTags.length === 0) throw new TypeError("tags must be an non-empty array", { cause: { unsafeTags } });
5
+ if (unsafeTags.some((tag) => typeof tag !== "string")) throw new TypeError("tags must be an array of strings", { cause: { unsafeTags } });
6
+ if (unsafeTags.some((tag) => tag.startsWith(cacheTagPrefixes.published))) {
7
+ const prefixType = "published";
8
+ const tags = [];
9
+ for (const tag of unsafeTags) {
10
+ if (tag.startsWith(cacheTagPrefixes.drafts)) throw new TypeError("cannot mix published and drafts tags", { cause: {
11
+ tag,
12
+ unsafeTags
13
+ } });
14
+ if (!tag.startsWith(cacheTagPrefixes.published)) throw new TypeError("tag must start with a valid prefix", { cause: { tag } });
15
+ tags.push(tag);
16
+ }
17
+ return {
18
+ tags,
19
+ prefix: cacheTagPrefixes.published,
20
+ prefixType
21
+ };
22
+ } else if (unsafeTags.some((tag) => tag.startsWith(cacheTagPrefixes.drafts))) {
23
+ const prefixType = "drafts";
24
+ const tags = [];
25
+ for (const tag of unsafeTags) {
26
+ if (tag.startsWith(cacheTagPrefixes.published)) throw new TypeError("cannot mix published and drafts tags", { cause: {
27
+ tag,
28
+ unsafeTags
29
+ } });
30
+ if (!tag.startsWith(cacheTagPrefixes.drafts)) throw new TypeError("tag must start with a valid prefix", { cause: { tag } });
31
+ tags.push(tag);
32
+ }
33
+ return {
34
+ tags,
35
+ prefix: cacheTagPrefixes.drafts,
36
+ prefixType
37
+ };
38
+ }
39
+ throw new Error("Failed to parse tags, no valid prefix found", { cause: { unsafeTags } });
8
40
  }
9
41
  export { parseTags as t };
10
42
 
@@ -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 {DRAFT_SYNC_TAG_PREFIX, PUBLISHED_SYNC_TAG_PREFIX} from './constants'\nimport type {SanityLiveActionContext} from './types'\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":";AA0BA,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"}
1
+ {"version":3,"file":"parseTags.js","names":[],"sources":["../src/live/shared/parseTags.ts"],"sourcesContent":["import type {SyncTag} from '@sanity/client'\n\nimport {cacheTagPrefixes} from './constants'\n\ninterface ParsedPublishedTags {\n tags: `${typeof cacheTagPrefixes.published}${SyncTag}`[]\n prefix: typeof cacheTagPrefixes.published\n prefixType: 'published'\n}\ninterface ParsedDraftTags {\n tags: `${typeof cacheTagPrefixes.drafts}${SyncTag}`[]\n prefix: typeof cacheTagPrefixes.drafts\n prefixType: 'drafts'\n}\ntype ParsedTags = ParsedPublishedTags | ParsedDraftTags\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(unsafeTags: unknown): ParsedTags {\n if (!Array.isArray(unsafeTags)) {\n throw new TypeError('tags must be an array', {cause: {unsafeTags}})\n }\n if (unsafeTags.length === 0) {\n throw new TypeError('tags must be an non-empty array', {cause: {unsafeTags}})\n }\n if (unsafeTags.some((tag) => typeof tag !== 'string')) {\n throw new TypeError('tags must be an array of strings', {cause: {unsafeTags}})\n }\n if (unsafeTags.some((tag) => tag.startsWith(cacheTagPrefixes.published))) {\n const prefixType = 'published'\n const tags: ParsedPublishedTags['tags'] = []\n // oxlint-disable-next-line no-unsafe-type-assertion\n for (const tag of unsafeTags as string[]) {\n if (tag.startsWith(cacheTagPrefixes.drafts)) {\n throw new TypeError('cannot mix published and drafts tags', {cause: {tag, unsafeTags}})\n }\n if (!tag.startsWith(cacheTagPrefixes.published)) {\n throw new TypeError('tag must start with a valid prefix', {cause: {tag}})\n }\n // oxlint-disable-next-line no-unsafe-type-assertion\n tags.push(tag as `${typeof cacheTagPrefixes.published}${SyncTag}`)\n }\n return {tags, prefix: cacheTagPrefixes.published, prefixType}\n } else if (unsafeTags.some((tag) => tag.startsWith(cacheTagPrefixes.drafts))) {\n const prefixType = 'drafts'\n const tags: ParsedDraftTags['tags'] = []\n // oxlint-disable-next-line no-unsafe-type-assertion\n for (const tag of unsafeTags as string[]) {\n if (tag.startsWith(cacheTagPrefixes.published)) {\n throw new TypeError('cannot mix published and drafts tags', {cause: {tag, unsafeTags}})\n }\n if (!tag.startsWith(cacheTagPrefixes.drafts)) {\n throw new TypeError('tag must start with a valid prefix', {cause: {tag}})\n }\n // oxlint-disable-next-line no-unsafe-type-assertion\n tags.push(tag as `${typeof cacheTagPrefixes.drafts}${SyncTag}`)\n }\n return {tags, prefix: cacheTagPrefixes.drafts, prefixType}\n }\n\n throw new Error('Failed to parse tags, no valid prefix found', {cause: {unsafeTags}})\n}\n"],"mappings":";AAqCA,SAAgB,UAAU,YAAiC;AACzD,KAAI,CAAC,MAAM,QAAQ,WAAW,CAC5B,OAAM,IAAI,UAAU,yBAAyB,EAAC,OAAO,EAAC,YAAW,EAAC,CAAC;AAErE,KAAI,WAAW,WAAW,EACxB,OAAM,IAAI,UAAU,mCAAmC,EAAC,OAAO,EAAC,YAAW,EAAC,CAAC;AAE/E,KAAI,WAAW,MAAM,QAAQ,OAAO,QAAQ,SAAS,CACnD,OAAM,IAAI,UAAU,oCAAoC,EAAC,OAAO,EAAC,YAAW,EAAC,CAAC;AAEhF,KAAI,WAAW,MAAM,QAAQ,IAAI,WAAW,iBAAiB,UAAU,CAAC,EAAE;EACxE,MAAM,aAAa;EACnB,MAAM,OAAoC,EAAE;AAE5C,OAAK,MAAM,OAAO,YAAwB;AACxC,OAAI,IAAI,WAAW,iBAAiB,OAAO,CACzC,OAAM,IAAI,UAAU,wCAAwC,EAAC,OAAO;IAAC;IAAK;IAAW,EAAC,CAAC;AAEzF,OAAI,CAAC,IAAI,WAAW,iBAAiB,UAAU,CAC7C,OAAM,IAAI,UAAU,sCAAsC,EAAC,OAAO,EAAC,KAAI,EAAC,CAAC;AAG3E,QAAK,KAAK,IAAwD;;AAEpE,SAAO;GAAC;GAAM,QAAQ,iBAAiB;GAAW;GAAW;YACpD,WAAW,MAAM,QAAQ,IAAI,WAAW,iBAAiB,OAAO,CAAC,EAAE;EAC5E,MAAM,aAAa;EACnB,MAAM,OAAgC,EAAE;AAExC,OAAK,MAAM,OAAO,YAAwB;AACxC,OAAI,IAAI,WAAW,iBAAiB,UAAU,CAC5C,OAAM,IAAI,UAAU,wCAAwC,EAAC,OAAO;IAAC;IAAK;IAAW,EAAC,CAAC;AAEzF,OAAI,CAAC,IAAI,WAAW,iBAAiB,OAAO,CAC1C,OAAM,IAAI,UAAU,sCAAsC,EAAC,OAAO,EAAC,KAAI,EAAC,CAAC;AAG3E,QAAK,KAAK,IAAqD;;AAEjE,SAAO;GAAC;GAAM,QAAQ,iBAAiB;GAAQ;GAAW;;AAG5D,OAAM,IAAI,MAAM,+CAA+C,EAAC,OAAO,EAAC,YAAW,EAAC,CAAC"}
package/dist/types.d.ts CHANGED
@@ -39,15 +39,13 @@ type DefinedFetchType = <const QueryString extends string>(options: {
39
39
  * TODO: docs
40
40
  */
41
41
  interface SanityLiveActionContext {
42
- includeAllDocuments: boolean;
42
+ includeDrafts: boolean;
43
43
  }
44
44
  /**
45
45
  * TODO: docs
46
46
  * Has a default implementation tailed the nextjs env and config
47
47
  */
48
- type SanityLiveAction = (event: Extract<LiveEvent, {
49
- type: "message";
50
- }>, context: SanityLiveActionContext) => Promise<void>;
48
+ type SanityLiveAction = (unsafeTags: unknown) => Promise<void>;
51
49
  /**
52
50
  * TODO: docs
53
51
  * If not defined it'll throw the error during render instead, which will crash the react app
@@ -86,7 +84,7 @@ interface DefinedLiveProps {
86
84
  /**
87
85
  * TODO: docs, settings this to `true` enables live events for draft content and requires `browserToken` to be set.
88
86
  */
89
- includeAllDocuments?: boolean;
87
+ includeDrafts?: boolean;
90
88
  /**
91
89
  * TODO: docs
92
90
  */
@@ -155,5 +153,5 @@ interface DefineLiveOptions {
155
153
  */
156
154
  stega?: boolean;
157
155
  }
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 };
156
+ export { SanityLiveAction as a, SanityLiveOnReconnect as c, PerspectiveType as i, SanityLiveOnRestart as l, DefinedFetchType as n, SanityLiveOnError as o, DefinedLiveProps as r, SanityLiveOnGoaway as s, DefineLiveOptions as t, SanityLiveOnWelcome as u };
159
157
  //# 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;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"}
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,aAAA;AAAA;AADF;;;;AAAA,KAQY,gBAAA,IAAoB,UAAA,cAAwB,OAAA;AAAxD;;;;;AAAA,KAMY,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;;;AAHZ;KAOY,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;;;;;;;KAOA,kBAAA,IACV,KAAA,EAAO,OAAA,CAAQ,SAAA;EAAY,IAAA;AAAA,IAC3B,OAAA,EAAS,uBAAA,EACT,kBAAA,GAAqB,QAAA,6BACX,OAAA;AAAA,UAOK,gBAAA;;;;EAIf,aAAA;;;;EAIA,MAAA,GAAS,gBAAA;;;;EAIT,OAAA,GAAU,iBAAA;EAjCZ;;;EAqCE,SAAA,GAAY,mBAAA;;;;EAIZ,WAAA,GAAc,qBAAA;EAtCJ;;;EA0CV,SAAA,GAAY,mBAAA;;;;EAIZ,QAAA,GAAW,kBAAA;;;AAvCb;;EA6CE,cAAA;;;;;EAKA,cAAA;EA9CU;;;;EAmDV,kBAAA;;;;;;EAOA,UAAA;AAAA;AAAA,UAGe,iBAAA;EAtDA;;;EA0Df,MAAA,EAAQ,YAAA;;;;;EAKR,WAAA;EAnCW;;;;EAwCX,YAAA;;;;;;EAMA,KAAA;AAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "next-sanity",
3
- "version": "13.0.0-cache-components.29",
3
+ "version": "13.0.0-cache-components.31",
4
4
  "description": "Sanity.io toolkit for Next.js",
5
5
  "keywords": [
6
6
  "live",