{"version":3,"file":"defineUseQuery.cjs","sources":["../../src/defineStudioUrlStore.ts","../../src/defineUseLiveMode.ts","../../../../node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js","../../src/useEncodeDataAttribute.ts","../../src/defineUseQuery.ts"],"sourcesContent":["import type {SanityClient} from '@sanity/client'\nimport type {ResolveStudioUrl, StudioUrl} from '@sanity/client/csm'\nimport type {CreateQueryStoreOptions} from '@sanity/core-loader'\n\ntype StudioUrlLike = StudioUrl | ResolveStudioUrl | undefined\n\nexport function defineStudioUrlStore(client: CreateQueryStoreOptions['client']): {\n  subscribe: (callback: () => void) => () => void\n  getSnapshot: () => StudioUrlLike\n  getServerSnapshot: () => StudioUrlLike\n  setStudioUrl: (nextStudioUrl: StudioUrlLike) => void\n} {\n  let studioUrl: StudioUrlLike =\n    typeof client === 'object' ? (client as SanityClient)?.config().stega.studioUrl : undefined\n  const serverSnapshot = studioUrl\n  const subscribers = new Set<() => void>()\n  return {\n    subscribe(callback) {\n      subscribers.add(callback)\n      return () => subscribers.delete(callback)\n    },\n    getSnapshot() {\n      return studioUrl\n    },\n    getServerSnapshot() {\n      return serverSnapshot\n    },\n    setStudioUrl(nextStudioUrl: StudioUrlLike) {\n      studioUrl = nextStudioUrl\n      subscribers.forEach((callback) => callback())\n    },\n  }\n}\n","import type {SanityClient} from '@sanity/client'\nimport type {ResolveStudioUrl, StudioUrl} from '@sanity/client/csm'\nimport type {QueryStore} from '@sanity/core-loader'\n\nimport {useEffect} from 'react'\n\nimport type {UseLiveModeHook} from './types'\n\nexport function defineUseLiveMode({\n  enableLiveMode,\n  setStudioUrl,\n}: Pick<QueryStore, 'enableLiveMode'> & {\n  setStudioUrl: (studioUrl: StudioUrl | ResolveStudioUrl | undefined) => void\n}): UseLiveModeHook {\n  return ({allowStudioOrigin, client, onConnect, onDisconnect, onPerspective, studioUrl}) => {\n    useEffect(() => {\n      if (allowStudioOrigin) {\n        // eslint-disable-next-line no-console\n        console.warn('`allowStudioOrigin` is deprecated and no longer needed')\n      }\n      const disableLiveMode = enableLiveMode({\n        client,\n        onConnect,\n        onDisconnect,\n        onPerspective,\n      })\n      return () => disableLiveMode()\n    }, [allowStudioOrigin, client, onConnect, onDisconnect, onPerspective])\n    useEffect(() => {\n      setStudioUrl(\n        (studioUrl ?? typeof client === 'object')\n          ? (client as SanityClient)?.config().stega.studioUrl\n          : undefined,\n      )\n    }, [studioUrl, client])\n  }\n}\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n\n\n    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0;)\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n    for (i = length; i-- !== 0;) {\n      var key = keys[i];\n\n      if (!equal(a[key], b[key])) return false;\n    }\n\n    return true;\n  }\n\n  // true if both NaN, false otherwise\n  return a!==a && b!==b;\n};\n","import type {ContentSourceMap} from '@sanity/client'\nimport type {ResolveStudioUrl, StudioPathLike, StudioUrl} from '@sanity/client/csm'\n\nimport {\n  defineEncodeDataAttribute,\n  type EncodeDataAttributeFunction,\n} from '@sanity/core-loader/encode-data-attribute'\nimport {useMemo} from 'react'\n\n/** @public */\nexport type EncodeDataAttributeCallback = (path: StudioPathLike) => string | undefined\n\n/** @public */\nexport function useEncodeDataAttribute<QueryResponseResult = unknown>(\n  result: QueryResponseResult,\n  sourceMap: ContentSourceMap | undefined,\n  studioUrl: StudioUrl | ResolveStudioUrl | undefined,\n): EncodeDataAttributeFunction {\n  return useMemo(\n    () => defineEncodeDataAttribute(result, sourceMap, studioUrl),\n    [result, sourceMap, studioUrl],\n  )\n}\n\nexport type {ContentSourceMap, ResolveStudioUrl, StudioPathLike, StudioUrl}\n","import type {QueryParams} from '@sanity/client'\nimport type {QueryStore, QueryStoreState} from '@sanity/core-loader'\nimport type {EncodeDataAttributeFunction} from '@sanity/core-loader/encode-data-attribute'\n\nimport isEqual from 'fast-deep-equal'\nimport {useEffect, useMemo, useState, useSyncExternalStore} from 'react'\n\nimport type {UseQueryOptions} from './types'\n\nimport {defineStudioUrlStore} from './defineStudioUrlStore'\nimport {useEncodeDataAttribute} from './useEncodeDataAttribute'\n\nexport function defineUseQuery({\n  createFetcherStore,\n  studioUrlStore,\n}: Pick<QueryStore, 'createFetcherStore'> & {\n  studioUrlStore: ReturnType<typeof defineStudioUrlStore>\n}): <QueryResponseResult, QueryResponseError>(\n  query: string,\n  params?: QueryParams,\n  options?: UseQueryOptions<QueryResponseResult>,\n) => QueryStoreState<QueryResponseResult, QueryResponseError> & {\n  encodeDataAttribute: EncodeDataAttributeFunction\n} {\n  const DEFAULT_PARAMS = {}\n  return <QueryResponseResult, QueryResponseError>(\n    query: string,\n    params: QueryParams = DEFAULT_PARAMS,\n    options: UseQueryOptions<QueryResponseResult> = {},\n  ) => {\n    const initial = useMemo(\n      () => (options.initial ? {perspective: 'published' as const, ...options.initial} : undefined),\n      [options.initial],\n    )\n    const $params = useMemo(() => JSON.stringify(params), [params])\n\n    const [snapshot, setSnapshot] = useState<\n      QueryStoreState<QueryResponseResult, QueryResponseError>\n    >(() => {\n      const fetcher = createFetcherStore<QueryResponseResult, QueryResponseError>(\n        query,\n        JSON.parse($params),\n        initial,\n      )\n      return fetcher.value!\n    })\n    useEffect(() => {\n      const fetcher = createFetcherStore<QueryResponseResult, QueryResponseError>(\n        query,\n        JSON.parse($params),\n        initial,\n      )\n      const unlisten = fetcher.subscribe((snapshot) => {\n        setSnapshot((prev) => {\n          /*\n          // Uncomment and to debug run this in your browser console:\n          // const {diffString} = await import('https://esm.sh/json-diff')\n          // window.debugReactLoader = (a, b) => console.log(diffString(a, b, {color: false}))\n          // eslint-disable-next-line @typescript-eslint/no-explicit-any\n          const debug: (a: any, b: any) => void =\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            'debugReactLoader' in window\n              ? (window.debugReactLoader as (a: any, b: any) => void)\n              : // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars\n                (a: any, b: any) => {}\n          // */\n\n          if (!isEqual(prev.sourceMap, snapshot.sourceMap)) {\n            // console.log('sourceMap changed')\n            // debug(prev.sourceMap, snapshot.sourceMap)\n            return snapshot\n          }\n\n          if (!isEqual(prev.data, snapshot.data)) {\n            // console.log('data changed')\n            // debug(prev.data, snapshot.data)\n            return snapshot\n          }\n\n          if (prev.error !== snapshot.error) {\n            // console.log('error changed', prev.error, snapshot.error)\n            return snapshot\n          }\n\n          if (prev.loading !== snapshot.loading) {\n            // console.log('loading changed', prev.loading, snapshot.loading)\n            return snapshot\n          }\n\n          if (prev.perspective !== snapshot.perspective) {\n            // console.log(\n            //   'perspective changed',\n            //   prev.perspective,\n            //   snapshot.perspective,\n            // )\n            return snapshot\n          }\n\n          return prev\n        })\n      })\n      return () => unlisten()\n    }, [$params, initial, query])\n    const studioUrl = useSyncExternalStore(\n      studioUrlStore.subscribe,\n      studioUrlStore.getSnapshot,\n      studioUrlStore.getServerSnapshot,\n    )\n    const encodeDataAttribute = useEncodeDataAttribute(snapshot.data, snapshot.sourceMap, studioUrl)\n    return useMemo(() => ({...snapshot, encodeDataAttribute}), [snapshot, encodeDataAttribute])\n  }\n}\n"],"names":["useEffect","useMemo","defineEncodeDataAttribute","useState","snapshot","useSyncExternalStore","encodeDataAttribute"],"mappings":"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","x_google_ignoreList":[2]}