{
  "version": 3,
  "sources": ["../../../../src/use-waitable/internal/update-waitable-bindings-with-primary-function-for-default-value.ts"],
  "sourcesContent": ["import isPromise from 'is-promise';\nimport type { MutableRefObject } from 'react';\nimport type { Binding, ReadonlyBinding } from 'react-bindings';\n\nimport type { TypeOrPromisedType } from '../../resolveable/types';\nimport type { UseWaitableOnSuccessCallback } from '../types/args';\nimport type { WaitablePrimaryFunction } from '../types/primary-function';\n\n/**\n * Updates the error or value bindings for a waitable in the case where the waitable's primary function is also used as its default value\n * producer.\n *\n * This function:\n *\n * - marks the waitable as having been run\n * - marks the waitable as busy\n * - set error to undefined\n * - runs the primary function\n * - if the waitable hasn't otherwise been updated before the value was produced, the waitable's value is updated with the result\n * - marks the waitable as no longer busy\n *\n * If there's an error, the waitable is soft reset so the primary function can be rerun.\n */\nexport const updateWaitableBindingsWithPrimaryFunctionForDefaultValue = <SuccessT, FailureT>({\n  primaryFunc,\n  isBusy,\n  error,\n  value,\n  alreadyRanFunc,\n  resetCount,\n  softReset,\n  onSuccess\n}: {\n  isBusy: Binding<boolean>;\n  primaryFunc: WaitablePrimaryFunction<SuccessT, FailureT>;\n  error: Binding<FailureT | undefined>;\n  value: Binding<SuccessT | undefined>;\n  alreadyRanFunc: MutableRefObject<boolean>;\n  resetCount: ReadonlyBinding<number>;\n  softReset: () => void;\n  onSuccess: UseWaitableOnSuccessCallback<SuccessT> | undefined;\n}): TypeOrPromisedType<void> => {\n  alreadyRanFunc.current = true;\n\n  isBusy.set(true);\n\n  if (error.get() !== undefined) {\n    error.set(undefined);\n  }\n\n  const valueChangeUid = value.getChangeUid();\n  const errorChangeUid = error.getChangeUid();\n\n  const initialResetCount = resetCount.get();\n\n  try {\n    let alreadyResolved = false;\n    const possiblePromise = primaryFunc({\n      setSuccess: (successValue: SuccessT | undefined) => {\n        if (resetCount.get() !== initialResetCount) {\n          return false; // Ignoring this result since there was a reset after this function was called\n        }\n\n        onSuccess?.(successValue);\n\n        alreadyResolved = true;\n\n        value.set(successValue);\n        if (error.get() !== undefined) {\n          error.set(undefined);\n        }\n        isBusy.set(false);\n\n        return true;\n      },\n      setFailure: () => {\n        if (resetCount.get() !== initialResetCount) {\n          return false; // Ignoring this result since there was a reset after this function was called\n        }\n\n        alreadyResolved = true;\n        softReset();\n\n        return true;\n      },\n      wasReset: () => resetCount.get() !== initialResetCount\n    });\n\n    if (isPromise(possiblePromise)) {\n      // If defaultValue returns a promise, setting value to undefined until the default value is resolved.  Otherwise, we can avoid the\n      // extra set call for synchronous defaultValue functions.\n      //\n      // If the waitable was already updated before the default value was generated, throw the default away.\n      if (\n        !alreadyResolved &&\n        valueChangeUid === value.getChangeUid() &&\n        errorChangeUid === error.getChangeUid() &&\n        value.get() !== undefined\n      ) {\n        value.set(undefined);\n      }\n\n      return possiblePromise.catch(softReset);\n    }\n  } catch (_e) {\n    softReset();\n  }\n};\n"],
  "mappings": "AAAA,OAAO,eAAe;AAuBf,MAAM,2DAA2D,CAAqB;AAAA,EAC3F;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MASgC;AAC9B,iBAAe,UAAU;AAEzB,SAAO,IAAI,IAAI;AAEf,MAAI,MAAM,IAAI,MAAM,QAAW;AAC7B,UAAM,IAAI,MAAS;AAAA,EACrB;AAEA,QAAM,iBAAiB,MAAM,aAAa;AAC1C,QAAM,iBAAiB,MAAM,aAAa;AAE1C,QAAM,oBAAoB,WAAW,IAAI;AAEzC,MAAI;AACF,QAAI,kBAAkB;AACtB,UAAM,kBAAkB,YAAY;AAAA,MAClC,YAAY,CAAC,iBAAuC;AAClD,YAAI,WAAW,IAAI,MAAM,mBAAmB;AAC1C,iBAAO;AAAA,QACT;AAEA,oBAAY,YAAY;AAExB,0BAAkB;AAElB,cAAM,IAAI,YAAY;AACtB,YAAI,MAAM,IAAI,MAAM,QAAW;AAC7B,gBAAM,IAAI,MAAS;AAAA,QACrB;AACA,eAAO,IAAI,KAAK;AAEhB,eAAO;AAAA,MACT;AAAA,MACA,YAAY,MAAM;AAChB,YAAI,WAAW,IAAI,MAAM,mBAAmB;AAC1C,iBAAO;AAAA,QACT;AAEA,0BAAkB;AAClB,kBAAU;AAEV,eAAO;AAAA,MACT;AAAA,MACA,UAAU,MAAM,WAAW,IAAI,MAAM;AAAA,IACvC,CAAC;AAED,QAAI,UAAU,eAAe,GAAG;AAK9B,UACE,CAAC,mBACD,mBAAmB,MAAM,aAAa,KACtC,mBAAmB,MAAM,aAAa,KACtC,MAAM,IAAI,MAAM,QAChB;AACA,cAAM,IAAI,MAAS;AAAA,MACrB;AAEA,aAAO,gBAAgB,MAAM,SAAS;AAAA,IACxC;AAAA,EACF,SAAS,IAAI;AACX,cAAU;AAAA,EACZ;AACF;",
  "names": []
}
