{
  "version": 3,
  "sources": ["../../../src/use-waitable-callback/use-waitable-callback.ts"],
  "sourcesContent": ["import { useCallbackRef, useDerivedBinding } from 'react-bindings';\n\nimport { useDerivedWaitable } from '../specialized-waitables/use-derived-waitable/use-derived-waitable.mjs';\nimport type { InferRequiredWaitableAndBindingValueTypes } from '../waitable/types/infer-waitable-and-binding-value-types';\nimport type { WaitableDependencies } from '../waitable/types/waitable-dependencies';\nimport type { IfReadyCallback } from './types/internal/if-ready-callback';\nimport type { UseWaitableCallbackOptions } from './types/options';\nimport type { WaitableCallback } from './types/waitable-callback';\n\n/**\n * Creates a function that isn't called until all waitable dependencies are successfully loaded.\n *\n * The resulting function also has special binding properties for checking if the functions is ready: `isReady` and `isNotReady`.\n */\nexport const useWaitableCallback = <ArgsT extends any[], DependenciesT extends WaitableDependencies>(\n  dependencies: DependenciesT | undefined,\n  ifReady: IfReadyCallback<ArgsT, DependenciesT>,\n  { id = 'waitable-callback', deps, ifNotReady, ...waitOptions }: UseWaitableCallbackOptions<ArgsT, DependenciesT> = {}\n): WaitableCallback<ArgsT> => {\n  const dependencyValues = useDerivedWaitable(dependencies, (dependencies) => dependencies ?? null, {\n    id: `${id}_dependencyValues`,\n    deps,\n    limitType: 'none'\n  });\n\n  const isReady = useDerivedBinding(\n    dependencyValues.value,\n    (dependencyValues) => dependencies === undefined || dependencyValues !== undefined,\n    {\n      id: `${id}_isReady`,\n      limitType: 'none'\n    }\n  );\n  const isNotReady = useDerivedBinding(isReady, (isReady) => !isReady, { id: `${id}_isNotReady`, limitType: 'none' });\n\n  const output = useCallbackRef(async (...args: ArgsT) => {\n    const waitResult = await dependencyValues.wait(waitOptions);\n\n    const theDependencyValues = dependencyValues.value.get();\n    if (theDependencyValues === undefined) {\n      await ifNotReady?.(dependencies as DependenciesT, ...args);\n    } else {\n      await ifReady(\n        (dependencies === undefined ? undefined : theDependencyValues) as InferRequiredWaitableAndBindingValueTypes<DependenciesT>,\n        dependencies as DependenciesT,\n        ...args\n      );\n    }\n\n    return waitResult;\n  }) as WaitableCallback<ArgsT>;\n\n  output.isReady = isReady;\n  output.isNotReady = isNotReady;\n  output.bindArgs = (...args: ArgsT) => {\n    const boundOutput = (() => output(...args)) as WaitableCallback<[]>;\n    boundOutput.isReady = output.isReady;\n    boundOutput.isNotReady = output.isNotReady;\n    boundOutput.bindArgs = () => boundOutput;\n    return boundOutput;\n  };\n\n  return output;\n};\n"],
  "mappings": "AAAA,SAAS,gBAAgB,yBAAyB;AAElD,SAAS,0BAA0B;AAY5B,MAAM,sBAAsB,CACjC,cACA,SACA,EAAE,KAAK,qBAAqB,MAAM,YAAY,GAAG,YAAY,IAAsD,CAAC,MACxF;AAC5B,QAAM,mBAAmB,mBAAmB,cAAc,CAACA,kBAAiBA,iBAAgB,MAAM;AAAA,IAChG,IAAI,GAAG,EAAE;AAAA,IACT;AAAA,IACA,WAAW;AAAA,EACb,CAAC;AAED,QAAM,UAAU;AAAA,IACd,iBAAiB;AAAA,IACjB,CAACC,sBAAqB,iBAAiB,UAAaA,sBAAqB;AAAA,IACzE;AAAA,MACE,IAAI,GAAG,EAAE;AAAA,MACT,WAAW;AAAA,IACb;AAAA,EACF;AACA,QAAM,aAAa,kBAAkB,SAAS,CAACC,aAAY,CAACA,UAAS,EAAE,IAAI,GAAG,EAAE,eAAe,WAAW,OAAO,CAAC;AAElH,QAAM,SAAS,eAAe,UAAU,SAAgB;AACtD,UAAM,aAAa,MAAM,iBAAiB,KAAK,WAAW;AAE1D,UAAM,sBAAsB,iBAAiB,MAAM,IAAI;AACvD,QAAI,wBAAwB,QAAW;AACrC,YAAM,aAAa,cAA+B,GAAG,IAAI;AAAA,IAC3D,OAAO;AACL,YAAM;AAAA,QACH,iBAAiB,SAAY,SAAY;AAAA,QAC1C;AAAA,QACA,GAAG;AAAA,MACL;AAAA,IACF;AAEA,WAAO;AAAA,EACT,CAAC;AAED,SAAO,UAAU;AACjB,SAAO,aAAa;AACpB,SAAO,WAAW,IAAI,SAAgB;AACpC,UAAM,eAAe,MAAM,OAAO,GAAG,IAAI;AACzC,gBAAY,UAAU,OAAO;AAC7B,gBAAY,aAAa,OAAO;AAChC,gBAAY,WAAW,MAAM;AAC7B,WAAO;AAAA,EACT;AAEA,SAAO;AACT;",
  "names": ["dependencies", "dependencyValues", "isReady"]
}
