{
  "version": 3,
  "sources": ["../../../src/specialized-waitables/use-waitable-function.ts"],
  "sourcesContent": ["import type { EmptyObject } from 'react-bindings';\n\nimport { makeValueWithArgsThenDo } from '../internal-utils/make-value-with-args-then-do.mjs';\nimport type { TypeOrPromisedType } from '../resolveable/types';\nimport type { UseWaitableArgs } from '../use-waitable/types/args';\nimport { useWaitable } from '../use-waitable/use-waitable.mjs';\nimport type { WrappedResult } from '../waitable/types/wrapped-result';\n\n/**\n * A waitable that gets its state from the result of the specified function.\n *\n * Results must be wrapped and marked as ok (success) or not (error).\n *\n * This is likely a more natural form to work with in cases that don't require the ability to call `setSuccess` or `setFailure` more than\n * once during a single run.\n */\nexport const useWaitableFunction = <SuccessT, FailureT = any, ExtraFieldsT extends object = EmptyObject>(\n  primaryFunc: (args: { wasReset: () => boolean }) => TypeOrPromisedType<WrappedResult<SuccessT, FailureT>>,\n  options: UseWaitableArgs<SuccessT, FailureT, ExtraFieldsT>\n) =>\n  useWaitable<SuccessT, FailureT, ExtraFieldsT>(\n    ({ setSuccess, setFailure, wasReset }) =>\n      makeValueWithArgsThenDo(primaryFunc, [{ wasReset }], (result) => {\n        if (result === undefined) {\n          return;\n        }\n\n        if (result.ok) {\n          setSuccess(result.value);\n        } else {\n          setFailure(result.value);\n        }\n      }),\n    options\n  );\n"],
  "mappings": "AAEA,SAAS,+BAA+B;AAGxC,SAAS,mBAAmB;AAWrB,MAAM,sBAAsB,CACjC,aACA,YAEA;AAAA,EACE,CAAC,EAAE,YAAY,YAAY,SAAS,MAClC,wBAAwB,aAAa,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,WAAW;AAC/D,QAAI,WAAW,QAAW;AACxB;AAAA,IACF;AAEA,QAAI,OAAO,IAAI;AACb,iBAAW,OAAO,KAAK;AAAA,IACzB,OAAO;AACL,iBAAW,OAAO,KAAK;AAAA,IACzB;AAAA,EACF,CAAC;AAAA,EACH;AACF;",
  "names": []
}
