{"version":3,"sources":["../src/useRemoteDataQuery.ts","../src/decode.ts","../src/fold.ts"],"sourcesContent":["/**\n * @since 1.0.0\n */\n\nimport * as RD from '@jvlk/fp-ts-remote-data'\nimport { useQuery } from '@tanstack/react-query'\nimport * as E from 'fp-ts/Either'\nimport { flow, pipe } from 'fp-ts/function'\nimport * as O from 'fp-ts/Option'\nimport * as TE from 'fp-ts/TaskEither'\nimport * as t from 'io-ts'\nimport decode from './decode'\n\ntype OptionsWithDecoder<E, A, U> = {\n  queryKey: string[]\n  queryFn: TE.TaskEither<E, O.Option<A>>\n  decoder: t.Decoder<A, U>\n}\n\ntype OptionsWithoutDecoder<E, A, U> = {\n  queryKey: string[]\n  queryFn: TE.TaskEither<E, O.Option<A>>\n}\n\ntype Options<E, A, U> = {\n  queryKey: string[]\n  queryFn: TE.TaskEither<E, O.Option<A>>\n  decoder?: t.Decoder<A, U>\n}\n\n/**\n * @since 1.0.0\n */\nexport default function useRemoteDataQuery<E, A, U>(\n  options: OptionsWithDecoder<E, A, U>\n): RD.RemoteData<E | t.Errors, U>\nexport default function useRemoteDataQuery<E, A, U>(\n  options: OptionsWithoutDecoder<E, A, U>\n): RD.RemoteData<E, A>\nexport default function useRemoteDataQuery<E, A, U>(options: Options<E, A, U>) {\n  const { isLoading, data } = useQuery(options)\n\n  return isLoading\n    ? RD.loading\n    : data\n    ? pipe(\n        data,\n        decode(options.decoder),\n        E.foldW(RD.failure, flow(O.fold(() => RD.empty, RD.success)))\n      )\n    : RD.empty\n}\n","/**\n * @since 1.0.0\n */\nimport * as t from 'io-ts'\nimport * as O from 'fp-ts/Option'\nimport * as E from 'fp-ts/Either'\nimport { pipe } from 'fp-ts/function'\n\n/**\n * @since 1.0.0\n */\nexport default function decode<T, U>(decoder?: t.Decoder<T, U> | undefined) {\n  return function <E>(\n    input: E.Either<E, O.Option<T>>\n  ): E.Either<E | t.Errors, O.Option<T | U>> {\n    return decoder\n      ? pipe(\n          input,\n          E.chainW((data) => {\n            if (O.isNone(data)) {\n              return E.right(data)\n            }\n            const v = decoder.decode(data.value)\n            return v._tag === 'Right'\n              ? E.right(O.some(v.right))\n              : E.left(v.left)\n          })\n        )\n      : input\n  }\n}\n","/**\n * @since 1.0.0\n */\nimport * as RD from '@jvlk/fp-ts-remote-data'\nimport { pipe } from 'fp-ts/function'\n\n/**\n * @since 1.0.0\n */\nexport default function fold<E, A, T>(\n  remoteData: RD.RemoteData<E, A>,\n  loading: () => T,\n  failure: (e: E) => T,\n  empty: () => T,\n  success: (a: A) => T\n) {\n  return pipe(remoteData, RD.fold(loading, failure, empty, success))\n}\n"],"mappings":";AAIA,YAAY,QAAQ;AACpB,SAAS,gBAAgB;AACzB,YAAYA,QAAO;AACnB,SAAS,MAAM,QAAAC,aAAY;AAC3B,YAAYC,QAAO;;;ACJnB,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,SAAS,YAAY;AAKN,SAAR,OAA8B,SAAuC;AAC1E,SAAO,SACL,OACyC;AACzC,WAAO,UACH;AAAA,MACE;AAAA,MACE,SAAO,CAAC,SAAS;AACjB,YAAM,SAAO,IAAI,GAAG;AAClB,iBAAS,QAAM,IAAI;AAAA,QACrB;AACA,cAAM,IAAI,QAAQ,OAAO,KAAK,KAAK;AACnC,eAAO,EAAE,SAAS,UACZ,QAAQ,OAAK,EAAE,KAAK,CAAC,IACrB,OAAK,EAAE,IAAI;AAAA,MACnB,CAAC;AAAA,IACH,IACA;AAAA,EACN;AACF;;;ADSe,SAAR,mBAA6C,SAA2B;AAC7E,QAAM,EAAE,WAAW,KAAK,IAAI,SAAS,OAAO;AAE5C,SAAO,YACA,aACH,OACAC;AAAA,IACE;AAAA,IACA,OAAO,QAAQ,OAAO;AAAA,IACpB,SAAS,YAAS,KAAO,QAAK,MAAS,UAAU,UAAO,CAAC,CAAC;AAAA,EAC9D,IACG;AACT;;;AEhDA,YAAYC,SAAQ;AACpB,SAAS,QAAAC,aAAY;AAKN,SAARC,MACL,YACAC,UACAC,UACAC,QACAC,UACA;AACA,SAAOL,MAAK,YAAe,SAAKE,UAASC,UAASC,QAAOC,QAAO,CAAC;AACnE;","names":["E","pipe","O","pipe","RD","pipe","fold","loading","failure","empty","success"]}