{"version":3,"file":"index.modern.mjs","sources":["../src/environmentAtom.ts","../src/common.ts","../src/atomWithQuery.ts","../src/atomWithMutation.ts","../src/atomWithSubscription.ts"],"sourcesContent":["import { Environment, Network, RecordSource, Store } from 'relay-runtime';\nimport { atom } from 'jotai/vanilla';\n\nconst DEFAULT_URL =\n  (() => {\n    try {\n      return process.env.JOTAI_RELAY_DEFAULT_URL;\n    } catch {\n      return undefined;\n    }\n  })() || '/graphql';\n\nconst defaultEnvironment = new Environment({\n  network: Network.create(async (params, variables) => {\n    const response = await fetch(DEFAULT_URL, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        query: params.text,\n        variables,\n      }),\n    });\n    return response.json();\n  }),\n  store: new Store(new RecordSource()),\n});\n\nexport const environmentAtom = atom(defaultEnvironment);\n\nif (process.env.NODE_ENV !== 'production') {\n  environmentAtom.debugPrivate = true;\n}\n","import type { Environment, Subscribable } from 'relay-runtime';\nimport { atom } from 'jotai/vanilla';\nimport type { Getter } from 'jotai/vanilla';\nimport { atomWithObservable } from 'jotai/vanilla/utils';\n\nexport const createAtom = <Args, Result, Action, ActionResult>(\n  getArgs: (get: Getter) => Args,\n  getEnvironment: (get: Getter) => Environment,\n  execute: (environment: Environment, args: Args) => Subscribable<Result>,\n  handleAction: (\n    action: Action,\n    environment: Environment,\n    refresh: () => void,\n  ) => ActionResult,\n) => {\n  const refreshAtom = atom(0);\n  if (process.env.NODE_ENV !== 'production') {\n    refreshAtom.debugPrivate = true;\n  }\n  const observableAtom = atom((get) => {\n    get(refreshAtom);\n    const args = getArgs(get);\n    const environment = getEnvironment(get);\n    const observable = execute(environment, args);\n    return observable;\n  });\n\n  if (process.env.NODE_ENV !== 'production') {\n    observableAtom.debugPrivate = true;\n  }\n\n  const baseDataAtom = atom((get) => {\n    const observable = get(observableAtom);\n    const resultAtom = atomWithObservable(() => observable);\n    return resultAtom;\n  });\n\n  if (process.env.NODE_ENV !== 'production') {\n    baseDataAtom.debugPrivate = true;\n  }\n\n  const dataAtom = atom(\n    (get) => {\n      const resultAtom = get(baseDataAtom);\n      const result = get(resultAtom);\n      return result;\n    },\n    (get, set, action: Action) => {\n      const environment = getEnvironment(get);\n      const refresh = () => {\n        set(refreshAtom, (c) => c + 1);\n      };\n      return handleAction(action, environment, refresh);\n    },\n  );\n\n  return dataAtom;\n};\n","import { fetchQuery } from 'relay-runtime';\nimport type {\n  Environment,\n  GraphQLTaggedNode,\n  OperationType,\n} from 'relay-runtime';\nimport type { Getter, WritableAtom } from 'jotai/vanilla';\nimport { environmentAtom } from './environmentAtom';\nimport { createAtom } from './common';\n\ntype Config = Parameters<typeof fetchQuery>[3];\n\ntype Action = {\n  type: 'refetch';\n};\n\nexport function atomWithQuery<T extends OperationType>(\n  taggedNode: GraphQLTaggedNode,\n  getVariables: (get: Getter) => T['variables'],\n  getConfig?: (get: Getter) => Config,\n  getEnvironment: (get: Getter) => Environment = (get) => get(environmentAtom),\n): WritableAtom<T['response'], [Action], void> {\n  return createAtom(\n    (get) => [taggedNode, getVariables(get), getConfig?.(get)] as const,\n    getEnvironment,\n    (environment, args) => fetchQuery(environment, ...args),\n    (action, _environment, refresh) => {\n      if (action.type === 'refetch') {\n        refresh();\n      }\n    },\n  );\n}\n","import { commitMutation } from 'relay-runtime';\nimport type {\n  Disposable,\n  Environment,\n  MutationConfig,\n  MutationParameters,\n} from 'relay-runtime';\nimport { atom } from 'jotai/vanilla';\nimport type { Getter, WritableAtom } from 'jotai/vanilla';\nimport { environmentAtom } from './environmentAtom';\n\nexport function atomWithMutation<T extends MutationParameters>(\n  getEnvironment: (get: Getter) => Environment = (get) => get(environmentAtom),\n): WritableAtom<undefined, [MutationConfig<T>], Disposable> {\n  const mutationAtom = atom(\n    // Don't we have any valid value for this atom??\n    undefined,\n    (get, _set, config: MutationConfig<T>) => {\n      const environment = getEnvironment(get);\n      return commitMutation(environment, config);\n    },\n  );\n  return mutationAtom;\n}\n","import { requestSubscription } from 'relay-runtime';\nimport type {\n  Environment,\n  GraphQLTaggedNode,\n  OperationType,\n  SelectorStoreUpdater,\n  Subscribable,\n} from 'relay-runtime';\nimport type { Getter, WritableAtom } from 'jotai/vanilla';\nimport { environmentAtom } from './environmentAtom';\nimport { createAtom } from './common';\n\ntype Configs = Parameters<typeof requestSubscription>[1]['configs'];\n\ntype Action = {\n  type: 'refetch';\n};\n\nexport function atomWithSubscription<T extends OperationType>(\n  taggedNode: GraphQLTaggedNode,\n  getVariables: (get: Getter) => T['variables'],\n  getConfigs?: (get: Getter) => Configs,\n  updater?: SelectorStoreUpdater<T['response']>,\n  getEnvironment: (get: Getter) => Environment = (get) => get(environmentAtom),\n): WritableAtom<T['response'], [Action], void> {\n  return createAtom(\n    (get) => ({\n      configs: getConfigs?.(get),\n      subscription: taggedNode,\n      variables: getVariables(get),\n    }),\n    getEnvironment,\n    (environment, config) => {\n      const subscribable: Subscribable<T['response']> = {\n        subscribe: (observer) => {\n          const disposable = requestSubscription(environment, {\n            ...config,\n            updater,\n            onNext: observer.next,\n            onError: observer.error,\n            onCompleted: observer.complete,\n          });\n          return {\n            unsubscribe: () => {\n              disposable.dispose();\n            },\n            closed: false, // HACK we don't use this.\n          };\n        },\n      };\n      return subscribable;\n    },\n    (action, _environment, refresh) => {\n      if (action.type === 'refetch') {\n        refresh();\n      }\n    },\n  );\n}\n"],"names":["DEFAULT_URL","process","env","JOTAI_RELAY_DEFAULT_URL","_unused","defaultEnvironment","Environment","network","Network","create","async","params","variables","method","headers","body","JSON","stringify","query","text","json","store","Store","environmentAtom","atom","NODE_ENV","debugPrivate","createAtom","getArgs","getEnvironment","execute","handleAction","refreshAtom","observableAtom","get","args","environment","observable","baseDataAtom","atomWithObservable","resultAtom","result","set","action","c","dataAtom","atomWithQuery","taggedNode","getVariables","getConfig","fetchQuery","_environment","refresh","type","atomWithMutation","undefined","_set","config","commitMutation","atomWithSubscription","getConfigs","updater","configs","subscription","subscribe","observer","disposable","requestSubscription","_extends","onNext","next","onError","error","onCompleted","complete","unsubscribe","dispose","closed"],"mappings":"iPAGA,MAAiBA,EACf,MACE,IACE,OAAOC,QAAQC,IAAIC,uBAGpB,CAFC,MAAAC,GACA,MACD,CACF,EAND,IAMQ,WAEcC,EAAG,IAAIC,EAAY,CACzCC,QAASC,EAAQC,OAAOC,MAAOC,EAAQC,iBACRZ,EAAa,CACxCa,OAAQ,OACRC,QAAS,CACP,eAAgB,oBAElBC,KAAMC,KAAKC,UAAU,CACnBC,MAAOP,EAAOQ,KACdP,iBAGYQ,QAElBC,MAAO,IAAIC,EAAM,SAGNC,EAAkBC,EAAKnB,GAEP,eAAzBJ,QAAQC,IAAIuB,WACdF,EAAgBG,cAAe,GC3BpBC,MAAAA,EAAa,CACxBC,EACAC,EACAC,EACAC,KAMA,MAAMC,EAAcR,EAAK,GACI,eAAzBvB,QAAQC,IAAIuB,WACdO,EAAYN,cAAe,GAE7B,MAAoBO,EAAGT,EAAMU,IAC3BA,EAAIF,GACJ,MAAUG,EAAGP,EAAQM,GACfE,EAAcP,EAAeK,GAEnC,OADmBJ,EAAQM,EAAaD,EACjCE,GAGoB,eAAzBpC,QAAQC,IAAIuB,WACdQ,EAAeP,cAAe,GAGhC,MAAkBY,EAAGd,EAAMU,IACzB,MAAMG,EAAaH,EAAID,GAEvB,OADmBM,EAAmB,IAAMF,EAE9CG,GAqBA,MAnB6B,eAAzBvC,QAAQC,IAAIuB,WACda,EAAaZ,cAAe,GAGbF,EACdU,IACC,MAAgBM,EAAGN,EAAII,GAEvB,OADeJ,EAAIM,EACZC,EAET,CAACP,EAAKQ,EAAKC,KACT,MAAMP,EAAcP,EAAeK,GAInC,SAAoBS,EAAQP,EAHZ,KACdM,EAAIV,EAAcY,GAAMA,EAAI,EAAC,EAEiB,EAI7CC,WCxCoBC,EAC3BC,EACAC,EACAC,EACApB,EAAgDK,IAAQA,EAAIX,KAE5D,OAAOI,EACJO,GAAQ,CAACa,EAAYC,EAAad,GAAMe,MAAAA,OAAAA,EAAAA,EAAYf,IACrDL,EACA,CAACO,EAAaD,IAASe,EAAWd,KAAgBD,GAClD,CAACQ,EAAQQ,EAAcC,KACD,YAAhBT,EAAOU,MACTD,GACD,EAGP,CCrBgB,SAAgBE,EAC9BzB,EAAgDK,IAAQA,EAAIX,KAU5D,OARqBC,OAEnB+B,EACA,CAACrB,EAAKsB,EAAMC,KACV,MAAMrB,EAAcP,EAAeK,GACnC,OAAOwB,EAAetB,EAAaqB,EAAM,EAI/C,qOCLgBE,SAAAA,EACdZ,EACAC,EACAY,EACAC,EACAhC,EAAgDK,IAAQA,EAAIX,KAE5D,OAAiBI,EACdO,IAAS,CACR4B,QAASF,MAAAA,OAAAA,EAAAA,EAAa1B,GACtB6B,aAAchB,EACdnC,UAAWoC,EAAad,KAE1BL,EACA,CAACO,EAAaqB,KACsC,CAChDO,UAAYC,IACV,MAAMC,EAAaC,EAAoB/B,EAAWgC,EAAA,CAAA,EAC7CX,EACHI,CAAAA,UACAQ,OAAQJ,EAASK,KACjBC,QAASN,EAASO,MAClBC,YAAaR,EAASS,YAExB,MAAO,CACLC,YAAa,KACXT,EAAWU,SAAO,EAEpBC,QAAQ,MAMhB,CAAClC,EAAQQ,EAAcC,KACD,YAAhBT,EAAOU,MACTD,GACD,EAGP"}