{"version":3,"file":"index.mjs","sources":["../src/drafts.ts","../src/listen.ts","../src/patch.ts","../src/utils.ts","../src/syncingDataset.ts","../src/groqStore.ts","../src/exportUtils.ts","../src/node/getDocuments.ts","../src/node/support.ts","../src/index.ts"],"sourcesContent":["import {SanityDocument} from '@sanity/types'\n\nexport function isDraft(doc: SanityDocument): boolean {\n  return doc._id.startsWith('drafts.')\n}\n\nexport function getPublishedId(document: SanityDocument): string {\n  return isDraft(document) ? document._id.slice(7) : document._id\n}\n","import type BrowserEventSource from '@sanity/eventsource/browser'\nimport type NodeEventSource from '@sanity/eventsource/node'\n\nimport {ApiError, Config, EnvImplementations, MutationEvent, Subscription} from './types'\n\ntype EventSourceInstance = InstanceType<EnvImplementations['EventSource']>\n\n// The events used by Content Lake: https://www.sanity.io/docs/listening\nexport interface SharedEventSourceEventMap {\n  welcome: MessageEvent\n  mutation: MessageEvent\n  channelError: MessageEvent\n  disconnect: MessageEvent\n  error: Event\n}\ndeclare module 'event-source-polyfill' {\n  export interface EventSourceEventMap extends SharedEventSourceEventMap {}\n}\n\nconst isNativeBrowserEventSource = (\n  eventSource: EventSourceInstance,\n): eventSource is InstanceType<typeof globalThis.EventSource> =>\n  typeof window !== 'undefined' &&\n  eventSource.addEventListener === window.EventSource.prototype.addEventListener\n\nconst isPolyfillEventSource = (\n  eventSource: EventSourceInstance,\n): eventSource is InstanceType<typeof BrowserEventSource | typeof NodeEventSource> =>\n  !isNativeBrowserEventSource(eventSource)\n\nconst addEventSourceListener = (\n  eventSource: EventSourceInstance,\n  type: keyof SharedEventSourceEventMap,\n  listener: EventListener,\n): void => {\n  if (isPolyfillEventSource(eventSource)) {\n    // Polyfilled event source does not accept option parameter\n    eventSource.addEventListener(type, listener as any)\n  } else {\n    eventSource.addEventListener(type, listener, false)\n  }\n}\n\nconst encodeQueryString = ({\n  query,\n  params = {},\n  options = {},\n}: {\n  query: string\n  params?: Record<string, unknown>\n  options?: Record<string, unknown>\n}) => {\n  const searchParams = new URLSearchParams()\n  // We generally want tag at the start of the query string\n  const {tag, ...opts} = options\n  if (tag) searchParams.set('tag', tag as string)\n  searchParams.set('query', query)\n\n  // Iterate params, the keys are prefixed with `$` and their values JSON stringified\n  for (const [key, value] of Object.entries(params)) {\n    searchParams.set(`$${key}`, JSON.stringify(value))\n  }\n  // Options are passed as-is\n  for (const [key, value] of Object.entries(opts)) {\n    // Skip falsy values\n    if (value) searchParams.set(key, `${value}`)\n  }\n\n  return `?${searchParams}`\n}\n\nexport function listen(\n  EventSourceImpl: EnvImplementations['EventSource'],\n  config: Config,\n  handlers: {\n    open: () => void\n    error: (err: Error) => void\n    next: (event: MutationEvent) => void\n  },\n): Subscription {\n  const {projectId, dataset, token, includeTypes, requestTagPrefix} = config\n  const headers = token ? {Authorization: `Bearer ${token}`} : undefined\n\n  // Make sure we only listen to mutations on documents part of the `includeTypes` allowlist, if provided\n  const options = requestTagPrefix\n    ? {tag: requestTagPrefix, effectFormat: 'mendoza'}\n    : {effectFormat: 'mendoza'}\n  const searchParams = encodeQueryString(\n    Array.isArray(includeTypes) && includeTypes.length > 0\n      ? {\n          query: `*[_type in $includeTypes]`,\n          params: {includeTypes},\n          options,\n        }\n      : {query: '*', options},\n  )\n  const url = `https://${projectId}.api.sanity.io/v1/data/listen/${dataset}${searchParams}`\n  const es = new EventSourceImpl(url, {withCredentials: true, headers})\n\n  addEventSourceListener(es, 'welcome', handlers.open)\n\n  addEventSourceListener(es, 'mutation', getMutationParser(handlers.next))\n\n  addEventSourceListener(es, 'channelError', (msg: any) => {\n    es.close()\n\n    let data\n    try {\n      data = JSON.parse(msg.data) as ApiError\n    } catch (err) {\n      handlers.error(new Error('Unknown error parsing listener message'))\n      return\n    }\n\n    handlers.error(\n      new Error(data.message || data.error || `Listener returned HTTP ${data.statusCode}`),\n    )\n  })\n\n  addEventSourceListener(es, 'error', (err: Event) => {\n    const origin = typeof window !== 'undefined' && window.location.origin\n    const hintSuffix = origin ? `, and that the CORS-origin (${origin}) is allowed` : ''\n    const errorMessage = isErrorLike(err) ? ` (${err.message})` : ''\n    handlers.error(\n      new Error(\n        `Error establishing listener - check that the project ID and dataset are correct${hintSuffix}${errorMessage}`,\n      ),\n    )\n  })\n\n  return {\n    unsubscribe: (): Promise<void> => Promise.resolve(es.close()),\n  }\n}\n\nfunction getMutationParser(cb: (event: MutationEvent) => void): (msg: any) => void {\n  return (msg: any) => {\n    let data\n    try {\n      data = JSON.parse(msg.data)\n    } catch (err) {\n      // intentional noop\n      return\n    }\n\n    cb(data)\n  }\n}\n\nfunction isErrorLike(err: unknown): err is {message: string} {\n  return typeof err === 'object' && err !== null && 'message' in err\n}\n","import {SanityDocument} from '@sanity/types'\nimport {applyPatch} from 'mendoza'\n\nexport function applyPatchWithoutRev(\n  doc: SanityDocument | null,\n  patch: unknown[],\n): SanityDocument | null {\n  const patchDoc = {...doc} as Omit<SanityDocument, '_rev'>\n  delete patchDoc._rev\n  return applyPatch(patchDoc, patch)\n}\n","export function compareString(a: string, b: string): number {\n  if (a > b) return 1\n  if (a < b) return -1\n  return 0\n}\n","import {SanityDocument} from '@sanity/types'\nimport type {DereferenceFunction} from 'groq-js'\n\nimport {getPublishedId, isDraft} from './drafts'\nimport {listen} from './listen'\nimport {applyPatchWithoutRev} from './patch'\nimport {Config, EnvImplementations, MutationEvent, Subscription} from './types'\nimport {compareString} from './utils'\n\nconst DEBOUNCE_MS = 25\n\nfunction noop() {\n  return Promise.resolve()\n}\n\nexport function getSyncingDataset(\n  config: Config,\n  onNotifyUpdate: (docs: SanityDocument[]) => void,\n  {getDocuments, EventSource}: EnvImplementations,\n): Subscription & {loaded: Promise<void>; dereference: DereferenceFunction} {\n  const {\n    projectId,\n    dataset,\n    listen: useListener,\n    overlayDrafts,\n    documentLimit,\n    token,\n    includeTypes,\n    requestTagPrefix,\n  } = config\n\n  // We don't want to flush updates while we're in the same transaction, so a normal\n  // throttle/debounce wouldn't do it. We need to wait and see if the next mutation is\n  // within the same transaction as the previous, and if not we can flush. Of course,\n  // we can't wait forever, so an upper threshold of X ms should be counted as \"ok to flush\"\n  let stagedDocs: SanityDocument[] | undefined\n  let previousTrx: string | undefined\n  let flushTimeout: NodeJS.Timer | undefined\n\n  const onUpdate = (docs: SanityDocument[]) => {\n    stagedDocs = undefined\n    flushTimeout = undefined\n    previousTrx = undefined\n    const finalDocs = overlayDrafts ? overlay(docs) : docs\n    finalDocs.sort((a, b) => compareString(a._id, b._id))\n    onNotifyUpdate(finalDocs)\n  }\n  const dereference: DereferenceFunction = overlayDrafts\n    ? ({_ref}) => {\n        const doc = indexedDocuments.get(`drafts.${_ref}`) || indexedDocuments.get(_ref)\n        if (!doc) {\n          return Promise.resolve(doc)\n        }\n        if (isDraft(doc)) {\n          return Promise.resolve(pretendThatItsPublished(doc))\n        }\n        return Promise.resolve({...doc, _originalId: doc._id})\n      }\n    : ({_ref}) => Promise.resolve(indexedDocuments.get(_ref))\n\n  if (!useListener) {\n    const loaded = getDocuments({\n      projectId,\n      dataset,\n      documentLimit,\n      token,\n      includeTypes,\n      requestTagPrefix,\n    })\n      .then(onUpdate)\n      .then(noop)\n    return {unsubscribe: noop, loaded, dereference}\n  }\n\n  const indexedDocuments = new Map<string, SanityDocument>()\n\n  // undefined until the listener has been set up and the initial export is done\n  let documents: SanityDocument[] | undefined\n\n  // holds any mutations that happen while fetching documents so they can be applied after updates\n  const buffer: MutationEvent[] = []\n\n  // Return a promise we can resolve once we've established a listener and reconciled any mutations\n  let onDoneLoading: () => void\n  let onLoadError: (error: Error) => void\n  const loaded = new Promise<void>((resolve, reject) => {\n    onDoneLoading = resolve\n    onLoadError = reject\n  })\n\n  const onOpen = async () => {\n    const initial = await getDocuments({\n      projectId,\n      dataset,\n      documentLimit,\n      token,\n      includeTypes,\n      requestTagPrefix,\n    })\n    documents = applyBufferedMutations(initial, buffer)\n    documents.forEach((doc) => indexedDocuments.set(doc._id, doc))\n    onUpdate(documents)\n    onDoneLoading()\n  }\n\n  const onMutationReceived = (msg: MutationEvent) => {\n    if (documents) {\n      applyMutation(msg)\n      scheduleUpdate(documents, msg)\n    } else {\n      buffer.push(msg)\n    }\n  }\n\n  const listener = listen(EventSource, config, {\n    next: onMutationReceived,\n    open: onOpen,\n    error: (error: Error) => onLoadError(error),\n  })\n\n  const scheduleUpdate = (docs: SanityDocument[], msg: MutationEvent) => {\n    clearTimeout(flushTimeout)\n\n    if (previousTrx !== msg.transactionId && stagedDocs) {\n      // This is a new transaction, meaning we can immediately flush any pending\n      // doc updates if there are any\n      onUpdate(stagedDocs)\n      previousTrx = undefined\n    } else {\n      previousTrx = msg.transactionId\n      stagedDocs = docs.slice()\n    }\n\n    flushTimeout = setTimeout(onUpdate, DEBOUNCE_MS, docs.slice())\n  }\n\n  const applyMutation = (msg: MutationEvent) => {\n    if (!msg.effects || msg.documentId.startsWith('_.')) {\n      return\n    }\n\n    const document = indexedDocuments.get(msg.documentId) || null\n    replaceDocument(msg.documentId, applyPatchWithoutRev(document, msg.effects.apply))\n  }\n\n  const replaceDocument = (id: string, document: SanityDocument | null) => {\n    const current = indexedDocuments.get(id)\n    const docs = documents || []\n    const position = current ? docs.indexOf(current) : -1\n\n    if (position === -1 && document) {\n      // Didn't exist previously, but was now created. Add it.\n      docs.push(document)\n      indexedDocuments.set(id, document)\n    } else if (document) {\n      // Existed previously and still does. Replace it.\n      docs.splice(position, 1, document)\n      indexedDocuments.set(id, document)\n    } else {\n      // Existed previously, but is now deleted. Remove it.\n      docs.splice(position, 1)\n      indexedDocuments.delete(id)\n    }\n  }\n\n  return {unsubscribe: listener.unsubscribe, loaded, dereference}\n}\n\nfunction applyBufferedMutations(\n  documents: SanityDocument[],\n  mutations: MutationEvent[],\n): SanityDocument[] {\n  // Group by document ID\n  const groups = new Map<string, MutationEvent[]>()\n  mutations.forEach((mutation) => {\n    const group = groups.get(mutation.documentId) || []\n    group.push(mutation)\n    groups.set(mutation.documentId, group)\n  })\n\n  // Discard all mutations that happened before our current document\n  groups.forEach((group, id) => {\n    const document = documents.find((doc) => doc._id === id)\n    if (!document) {\n      // @todo handle\n      // eslint-disable-next-line no-console\n      console.warn('Received mutation for missing document %s', id)\n      return\n    }\n\n    // Mutations are sorted by timestamp, apply any that arrived after\n    // we fetched the initial documents\n    let hasFoundRevision = false\n    let current: SanityDocument | null = document\n    group.forEach((mutation) => {\n      hasFoundRevision = hasFoundRevision || mutation.previousRev === document._rev\n      if (!hasFoundRevision) {\n        return\n      }\n\n      if (mutation.effects) {\n        current = applyPatchWithoutRev(current, mutation.effects.apply)\n      }\n    })\n\n    // Replace the indexed documents\n    documents.splice(documents.indexOf(document), 1, current)\n  })\n\n  return documents\n}\n\nfunction overlay(documents: SanityDocument[]): SanityDocument[] {\n  const overlayed = new Map<string, SanityDocument>()\n\n  documents.forEach((doc) => {\n    const existing = overlayed.get(getPublishedId(doc))\n    if (doc._id.startsWith('drafts.')) {\n      // Drafts always overlay\n      overlayed.set(getPublishedId(doc), pretendThatItsPublished(doc))\n    } else if (!existing) {\n      // Published documents only override if draft doesn't exist\n      overlayed.set(doc._id, {...doc, _originalId: doc._id})\n    }\n  })\n\n  return Array.from(overlayed.values())\n}\n\n// Strictly speaking it would be better to allow groq-js to resolve `drafts.<id>`,\n// but for now this will have to do\nfunction pretendThatItsPublished(doc: SanityDocument): SanityDocument {\n  return {...doc, _id: getPublishedId(doc), _originalId: doc._id}\n}\n","import type {SanityDocument} from '@sanity/types'\nimport deepEqual from 'fast-deep-equal'\nimport groq from 'groq'\nimport {type DereferenceFunction, evaluate, parse} from 'groq-js'\nimport {throttle} from 'throttle-debounce'\n\nimport {getSyncingDataset} from './syncingDataset'\nimport type {Config, EnvImplementations, GroqStore, GroqSubscription, Subscription} from './types'\n\nexport function groqStore(config: Config, envImplementations: EnvImplementations): GroqStore {\n  let documents: SanityDocument[] = []\n  const executeThrottled = throttle(config.subscriptionThrottleMs || 50, executeAllSubscriptions)\n  const activeSubscriptions: GroqSubscription[] = []\n\n  let dataset: Subscription & {loaded: Promise<void>; dereference: DereferenceFunction}\n\n  async function loadDataset() {\n    if (!dataset) {\n      dataset = getSyncingDataset(\n        config,\n        (docs) => {\n          documents = docs\n          executeThrottled()\n        },\n        envImplementations,\n      )\n    }\n\n    await dataset.loaded\n  }\n\n  async function query<R = any>(groqQuery: string, params?: Record<string, unknown>): Promise<R> {\n    await loadDataset()\n    const tree = parse(groqQuery, {params})\n    const result = await evaluate(tree as any, {\n      dataset: documents,\n      params,\n      dereference: dataset.dereference,\n    })\n    return result.get()\n  }\n\n  async function getDocument(documentId: string): Promise<SanityDocument | null> {\n    await loadDataset()\n    return query(groq`*[_id == $id][0]`, {id: documentId})\n  }\n\n  async function getDocuments(documentIds: string[]): Promise<(SanityDocument | null)[]> {\n    await loadDataset()\n    const subQueries = documentIds.map((id) => `*[_id == \"${id}\"][0]`).join(',\\n')\n    return query(`[${subQueries}]`)\n  }\n\n  function subscribe<R = any>(\n    groqQuery: string,\n    params: Record<string, unknown>,\n    callback: (error: Error | undefined, result?: R) => void,\n  ): Subscription {\n    if (!config.listen) {\n      throw new Error('Cannot use `subscribe()` without `listen: true`')\n    }\n\n    // @todo Execute the query against an empty dataset for validation purposes\n\n    // Store the subscription so we can re-run the query on new data\n    const subscription = {query: groqQuery, params, callback}\n    activeSubscriptions.push(subscription)\n\n    let unsubscribed = false\n    const unsubscribe = () => {\n      if (unsubscribed) {\n        return Promise.resolve()\n      }\n\n      unsubscribed = true\n      activeSubscriptions.splice(activeSubscriptions.indexOf(subscription), 1)\n      return Promise.resolve()\n    }\n\n    executeQuerySubscription(subscription)\n    return {unsubscribe}\n  }\n\n  function executeQuerySubscription(subscription: GroqSubscription) {\n    return query(subscription.query, subscription.params)\n      .then((res) => {\n        if ('previousResult' in subscription && deepEqual(subscription.previousResult, res)) {\n          return\n        }\n\n        subscription.previousResult = res\n        subscription.callback(undefined, res)\n      })\n      .catch((err) => {\n        subscription.callback(err)\n      })\n  }\n\n  function executeAllSubscriptions() {\n    activeSubscriptions.forEach(executeQuerySubscription)\n  }\n\n  function close() {\n    executeThrottled.cancel()\n    return dataset ? dataset.unsubscribe() : Promise.resolve()\n  }\n\n  return {query, getDocument, getDocuments, subscribe, close}\n}\n","import {SanityDocument} from '@sanity/types'\n\nimport {ApiError, StreamError, StreamResult} from './types'\n\nexport function isStreamError(result: StreamResult | undefined): result is StreamError {\n  if (!result) {\n    return false\n  }\n\n  if (!('error' in result) || typeof result.error !== 'object' || result.error === null) {\n    return false\n  }\n\n  return (\n    'description' in result.error &&\n    typeof (result as StreamError).error.description === 'string' &&\n    !('_id' in result)\n  )\n}\n\nexport function getError(body: ApiError): string {\n  if (typeof body === 'object' && 'error' in body && 'message' in body) {\n    return body.message || body.error\n  }\n\n  return '<unknown error>'\n}\n\nexport function isRelevantDocument(doc: SanityDocument): boolean {\n  return !doc._id.startsWith('_.')\n}\n","import {SanityDocument} from '@sanity/types'\nimport get from 'simple-get'\nimport split from 'split2'\n\nimport {getError, isRelevantDocument, isStreamError} from '../exportUtils'\nimport {EnvImplementations, StreamResult} from '../types'\n\nexport const getDocuments: EnvImplementations['getDocuments'] = function getDocuments({\n  projectId,\n  dataset,\n  token,\n  documentLimit,\n  includeTypes = [],\n  requestTagPrefix,\n}: {\n  projectId: string\n  dataset: string\n  token?: string\n  documentLimit?: number\n  includeTypes?: string[]\n  requestTagPrefix?: string\n}): Promise<SanityDocument[]> {\n  const baseUrl = new URL(`https://${projectId}.api.sanity.io/v1/data/export/${dataset}`)\n  if (requestTagPrefix) {\n    baseUrl.searchParams.set('tag', requestTagPrefix)\n  }\n  if (includeTypes.length > 0) {\n    baseUrl.searchParams.set('types', includeTypes?.join(','))\n  }\n  const url = baseUrl.toString()\n  const headers = token ? {Authorization: `Bearer ${token}`} : undefined\n\n  return new Promise((resolve, reject) => {\n    get({url, headers}, (err, response) => {\n      if (err) {\n        reject(err)\n        return\n      }\n\n      response.setEncoding('utf8')\n\n      const chunks: Buffer[] = []\n      if (response.statusCode !== 200) {\n        response\n          .on('data', (chunk: Buffer) => chunks.push(chunk))\n          .on('end', () => {\n            const body = JSON.parse(Buffer.concat(chunks).toString('utf8'))\n            reject(new Error(`Error streaming dataset: ${getError(body)}`))\n          })\n        return\n      }\n\n      const documents: SanityDocument[] = []\n      response\n        .pipe(split(JSON.parse))\n        .on('data', (doc: StreamResult) => {\n          if (isStreamError(doc)) {\n            reject(new Error(`Error streaming dataset: ${doc.error}`))\n            return\n          }\n\n          if (doc && isRelevantDocument(doc)) {\n            documents.push(doc)\n          }\n\n          if (documentLimit && documents.length > documentLimit) {\n            reject(\n              new Error(`Error streaming dataset: Reached limit of ${documentLimit} documents`),\n            )\n            response.destroy()\n          }\n        })\n        .on('end', () => resolve(documents))\n    })\n  })\n}\n","export function assertEnvSupport(): void {\n  const [major] = process.version.replace(/^v/, '').split('.', 1).map(Number)\n  if (major < 14) {\n    throw new Error('Node.js version 14 or higher required')\n  }\n}\n","/**\n * Note: Entry point for _browser_ build is in browser/index.ts\n */\nimport EventSourcePolyfill from '@sanity/eventsource/node'\n\nimport {groqStore as groqStoreApi} from './groqStore'\nimport {getDocuments} from './node/getDocuments'\nimport {assertEnvSupport} from './node/support'\nimport {Config, GroqStore} from './types'\n\n/** @public */\nexport function groqStore(config: Config): GroqStore {\n  assertEnvSupport()\n\n  return groqStoreApi(config, {\n    EventSource: config.EventSource ?? EventSourcePolyfill,\n    getDocuments,\n  })\n}\n\nexport type {Config, EnvImplementations, GroqStore, Subscription} from './types'\nexport {default as groq} from 'groq'\n"],"names":["isDraft","doc","_id","startsWith","getPublishedId","document","slice","isNativeBrowserEventSource","eventSource","window","addEventListener","EventSource","prototype","isPolyfillEventSource","addEventSourceListener","type","listener","encodeQueryString","_ref2","query","params","options","searchParams","URLSearchParams","tag","opts","set","key","value","Object","entries","concat","JSON","stringify","listen","EventSourceImpl","config","handlers","projectId","dataset","token","includeTypes","requestTagPrefix","headers","Authorization","effectFormat","Array","isArray","length","url","es","withCredentials","open","getMutationParser","next","msg","close","data","parse","err","error","Error","message","statusCode","origin","location","hintSuffix","errorMessage","isErrorLike","unsubscribe","Promise","resolve","cb","applyPatchWithoutRev","patch","patchDoc","_rev","applyPatch","compareString","a","b","DEBOUNCE_MS","noop","getSyncingDataset","onNotifyUpdate","_ref3","getDocuments","useListener","overlayDrafts","documentLimit","stagedDocs","previousTrx","flushTimeout","onUpdate","docs","finalDocs","overlay","sort","dereference","_ref4","_ref","indexedDocuments","get","pretendThatItsPublished","_originalId","_ref5","loaded","then","Map","documents","buffer","onDoneLoading","onLoadError","reject","onOpen","initial","applyBufferedMutations","forEach","onMutationReceived","applyMutation","scheduleUpdate","push","clearTimeout","transactionId","setTimeout","effects","documentId","replaceDocument","apply","id","current","position","indexOf","splice","delete","mutations","groups","mutation","group","find","console","warn","hasFoundRevision","previousRev","overlayed","existing","from","values","_a","groqStore","groqStore$1","envImplementations","executeThrottled","throttle","subscriptionThrottleMs","executeAllSubscriptions","activeSubscriptions","loadDataset","groqQuery","tree","result","evaluate","getDocument","groq","__template","documentIds","subQueries","map","join","subscribe","callback","subscription","unsubscribed","executeQuerySubscription","res","deepEqual","previousResult","catch","cancel","isStreamError","description","getError","body","isRelevantDocument","getDocuments2","_ref6","baseUrl","URL","toString","response","setEncoding","chunks","on","chunk","Buffer","pipe","split","destroy","assertEnvSupport","major","process","version","replace","Number","groqStoreApi","EventSourcePolyfill"],"mappings":"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"}