{"version":3,"sources":["../../src/useMappedValue/index.ts"],"names":["useSyncExternalStore","_subscribeWithLoad","_onValueChange","useCallback","postBatchCallbacksPush","noop","_value"],"mappings":";;;;;;;;;;AAKA,IAAM,cAAA,GAAkB,CACtB,KAAA,EACA,MACG,KAAA;AACH,EAAA,MAAM,IAAI,MAAO,CAAA,MAAA;AAEjB,EAAA,IAAI,IAAI,CAAG,EAAA;AACT,IAAO,OAAAA,0BAAA;AAAA,MACL,KAAA,CAAMC,KAAsB,KAAMC,CAAAA,CAAAA;AAAA,MAClC,MAAM,MAAA,CAAO,KAAM,CAAA,GAAA,EAAK;AAAA,KAC1B;AAAA;AAGF,EAAA,MAAM,gBAAgB,KAAM,CAAA,QAAA;AAE5B,EAAM,MAAA,UAAA,GAAa,CAAI,GAAA,CAAA,IAAK,KAAM,CAAA,KAAA;AAElC,EAAO,OAAAF,0BAAA;AAAA,IACLG,iBAAA;AAAA,MACE,CAAC,EAAO,KAAA;AACN,QAAA,IAAI,WAAc,GAAA,IAAA;AAElB,QAAA,MAAM,KAAK,MAAM;AACf,UAAA,IAAI,WAAa,EAAA;AACf,YAAc,WAAA,GAAA,KAAA;AAEd,YAAAC,wCAAA,CAAuB,MAAM;AAC3B,cAAG,EAAA,EAAA;AAEH,cAAc,WAAA,GAAA,IAAA;AAAA,aACf,CAAA;AAAA;AACH,SACF;AAEA,QAAA,MAAM,aACJ,GAAA,CAAA,KAAA,CAAMH,CAAsB,IAAA,KAAA,CAAMC,GAClC,EAAE,CAAA;AAEJ,QAAM,MAAA,gBAAA,GAAmB,aAAcA,CAAAA,CAAAA,CAAe,EAAE,CAAA;AAExD,QAAA,MAAM,aAAgB,GAAA,UAAA,GAAa,UAAWA,CAAAA,CAAAA,CAAe,EAAE,CAAI,GAAAG,qBAAA;AAEnE,QAAA,OAAO,MAAM;AACX,UAAc,aAAA,EAAA;AAEd,UAAiB,gBAAA,EAAA;AAEjB,UAAc,aAAA,EAAA;AAEd,UAAK,EAAA,GAAAA,qBAAA;AAAA,SACP;AAAA,OACF;AAAA,MACA,CAAC,KAAK;AAAA,KACR;AAAA,IACA,MACE,OAAO,KAAM,CAAA,GAAA,IAAO,aAAcC,CAAAA,CAAAA,EAAQ,UAAc,IAAA,UAAA,CAAWA,CAAM;AAAA,GAC7E;AACF,CAAA;AAkBA,IAAO,sBAAQ,GAAA","file":"chunk-YAV2E3VJ.cjs","sourcesContent":["import { useCallback, useSyncExternalStore } from 'react';\nimport type { AnyAsyncState, AsyncState, StateBase as State } from '../types';\nimport { postBatchCallbacksPush } from '../utils/batching';\nimport noop from 'lodash.noop';\n\nconst useMappedValue = ((\n  state: AnyAsyncState,\n  mapper: (value: any, isLoaded?: boolean, error?: any) => any\n) => {\n  const l = mapper.length;\n\n  if (l < 2) {\n    return useSyncExternalStore(\n      state._subscribeWithLoad || state._onValueChange,\n      () => mapper(state.get())\n    );\n  }\n\n  const isLoadedState = state.isLoaded;\n\n  const errorState = l > 2 && state.error;\n\n  return useSyncExternalStore(\n    useCallback(\n      (cb) => {\n        let isAvailable = true;\n\n        const fn = () => {\n          if (isAvailable) {\n            isAvailable = false;\n\n            postBatchCallbacksPush(() => {\n              cb();\n\n              isAvailable = true;\n            });\n          }\n        };\n\n        const unlistenValue = (\n          state._subscribeWithLoad || state._onValueChange\n        )(fn);\n\n        const unlistenIsLoaded = isLoadedState._onValueChange(fn);\n\n        const unlistenError = errorState ? errorState._onValueChange(fn) : noop;\n\n        return () => {\n          unlistenValue();\n\n          unlistenIsLoaded();\n\n          unlistenError();\n\n          cb = noop;\n        };\n      },\n      [state]\n    ),\n    () =>\n      mapper(state.get(), isLoadedState._value, errorState && errorState._value)\n  );\n}) as {\n  /**\n   * Hook to {@link mapper map} and retrieve a value from a {@link state}.\n   * @param mapper - Function that maps the value.\n   * @param isEqual - Optional comparison function to determine equality of the mapped values.\n   */\n  <T, V, E = any>(\n    state: AsyncState<T, E>,\n    mapper: (value: T | undefined, isLoaded: boolean, error: E | undefined) => V\n  ): V;\n  /**\n   * Hook to {@link mapper map} and retrieve a value from a {@link state}.\n   * @param mapper - Function that maps the value.\n   * @param isEqual - Optional comparison function to determine equality of the mapped values.\n   */\n  <T, V>(state: State<T>, mapper: (value: T) => V): V;\n};\n\nexport default useMappedValue;\n"]}