{
  "version": 3,
  "sources": ["../../../src/internal-utils/extract-waitable-dependency-values.ts"],
  "sourcesContent": ["import type { ReadonlyBinding } from 'react-bindings';\nimport { isBinding } from 'react-bindings';\n\nimport type { InferOptionalWaitableAndBindingValueTypes } from '../waitable/types/infer-waitable-and-binding-value-types';\nimport type { Waitable } from '../waitable/types/waitable';\nimport type { NamedWaitableDependencies, WaitableDependencies } from '../waitable/types/waitable-dependencies';\nimport { isWaitable } from '../waitable/utils.mjs';\n\nexport const extractOptionalWaitableDependencyValues = <DependenciesT extends WaitableDependencies, FailureT>({\n  dependencies,\n  namedDependencyKeys\n}: {\n  dependencies: DependenciesT | undefined;\n  namedDependencyKeys: string[] | undefined;\n}): {\n  allWaitablesAreLoaded: boolean;\n  anyWaitablesHadErrors: boolean;\n  lastError?: FailureT;\n  values: InferOptionalWaitableAndBindingValueTypes<DependenciesT>;\n} => {\n  const isArray = Array.isArray(dependencies);\n  const isNonNamed = isArray || isBinding(dependencies) || isWaitable(dependencies);\n\n  const inout: { allWaitablesAreLoaded: boolean; anyWaitablesHadErrors: boolean; lastError?: FailureT } = {\n    allWaitablesAreLoaded: true,\n    anyWaitablesHadErrors: false,\n    lastError: undefined\n  };\n  const makeOutput = (values: InferOptionalWaitableAndBindingValueTypes<DependenciesT>) => ({ ...inout, values });\n\n  if (isNonNamed) {\n    if (isArray) {\n      return makeOutput(\n        dependencies.map((dependency) =>\n          // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n          extractValue(dependency, inout)\n        ) as InferOptionalWaitableAndBindingValueTypes<DependenciesT>\n      );\n    } else {\n      return makeOutput(extractValue(dependencies, inout) as InferOptionalWaitableAndBindingValueTypes<DependenciesT>);\n    }\n  } else if (namedDependencyKeys !== undefined) {\n    const namedValues: Record<string, any> = {};\n    for (const key of namedDependencyKeys) {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n      namedValues[key] = extractValue((dependencies as NamedWaitableDependencies)[key], inout);\n    }\n\n    return makeOutput(namedValues as InferOptionalWaitableAndBindingValueTypes<DependenciesT>);\n  } else {\n    return makeOutput(undefined as InferOptionalWaitableAndBindingValueTypes<DependenciesT>);\n  }\n};\n\n// Helpers\n\nconst extractValue = <T, FailureT>(\n  dependency: Waitable<T> | ReadonlyBinding<T> | undefined,\n  inout: { allWaitablesAreLoaded: boolean; anyWaitablesHadErrors: boolean; lastError?: FailureT }\n): T | undefined => {\n  if (isWaitable(dependency)) {\n    const value = (dependency as Waitable<T>).value.get();\n    if (value === undefined) {\n      inout.allWaitablesAreLoaded = false;\n\n      const error = dependency.error.get() as FailureT | undefined;\n      if (error !== undefined) {\n        inout.anyWaitablesHadErrors = true;\n        inout.lastError = error;\n      }\n    }\n    return value;\n  } else if (isBinding(dependency)) {\n    return dependency.get();\n  } else {\n    return undefined;\n  }\n};\n"],
  "mappings": "AACA,SAAS,iBAAiB;AAK1B,SAAS,kBAAkB;AAEpB,MAAM,0CAA0C,CAAuD;AAAA,EAC5G;AAAA,EACA;AACF,MAQK;AACH,QAAM,UAAU,MAAM,QAAQ,YAAY;AAC1C,QAAM,aAAa,WAAW,UAAU,YAAY,KAAK,WAAW,YAAY;AAEhF,QAAM,QAAkG;AAAA,IACtG,uBAAuB;AAAA,IACvB,uBAAuB;AAAA,IACvB,WAAW;AAAA,EACb;AACA,QAAM,aAAa,CAAC,YAAsE,EAAE,GAAG,OAAO,OAAO;AAE7G,MAAI,YAAY;AACd,QAAI,SAAS;AACX,aAAO;AAAA,QACL,aAAa;AAAA,UAAI,CAAC;AAAA;AAAA,YAEhB,aAAa,YAAY,KAAK;AAAA;AAAA,QAChC;AAAA,MACF;AAAA,IACF,OAAO;AACL,aAAO,WAAW,aAAa,cAAc,KAAK,CAA6D;AAAA,IACjH;AAAA,EACF,WAAW,wBAAwB,QAAW;AAC5C,UAAM,cAAmC,CAAC;AAC1C,eAAW,OAAO,qBAAqB;AAErC,kBAAY,GAAG,IAAI,aAAc,aAA2C,GAAG,GAAG,KAAK;AAAA,IACzF;AAEA,WAAO,WAAW,WAAuE;AAAA,EAC3F,OAAO;AACL,WAAO,WAAW,MAAqE;AAAA,EACzF;AACF;AAIA,MAAM,eAAe,CACnB,YACA,UACkB;AAClB,MAAI,WAAW,UAAU,GAAG;AAC1B,UAAM,QAAS,WAA2B,MAAM,IAAI;AACpD,QAAI,UAAU,QAAW;AACvB,YAAM,wBAAwB;AAE9B,YAAM,QAAQ,WAAW,MAAM,IAAI;AACnC,UAAI,UAAU,QAAW;AACvB,cAAM,wBAAwB;AAC9B,cAAM,YAAY;AAAA,MACpB;AAAA,IACF;AACA,WAAO;AAAA,EACT,WAAW,UAAU,UAAU,GAAG;AAChC,WAAO,WAAW,IAAI;AAAA,EACxB,OAAO;AACL,WAAO;AAAA,EACT;AACF;",
  "names": []
}
