{"version":3,"sources":["../../src/useMutation.ts"],"sourcesContent":["import {\n  computed,\n  getCurrentScope,\n  onScopeDispose,\n  reactive,\n  readonly,\n  shallowReactive,\n  shallowReadonly,\n  toRefs,\n  watch,\n} from 'vue-demi'\nimport { MutationObserver, shouldThrowError } from '@tanstack/query-core'\nimport { cloneDeepUnref, updateState } from './utils'\nimport { useQueryClient } from './useQueryClient'\nimport type { ToRefs } from 'vue-demi'\nimport type {\n  DefaultError,\n  DistributiveOmit,\n  MutateFunction,\n  MutateOptions,\n  MutationObserverOptions,\n  MutationObserverResult,\n  OmitKeyof,\n} from '@tanstack/query-core'\nimport type { MaybeRefDeep, ShallowOption } from './types'\nimport type { QueryClient } from './queryClient'\n\ntype MutationResult<TData, TError, TVariables, TOnMutateResult> =\n  DistributiveOmit<\n    MutationObserverResult<TData, TError, TVariables, TOnMutateResult>,\n    'mutate' | 'reset'\n  >\n\ntype UseMutationOptionsBase<TData, TError, TVariables, TOnMutateResult> =\n  OmitKeyof<\n    MutationObserverOptions<TData, TError, TVariables, TOnMutateResult>,\n    '_defaulted'\n  > &\n    ShallowOption\n\nexport type UseMutationOptions<\n  TData = unknown,\n  TError = DefaultError,\n  TVariables = void,\n  TOnMutateResult = unknown,\n> =\n  | MaybeRefDeep<\n      UseMutationOptionsBase<TData, TError, TVariables, TOnMutateResult>\n    >\n  | (() => MaybeRefDeep<\n      UseMutationOptionsBase<TData, TError, TVariables, TOnMutateResult>\n    >)\n\ntype MutateSyncFunction<\n  TData = unknown,\n  TError = DefaultError,\n  TVariables = void,\n  TOnMutateResult = unknown,\n> = (\n  ...options: Parameters<\n    MutateFunction<TData, TError, TVariables, TOnMutateResult>\n  >\n) => void\n\nexport type UseMutationReturnType<\n  TData,\n  TError,\n  TVariables,\n  TOnMutateResult,\n  TResult = MutationResult<TData, TError, TVariables, TOnMutateResult>,\n> = ToRefs<Readonly<TResult>> & {\n  mutate: MutateSyncFunction<TData, TError, TVariables, TOnMutateResult>\n  mutateAsync: MutateFunction<TData, TError, TVariables, TOnMutateResult>\n  reset: MutationObserverResult<\n    TData,\n    TError,\n    TVariables,\n    TOnMutateResult\n  >['reset']\n}\n\nexport function useMutation<\n  TData = unknown,\n  TError = DefaultError,\n  TVariables = void,\n  TOnMutateResult = unknown,\n>(\n  mutationOptions: UseMutationOptions<\n    TData,\n    TError,\n    TVariables,\n    TOnMutateResult\n  >,\n  queryClient?: QueryClient,\n): UseMutationReturnType<TData, TError, TVariables, TOnMutateResult> {\n  if (process.env.NODE_ENV === 'development') {\n    if (!getCurrentScope()) {\n      console.warn(\n        'vue-query composable like \"useQuery()\" should only be used inside a \"setup()\" function or a running effect scope. They might otherwise lead to memory leaks.',\n      )\n    }\n  }\n\n  const client = queryClient || useQueryClient()\n  const options = computed(() => {\n    const resolvedOptions =\n      typeof mutationOptions === 'function'\n        ? mutationOptions()\n        : mutationOptions\n    return client.defaultMutationOptions(cloneDeepUnref(resolvedOptions))\n  })\n  const observer = new MutationObserver(client, options.value)\n  const state = options.value.shallow\n    ? shallowReactive(observer.getCurrentResult())\n    : reactive(observer.getCurrentResult())\n\n  const unsubscribe = observer.subscribe((result) => {\n    updateState(state, result)\n  })\n\n  const mutate = (\n    variables: TVariables,\n    mutateOptions?: MutateOptions<TData, TError, TVariables, TOnMutateResult>,\n  ) => {\n    observer.mutate(variables, mutateOptions).catch(() => {\n      // This is intentional\n    })\n  }\n\n  watch(options, () => {\n    observer.setOptions(options.value)\n  })\n\n  onScopeDispose(() => {\n    unsubscribe()\n  })\n\n  const readonlyState = options.value.shallow\n    ? shallowReadonly(state)\n    : readonly(state)\n\n  const resultRefs = toRefs(readonlyState) as ToRefs<\n    Readonly<MutationResult<TData, TError, TVariables, TOnMutateResult>>\n  >\n\n  watch(\n    () => state.error,\n    (error) => {\n      if (\n        error &&\n        shouldThrowError(options.value.throwOnError, [error as TError])\n      ) {\n        throw error\n      }\n    },\n  )\n\n  return {\n    ...resultRefs,\n    mutate,\n    mutateAsync: state.mutate,\n    reset: state.reset,\n  }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAUO;AACP,wBAAmD;AACnD,mBAA4C;AAC5C,4BAA+B;AAoExB,SAAS,YAMd,iBAMA,aACmE;AACnE,MAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,QAAI,KAAC,iCAAgB,GAAG;AACtB,cAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,SAAS,mBAAe,sCAAe;AAC7C,QAAM,cAAU,0BAAS,MAAM;AAC7B,UAAM,kBACJ,OAAO,oBAAoB,aACvB,gBAAgB,IAChB;AACN,WAAO,OAAO,2BAAuB,6BAAe,eAAe,CAAC;AAAA,EACtE,CAAC;AACD,QAAM,WAAW,IAAI,mCAAiB,QAAQ,QAAQ,KAAK;AAC3D,QAAM,QAAQ,QAAQ,MAAM,cACxB,iCAAgB,SAAS,iBAAiB,CAAC,QAC3C,0BAAS,SAAS,iBAAiB,CAAC;AAExC,QAAM,cAAc,SAAS,UAAU,CAAC,WAAW;AACjD,kCAAY,OAAO,MAAM;AAAA,EAC3B,CAAC;AAED,QAAM,SAAS,CACb,WACA,kBACG;AACH,aAAS,OAAO,WAAW,aAAa,EAAE,MAAM,MAAM;AAAA,IAEtD,CAAC;AAAA,EACH;AAEA,6BAAM,SAAS,MAAM;AACnB,aAAS,WAAW,QAAQ,KAAK;AAAA,EACnC,CAAC;AAED,sCAAe,MAAM;AACnB,gBAAY;AAAA,EACd,CAAC;AAED,QAAM,gBAAgB,QAAQ,MAAM,cAChC,iCAAgB,KAAK,QACrB,0BAAS,KAAK;AAElB,QAAM,iBAAa,wBAAO,aAAa;AAIvC;AAAA,IACE,MAAM,MAAM;AAAA,IACZ,CAAC,UAAU;AACT,UACE,aACA,oCAAiB,QAAQ,MAAM,cAAc,CAAC,KAAe,CAAC,GAC9D;AACA,cAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA,aAAa,MAAM;AAAA,IACnB,OAAO,MAAM;AAAA,EACf;AACF;","names":[]}