@sanity/debug-live-sync-tags

1.0.161.0.17
dist/Tool-CNMlAw5M.js.map
+dist/Tool-CNMlAw5M.js.mapNew file
+1
Index: package/dist/Tool-CNMlAw5M.js.map
===================================================================
--- package/dist/Tool-CNMlAw5M.js.map
+++ package/dist/Tool-CNMlAw5M.js.map
@@ -0,0 +1,1 @@
+{"version":3,"file":"Tool-CNMlAw5M.js","names":["{\n  events,\n  findResolvedTag,\n  showTimestamp,\n  showEventId,\n}: {\n  events: Map<string, LiveEvent & {timestamp: string}>\n  findResolvedTag: (tag: string) => string\n  showTimestamp: boolean\n  showEventId: boolean\n}","<StyledTable>\n      <thead>\n        <tr>\n          {showTimestamp && <th>time</th>}\n          {showEventId && <th>id</th>}\n          <th>type</th>\n          <th>tags</th>\n        </tr>\n      </thead>\n      <tbody>\n        {rows.map((event, i) => {\n          const tags = 'tags' in event ? event.tags : []\n          const time = new Date(event.timestamp).toLocaleTimeString()\n          const eventId = 'id' in event ? event.id : null\n          const bg =\n            i % 2 !== 0\n              ? 'color-mix(in srgb, var(--card-border-color, #ddd) 15%, transparent)'\n              : undefined\n          return (\n            <tr key={event.timestamp} style={{background: bg}}>\n              {showTimestamp && <td>{time}</td>}\n              {showEventId && <td>{eventId}</td>}\n              <td style={{fontWeight: 600}}>{event.type}</td>\n              <td style={{whiteSpace: 'normal'}}>\n                {tags.length > 0 && (\n                  <TagGrid>\n                    {tags.map((tag) => (\n                      <Fragment key={tag}>\n                        <span title={tag}>{tag}</span>\n                        <span>{findResolvedTag(tag)}</span>\n                      </Fragment>\n                    ))}\n                  </TagGrid>\n                )}\n              </td>\n            </tr>\n          )\n        })}\n      </tbody>\n    </StyledTable>","showTimestamp && <th>time</th>","showEventId && <th>id</th>","<th>type</th>","<th>tags</th>","<thead>\n        <tr>\n          {showTimestamp && <th>time</th>}\n          {showEventId && <th>id</th>}\n          <th>type</th>\n          <th>tags</th>\n        </tr>\n      </thead>","{apiVersion: '2026-03-17'}","() => new Map()","() => {\n    const subscription = client.live.events({tag: 'debug-live-sync-tags'}).subscribe({\n      next: (event) => {\n        startTransition(() =>\n          setLiveEvents((prev) => {\n            const next = new Map(prev)\n            next.set('id' in event ? event.id : new Date().toJSON(), {\n              ...event,\n              timestamp: new Date().toJSON(),\n            })\n            return next\n          }),\n        )\n      },\n      error: console.error,\n    })\n    return () => subscription.unsubscribe()\n  }","live","[client]","() => {\n    const subscription = client.live\n      .events({tag: 'debug-live-sync-tags', includeDrafts: true})\n      .subscribe({\n        next: (event) => {\n          startTransition(() =>\n            setLiveEventsIncludingAllDocuments((prev) => {\n              const next = new Map(prev)\n              next.set('id' in event ? event.id : new Date().toJSON(), {\n                ...event,\n                timestamp: new Date().toJSON(),\n              })\n              return next\n            }),\n          )\n        },\n        error: console.error,\n      })\n    return () => subscription.unsubscribe()\n  }","subscription","next","prev","event","() => {\n    const controller = new AbortController()\n    client\n      .fetch<string[]>(\n        `array::unique(*._type)`,\n        {},\n        {\n          signal: controller.signal,\n          returnQuery: false,\n          tag: 'debug-live-sync-tags',\n          filterResponse: false,\n        },\n      )\n      .then(({result, syncTags}) => {\n        if (controller.signal.aborted) return\n        setSyncTagForEverything(syncTags?.[0] ?? null)\n\n        setAllDocumentTypes((prev) => {\n          const next = new Map(prev)\n          for (const type of result) {\n            if (!next.has(type)) {\n              next.set(type, null)\n            }\n          }\n          return next\n        })\n        return\n      })\n      .catch(console.error)\n    return () => controller.abort()\n  }","{result, syncTags}","(documentType: string, resolvedDocumentType: string) =>\n    startTransition(() =>\n      setAllDocumentTypes((prev) => {\n        const next = new Map(prev)\n        next.set(documentType, resolvedDocumentType)\n        return next\n      }),\n    )","documentType","resolvedDocumentType","Array.from(allDocumentTypes.keys())","documentIdToTagMap","documentId","tag","(documentId: string, tag: string | null) =>\n    startTransition(() =>\n      setDocumentIdToTagMap((prev) => {\n        const next = new Map(prev)\n        next.set(documentId, tag)\n        return next\n      }),\n    )","documentSlugToTagMap","slug","(slug: string, tag: string | null) =>\n    startTransition(() =>\n      setDocumentSlugToTagMap((prev) => {\n        const next = new Map(prev)\n        next.set(slug, tag)\n        return next\n      }),\n    )","() => {\n    if (allDocumentTypesArray.length === 0) {\n      return undefined\n    }\n\n    const listener = client\n      .listen(\n        '*[_type in $type]',\n        {type: allDocumentTypesArray},\n        {\n          events: ['mutation'],\n          includePreviousRevision: false,\n          includeResult: true,\n          includeAllVersions: true,\n          includeMutations: false,\n          tag: 'debug-live-sync-tags',\n        },\n      )\n      .subscribe({\n        next: (event) => {\n          startTransition(() => {\n            setDocumentIdToTagMap((prev) => {\n              if (prev.has(event.documentId)) {\n                return prev\n              }\n              const next = new Map(prev)\n              next.set(event.documentId, null)\n              return next\n            })\n\n            const slugField = event.result?.['slug']\n            const slug =\n              slugField &&\n              typeof slugField === 'object' &&\n              'current' in slugField &&\n              typeof slugField.current === 'string'\n                ? slugField.current\n                : null\n            if (slug) {\n              setDocumentSlugToTagMap((prev) => {\n                if (prev.has(slug)) {\n                  return prev\n                }\n                const next = new Map(prev)\n                next.set(slug, null)\n                return next\n              })\n            }\n          })\n        },\n        error: console.error,\n      })\n    return () => listener.unsubscribe()\n  }","allDocumentTypesArray.length","'slug'","[client, allDocumentTypesArray]","() =>\n              setWhichList((prev) =>\n                prev === 'liveEvents' ? 'liveEventsIncludingAllDocuments' : 'liveEvents',\n              )","(prev) =>\n                prev === 'liveEvents' ? 'liveEventsIncludingAllDocuments' : 'liveEvents'","<Checkbox\n            checked={whichList === 'liveEventsIncludingAllDocuments'}\n            onChange={() =>\n              setWhichList((prev) =>\n                prev === 'liveEvents' ? 'liveEventsIncludingAllDocuments' : 'liveEvents',\n              )\n            }\n          />","whichList === 'liveEventsIncludingAllDocuments'","<Label size={1}>Include all documents</Label>","<Flex as=\"label\" align=\"center\" gap={2}>\n          <Checkbox\n            checked={whichList === 'liveEventsIncludingAllDocuments'}\n            onChange={() =>\n              setWhichList((prev) =>\n                prev === 'liveEvents' ? 'liveEventsIncludingAllDocuments' : 'liveEvents',\n              )\n            }\n          />\n          <Label size={1}>Include all documents</Label>\n        </Flex>","() => setShowTimestamp((prev) => !prev)","(prev) => !prev","<Checkbox checked={showTimestamp} onChange={() => setShowTimestamp((prev) => !prev)} />","<Label size={1}>Show timestamp</Label>","<Flex as=\"label\" align=\"center\" gap={2}>\n          <Checkbox checked={showTimestamp} onChange={() => setShowTimestamp((prev) => !prev)} />\n          <Label size={1}>Show timestamp</Label>\n        </Flex>","() => setShowEventId((prev) => !prev)","<Checkbox checked={showEventId} onChange={() => setShowEventId((prev) => !prev)} />","<Label size={1}>Show event ID</Label>","<Flex as=\"label\" align=\"center\" gap={2}>\n          <Checkbox checked={showEventId} onChange={() => setShowEventId((prev) => !prev)} />\n          <Label size={1}>Show event ID</Label>\n        </Flex>","<Sidebar gap={4}>\n        <Flex as=\"label\" align=\"center\" gap={2}>\n          <Checkbox\n            checked={whichList === 'liveEventsIncludingAllDocuments'}\n            onChange={() =>\n              setWhichList((prev) =>\n                prev === 'liveEvents' ? 'liveEventsIncludingAllDocuments' : 'liveEvents',\n              )\n            }\n          />\n          <Label size={1}>Include all documents</Label>\n        </Flex>\n        <Flex as=\"label\" align=\"center\" gap={2}>\n          <Checkbox checked={showTimestamp} onChange={() => setShowTimestamp((prev) => !prev)} />\n          <Label size={1}>Show timestamp</Label>\n        </Flex>\n        <Flex as=\"label\" align=\"center\" gap={2}>\n          <Checkbox checked={showEventId} onChange={() => setShowEventId((prev) => !prev)} />\n          <Label size={1}>Show event ID</Label>\n        </Flex>\n      </Sidebar>","<EventTable\n            events={liveEvents}\n            findResolvedTag={findResolvedTag}\n            showTimestamp={showTimestamp}\n            showEventId={showEventId}\n          />","<Activity mode={whichList === 'liveEvents' ? 'visible' : 'hidden'}>\n          <EventTable\n            events={liveEvents}\n            findResolvedTag={findResolvedTag}\n            showTimestamp={showTimestamp}\n            showEventId={showEventId}\n          />\n        </Activity>","whichList === 'liveEvents' ? 'visible' : 'hidden'","<EventTable\n            events={liveEventsIncludingAllDocuments}\n            findResolvedTag={findResolvedTag}\n            showTimestamp={showTimestamp}\n            showEventId={showEventId}\n          />","<Activity mode={whichList === 'liveEventsIncludingAllDocuments' ? 'visible' : 'hidden'}>\n          <EventTable\n            events={liveEventsIncludingAllDocuments}\n            findResolvedTag={findResolvedTag}\n            showTimestamp={showTimestamp}\n            showEventId={showEventId}\n          />\n        </Activity>","whichList === 'liveEventsIncludingAllDocuments' ? 'visible' : 'hidden'","<Main>\n        <Activity mode={whichList === 'liveEvents' ? 'visible' : 'hidden'}>\n          <EventTable\n            events={liveEvents}\n            findResolvedTag={findResolvedTag}\n            showTimestamp={showTimestamp}\n            showEventId={showEventId}\n          />\n        </Activity>\n        <Activity mode={whichList === 'liveEventsIncludingAllDocuments' ? 'visible' : 'hidden'}>\n          <EventTable\n            events={liveEventsIncludingAllDocuments}\n            findResolvedTag={findResolvedTag}\n            showTimestamp={showTimestamp}\n            showEventId={showEventId}\n          />\n        </Activity>\n      </Main>","unknownDocumentTypes.map((unknownDocumentType) => (\n        <ResolveDocumentType\n          key={unknownDocumentType}\n          projectId={projectId}\n          dataset={dataset}\n          documentType={unknownDocumentType}\n          client={client}\n          setDocumentType={setDocumentType}\n        />\n      ))","<Layout>\n      <Sidebar gap={4}>\n        <Flex as=\"label\" align=\"center\" gap={2}>\n          <Checkbox\n            checked={whichList === 'liveEventsIncludingAllDocuments'}\n            onChange={() =>\n              setWhichList((prev) =>\n                prev === 'liveEvents' ? 'liveEventsIncludingAllDocuments' : 'liveEvents',\n              )\n            }\n          />\n          <Label size={1}>Include all documents</Label>\n        </Flex>\n        <Flex as=\"label\" align=\"center\" gap={2}>\n          <Checkbox checked={showTimestamp} onChange={() => setShowTimestamp((prev) => !prev)} />\n          <Label size={1}>Show timestamp</Label>\n        </Flex>\n        <Flex as=\"label\" align=\"center\" gap={2}>\n          <Checkbox checked={showEventId} onChange={() => setShowEventId((prev) => !prev)} />\n          <Label size={1}>Show event ID</Label>\n        </Flex>\n      </Sidebar>\n      <Main>\n        <Activity mode={whichList === 'liveEvents' ? 'visible' : 'hidden'}>\n          <EventTable\n            events={liveEvents}\n            findResolvedTag={findResolvedTag}\n            showTimestamp={showTimestamp}\n            showEventId={showEventId}\n          />\n        </Activity>\n        <Activity mode={whichList === 'liveEventsIncludingAllDocuments' ? 'visible' : 'hidden'}>\n          <EventTable\n            events={liveEventsIncludingAllDocuments}\n            findResolvedTag={findResolvedTag}\n            showTimestamp={showTimestamp}\n            showEventId={showEventId}\n          />\n        </Activity>\n      </Main>\n      {unknownDocumentTypes.map((unknownDocumentType) => (\n        <ResolveDocumentType\n          key={unknownDocumentType}\n          projectId={projectId}\n          dataset={dataset}\n          documentType={unknownDocumentType}\n          client={client}\n          setDocumentType={setDocumentType}\n        />\n      ))}\n      {unknownDocumentIds.map((unknownDocumentId) => (\n        <ResolveDocumentId\n          key={unknownDocumentId}\n          projectId={projectId}\n          dataset={dataset}\n          documentId={unknownDocumentId}\n          client={client}\n          setDocumentIdTag={setDocumentIdTag}\n        />\n      ))}\n      {unknownDocumentSlugs.map((unknownSlug) => (\n        <ResolveDocumentSlug\n          key={unknownSlug}\n          projectId={projectId}\n          dataset={dataset}\n          slug={unknownSlug}\n          client={client}\n          setDocumentSlugTag={setDocumentSlugTag}\n        />\n      ))}\n    </Layout>","unknownDocumentIds.map((unknownDocumentId) => (\n        <ResolveDocumentId\n          key={unknownDocumentId}\n          projectId={projectId}\n          dataset={dataset}\n          documentId={unknownDocumentId}\n          client={client}\n          setDocumentIdTag={setDocumentIdTag}\n        />\n      ))","unknownDocumentSlugs.map((unknownSlug) => (\n        <ResolveDocumentSlug\n          key={unknownSlug}\n          projectId={projectId}\n          dataset={dataset}\n          slug={unknownSlug}\n          client={client}\n          setDocumentSlugTag={setDocumentSlugTag}\n        />\n      ))","{\n  projectId,\n  dataset,\n  documentType,\n  client,\n  setDocumentType,\n}: {\n  projectId: string\n  dataset: string\n  documentType: string\n  client: SanityClient\n  setDocumentType: (documentType: string, resolvedDocumentType: string) => void\n}","() => {\n    const localStorageKey = `debug-live-sync-tags-resolved-document-type-${projectId}-${dataset}-${documentType}`\n    const localStorageValue = localStorage.getItem(localStorageKey)\n    if (localStorageValue && typeof localStorageValue === 'string') {\n      setDocumentType(documentType, localStorageValue)\n      return undefined\n    }\n\n    const controller = new AbortController()\n    void client\n      .fetch(\n        `count(*[_type == $type])`,\n        {type: documentType},\n        {\n          filterResponse: false,\n          perspective: 'published',\n          returnQuery: false,\n          resultSourceMap: false,\n          stega: false,\n          useCdn: true,\n        },\n      )\n      .then(({syncTags}) => {\n        if (controller.signal.aborted) return\n        if (!Array.isArray(syncTags)) {\n          throw new TypeError('syncTags is not an array', {cause: {syncTags, documentType}})\n        }\n        if (syncTags.length !== 1) {\n          throw new TypeError('syncTags is not an array of exactly one item', {\n            cause: {syncTags, documentType},\n          })\n        }\n        setDocumentType(documentType, syncTags[0]!)\n        localStorage.setItem(localStorageKey, syncTags[0]!)\n        return\n      })\n    return () => controller.abort()\n  }","[documentType, client, dataset, setDocumentType, projectId]","{syncTags}","{\n  projectId,\n  dataset,\n  documentId,\n  client,\n  setDocumentIdTag,\n}: {\n  projectId: string\n  dataset: string\n  documentId: string\n  client: SanityClient\n  setDocumentIdTag: (documentId: string, tag: string | null) => void\n}","() => {\n    const localStorageKey = `debug-live-sync-tags-resolved-document-id-${projectId}-${dataset}-${documentId}`\n    const localStorageValue = localStorage.getItem(localStorageKey)\n    if (localStorageValue && typeof localStorageValue === 'string') {\n      setDocumentIdTag(documentId, localStorageValue)\n      return undefined\n    }\n    const controller = new AbortController()\n    void client\n      .fetch(\n        `count(*[_id == $id])`,\n        {id: documentId},\n        {\n          filterResponse: false,\n          // perspective: 'published',\n          returnQuery: false,\n          resultSourceMap: false,\n          stega: false,\n          useCdn: true,\n        },\n      )\n      .then(({syncTags}) => {\n        if (controller.signal.aborted) return\n        if (!Array.isArray(syncTags)) {\n          throw new TypeError('syncTags is not an array', {cause: {syncTags, documentId}})\n        }\n        if (syncTags.length !== 1) {\n          throw new TypeError('syncTags is not an array of exactly one item', {\n            cause: {syncTags, documentId},\n          })\n        }\n        setDocumentIdTag(documentId, syncTags[0]!)\n        localStorage.setItem(localStorageKey, syncTags[0]!)\n        return\n      })\n    return () => controller.abort()\n  }","[documentId, client, dataset, setDocumentIdTag, projectId]","{\n  projectId,\n  dataset,\n  slug,\n  client,\n  setDocumentSlugTag,\n}: {\n  projectId: string\n  dataset: string\n  slug: string\n  client: SanityClient\n  setDocumentSlugTag: (slug: string, tag: string | null) => void\n}","() => {\n    const localStorageKey = `debug-live-sync-tags-resolved-document-slug-${projectId}-${dataset}-${slug}`\n    const localStorageValue = localStorage.getItem(localStorageKey)\n    if (localStorageValue && typeof localStorageValue === 'string') {\n      setDocumentSlugTag(slug, localStorageValue)\n      return undefined\n    }\n    const controller = new AbortController()\n    void client\n      .fetch(\n        `count(*[slug.current == $slug])`,\n        {slug},\n        {\n          filterResponse: false,\n          returnQuery: false,\n          resultSourceMap: false,\n          stega: false,\n          useCdn: true,\n        },\n      )\n      .then(({syncTags}) => {\n        if (controller.signal.aborted) return\n        if (!Array.isArray(syncTags)) {\n          throw new TypeError('syncTags is not an array', {cause: {syncTags, slug}})\n        }\n        if (syncTags.length !== 1) {\n          throw new TypeError('syncTags is not an array of exactly one item', {\n            cause: {syncTags, slug},\n          })\n        }\n        setDocumentSlugTag(slug, syncTags[0]!)\n        localStorage.setItem(localStorageKey, syncTags[0]!)\n        return\n      })\n    return () => controller.abort()\n  }","[slug, client, dataset, setDocumentSlugTag, projectId]"],"sources":["../src/components/Tool.tsx"],"sourcesContent":["import {type LiveEvent} from '@sanity/client'\nimport {Checkbox, Flex, Label, Stack} from '@sanity/ui'\nimport {Activity, Fragment, startTransition, useEffect, useState} from 'react'\nimport {useClient, useProjectId, useDataset, type SanityClient} from 'sanity'\nimport {styled} from 'styled-components'\n\nconst Layout = styled(Flex)`\n  height: 100%;\n  width: 100%;\n`\n\nconst Sidebar = styled(Stack)`\n  flex-shrink: 0;\n  width: 200px;\n  padding: 16px;\n  border-right: 1px solid var(--card-border-color, #ddd);\n  overflow-y: auto;\n`\n\nconst Main = styled.div`\n  flex: 1;\n  min-width: 0;\n  overflow: auto;\n`\n\nconst StyledTable = styled.table`\n  width: 100%;\n  border-collapse: collapse;\n  font-family: monospace;\n  font-size: 13px;\n\n  thead {\n    position: sticky;\n    top: 0;\n    z-index: 1;\n    background: var(--card-bg-color, #fff);\n    box-shadow: inset 0 -2px 0 var(--card-border-color, #ddd);\n  }\n\n  th,\n  td {\n    padding: 4px 8px;\n    text-align: left;\n    vertical-align: top;\n    white-space: nowrap;\n  }\n\n  th {\n    font-weight: 600;\n  }\n`\n\nconst TagGrid = styled.div`\n  display: grid;\n  grid-template-columns: auto 1fr;\n  gap: 0 12px;\n`\n\nfunction EventTable({\n  events,\n  findResolvedTag,\n  showTimestamp,\n  showEventId,\n}: {\n  events: Map<string, LiveEvent & {timestamp: string}>\n  findResolvedTag: (tag: string) => string\n  showTimestamp: boolean\n  showEventId: boolean\n}) {\n  const rows = Array.from(events.values())\n  if (rows.length === 0) return null\n\n  return (\n    <StyledTable>\n      <thead>\n        <tr>\n          {showTimestamp && <th>time</th>}\n          {showEventId && <th>id</th>}\n          <th>type</th>\n          <th>tags</th>\n        </tr>\n      </thead>\n      <tbody>\n        {rows.map((event, i) => {\n          const tags = 'tags' in event ? event.tags : []\n          const time = new Date(event.timestamp).toLocaleTimeString()\n          const eventId = 'id' in event ? event.id : null\n          const bg =\n            i % 2 !== 0\n              ? 'color-mix(in srgb, var(--card-border-color, #ddd) 15%, transparent)'\n              : undefined\n          return (\n            <tr key={event.timestamp} style={{background: bg}}>\n              {showTimestamp && <td>{time}</td>}\n              {showEventId && <td>{eventId}</td>}\n              <td style={{fontWeight: 600}}>{event.type}</td>\n              <td style={{whiteSpace: 'normal'}}>\n                {tags.length > 0 && (\n                  <TagGrid>\n                    {tags.map((tag) => (\n                      <Fragment key={tag}>\n                        <span title={tag}>{tag}</span>\n                        <span>{findResolvedTag(tag)}</span>\n                      </Fragment>\n                    ))}\n                  </TagGrid>\n                )}\n              </td>\n            </tr>\n          )\n        })}\n      </tbody>\n    </StyledTable>\n  )\n}\n\nexport default function Tool() {\n  const client = useClient({apiVersion: '2026-03-17'})\n  const projectId = useProjectId()\n  const dataset = useDataset()\n  const [liveEvents, setLiveEvents] = useState<Map<string, LiveEvent & {timestamp: string}>>(\n    () => new Map(),\n  )\n  const [liveEventsIncludingAllDocuments, setLiveEventsIncludingAllDocuments] = useState<\n    Map<string, LiveEvent & {timestamp: string}>\n  >(() => new Map())\n\n  useEffect(() => {\n    const subscription = client.live.events({tag: 'debug-live-sync-tags'}).subscribe({\n      next: (event) => {\n        startTransition(() =>\n          setLiveEvents((prev) => {\n            const next = new Map(prev)\n            next.set('id' in event ? event.id : new Date().toJSON(), {\n              ...event,\n              timestamp: new Date().toJSON(),\n            })\n            return next\n          }),\n        )\n      },\n      error: console.error,\n    })\n    return () => subscription.unsubscribe()\n  }, [client])\n\n  useEffect(() => {\n    const subscription = client.live\n      .events({tag: 'debug-live-sync-tags', includeDrafts: true})\n      .subscribe({\n        next: (event) => {\n          startTransition(() =>\n            setLiveEventsIncludingAllDocuments((prev) => {\n              const next = new Map(prev)\n              next.set('id' in event ? event.id : new Date().toJSON(), {\n                ...event,\n                timestamp: new Date().toJSON(),\n              })\n              return next\n            }),\n          )\n        },\n        error: console.error,\n      })\n    return () => subscription.unsubscribe()\n  }, [client])\n\n  const [syncTagForEverything, setSyncTagForEverything] = useState<string | null>(null)\n  const [allDocumentTypes, setAllDocumentTypes] = useState<Map<string, string | null>>(\n    () => new Map(),\n  )\n  useEffect(() => {\n    const controller = new AbortController()\n    client\n      .fetch<string[]>(\n        `array::unique(*._type)`,\n        {},\n        {\n          signal: controller.signal,\n          returnQuery: false,\n          tag: 'debug-live-sync-tags',\n          filterResponse: false,\n        },\n      )\n      .then(({result, syncTags}) => {\n        if (controller.signal.aborted) return\n        setSyncTagForEverything(syncTags?.[0] ?? null)\n\n        setAllDocumentTypes((prev) => {\n          const next = new Map(prev)\n          for (const type of result) {\n            if (!next.has(type)) {\n              next.set(type, null)\n            }\n          }\n          return next\n        })\n        return\n      })\n      .catch(console.error)\n    return () => controller.abort()\n  }, [client])\n\n  const [whichList, setWhichList] = useState<'liveEvents' | 'liveEventsIncludingAllDocuments'>(\n    'liveEvents',\n  )\n  const [showTimestamp, setShowTimestamp] = useState(true)\n  const [showEventId, setShowEventId] = useState(false)\n\n  const unknownDocumentTypes: string[] = []\n  for (const [documentType, resolvedDocumentType] of allDocumentTypes.entries()) {\n    if (resolvedDocumentType === null) {\n      unknownDocumentTypes.push(documentType)\n    }\n  }\n  const setDocumentType = (documentType: string, resolvedDocumentType: string) =>\n    startTransition(() =>\n      setAllDocumentTypes((prev) => {\n        const next = new Map(prev)\n        next.set(documentType, resolvedDocumentType)\n        return next\n      }),\n    )\n  function findResolvedTag(tag: string): string {\n    if (tag === syncTagForEverything) {\n      return 'any:*'\n    }\n    for (const [documentType, resolvedDocumentType] of allDocumentTypes.entries()) {\n      if (resolvedDocumentType === tag) {\n        return `type:${documentType}`\n      }\n    }\n    for (const [documentId, resolvedDocumentId] of documentIdToTagMap.entries()) {\n      if (resolvedDocumentId === tag) {\n        return `id:${documentId}`\n      }\n    }\n    for (const [slug, resolvedSlug] of documentSlugToTagMap.entries()) {\n      if (resolvedSlug === tag) {\n        return `slug:${slug}`\n      }\n    }\n    return tag\n  }\n\n  const allDocumentTypesArray = Array.from(allDocumentTypes.keys())\n  const [documentIdToTagMap, setDocumentIdToTagMap] = useState<Map<string, string | null>>(\n    () => new Map(),\n  )\n  const unknownDocumentIds: string[] = []\n  for (const [documentId, tag] of documentIdToTagMap.entries()) {\n    if (tag === null) {\n      unknownDocumentIds.push(documentId)\n    }\n  }\n  const setDocumentIdTag = (documentId: string, tag: string | null) =>\n    startTransition(() =>\n      setDocumentIdToTagMap((prev) => {\n        const next = new Map(prev)\n        next.set(documentId, tag)\n        return next\n      }),\n    )\n\n  const [documentSlugToTagMap, setDocumentSlugToTagMap] = useState<Map<string, string | null>>(\n    () => new Map(),\n  )\n  const unknownDocumentSlugs: string[] = []\n  for (const [slug, tag] of documentSlugToTagMap.entries()) {\n    if (tag === null) {\n      unknownDocumentSlugs.push(slug)\n    }\n  }\n  const setDocumentSlugTag = (slug: string, tag: string | null) =>\n    startTransition(() =>\n      setDocumentSlugToTagMap((prev) => {\n        const next = new Map(prev)\n        next.set(slug, tag)\n        return next\n      }),\n    )\n\n  useEffect(() => {\n    if (allDocumentTypesArray.length === 0) {\n      return undefined\n    }\n\n    const listener = client\n      .listen(\n        '*[_type in $type]',\n        {type: allDocumentTypesArray},\n        {\n          events: ['mutation'],\n          includePreviousRevision: false,\n          includeResult: true,\n          includeAllVersions: true,\n          includeMutations: false,\n          tag: 'debug-live-sync-tags',\n        },\n      )\n      .subscribe({\n        next: (event) => {\n          startTransition(() => {\n            setDocumentIdToTagMap((prev) => {\n              if (prev.has(event.documentId)) {\n                return prev\n              }\n              const next = new Map(prev)\n              next.set(event.documentId, null)\n              return next\n            })\n\n            const slugField = event.result?.['slug']\n            const slug =\n              slugField &&\n              typeof slugField === 'object' &&\n              'current' in slugField &&\n              typeof slugField.current === 'string'\n                ? slugField.current\n                : null\n            if (slug) {\n              setDocumentSlugToTagMap((prev) => {\n                if (prev.has(slug)) {\n                  return prev\n                }\n                const next = new Map(prev)\n                next.set(slug, null)\n                return next\n              })\n            }\n          })\n        },\n        error: console.error,\n      })\n    return () => listener.unsubscribe()\n  }, [client, allDocumentTypesArray])\n\n  return (\n    <Layout>\n      <Sidebar gap={4}>\n        <Flex as=\"label\" align=\"center\" gap={2}>\n          <Checkbox\n            checked={whichList === 'liveEventsIncludingAllDocuments'}\n            onChange={() =>\n              setWhichList((prev) =>\n                prev === 'liveEvents' ? 'liveEventsIncludingAllDocuments' : 'liveEvents',\n              )\n            }\n          />\n          <Label size={1}>Include all documents</Label>\n        </Flex>\n        <Flex as=\"label\" align=\"center\" gap={2}>\n          <Checkbox checked={showTimestamp} onChange={() => setShowTimestamp((prev) => !prev)} />\n          <Label size={1}>Show timestamp</Label>\n        </Flex>\n        <Flex as=\"label\" align=\"center\" gap={2}>\n          <Checkbox checked={showEventId} onChange={() => setShowEventId((prev) => !prev)} />\n          <Label size={1}>Show event ID</Label>\n        </Flex>\n      </Sidebar>\n      <Main>\n        <Activity mode={whichList === 'liveEvents' ? 'visible' : 'hidden'}>\n          <EventTable\n            events={liveEvents}\n            findResolvedTag={findResolvedTag}\n            showTimestamp={showTimestamp}\n            showEventId={showEventId}\n          />\n        </Activity>\n        <Activity mode={whichList === 'liveEventsIncludingAllDocuments' ? 'visible' : 'hidden'}>\n          <EventTable\n            events={liveEventsIncludingAllDocuments}\n            findResolvedTag={findResolvedTag}\n            showTimestamp={showTimestamp}\n            showEventId={showEventId}\n          />\n        </Activity>\n      </Main>\n      {unknownDocumentTypes.map((unknownDocumentType) => (\n        <ResolveDocumentType\n          key={unknownDocumentType}\n          projectId={projectId}\n          dataset={dataset}\n          documentType={unknownDocumentType}\n          client={client}\n          setDocumentType={setDocumentType}\n        />\n      ))}\n      {unknownDocumentIds.map((unknownDocumentId) => (\n        <ResolveDocumentId\n          key={unknownDocumentId}\n          projectId={projectId}\n          dataset={dataset}\n          documentId={unknownDocumentId}\n          client={client}\n          setDocumentIdTag={setDocumentIdTag}\n        />\n      ))}\n      {unknownDocumentSlugs.map((unknownSlug) => (\n        <ResolveDocumentSlug\n          key={unknownSlug}\n          projectId={projectId}\n          dataset={dataset}\n          slug={unknownSlug}\n          client={client}\n          setDocumentSlugTag={setDocumentSlugTag}\n        />\n      ))}\n    </Layout>\n  )\n}\n\nfunction ResolveDocumentType({\n  projectId,\n  dataset,\n  documentType,\n  client,\n  setDocumentType,\n}: {\n  projectId: string\n  dataset: string\n  documentType: string\n  client: SanityClient\n  setDocumentType: (documentType: string, resolvedDocumentType: string) => void\n}) {\n  useEffect(() => {\n    const localStorageKey = `debug-live-sync-tags-resolved-document-type-${projectId}-${dataset}-${documentType}`\n    const localStorageValue = localStorage.getItem(localStorageKey)\n    if (localStorageValue && typeof localStorageValue === 'string') {\n      setDocumentType(documentType, localStorageValue)\n      return undefined\n    }\n\n    const controller = new AbortController()\n    void client\n      .fetch(\n        `count(*[_type == $type])`,\n        {type: documentType},\n        {\n          filterResponse: false,\n          perspective: 'published',\n          returnQuery: false,\n          resultSourceMap: false,\n          stega: false,\n          useCdn: true,\n        },\n      )\n      .then(({syncTags}) => {\n        if (controller.signal.aborted) return\n        if (!Array.isArray(syncTags)) {\n          throw new TypeError('syncTags is not an array', {cause: {syncTags, documentType}})\n        }\n        if (syncTags.length !== 1) {\n          throw new TypeError('syncTags is not an array of exactly one item', {\n            cause: {syncTags, documentType},\n          })\n        }\n        setDocumentType(documentType, syncTags[0]!)\n        localStorage.setItem(localStorageKey, syncTags[0]!)\n        return\n      })\n    return () => controller.abort()\n  }, [documentType, client, dataset, setDocumentType, projectId])\n\n  return null\n}\n\nfunction ResolveDocumentId({\n  projectId,\n  dataset,\n  documentId,\n  client,\n  setDocumentIdTag,\n}: {\n  projectId: string\n  dataset: string\n  documentId: string\n  client: SanityClient\n  setDocumentIdTag: (documentId: string, tag: string | null) => void\n}) {\n  useEffect(() => {\n    const localStorageKey = `debug-live-sync-tags-resolved-document-id-${projectId}-${dataset}-${documentId}`\n    const localStorageValue = localStorage.getItem(localStorageKey)\n    if (localStorageValue && typeof localStorageValue === 'string') {\n      setDocumentIdTag(documentId, localStorageValue)\n      return undefined\n    }\n    const controller = new AbortController()\n    void client\n      .fetch(\n        `count(*[_id == $id])`,\n        {id: documentId},\n        {\n          filterResponse: false,\n          // perspective: 'published',\n          returnQuery: false,\n          resultSourceMap: false,\n          stega: false,\n          useCdn: true,\n        },\n      )\n      .then(({syncTags}) => {\n        if (controller.signal.aborted) return\n        if (!Array.isArray(syncTags)) {\n          throw new TypeError('syncTags is not an array', {cause: {syncTags, documentId}})\n        }\n        if (syncTags.length !== 1) {\n          throw new TypeError('syncTags is not an array of exactly one item', {\n            cause: {syncTags, documentId},\n          })\n        }\n        setDocumentIdTag(documentId, syncTags[0]!)\n        localStorage.setItem(localStorageKey, syncTags[0]!)\n        return\n      })\n    return () => controller.abort()\n  }, [documentId, client, dataset, setDocumentIdTag, projectId])\n  return null\n}\n\nfunction ResolveDocumentSlug({\n  projectId,\n  dataset,\n  slug,\n  client,\n  setDocumentSlugTag,\n}: {\n  projectId: string\n  dataset: string\n  slug: string\n  client: SanityClient\n  setDocumentSlugTag: (slug: string, tag: string | null) => void\n}) {\n  useEffect(() => {\n    const localStorageKey = `debug-live-sync-tags-resolved-document-slug-${projectId}-${dataset}-${slug}`\n    const localStorageValue = localStorage.getItem(localStorageKey)\n    if (localStorageValue && typeof localStorageValue === 'string') {\n      setDocumentSlugTag(slug, localStorageValue)\n      return undefined\n    }\n    const controller = new AbortController()\n    void client\n      .fetch(\n        `count(*[slug.current == $slug])`,\n        {slug},\n        {\n          filterResponse: false,\n          returnQuery: false,\n          resultSourceMap: false,\n          stega: false,\n          useCdn: true,\n        },\n      )\n      .then(({syncTags}) => {\n        if (controller.signal.aborted) return\n        if (!Array.isArray(syncTags)) {\n          throw new TypeError('syncTags is not an array', {cause: {syncTags, slug}})\n        }\n        if (syncTags.length !== 1) {\n          throw new TypeError('syncTags is not an array of exactly one item', {\n            cause: {syncTags, slug},\n          })\n        }\n        setDocumentSlugTag(slug, syncTags[0]!)\n        localStorage.setItem(localStorageKey, syncTags[0]!)\n        return\n      })\n    return () => controller.abort()\n  }, [slug, client, dataset, setDocumentSlugTag, projectId])\n  return null\n}\n"],"mappings":"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"}
\ No newline at end of file